Module: Flatter::Mapper::Traits
- Extended by:
- ActiveSupport::Concern
- Included in:
- Flatter::Mapper
- Defined in:
- lib/flatter/mapper/traits.rb
Defined Under Namespace
Modules: ClassMethods, FactoryMethods
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
146
147
148
149
150
151
152
153
|
# File 'lib/flatter/mapper/traits.rb', line 146
def method_missing(name, *args, &block)
if trait?
mounter.send(name, *args, &block)
else
trait = trait_mountings.detect{ |trait| trait.shared_methods.include?(name) }
trait ? trait.send(name, *args, &block) : super
end
end
|
Instance Method Details
#extend_with(extension) ⇒ Object
56
57
58
|
# File 'lib/flatter/mapper/traits.rb', line 56
def extend_with(extension)
singleton_class.trait :extension, &extension
end
|
#full_name ⇒ Object
74
75
76
77
78
79
80
|
# File 'lib/flatter/mapper/traits.rb', line 74
def full_name
if name == 'extension_trait'
super
else
name
end
end
|
#initialize(target, *traits, &block) ⇒ Object
49
50
51
52
53
54
|
# File 'lib/flatter/mapper/traits.rb', line 49
def initialize(target, *traits, **, &block)
super
set_traits(traits)
extend_with(block) if block.present?
end
|
#respond_to_missing?(name) ⇒ Boolean
138
139
140
141
142
143
144
|
# File 'lib/flatter/mapper/traits.rb', line 138
def respond_to_missing?(name, *)
return false if trait?
trait_mountings.any? do |trait|
trait.shared_methods.include?(name)
end
end
|
#set_target(target) ⇒ Object
60
61
62
63
64
65
66
67
|
# File 'lib/flatter/mapper/traits.rb', line 60
def set_target(target)
if trait?
mounter.set_target(target)
else
super
trait_mountings.each{ |trait| trait.set_target!(target) }
end
end
|
#set_traits(traits) ⇒ Object
117
118
119
|
# File 'lib/flatter/mapper/traits.rb', line 117
def set_traits(traits)
@traits = traits
end
|
#shared_methods ⇒ Object
134
135
136
|
# File 'lib/flatter/mapper/traits.rb', line 134
def shared_methods
self.class.public_instance_methods(false)
end
|
#trait! ⇒ Object
125
126
127
|
# File 'lib/flatter/mapper/traits.rb', line 125
def trait!
@trait = true
end
|
#trait? ⇒ Boolean
121
122
123
|
# File 'lib/flatter/mapper/traits.rb', line 121
def trait?
!!@trait
end
|
#trait_names ⇒ Object
113
114
115
|
# File 'lib/flatter/mapper/traits.rb', line 113
def trait_names
traits.map{ |trait| "#{trait.to_s}_trait" }
end
|
#traits ⇒ Object
109
110
111
|
# File 'lib/flatter/mapper/traits.rb', line 109
def traits
@traits ||= []
end
|