399399 */
400400public class Jooby implements Routes , LifeCycle , Registry {
401401
402+ /**
403+ * <pre>{@code
404+ * {
405+ * on("dev", () -> {
406+ * // run something on dev
407+ * }).orElse(() -> {
408+ * // run something on prod
409+ * });
410+ * }
411+ * }</pre>
412+ *
413+ */
414+ public interface EnvPredicate {
415+
416+ /**
417+ * <pre>{@code
418+ * {
419+ * on("dev", () -> {
420+ * // run something on dev
421+ * }).orElse(() -> {
422+ * // run something on prod
423+ * });
424+ * }
425+ * }</pre>
426+ *
427+ * @param callback Env callback.
428+ */
429+ default void orElse (final Runnable callback ) {
430+ orElse (conf -> callback .run ());
431+ }
432+
433+ /**
434+ * <pre>{@code
435+ * {
436+ * on("dev", () -> {
437+ * // run something on dev
438+ * }).orElse(conf -> {
439+ * // run something on prod
440+ * });
441+ * }
442+ * }</pre>
443+ *
444+ * @param callback Env callback.
445+ */
446+ void orElse (Consumer <Config > callback );
447+
448+ }
449+
402450 /**
403451 * A module can publish or produces: {@link Route.Definition routes}, {@link Parser},
404452 * {@link Renderer}, and any other application specific service or contract of your choice.
@@ -765,11 +813,23 @@ public Jooby onStop(final CheckedConsumer<Registry> callback) {
765813 * }
766814 * </pre>
767815 *
816+ * There is an else clause which is the opposite version of the env predicate:
817+ *
818+ * <pre>
819+ * {
820+ * on("dev", () {@literal ->} {
821+ * use(new DevModule());
822+ * }).orElse(() {@literal ->} {
823+ * use(new RealModule());
824+ * });
825+ * }
826+ * </pre>
827+ *
768828 * @param env Environment where we want to run the callback.
769829 * @param callback An env callback.
770830 * @return This jooby instance.
771831 */
772- public Jooby on (final String env , final Runnable callback ) {
832+ public EnvPredicate on (final String env , final Runnable callback ) {
773833 requireNonNull (env , "Env is required." );
774834 return on (envpredicate (env ), callback );
775835 }
@@ -785,11 +845,23 @@ public Jooby on(final String env, final Runnable callback) {
785845 * }
786846 * </pre>
787847 *
848+ * There is an else clause which is the opposite version of the env predicate:
849+ *
850+ * <pre>
851+ * {
852+ * on("dev", conf {@literal ->} {
853+ * use(new DevModule());
854+ * }).orElse(conf {@literal ->} {
855+ * use(new RealModule());
856+ * });
857+ * }
858+ * </pre>
859+ *
788860 * @param env Environment where we want to run the callback.
789861 * @param callback An env callback.
790862 * @return This jooby instance.
791863 */
792- public Jooby on (final String env , final Consumer <Config > callback ) {
864+ public EnvPredicate on (final String env , final Consumer <Config > callback ) {
793865 requireNonNull (env , "Env is required." );
794866 return on (envpredicate (env ), callback );
795867 }
@@ -805,11 +877,23 @@ public Jooby on(final String env, final Consumer<Config> callback) {
805877 * }
806878 * </pre>
807879 *
880+ * There is an else clause which is the opposite version of the env predicate:
881+ *
882+ * <pre>
883+ * {
884+ * on(env {@literal ->} env.equals("dev"), () {@literal ->} {
885+ * use(new DevModule());
886+ * }).orElse(() {@literal ->} {
887+ * use(new RealModule());
888+ * });
889+ * }
890+ * </pre>
891+ *
808892 * @param predicate Predicate to check the environment.
809893 * @param callback An env callback.
810894 * @return This jooby instance.
811895 */
812- public Jooby on (final Predicate <String > predicate , final Runnable callback ) {
896+ public EnvPredicate on (final Predicate <String > predicate , final Runnable callback ) {
813897 requireNonNull (predicate , "Predicate is required." );
814898 requireNonNull (callback , "Callback is required." );
815899
@@ -821,7 +905,7 @@ public Jooby on(final Predicate<String> predicate, final Runnable callback) {
821905 *
822906 * <pre>
823907 * {
824- * on("dev", "test", () {@literal ->} {
908+ * on(env {@literal ->} env.equals( "dev"), conf {@literal ->} {
825909 * use(new DevModule());
826910 * });
827911 * }
@@ -831,12 +915,12 @@ public Jooby on(final Predicate<String> predicate, final Runnable callback) {
831915 * @param callback An env callback.
832916 * @return This jooby instance.
833917 */
834- public Jooby on (final Predicate <String > predicate , final Consumer <Config > callback ) {
918+ public EnvPredicate on (final Predicate <String > predicate , final Consumer <Config > callback ) {
835919 requireNonNull (predicate , "Predicate is required." );
836920 requireNonNull (callback , "Callback is required." );
837921 this .bag .add (new EnvDep (predicate , callback ));
838922
839- return this ;
923+ return otherwise -> this . bag . add ( new EnvDep ( predicate . negate (), otherwise )) ;
840924 }
841925
842926 /**
0 commit comments