active_mappers 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/active_mappers.gemspec +1 -1
- data/lib/active_mappers/handlers/inheritance.rb +0 -1
- data/lib/active_mappers/key_transformer.rb +2 -2
- data/lib/active_mappers.rb +39 -7
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32a8f6aba4888e9ff50871fab7eb457de33f785d5a32758c77bbb01c1ef75d80
|
4
|
+
data.tar.gz: a1c03591088552e3bbdf29e291de4e9628c50b06af5a294358935812d2419271
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b44b4c1097e49c8c4520eff7bf8d64cc5c98709b87ae429f9d53e613ca914e5cf15f4526dddbf422d8f45beaa8c7280ed520cd39e51f0c79b396739fc8d3f3c
|
7
|
+
data.tar.gz: f281126bf5b01be6eb640fcde71fbda419d9eed32417af5afd30f4c6f7245ccbbef6bade670bfe176730ce904562088623dd76c9e93b5d199cf675af374e3018
|
data/active_mappers.gemspec
CHANGED
@@ -12,8 +12,8 @@ module ActiveMappers
|
|
12
12
|
Setup.camelcase_keys ? hash.to_lower_camel_case : hash
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.resource_to_mapper(resource, class_from)
|
16
|
-
"#{base_namespace(class_from)}::#{resource.class.name}Mapper".constantize
|
15
|
+
def self.resource_to_mapper(resource, class_from, scope=nil)
|
16
|
+
"#{base_namespace(class_from)}::#{resource.class.name}Mapper#{scope ? "Scope#{scope.capitalize}" : nil}".constantize
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.resource_class_to_mapper(resource_class_name, class_from)
|
data/lib/active_mappers.rb
CHANGED
@@ -85,12 +85,15 @@ module ActiveMappers
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def self.each(&block)
|
88
|
+
# puts "[l. #{__LINE__}] [#{name}] each"
|
88
89
|
@@renderers[name] = (@@renderers[name] || []) << block
|
89
90
|
end
|
90
91
|
|
91
92
|
def self.with(args, options = {})
|
92
|
-
|
93
|
-
|
93
|
+
# puts "[l. #{__LINE__}] WITH - #{name} - #{options}"
|
94
|
+
if options[:scope].present? && !name.include?('Scope')
|
95
|
+
return evaluate_scopes(args, options)
|
96
|
+
end
|
94
97
|
response = if options[:rootless]
|
95
98
|
args.respond_to?(:each) ? all(args, options) : one(args, options)
|
96
99
|
else
|
@@ -100,13 +103,25 @@ module ActiveMappers
|
|
100
103
|
end
|
101
104
|
|
102
105
|
def self.evaluate_scopes(args, options)
|
103
|
-
|
104
|
-
|
106
|
+
# puts "[l. #{__LINE__}] [#{name}] evaluate_scopes #{options}"
|
107
|
+
class_to_call = begin
|
108
|
+
"::#{name}Scope#{options[:scope].capitalize}".constantize
|
109
|
+
rescue
|
110
|
+
if options[:fallback_class]
|
111
|
+
options[:fallback_class]
|
112
|
+
elsif options[:fallback_on_missing_scope]
|
113
|
+
self
|
114
|
+
else
|
115
|
+
raise("ActiveMappers [#{name}] No scope named #{options[:scope]} found")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
# puts "[l.#{__LINE__}] evaluate_scopes class_to_call -> #{class_to_call}"
|
119
|
+
return class_to_call.with(args, options.merge(initial_mapper: self))
|
105
120
|
end
|
106
121
|
|
107
122
|
def self.scope(*params, &block)
|
123
|
+
# puts "[l.#{__LINE__}] [#{name}] CREATING SCOPE CLASSES (name: #{name} | params: #{params.inspect}) ===> ::#{name}Scope#{params.first.capitalize}"
|
108
124
|
raise "ActiveMappers [#{name}] scope must be a block" if block.nil? || !block.respond_to?(:call)
|
109
|
-
|
110
125
|
params.each do |param|
|
111
126
|
block_content = Ruby2Ruby.new.process(RubyParser.new.process(block.source).to_a.last)
|
112
127
|
eval("class ::#{name}Scope#{param.capitalize} < ::#{name} ; #{block_content}; end")
|
@@ -129,13 +144,30 @@ module ActiveMappers
|
|
129
144
|
end
|
130
145
|
|
131
146
|
def self.one(resource, options = {})
|
147
|
+
# puts "[l.#{__LINE__}] [#{name}] ONE - options: #{options.inspect} - inheritance_column: #{@@inheritance_column[name]}"
|
132
148
|
return nil unless resource
|
133
|
-
|
134
|
-
|
149
|
+
|
150
|
+
if @@inheritance_column[name] && !options[:fallback_class]
|
151
|
+
main_mapper = KeyTransformer.resource_to_mapper(resource, self)
|
152
|
+
# puts "[l.#{__LINE__}] [#{name}] ONE - main_mapper #{main_mapper}"
|
153
|
+
mapper = options[:scope] ? (KeyTransformer.resource_to_mapper(resource, self, options[:scope]) rescue main_mapper) : main_mapper
|
154
|
+
# puts "[l.#{__LINE__}] [#{name}] ONE - mapper #{mapper}"
|
155
|
+
if name != mapper&.name
|
156
|
+
return mapper.with(resource, options.merge(rootless: true, fallback_class: options[:initial_mapper]))
|
157
|
+
end
|
135
158
|
end
|
136
159
|
|
137
160
|
return {} if @@renderers[name].nil? # Mapper is empty
|
138
161
|
|
162
|
+
# base_mapper = name.rpartition('::').first
|
163
|
+
|
164
|
+
# renderers = ancestors.select { |it| it.name.start_with?(base_mapper) }.map do |ancestor|
|
165
|
+
# puts "---> #{ancestor.name}"
|
166
|
+
# @@renderers[ancestor.name].map do |renderer|
|
167
|
+
# renderer.call(resource, options[:context])
|
168
|
+
# end.reduce(&:merge)
|
169
|
+
# end.reduce(&:merge)
|
170
|
+
|
139
171
|
renderers = @@renderers[name].map do |renderer|
|
140
172
|
renderer.call(resource, options[:context])
|
141
173
|
end.reduce(&:merge)
|