Sha256: bfde8ad8e28e5ddc7f4d0cf4e4993f18af646364f2b6e7dbc5bf275bde993f06

Contents?: true

Size: 1.27 KB

Versions: 17

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

module Mutant
  class Expression

    # Explicit method expression
    class Method < self
      include Anima.new(
        :method_name,
        :scope_name,
        :scope_symbol
      )

      private(*anima.attribute_names)

      MATCHERS = IceNine.deep_freeze(
        '.' => Matcher::Methods::Singleton,
        '#' => Matcher::Methods::Instance
      )

      METHOD_NAME_PATTERN = Regexp.union(
        /(?<method_name>[A-Za-z_][A-Za-z\d_]*[!?=]?)/,
        *AST::Types::OPERATOR_METHODS.map(&:to_s)
      ).freeze

      private_constant(*constants(false))

      REGEXP = /\A#{SCOPE_NAME_PATTERN}#{SCOPE_SYMBOL_PATTERN}#{METHOD_NAME_PATTERN}\z/.freeze

      # Syntax of expression
      #
      # @return [String]
      def syntax
        [scope_name, scope_symbol, method_name].join
      end
      memoize :syntax

      # Matcher for expression
      #
      # @return [Matcher]
      def matcher
        methods_matcher = MATCHERS.fetch(scope_symbol).new(scope)

        Matcher::Filter.new(methods_matcher, ->(subject) { subject.expression.eql?(self) })
      end

    private

      # Scope object
      #
      # @return [Class, Method]
      def scope
        Object.const_get(scope_name)
      end

    end # Method
  end # Expression
end # Mutant

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
mutant-0.9.8 lib/mutant/expression/method.rb
mutant-0.9.7 lib/mutant/expression/method.rb
mutant-0.9.6 lib/mutant/expression/method.rb
mutant-0.9.5 lib/mutant/expression/method.rb
mutant-0.9.4 lib/mutant/expression/method.rb
mutant-0.9.3 lib/mutant/expression/method.rb
mutant-0.9.2 lib/mutant/expression/method.rb
mutant-0.9.1 lib/mutant/expression/method.rb
mutant-0.9.0 lib/mutant/expression/method.rb
mutant-0.8.24 lib/mutant/expression/method.rb
mutant-0.8.23 lib/mutant/expression/method.rb
mutant-0.8.22 lib/mutant/expression/method.rb
mutant-0.8.21 lib/mutant/expression/method.rb
mutant-0.8.20 lib/mutant/expression/method.rb
mutant-0.8.19 lib/mutant/expression/method.rb
mutant-0.8.18 lib/mutant/expression/method.rb
mutant-0.8.17 lib/mutant/expression/method.rb