var CucumberJsDsl = {

registerStepDefinition: function(regexp, func) {
  if(func == null) {
    jsLanguage.execute_step_definition(regexp);
  }
  else{
    jsLanguage.add_step_definition(regexp, func);
  }
},

registerTransform: function(regexp, func) {
  jsLanguage.register_js_transform(regexp, func);
},

beforeHook: function(tag_expressions_or_func, func) {
  CucumberJsDsl.__registerJsHook('before', tag_expressions_or_func, func);
},

afterHook: function(tag_expressions_or_func, func) {
  CucumberJsDsl.__registerJsHook('after', tag_expressions_or_func, func);
},

steps: function(step_names) {
  jsLanguage.steps(step_names, "UNKNOWN:0");
},

Table: function(raw_table) {
  //TODO: Create a ruby table and send it back for use in js world
},

world: function(files) {
  jsLanguage.world(files);
},

__registerJsHook: function(label, tag_expressions_or_func, func) {
  if(func != null) {
    var hook_func = func;
    var tag_expressions = tag_expressions_or_func;
  } else {
    var hook_func = tag_expressions_or_func;
    var tag_expressions = [];
  }
  jsLanguage.register_js_hook(label, tag_expressions, hook_func);
}

}

var Given = CucumberJsDsl.registerStepDefinition; var When = CucumberJsDsl.registerStepDefinition; var Then = CucumberJsDsl.registerStepDefinition;

var Before = CucumberJsDsl.beforeHook; var After = CucumberJsDsl.afterHook; var Transform = CucumberJsDsl.registerTransform;

var World = CucumberJsDsl.world;

var steps = CucumberJsDsl.steps;