class Spec::Story::Step
def assign_expression(string_or_regexp)
def assign_expression(string_or_regexp) if String === string_or_regexp expression = string_or_regexp.dup expression.gsub! '(', '\(' expression.gsub! ')', '\)' elsif Regexp === string_or_regexp expression = string_or_regexp.source end while expression =~ PARAM_PATTERN expression.gsub!($2, "(.*?)") end @expression = Regexp.new("^#{expression}$") end
def init_module(name, &block)
def init_module(name, &block) sanitized_name = sanitize(name) @mod = Module.new do define_method(sanitized_name, &block) end end
def initialize(name, &block)
def initialize(name, &block) @name = name assign_expression(name) init_module(name, &block) end
def matches?(name)
def matches?(name) !(matches = name.match(@expression)).nil? end
def parse_args(name)
def parse_args(name) name.match(@expression)[1..-1] end
def perform(instance, *args)
def perform(instance, *args) instance.extend(@mod) instance.__send__(sanitize(@name), *args) end
def sanitize(a_string_or_regexp)
def sanitize(a_string_or_regexp) return a_string_or_regexp.source if Regexp == a_string_or_regexp a_string_or_regexp.to_s end