active_mappers 1.2.0 → 1.2.1

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: dd6aff3a462dafe4ba0f85444bf23fb99e2f8027d94250bd7ffff3895bb130ae
4
- data.tar.gz: 42e031c3259e4fd067688ea6a535d0dd8037a71a357409e70f38a913dccfcf4d
3
+ metadata.gz: '079a7410d46bddc8c29fb479c93f0c36a5ea6063dc4cccec243abe1e2091600c'
4
+ data.tar.gz: 603213482116be282fc19e985555f125600eff1e327a97884e9d8cca03801edb
5
5
  SHA512:
6
- metadata.gz: 3d327e22f9b39a5f7f6678de13bf3e35c3631fa5db233fa1765f0043b219b5a16f934251e894e29cd5f05811d67d1275cb3c68139d061127ffddf440c12b246f
7
- data.tar.gz: bab2ba1315fac05d999afd1e656cd51b4054ecc893e6c2261f3edc71cdc7b81157abc1c8a2a8caaa7f6175e22d5e1e9597d68c287fba9d70e85569d7353eb4de
6
+ metadata.gz: 57dcef48079943b68c9509bc6a0d3dc00dd9b87dcf38cc7f4b9ec00d06bceb9f39a91d10d0cce9e38c1ee6e085ddbbeefabdb005c7d1c2cec35f87f5d771ca96
7
+ data.tar.gz: 8a7273caea91fa180c6ab736242c59e837cb11c62af195d75e35c3a41a20d1a603c1d8d3141cafc2380bfc285144252311390076f6b39cadbe9e27e7405df4aa
@@ -32,10 +32,15 @@ module ActiveMappers
32
32
  end
33
33
  end
34
34
 
35
- def self.relation(key, mapper = nil, options = {})
35
+ def self.relation(key, mapper = nil, **options)
36
36
  path = options[:optional_path] || key
37
37
  each do |resource|
38
- mapper_to_use = mapper || KeyTransformer.resource_to_mapper(resource.send(key), self)
38
+ relation_class_name = resource.class&.reflect_on_association(options[:optional_path] || key)&.class_name
39
+ raise "undefined relation : #{key.to_s}" if (mapper.nil? && relation_class_name.nil?)
40
+
41
+ mapper_to_use = mapper || KeyTransformer.resource_class_to_mapper(relation_class_name, self)
42
+ raise "'#{mapper_to_use.name}' should be a mapper" unless mapper_to_use.ancestors.map(&:to_s).include?("ActiveMappers::Base")
43
+
39
44
  { key => mapper_to_use.with(path.to_s.split('.').inject(resource, :try), options.merge(rootless: true)) }
40
45
  end
41
46
  end
@@ -16,6 +16,14 @@ module ActiveMappers
16
16
  "#{base_namespace(class_from)}::#{resource.class.name}Mapper".constantize
17
17
  end
18
18
 
19
+ def self.resource_class_to_mapper(resource_class_name, class_from)
20
+ resource_class_name[0..1] = '' if resource_class_name.start_with?('::')
21
+
22
+ "#{base_namespace(class_from)}::#{resource_class_name}Mapper".constantize
23
+ rescue NameError
24
+ raise "undefined mapper: '#{base_namespace(class_from)}::#{resource_class_name}Mapper'"
25
+ end
26
+
19
27
  def initialize(name)
20
28
  @name = name
21
29
  end
@@ -44,6 +52,7 @@ module ActiveMappers
44
52
  def self.base_namespace(class_from)
45
53
  base_namespace = class_from.name.split('::')[0] rescue ""
46
54
  base_namespace = '' unless Setup.ignored_namespaces.include?(base_namespace.downcase.to_sym)
55
+
47
56
  base_namespace
48
57
  end
49
58
  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.2.0
4
+ version: 1.2.1
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: 2018-12-04 00:00:00.000000000 Z
11
+ date: 2019-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport