Sha256: 00b4b68df3717b25d4939ab35ad75e41d8a9a323286a72aea080160203793977

Contents?: true

Size: 1.42 KB

Versions: 21

Compression:

Stored size: 1.42 KB

Contents

module Spec
  module Story
    class Step
      PARAM_PATTERN = /(\$\w*)/
      PARAM_OR_GROUP_PATTERN = /(\$\w*)|\(.*?\)/
      
      attr_reader :name
      def initialize(name, &block)
        @name = name
        assign_expression(name)
        init_module(name, &block)
      end

      def perform(instance, *args)
        instance.extend(@mod)
        instance.__send__(sanitize(@name), *args)
      end

      def init_module(name, &block)
        sanitized_name = sanitize(name)
        @mod = Module.new do
          define_method(sanitized_name, &block)
        end
      end
      
      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 matches?(name)
        !(matches = name.match(@expression)).nil?
      end
            
      def parse_args(name)
        name.match(@expression)[1..-1]
      end

      private
      
        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!($1, "(.*?)")
          end
          @expression = Regexp.new("^#{expression}$")
        end

    end
  end
end

Version data entries

21 entries across 21 versions & 5 rubygems

Version Path
picolena-0.0.99 app_generators/picolena/templates/vendor/plugins/rspec/lib/spec/story/step.rb
picolena-0.1.0 rails_plugins/rspec/lib/spec/story/step.rb
picolena-0.1.1 rails_plugins/rspec/lib/spec/story/step.rb
picolena-0.1.4 rails_plugins/rspec/lib/spec/story/step.rb
picolena-0.1.2 rails_plugins/rspec/lib/spec/story/step.rb
picolena-0.1.3 rails_plugins/rspec/lib/spec/story/step.rb
picolena-0.1.5 rails_plugins/rspec/lib/spec/story/step.rb
radiant-0.6.5.1 vendor/plugins/rspec/lib/spec/story/step.rb
radiant-0.6.5 vendor/plugins/rspec/lib/spec/story/step.rb
radiant-0.6.7 vendor/plugins/rspec/lib/spec/story/step.rb
radiant-0.6.6 vendor/plugins/rspec/lib/spec/story/step.rb
radiant-0.6.9 vendor/plugins/rspec/lib/spec/story/step.rb
radiant-0.6.8 vendor/plugins/rspec/lib/spec/story/step.rb
rspec-1.1.3 lib/spec/story/step.rb
spree-0.2.0 vendor/plugins/rspec/lib/spec/story/step.rb
typo-5.0.3.98.1 vendor/plugins/rspec/lib/spec/story/step.rb
typo-5.0.3.98 vendor/plugins/rspec/lib/spec/story/step.rb
typo-5.1.2 vendor/plugins/rspec/lib/spec/story/step.rb
typo-5.1.1 vendor/plugins/rspec/lib/spec/story/step.rb
typo-5.1.3 vendor/plugins/rspec/lib/spec/story/step.rb