class Spec::Story::Step

def init_expression(string_or_regexp)

def init_expression(string_or_regexp)
  if String === string_or_regexp
    expression = string_or_regexp.dup
    %w<? ( ) [ ] { } ^ !>.each {|c| expression.gsub! c, "\\#{c}"}
  elsif Regexp === string_or_regexp
    expression = string_or_regexp.source
  end
  while expression =~ PARAM_PATTERN
    expression.gsub!($2, "(.*?)")
  end
  @expression = Regexp.new("\\A#{expression}\\Z", Regexp::MULTILINE)
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 init_name(name)

def init_name(name)
  @name = name
end

def initialize(name, &block)

def initialize(name, &block)
  init_name(name)
  init_expression(name)
  block_given? ? init_module(name, &block) : set_pending
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 pending?

def pending?
  @pending == true
end

def perform(instance, *args)

def perform(instance, *args)
  raise Spec::Example::ExamplePendingError.new("Not Yet Implemented") if pending?
  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

def set_pending

def set_pending
  @pending = true
end