Sha256: 19c98f849e292c9db9244c04e599d673318d09fbf87c593e68e3c3579ffb0365

Contents?: true

Size: 1.9 KB

Versions: 28

Compression:

Stored size: 1.9 KB

Contents

module RR
  module DoubleDefinitions
    module Strategies
      class Strategy
        class << self
          attr_reader :domain_name
          def register(domain_name, *alias_method_names)
            @domain_name = domain_name
            register_self_at_double_definition_creator(domain_name)
            DoubleDefinitionCreator.class_eval do
              alias_method_names.each do |alias_method_name|
                alias_method alias_method_name, domain_name
              end
            end
            RR::Adapters::RRMethods.register_strategy_class(self, domain_name)
            DoubleDefinition.register_strategy_class(self, domain_name)
            RR::Adapters::RRMethods.class_eval do
              alias_method_names.each do |alias_method_name|
                alias_method alias_method_name, domain_name
              end
            end
          end

          def register_self_at_double_definition_creator
          end
        end

        attr_reader :double_definition_creator, :definition, :method_name, :args, :handler
        include Space::Reader

        def initialize(double_definition_creator)
          @double_definition_creator = double_definition_creator
        end
        
        def call(definition, method_name, args, handler)
          @definition, @method_name, @args, @handler = definition, method_name, args, handler
          do_call
        end

        def name
          self.class.domain_name
        end

        def verify_subject(subject)
        end  

        protected
        def do_call
          raise NotImplementedError
        end

        def permissive_argument
          if args.empty?
            definition.with_any_args
          else
            definition.with(*args)
          end
        end

        def reimplementation
          definition.returns(&handler)
        end

        def subject
          definition.subject
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 5 rubygems

Version Path
adva-0.3.2 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.3.1 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.3.0 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.2.4 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.2.3 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.2.2 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.2.1 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.2.0 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.1.4 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.1.3 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.1.2 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.1.1 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.1.0 test/rr/lib/rr/double_definitions/strategies/strategy.rb
adva-0.0.1 test/rr/lib/rr/double_definitions/strategies/strategy.rb
jferris-rr-0.7.1.0.1239654108 lib/rr/double_definitions/strategies/strategy.rb
redinger-redinger-rr-0.10.3 lib/rr/double_definitions/strategies/strategy.rb
redinger-rr-0.10.4 lib/rr/double_definitions/strategies/strategy.rb
rr-0.10.5 lib/rr/double_definitions/strategies/strategy.rb
rr-0.10.4 lib/rr/double_definitions/strategies/strategy.rb
rr-0.10.2 lib/rr/double_definitions/strategies/strategy.rb