Class: Brujula::TypeExtender::Method

Inherits:
Object
  • Object
show all
Defined in:
lib/brujula/type_extender/method.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(definition:) ⇒ Method

Returns a new instance of Method.



7
8
9
# File 'lib/brujula/type_extender/method.rb', line 7

def initialize(definition:)
  @definition = definition
end

Instance Attribute Details

#definitionObject (readonly)

Returns the value of attribute definition.



5
6
7
# File 'lib/brujula/type_extender/method.rb', line 5

def definition
  @definition
end

Instance Method Details

#apply_inherit_chainObject



21
22
23
24
25
26
27
# File 'lib/brujula/type_extender/method.rb', line 21

def apply_inherit_chain
  definition.is.inject(definition.dup) do |object, trait|
    Brujula::Mergers::ObjectMerger.new(
      superinstance: parametized_trait(trait), instance: object
    ).call
  end
end

#callObject



11
12
13
14
15
# File 'lib/brujula/type_extender/method.rb', line 11

def call
  return definition if definition.is.nil?

  extended_object
end

#extended_objectObject



17
18
19
# File 'lib/brujula/type_extender/method.rb', line 17

def extended_object
  @extended_object ||= apply_inherit_chain
end

#parameter_builder(object) ⇒ Object



36
37
38
39
40
# File 'lib/brujula/type_extender/method.rb', line 36

def parameter_builder(object)
  Brujula::Parameters::Builder.new(
    object: object
  )
end

#parametized_trait(trait) ⇒ Object



29
30
31
32
33
34
# File 'lib/brujula/type_extender/method.rb', line 29

def parametized_trait(trait)
  Brujula::Parameters::Parser.new(
    object:     trait,
    parameters: parameter_builder(trait).method_params(resource, definition)
  ).call
end

#resourceObject



42
43
44
# File 'lib/brujula/type_extender/method.rb', line 42

def resource
  definition.parent.parent
end