active_mappers 1.0.2 → 1.1.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 +33 -1
  3. metadata +2 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8a8aba90ccd06becfae022038244d377c1095755fec9766c17047f123a10460
4
- data.tar.gz: 26dc757cb5d97a93c5a4bdcbff9e22c780c42d7e72062d385b94d8488007d63f
3
+ metadata.gz: '09fb98503adb90ce297d3977dc57352e3fd63c430f64281b249c082085f8efcb'
4
+ data.tar.gz: 9ee6faa1d1822d0537c9f398e3b0cc52eba25efbf7322f178f1f08410c073e8e
5
5
  SHA512:
6
- metadata.gz: 7d76aea4ef47bd3687a88b2048921e9243551014748211983c29514c5e6b83881773a38efbc60cf2a9ec12c68def1b5a72ff3e64a9b214a22a109c09453d45ad
7
- data.tar.gz: 68a29d8e08e87e6783cff9b6b17e1d82352a44281b08a7ba0e72812b7f699937ca35d3d448e8dca9b9cead7cf21e6fa902da9cb914174f91bc7f667aac3f8619
6
+ metadata.gz: ecd026ed51cb7a01ebe86c6101e8e5392c9421186cabf5b6727e951f0d19012047be0a2f2a1a9d277a80aeb12b1c4887573b112d09ee542f32f1d313d25e6b6f
7
+ data.tar.gz: a46e97010beedf1d8bc15670ff716bf4896995516e3d5efcbbfcadfe6fad7358e2c46ae6f6b432c4dc0e12bf02e272fc9968c6bcfc3e906f07cbae48806fe80e
@@ -7,6 +7,8 @@ require_relative 'active_mappers/key_transformer'
7
7
  module ActiveMappers
8
8
  class Base
9
9
  @@renderers = {}
10
+ @@initial_renderers = {}
11
+ @@scopes = {}
10
12
 
11
13
  def self.attributes(*params)
12
14
  each do |resource|
@@ -59,11 +61,37 @@ module ActiveMappers
59
61
  end
60
62
 
61
63
  def self.with(args, options = {})
62
- if options[:rootless]
64
+ evaluate_scopes(options[:scope])
65
+
66
+ response = if options[:rootless]
63
67
  args.respond_to?(:each) ? all(args) : one(args)
64
68
  else
65
69
  render_with_root(args, options)
66
70
  end
71
+
72
+ reset_renderers_before_scopes
73
+ response
74
+ end
75
+
76
+ def self.evaluate_scopes(scope_name)
77
+ @@initial_renderers[name] = [] + (@@renderers[name] || [])
78
+ return if scope_name.nil?
79
+
80
+ found_scope = (@@scopes[name] || []).detect { |s| s[:name] === scope_name }
81
+ raise "ActiveMappers [#{name}] Scope named #{scope_name} has not been declared or is not a block" if found_scope.nil? || found_scope[:lambda].nil? || !found_scope[:lambda].respond_to?(:call)
82
+
83
+ found_scope[:lambda].call
84
+ end
85
+
86
+ def self.scope(*params, &block)
87
+ raise "ActiveMappers [#{name}] scope must be a bloc" if block.nil? || !block.respond_to?(:call)
88
+
89
+ params.each do |param|
90
+ @@scopes[name] = (@@scopes[name] || []) << {
91
+ name: param,
92
+ lambda: block,
93
+ }
94
+ end
67
95
  end
68
96
 
69
97
  def self.render_with_root(args, options = {})
@@ -89,5 +117,9 @@ module ActiveMappers
89
117
 
90
118
  KeyTransformer.format_keys(renderers)
91
119
  end
120
+
121
+ def self.reset_renderers_before_scopes
122
+ @@renderers[name] = @@initial_renderers[name]
123
+ end
92
124
  end
93
125
  end
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: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michaël Villeneuve
@@ -53,8 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  requirements: []
56
- rubyforge_project:
57
- rubygems_version: 2.7.3
56
+ rubygems_version: 3.0.1
58
57
  signing_key:
59
58
  specification_version: 4
60
59
  summary: Slick, fast view layer for you Rails API.