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 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.