Sha256: 885f476a020da68937200f5e5f25e41acd947a585a32e8bb631900adab29fd8c

Contents?: true

Size: 1.83 KB

Versions: 5

Compression:

Stored size: 1.83 KB

Contents

require 'cucumber/step_match'
require 'cucumber/core_ext/string'
require 'cucumber/core_ext/proc'
require 'cucumber/rb_support/regexp_argument_matcher'

module Cucumber
  module RbSupport
    # A Ruby Step Definition holds a Regexp and a Proc, and is created
    # by calling <tt>Given</tt>, <tt>When</tt> or <tt>Then</tt>
    # in the <tt>step_definitions</tt> ruby files. See also RbDsl.
    #
    # Example:
    #
    #   Given /I have (\d+) cucumbers in my belly/ do
    #     # some code here
    #   end
    #
    class RbStepDefinition
      include LanguageSupport::StepDefinitionMethods

      class MissingProc < StandardError
        def message
          "Step definitions must always have a proc"
        end
      end

      def initialize(rb_language, regexp, proc)
        raise MissingProc if proc.nil?
        if String === regexp
          p = regexp.gsub(/\$\w+/, '(.*)') # Replace $var with (.*)
          regexp = Regexp.new("^#{p}$") 
        end
        @rb_language, @regexp, @proc = rb_language, regexp, proc
      end

      def regexp_source
        @regexp.inspect
      end

      def ==(step_definition)
        regexp_source == step_definition.regexp_source
      end

      def arguments_from(step_name)
        RegexpArgumentMatcher.arguments_from(@regexp, step_name)
      end

      def invoke(args)
        args = args.map{|arg| Ast::PyString === arg ? arg.to_s : arg}
        begin
          args = @rb_language.execute_transforms(args)
          @rb_language.current_world.cucumber_instance_exec(true, regexp_source, *args, &@proc)
        rescue Cucumber::ArityMismatchError => e
          e.backtrace.unshift(self.backtrace_line)
          raise e
        end
      end

      def file_colon_line
        @proc.file_colon_line
      end
    
      def file
        @file ||= file_colon_line.split(':')[0]
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
aslakhellesoy-cucumber-0.3.102.1 lib/cucumber/rb_support/rb_step_definition.rb
aslakhellesoy-cucumber-0.3.102.2 lib/cucumber/rb_support/rb_step_definition.rb
aslakhellesoy-cucumber-0.3.103 lib/cucumber/rb_support/rb_step_definition.rb
kosmas58-cucumber-0.3.103 lib/cucumber/rb_support/rb_step_definition.rb
cucumber-0.3.103 lib/cucumber/rb_support/rb_step_definition.rb