Class: MethodDecorator::Services::DecorationsService

Inherits:
Object
  • Object
show all
Defined in:
lib/method_decorator/services/decorations_service.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, method_name, &decoration) ⇒ DecorationsService

Returns a new instance of DecorationsService.



12
13
14
15
16
17
18
# File 'lib/method_decorator/services/decorations_service.rb', line 12

def initialize(klass, method_name, &decoration)
  self.klass = klass
  self.method_name = method_name
  self.method_instance = klass.instance_method(method_name)
  self.decoration = decoration
  self
end

Instance Attribute Details

#decorationObject

Returns the value of attribute decoration.



10
11
12
# File 'lib/method_decorator/services/decorations_service.rb', line 10

def decoration
  @decoration
end

#klassObject

Returns the value of attribute klass.



10
11
12
# File 'lib/method_decorator/services/decorations_service.rb', line 10

def klass
  @klass
end

#method_instanceObject

Returns the value of attribute method_instance.



10
11
12
# File 'lib/method_decorator/services/decorations_service.rb', line 10

def method_instance
  @method_instance
end

#method_nameObject

Returns the value of attribute method_name.



10
11
12
# File 'lib/method_decorator/services/decorations_service.rb', line 10

def method_name
  @method_name
end

Class Method Details

.add_call(klass, method_name, *args, &block) ⇒ Object



80
81
82
# File 'lib/method_decorator/services/decorations_service.rb', line 80

def add_call(klass, method_name, *args, &block)
  calls_repository.add(klass, method_name, *args, &block)
end

.call_original_method(context, method_name, *args, &block) ⇒ Object



84
85
86
87
88
# File 'lib/method_decorator/services/decorations_service.rb', line 84

def call_original_method(context, method_name, *args, &block)
  klass = get_class_from_context(context)
  method_instance = decorations_repository.original_method_instance_of(klass, method_name)
  method_instance.bind(context).call(*args, &block)
end

.calls_repositoryObject



126
127
128
# File 'lib/method_decorator/services/decorations_service.rb', line 126

def calls_repository
  MethodDecorator::Repositories::CallsRepository.singleton
end

.decorate(klass, method_name, &decoration) ⇒ Object



76
77
78
# File 'lib/method_decorator/services/decorations_service.rb', line 76

def decorate(klass, method_name, &decoration)
  new(klass, method_name, &decoration).decorate
end

.decorations_repositoryObject



122
123
124
# File 'lib/method_decorator/services/decorations_service.rb', line 122

def decorations_repository
  MethodDecorator::Repositories::DecorationsRepository.singleton
end

.get_class_from_context(context) ⇒ Object



110
111
112
113
114
115
116
# File 'lib/method_decorator/services/decorations_service.rb', line 110

def get_class_from_context(context)
  if get_type_from_context(context).eql? :singleton
    context.singleton_class
  else
    context.class
  end
end

.get_type_from_context(context) ⇒ Object



118
119
120
# File 'lib/method_decorator/services/decorations_service.rb', line 118

def get_type_from_context(context)
  context.class.eql?(Class) ? :singleton : :class
end

.last_call_args(context) ⇒ Object



90
91
92
93
# File 'lib/method_decorator/services/decorations_service.rb', line 90

def last_call_args(context)
  call = last_call_from_context(context)
  call && call.args
end

.last_call_block(context) ⇒ Object



95
96
97
98
# File 'lib/method_decorator/services/decorations_service.rb', line 95

def last_call_block(context)
  call = last_call_from_context(context)
  call && call.block
end

.last_call_from_context(context) ⇒ Object



105
106
107
108
# File 'lib/method_decorator/services/decorations_service.rb', line 105

def last_call_from_context(context)
  klass = get_class_from_context(context)
  calls_repository.find_call(klass)
end

.last_call_method_name(context) ⇒ Object



100
101
102
103
# File 'lib/method_decorator/services/decorations_service.rb', line 100

def last_call_method_name(context)
  call = last_call_from_context(context)
  call && call.method_name
end

Instance Method Details

#decorateObject



20
21
22
23
24
25
# File 'lib/method_decorator/services/decorations_service.rb', line 20

def decorate
  add_decoration_to_repository
  override_original_klass_method
  define_helper_methods
  self
end