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