Skip to content

Commit

Permalink
Merge branch '__rultor'
Browse files Browse the repository at this point in the history
  • Loading branch information
rultor committed Jun 2, 2017
2 parents 65d6d67 + 98922a1 commit 97feef6
Show file tree
Hide file tree
Showing 24 changed files with 644 additions and 156 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ cache:
script:
- set -e
- mvn clean install -Pqulice --errors --batch-mode
- mvn clean site -Psite --errors --batch-mode
env:
global:
- MAVEN_OPTS="-Xmx256m"
Expand Down
100 changes: 0 additions & 100 deletions src/main/java/org/cactoos/Func.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
*/
package org.cactoos;

import java.util.concurrent.Callable;

/**
* Function.
*
Expand All @@ -47,102 +45,4 @@ public interface Func<X, Y> {
*/
Y apply(X input) throws Exception;

/**
* Func that doesn't throw.
* @param <X> Input type
* @param <Y> Output type
*/
interface Safe<X, Y> extends Func<X, Y> {
/**
* Apply it safely.
* @param input The argument
* @return The result
*/
@SuppressWarnings("PMD.AvoidCatchingGenericException")
default Y safeApply(X input) {
try {
return this.apply(input);
} catch (final InterruptedException ex) {
Thread.currentThread().interrupt();
throw new IllegalStateException(ex);
// @checkstyle IllegalCatchCheck (1 line)
} catch (final Exception ex) {
throw new IllegalStateException(ex);
}
}
}

/**
* Quiet func that returns nothing, but is still a function.
* @param <X> Input type
*/
interface Quiet<X> extends Func<X, Boolean> {
@Override
default Boolean apply(X input) throws Exception {
this.exec(input);
return true;
}
/**
* Execute it.
* @param input The argument
* @throws Exception If fails
*/
void exec(X input) throws Exception;
}

/**
* Func that returns something but doesn't expect any input.
* @param <Y> Output type
*/
interface Value<Y> extends Func<Void, Y>, Scalar<Y>, Callable<Y> {
@Override
default Y apply(Void input) throws Exception {
return this.asValue();
}
@Override
default Y call() throws Exception {
return this.asValue();
}
}

/**
* Func that really is a procedure that does something and returns nothing.
*/
interface Proc extends Func<Boolean, Boolean>, Runnable, Callable<Boolean> {
@Override
default Boolean apply(Boolean input) throws Exception {
return this.call();
}
@Override
default Boolean call() throws Exception {
this.run();
return true;
}
@Override
@SuppressWarnings("PMD.AvoidCatchingGenericException")
default void run() {
try {
this.exec();
} catch (final InterruptedException ex) {
Thread.currentThread().interrupt();
throw new IllegalStateException(ex);
// @checkstyle IllegalCatchCheck (1 line)
} catch (final Exception ex) {
throw new IllegalStateException(ex);
}
}
/**
* Execute it.
* @throws Exception If fails
*/
void exec() throws Exception;
}

/**
* Func that represents a predicate of one argument.
* @param <X> Input type
*/
interface Pred<X> extends Func<X, Boolean> {
}

}
85 changes: 85 additions & 0 deletions src/main/java/org/cactoos/FuncApplies.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2017 Yegor Bugayenko
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.cactoos;

import org.cactoos.func.UncheckedFunc;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.hamcrest.core.IsEqual;

/**
* Matcher for the value.
*
* @author Yegor Bugayenko ([email protected])
* @version $Id$
* @param <X> Type of input
* @param <Y> Type of output
* @since 0.2
*/
public final class FuncApplies<X, Y> extends TypeSafeMatcher<Func<X, Y>> {

/**
* Input of the function.
*/
private final X input;

/**
* Matcher of the result.
*/
private final Matcher<Y> matcher;

/**
* Ctor.
* @param result The result expected
* @param inpt Input for the function
*/
public FuncApplies(final X inpt, final Y result) {
this(inpt, new IsEqual<>(result));
}

/**
* Ctor.
* @param inpt Input for the function
* @param mtr Matcher of the text
*/
public FuncApplies(final X inpt, final Matcher<Y> mtr) {
super();
this.input = inpt;
this.matcher = mtr;
}

@Override
public boolean matchesSafely(final Func<X, Y> func) {
return this.matcher.matches(
new UncheckedFunc<>(func).apply(this.input)
);
}

@Override
public void describeTo(final Description description) {
description.appendText("Scalar with ");
description.appendDescriptionOf(this.matcher);
}
}
71 changes: 71 additions & 0 deletions src/main/java/org/cactoos/func/AlwaysTrueFunc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2017 Yegor Bugayenko
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.cactoos.func;

import org.cactoos.Func;

/**
* Func as that is always true.
*
* <p>You may want to use this decorator when you need
* a procedure that returns boolean instead of a function:</p>
*
* <pre> List&lt;String&gt; list = new LinkedList&lt;&gt;();
* new AllOf(
* new IterableAsBooleans&lt;String&gt;(
* Collections.emptyList(),
* new AlwaysTrueFunc&lt;&gt;(list::add)
* )
* ).asValue();
* </pre>
*
* <p>There is no thread-safety guarantee.
*
* @author Yegor Bugayenko ([email protected])
* @version $Id$
* @param <X> Type of input
* @since 0.2
*/
public final class AlwaysTrueFunc<X> implements Func<X, Boolean> {

/**
* Original func.
*/
private final Func<X, ?> func;

/**
* Ctor.
* @param fnc Encapsulated func
*/
public AlwaysTrueFunc(final Func<X, ?> fnc) {
this.func = fnc;
}

@Override
public Boolean apply(final X input) throws Exception {
this.func.apply(input);
return true;
}

}
62 changes: 62 additions & 0 deletions src/main/java/org/cactoos/func/CallableAsFunc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2017 Yegor Bugayenko
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.cactoos.func;

import java.util.concurrent.Callable;
import org.cactoos.Func;

/**
* Callable as Func.
*
* <p>There is no thread-safety guarantee.
*
* @author Yegor Bugayenko ([email protected])
* @version $Id$
* @param <X> Type of input
* @param <Y> Type of output
* @see FuncAsCallable
* @see FuncAsRunnable
* @see RunnableAsFunc
* @since 0.2
*/
public final class CallableAsFunc<X, Y> implements Func<X, Y> {

/**
* The callable.
*/
private final Callable<Y> callable;

/**
* Ctor.
* @param clbl The callable
*/
public CallableAsFunc(final Callable<Y> clbl) {
this.callable = clbl;
}

@Override
public Y apply(final X input) throws Exception {
return this.callable.call();
}
}
2 changes: 1 addition & 1 deletion src/main/java/org/cactoos/func/ConstFunc.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.cactoos.Func;

/**
* Func that always returns the same result
* Func that always returns the same result.
*
* <p>There is no thread-safety guarantee.
*
Expand Down
Loading

0 comments on commit 97feef6

Please sign in to comment.