active_mappers 0.1.1 → 0.2.0

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/active_mappers.rb +19 -5
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 519b54419c608add8bb7c0b370be209c53fb6cbd5aa5cc8d9351151021a63d10
4
- data.tar.gz: 4283228f0760abb84544885bdf0b8c7b9684cd393dcea41c4e1300774352cc3e
3
+ metadata.gz: 7e9d7b63d23e7e9e8a79b066058c61d64917668cd18f26b476d0895f6794696b
4
+ data.tar.gz: f98714d581527d72053252a149368a84969898514f87121e47e2a25628904eb4
5
5
  SHA512:
6
- metadata.gz: bf80f2bb612690097bc4967859b677c1d00b30bc608b187ffed9c56134483223050521aa39e1d4b36965c5b40abc7234487f8401322506c6586d2d4713a63961
7
- data.tar.gz: edce8395e0d1a57a6bc9a76e8ba26c3b014f64f2644f59f0636ff900775398f8c5b106ce6ff733c6b82d3284ed549a48ae1b430b92cd8d1f8d96b50376a97bff
6
+ metadata.gz: a6fe36f84e215e9166c54afaba45e3b6cf17ebe7f8e314ff5f9ee2af68996aeea2c797437eb5c8babc706d0599b844b6b9439049784bae5e003e5b3d24c0bb42
7
+ data.tar.gz: efb87c243721d55659fe3e4169c2b933514e8124571448d452141ccb4cf50f79a6bef148b61e6f13b3285f6fb02da4bc8be3cd5d116e43eccdc310d5e5bbdba9
@@ -1,6 +1,7 @@
1
1
  require 'active_support'
2
2
  require 'active_support/core_ext/object/try'
3
3
  require 'active_support/core_ext/string/inflections'
4
+ require 'active_support/core_ext/string'
4
5
  require_relative 'core_ext/hash'
5
6
 
6
7
  module ActiveMappers
@@ -34,21 +35,21 @@ module ActiveMappers
34
35
 
35
36
  each do |resource|
36
37
  mapper ||= "::#{resource.send(key).class.name}Mapper".constantize
37
- { key => mapper.with(path.to_s.split('.').inject(resource, :try)) }
38
+ { key => mapper.with(path.to_s.split('.').inject(resource, :try), rootless: true) }
38
39
  end
39
40
  end
40
41
 
41
42
  def self.polymorphic(key)
42
43
  each do |resource|
43
44
  resource_mapper = "::#{resource.send("#{key}_type")}Mapper".constantize
44
- { key => resource_mapper.with(resource.send(key)) }
45
+ { key => resource_mapper.with(resource.send(key), rootless: true) }
45
46
  end
46
47
  end
47
48
 
48
49
  def self.acts_as_polymorph
49
50
  each do |resource|
50
51
  mapper = "::#{resource.class}Mapper".constantize
51
- mapper.with(resource)
52
+ mapper.with(resource, rootless: true)
52
53
  rescue NameError
53
54
  raise NotImplementedError, 'No mapper found for this type of resource'
54
55
  end
@@ -58,8 +59,21 @@ module ActiveMappers
58
59
  @@renderers[name] = (@@renderers[name] || []) << block
59
60
  end
60
61
 
61
- def self.with(args)
62
- args.respond_to?(:each) ? all(args) : one(args)
62
+ def self.with(args, options = {})
63
+ if options[:rootless]
64
+ args.respond_to?(:each) ? all(args) : one(args)
65
+ else
66
+ render_with_root(args, options)
67
+ end
68
+ end
69
+
70
+ def self.render_with_root(args, options = {})
71
+ resource = options[:root] || self.name.gsub('Mapper', '').downcase
72
+ if args.respond_to?(:each)
73
+ { resource.tableize.gsub('/', '_').to_sym => all(args) }
74
+ else
75
+ { resource.to_sym => one(args) }
76
+ end
63
77
  end
64
78
 
65
79
  def self.all(collection)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_mappers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michaël Villeneuve