lazy_mapper 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cdd5ce6d6e5cfaffaac7c6e73fc0692d5b3657888d26bb12bd54eb9f1bf48799
4
- data.tar.gz: e38a3b2f0c571627583feceb7ac3dc87e4c47f2170cbc815e16779e57c083e07
3
+ metadata.gz: dc96addc98f7d62a27df00a602599d7ea6d20ba9deb7f673e7ac3a4f4d65035f
4
+ data.tar.gz: ecf6e0704b94222ecde509b6a12c4493e971065ed065e709d335ee35d4d33f2f
5
5
  SHA512:
6
- metadata.gz: a9e5ae539bb7ca177712621f9f7416e636d4cf101cb311a8e0ab257dca496f7bd9d675936e982b61a94f3035bed6f38c833cd8f4cfe0fc406f0f5a30d1f2e3ff
7
- data.tar.gz: 894084472c088c23256ed76b9e4c568d56e2a2d986104b50c28550358e65fea9ca89326323f26d58f703dbe0c3f7b7f51b73d9f006414e1821fdccce4fd2c91c
6
+ metadata.gz: 632309a3f02d26685fbd352e237f713a4e5e16faa7d0eaa16e25233a789f8d8f39ac88eefb77c009d269e12eadfd62666c05c2b25a5b9da2cd05162c66ace7c1
7
+ data.tar.gz: 39d1a63b02163c110950da5b3f399079c0f39d2e7b19aef4df97b63e173a7b6f1375fa7dcd5aa0c61f2c4ef3b8c87549e4d68bdb747979329dcbd47c440dec51
data/lazy_mapper.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lazy_mapper'
3
- spec.version = '0.1.1'
3
+ spec.version = '0.2.0'
4
4
  spec.summary = "A lazy object mapper"
5
5
  spec.description = "Wraps primitive data in a semantically rich model"
6
6
  spec.authors = ["Adam Lett"]
@@ -12,8 +12,6 @@ Gem::Specification.new do |spec|
12
12
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
13
13
  spec.require_paths = ['lib']
14
14
 
15
- spec.add_runtime_dependency 'activesupport', '>= 3'
16
-
17
15
  spec.add_development_dependency 'bundler'
18
16
  spec.add_development_dependency 'rspec'
19
17
  end
data/lib/lazy_mapper.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'bigdecimal'
2
2
  require 'bigdecimal/util'
3
3
  require 'time'
4
- require 'active_support/core_ext/class/attribute'
5
4
 
6
5
  ##
7
6
  # Wraps a JSON object and lazily maps its attributes to domain objects
@@ -35,6 +34,15 @@ class LazyMapper
35
34
  URI => URI.method(:parse)
36
35
  }.freeze
37
36
 
37
+ def self.default_value_for type, value
38
+ default_values[type] = value
39
+ end
40
+
41
+ def self.default_values
42
+ @default_values ||= DEFAULT_VALUES
43
+ end
44
+
45
+
38
46
  # Default values for primitive types
39
47
  DEFAULT_VALUES = {
40
48
  String => '',
@@ -49,10 +57,19 @@ class LazyMapper
49
57
  mappers[type] = mapper
50
58
  end
51
59
 
52
- class_attribute :mappers
53
- self.mappers = {}
60
+ def self.mappers
61
+ @mappers ||= DEFAULT_MAPPINGS
62
+ end
63
+
64
+ def self.inherited(klass)
65
+ klass.instance_variable_set IVAR[:mappers], self.mappers.dup
66
+ klass.instance_variable_set IVAR[:default_values], self.default_values.dup
67
+ end
54
68
 
55
- attr_reader :mappers
69
+
70
+ def mappers
71
+ @mappers ||= self.class.mappers
72
+ end
56
73
 
57
74
  IVAR = -> name {
58
75
  name_as_str = name.to_s
@@ -305,11 +322,11 @@ class LazyMapper
305
322
  attr_writer :mappers
306
323
 
307
324
  def mapping_for(name, type)
308
- mappers[name] || mappers[type] || self.class.mappers[type] || DEFAULT_MAPPINGS[type]
325
+ mappers[name] || mappers[type] || self.class.mappers[type]
309
326
  end
310
327
 
311
328
  def default_value(type)
312
- DEFAULT_VALUES.fetch(type) { nil }
329
+ self.class.default_values[type]
313
330
  end
314
331
 
315
332
  def mapped_value(name, unmapped_value, type, map: mapping_for(name, type), default: default_value(type))
@@ -155,7 +155,7 @@ describe LazyMapper do
155
155
  expect(instance.composite).to eq type.new('abc', 'cde')
156
156
  end
157
157
 
158
- it 'supports adding default mappers to derived classes' do
158
+ it 'supports adding inheritable default mappers to derived classes' do
159
159
  type = Struct.new(:val1, :val2)
160
160
 
161
161
  klass = Class.new LazyMapper do
@@ -163,8 +163,25 @@ describe LazyMapper do
163
163
  one :composite, type
164
164
  end
165
165
 
166
+ klass2 = Class.new(klass)
166
167
  instance = klass.from_json 'composite' => '123 456'
167
168
  expect(instance.composite).to eq type.new('123', '456')
169
+
170
+ instance2 = klass2.from_json 'composite' => '456 789'
171
+ expect(instance2.composite).to eq type.new('456', '789')
172
+ end
173
+
174
+ it 'supports adding or overriding inheritable default values for types to derived classes' do
175
+ type = Struct.new(:val1, :val2)
176
+
177
+ klass = Class.new LazyMapper do
178
+ default_value_for type, type.new('321', '123')
179
+ one :composite, type
180
+ end
181
+
182
+ klass2 = Class.new(klass)
183
+ instance = klass2.from_json({})
184
+ expect(instance.composite).to eq type.new('321', '123')
168
185
  end
169
186
 
170
187
  it 'supports injection of customer mappers during instantiation' do
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lazy_mapper
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
  - Adam Lett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-19 00:00:00.000000000 Z
11
+ date: 2018-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '3'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '3'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement