active_mappers 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/active_mappers.gemspec +2 -2
- data/lib/active_mappers.rb +15 -11
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 660fe37e8dede541a621db6bc132f584b029025ce0603d35bd33000b59b0be37
|
4
|
+
data.tar.gz: 49850740fc025f8de67e69514f0cc2711afd09d2c8df0aaf06d4faeb5816ee20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c483bc2c304c8be75080bf1a80b6aa559edb3788b22296ebf4bdc4be1e875f9c233dd2b8c5595e3753d319385e9724c03003e8169a0ecb07283b092fcd8ae686
|
7
|
+
data.tar.gz: f247beef558bccb27f44bcc234eedad0cc65c97185bd3f4f6d7d29d96cbc521a44888af5be85013999ef4c37c8a8bb568412d6ef87ffdb57a4e06c613813b4dd
|
data/Gemfile.lock
CHANGED
data/active_mappers.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'active_mappers'
|
3
|
-
s.version = '1.4.
|
4
|
-
s.date = '2019-10-
|
3
|
+
s.version = '1.4.3'
|
4
|
+
s.date = '2019-10-30'
|
5
5
|
s.summary = 'Slick, fast view layer for you Rails API.'
|
6
6
|
s.description = 'Fast, simple, declarative way to design your API\'s view layer'
|
7
7
|
s.authors = ['Michaël Villeneuve']
|
data/lib/active_mappers.rb
CHANGED
@@ -47,10 +47,10 @@ module ActiveMappers
|
|
47
47
|
relation_class_name = resource.class&.reflect_on_association(options[:optional_path] || key)&.class_name
|
48
48
|
raise "undefined relation : #{key.to_s}" if (mapper.nil? && relation_class_name.nil?)
|
49
49
|
|
50
|
-
mapper_to_use = mapper || KeyTransformer.resource_class_to_mapper(relation_class_name, self)
|
50
|
+
mapper_to_use = mapper || KeyTransformer.resource_class_to_mapper(relation_class_name, self)
|
51
51
|
raise "'#{mapper_to_use.name}' should be a mapper" unless mapper_to_use.ancestors.map(&:to_s).include?("ActiveMappers::Base")
|
52
|
-
|
53
|
-
{ key => mapper_to_use.with(path.to_s.split('.').inject(resource, :try),
|
52
|
+
|
53
|
+
{ key => mapper_to_use.with(path.to_s.split('.').inject(resource, :try), default_options.merge(options)) }
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -58,17 +58,17 @@ module ActiveMappers
|
|
58
58
|
each do |resource|
|
59
59
|
if polymorphic_resource = resource.send("#{key}_type")
|
60
60
|
resource_mapper = "#{KeyTransformer.base_namespace(self)}::#{polymorphic_resource}Mapper".constantize
|
61
|
-
{ key => resource_mapper.with(resource.send(key),
|
61
|
+
{ key => resource_mapper.with(resource.send(key), default_options.merge(options)) }
|
62
62
|
else
|
63
63
|
{}
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
def self.acts_as_polymorph
|
68
|
+
def self.acts_as_polymorph(**options)
|
69
69
|
each do |resource|
|
70
70
|
mapper = KeyTransformer.resource_to_mapper(resource, self)
|
71
|
-
mapper.with(resource,
|
71
|
+
mapper.with(resource, default_options.merge(options))
|
72
72
|
rescue NameError
|
73
73
|
raise NotImplementedError, 'No mapper found for this type of resource'
|
74
74
|
end
|
@@ -80,7 +80,7 @@ module ActiveMappers
|
|
80
80
|
|
81
81
|
def self.with(args, options = {})
|
82
82
|
return evaluate_scopes(args, options) unless options[:scope].nil?
|
83
|
-
|
83
|
+
|
84
84
|
response = if options[:rootless]
|
85
85
|
args.respond_to?(:each) ? all(args, options[:context]) : one(args, options[:context])
|
86
86
|
else
|
@@ -90,14 +90,13 @@ module ActiveMappers
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def self.evaluate_scopes(args, options)
|
93
|
-
class_to_call = "::#{name}Scope#{options[:scope].capitalize}".constantize rescue raise("ActiveMappers [#{name}] No scope named #{options[:scope]} found")
|
93
|
+
class_to_call = "::#{name}Scope#{options[:scope].capitalize}".constantize rescue (options[:fallback_on_missing_scope] ? self : raise("ActiveMappers [#{name}] No scope named #{options[:scope]} found"))
|
94
94
|
return class_to_call.with(args, options.except(:scope))
|
95
95
|
end
|
96
96
|
|
97
97
|
def self.scope(*params, &block)
|
98
|
-
raise "ActiveMappers [#{name}] scope must be a
|
98
|
+
raise "ActiveMappers [#{name}] scope must be a block" if block.nil? || !block.respond_to?(:call)
|
99
99
|
|
100
|
-
|
101
100
|
params.each do |param|
|
102
101
|
block_content = Ruby2Ruby.new.process(RubyParser.new.process(block.source).to_a.last)
|
103
102
|
eval("class ::#{name}Scope#{param.capitalize} < ::#{name} ; #{block_content}; end")
|
@@ -107,7 +106,7 @@ module ActiveMappers
|
|
107
106
|
def self.render_with_root(args, options = {})
|
108
107
|
resource_name = options[:root]
|
109
108
|
resource_name ||= KeyTransformer.apply_on(self.name)
|
110
|
-
|
109
|
+
|
111
110
|
if args.respond_to?(:each)
|
112
111
|
{ resource_name.to_s.pluralize.to_sym => all(args, options[:context]) }
|
113
112
|
else
|
@@ -128,5 +127,10 @@ module ActiveMappers
|
|
128
127
|
|
129
128
|
KeyTransformer.format_keys(renderers)
|
130
129
|
end
|
130
|
+
|
131
|
+
def self.default_options
|
132
|
+
{ rootless: true, fallback_on_missing_scope: true }
|
133
|
+
end
|
134
|
+
|
131
135
|
end
|
132
136
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_mappers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michaël Villeneuve
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -116,7 +116,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
requirements: []
|
119
|
-
|
119
|
+
rubyforge_project:
|
120
|
+
rubygems_version: 2.7.3
|
120
121
|
signing_key:
|
121
122
|
specification_version: 4
|
122
123
|
summary: Slick, fast view layer for you Rails API.
|