diff --git a/jruby/src/main/java/cucumber/runtime/jruby/JRubyBackend.java b/jruby/src/main/java/cucumber/runtime/jruby/JRubyBackend.java index defe8d8239..074a8c5e61 100644 --- a/jruby/src/main/java/cucumber/runtime/jruby/JRubyBackend.java +++ b/jruby/src/main/java/cucumber/runtime/jruby/JRubyBackend.java @@ -15,10 +15,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; -import java.util.List; -import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; +import java.util.*; public class JRubyBackend implements Backend { private static final String DSL = "/cucumber/runtime/jruby/dsl.rb"; @@ -27,6 +24,7 @@ public class JRubyBackend implements Backend { private Glue glue; private ResourceLoader resourceLoader; private UnreportedStepExecutor unreportedStepExecutor; + private final Set worldBlocks = new HashSet(); public JRubyBackend(ResourceLoader resourceLoader) throws UnsupportedEncodingException { this.resourceLoader = resourceLoader; @@ -68,6 +66,10 @@ public void setUnreportedStepExecutor(UnreportedStepExecutor executor) { @Override public void buildWorld() { jruby.put("$world", new Object()); + + for (JRubyWorldBlock block : worldBlocks) { + block.execute(); + } } private void runScriptlet(Resource resource) { @@ -113,6 +115,6 @@ public void addAfterHook(RubyObject body) { } public void addWorldBlock(RubyObject body) { - new JRubyWorldBlock(body).execute(); + worldBlocks.add(new JRubyWorldBlock(body)); } }