active_mappers 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0474908efb2d39ccf71fce1f9b50c66b92fd25e079983d16393dbf2effd111e3'
4
- data.tar.gz: f1f3d5e37d076424e2dda3935177f7d73c35d56cbab4cb45e0cf11a0dcd5d7e4
3
+ metadata.gz: 660fe37e8dede541a621db6bc132f584b029025ce0603d35bd33000b59b0be37
4
+ data.tar.gz: 49850740fc025f8de67e69514f0cc2711afd09d2c8df0aaf06d4faeb5816ee20
5
5
  SHA512:
6
- metadata.gz: 106e4e860470afcab4d85def1fab45b9b1649548d1d28be7e5e9f72c3d009b36caaa83b77938b5671bf1210cac75a15ad487813aebda0299b6e847a7fcc81eab
7
- data.tar.gz: c2104b4b538e95049bb7de6aa04c9e63fdad645a76c1af11cfea1942e62fdc27a8e2bdb9a8e8c13df6d50e41067b37ff9926ed7ba007b10101cee0aedde7a257
6
+ metadata.gz: c483bc2c304c8be75080bf1a80b6aa559edb3788b22296ebf4bdc4be1e875f9c233dd2b8c5595e3753d319385e9724c03003e8169a0ecb07283b092fcd8ae686
7
+ data.tar.gz: f247beef558bccb27f44bcc234eedad0cc65c97185bd3f4f6d7d29d96cbc521a44888af5be85013999ef4c37c8a8bb568412d6ef87ffdb57a4e06c613813b4dd
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_mappers (1.4.0)
4
+ active_mappers (1.4.3)
5
5
  activesupport (>= 4.2)
6
6
  method_source (~> 0.9.2)
7
7
  mocha (>= 1.8.0)
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'active_mappers'
3
- s.version = '1.4.2'
4
- s.date = '2019-10-09'
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']
@@ -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), options.merge(rootless: true)) }
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), options.merge(rootless: true)) }
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, rootless: true)
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 bloc" if block.nil? || !block.respond_to?(:call)
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.2
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-09 00:00:00.000000000 Z
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
- rubygems_version: 3.0.1
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.