active_mappers 1.0.2 → 1.1.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 +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.