active_mappers 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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