Sha256: e9f5598f4e6be1081500247b1072edbe775ab489def0609b007b3b9be26fb597

Contents?: true

Size: 1.12 KB

Versions: 7

Compression:

Stored size: 1.12 KB

Contents

module Cucumber
  module CreateMeta
    module VariableExpression
      def evaluate(expression, env)
        return nil if expression.nil?
        begin
          expression.gsub(/\${(.*?)(?:(?<!\\)\/(.*)\/(.*))?}/) do
            variable = $1
            pattern = $2
            replacement = $3

            value = get_value(variable, env)
            raise "Undefined variable #{variable}" if value.nil?
            if pattern.nil?
              value
            else
              regexp = Regexp.new(pattern.gsub('\/', '/'))
              match = value.match(regexp)
              raise "No match for variable #{variable}" if match.nil?
              match[1..-1].each_with_index do |group, i|
                replacement = replacement.gsub("\\#{i+1}", group)
              end
              replacement
            end
          end
        rescue
          nil
        end
      end

      def get_value(variable, env)
        if variable.index('*')
          env.each do |name, value|
            return value if Regexp.new(variable.gsub('*', '.*')) =~ name
          end
        end
        env[variable]
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
phillipug-foodie-0.1.0 .vendor/ruby/3.0.0/gems/cucumber-create-meta-6.0.4/lib/cucumber/create_meta/variable_expression.rb
cucumber-create-meta-6.0.4 lib/cucumber/create_meta/variable_expression.rb
cucumber-create-meta-6.0.3 lib/cucumber/create_meta/variable_expression.rb
cucumber-create-meta-6.0.2 lib/cucumber/create_meta/variable_expression.rb
cucumber-create-meta-6.0.1 lib/cucumber/create_meta/variable_expression.rb
cucumber-create-meta-6.0.0 lib/cucumber/create_meta/variable_expression.rb
cucumber-create-meta-5.0.0 lib/cucumber/create_meta/variable_expression.rb