spicerack 0.25.3 → 0.25.4
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 +4 -4
- data/lib/spicerack/hash_model.rb +28 -2
- data/lib/spicerack/rspec/custom_matchers/define_field.rb +1 -1
- data/lib/spicerack/version.rb +1 -1
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7afa73ffa6ebc50d2ee2e37e69e9da61bd343d9f58eacb4a34d3d894a0454a5
|
4
|
+
data.tar.gz: 271cf1031356c0e921f3c4b27ffb7a35a8a155f05b269fbe7678c7e7dbfa0e5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 553b6da722c20cf74da06bdd74c9d8672a0ab279650a50b00d1ec0db5be76b942c2991e18eaca66c1ac36ada60061de1b7d6ca6616685eafc828dbb855b63bb9
|
7
|
+
data.tar.gz: 3e49c44b2accd83a196bef0e65b63601b69f42c66a887cf36738d62645d10d2eb208213d794bfe0601c4d526fd15433c04eae1dd3e7705704717ba4b6e956e2e
|
data/lib/spicerack/hash_model.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require "active_model"
|
4
4
|
|
5
5
|
module Spicerack
|
6
|
+
# Provides on-demand synchronization between a `data' object and ActiveModel::Attributes
|
6
7
|
module HashModel
|
7
8
|
extend ActiveSupport::Concern
|
8
9
|
|
@@ -23,6 +24,7 @@ module Spicerack
|
|
23
24
|
private
|
24
25
|
|
25
26
|
def field(name, type = Type::Value.new, **options)
|
27
|
+
name = name.to_s
|
26
28
|
_fields << name
|
27
29
|
attribute(name, type, **options)
|
28
30
|
define_field_methods(name)
|
@@ -30,12 +32,36 @@ module Spicerack
|
|
30
32
|
|
31
33
|
def define_field_methods(name)
|
32
34
|
define_method("#{name}?".to_sym) { data[name].present? }
|
33
|
-
define_method("#{name}=".to_sym)
|
35
|
+
define_method("#{name}=".to_sym) do |value|
|
36
|
+
data[name] = value
|
37
|
+
synchronize_attribute_from_datastore(name)
|
38
|
+
end
|
34
39
|
define_method(name) do
|
35
|
-
|
40
|
+
synchronize_attribute_from_datastore(name)
|
36
41
|
attribute(name)
|
37
42
|
end
|
38
43
|
end
|
39
44
|
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# The data object can be anything from a normal hash to a hash-like object backed by redis.
|
49
|
+
def synchronize_attribute_from_datastore(name)
|
50
|
+
value_from_datastore = data[name]
|
51
|
+
value_from_attribute = attribute(name)
|
52
|
+
return if value_from_datastore == value_from_attribute
|
53
|
+
|
54
|
+
value = value_from_datastore || value_from_attribute
|
55
|
+
|
56
|
+
# Otherwise, the dataset is value takes priority and is written as the attribute value
|
57
|
+
# ActiveModel changed the interface to this method between Rails 6.0 and 6.1
|
58
|
+
# This method is a patch which allows this class to work with either version
|
59
|
+
# Once support for pre rails 6.0 is sunset this should likely be removed
|
60
|
+
if respond_to?(:_write_attribute, true)
|
61
|
+
_write_attribute(name, value)
|
62
|
+
else
|
63
|
+
write_attribute(name, value)
|
64
|
+
end
|
65
|
+
end
|
40
66
|
end
|
41
67
|
end
|
@@ -20,7 +20,7 @@ RSpec::Matchers.define :define_field do |field, type = nil, default: nil|
|
|
20
20
|
match do
|
21
21
|
expect(test_subject.attribute_types[field.to_s].type).to eq type unless type.nil?
|
22
22
|
expect(test_subject._default_attributes[field.to_s].value).to eq default unless default.nil?
|
23
|
-
expect(test_subject._fields).to include field
|
23
|
+
expect(test_subject._fields).to include field.to_s
|
24
24
|
end
|
25
25
|
description { "define field #{field}" }
|
26
26
|
failure_message { "expected #{test_subject} to define field #{field} #{with_details(type, default)}" }
|
data/lib/spicerack/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spicerack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.25.
|
4
|
+
version: 0.25.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Garside
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2021-02-17 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: around_the_world
|
@@ -20,70 +20,70 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - '='
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.25.
|
23
|
+
version: 0.25.4
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
27
27
|
requirements:
|
28
28
|
- - '='
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: 0.25.
|
30
|
+
version: 0.25.4
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
32
|
name: redis_hash
|
33
33
|
requirement: !ruby/object:Gem::Requirement
|
34
34
|
requirements:
|
35
35
|
- - '='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.25.
|
37
|
+
version: 0.25.4
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
42
|
- - '='
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: 0.25.
|
44
|
+
version: 0.25.4
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: short_circu_it
|
47
47
|
requirement: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
49
|
- - '='
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version: 0.25.
|
51
|
+
version: 0.25.4
|
52
52
|
type: :runtime
|
53
53
|
prerelease: false
|
54
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
56
|
- - '='
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: 0.25.
|
58
|
+
version: 0.25.4
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: technologic
|
61
61
|
requirement: !ruby/object:Gem::Requirement
|
62
62
|
requirements:
|
63
63
|
- - '='
|
64
64
|
- !ruby/object:Gem::Version
|
65
|
-
version: 0.25.
|
65
|
+
version: 0.25.4
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
68
|
version_requirements: !ruby/object:Gem::Requirement
|
69
69
|
requirements:
|
70
70
|
- - '='
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: 0.25.
|
72
|
+
version: 0.25.4
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
74
|
name: tablesalt
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
77
|
- - '='
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.25.
|
79
|
+
version: 0.25.4
|
80
80
|
type: :runtime
|
81
81
|
prerelease: false
|
82
82
|
version_requirements: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
84
|
- - '='
|
85
85
|
- !ruby/object:Gem::Version
|
86
|
-
version: 0.25.
|
86
|
+
version: 0.25.4
|
87
87
|
- !ruby/object:Gem::Dependency
|
88
88
|
name: bundler
|
89
89
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,28 +208,28 @@ dependencies:
|
|
208
208
|
requirements:
|
209
209
|
- - '='
|
210
210
|
- !ruby/object:Gem::Version
|
211
|
-
version: 0.25.
|
211
|
+
version: 0.25.4
|
212
212
|
type: :development
|
213
213
|
prerelease: false
|
214
214
|
version_requirements: !ruby/object:Gem::Requirement
|
215
215
|
requirements:
|
216
216
|
- - '='
|
217
217
|
- !ruby/object:Gem::Version
|
218
|
-
version: 0.25.
|
218
|
+
version: 0.25.4
|
219
219
|
- !ruby/object:Gem::Dependency
|
220
220
|
name: spicerack-styleguide
|
221
221
|
requirement: !ruby/object:Gem::Requirement
|
222
222
|
requirements:
|
223
223
|
- - '='
|
224
224
|
- !ruby/object:Gem::Version
|
225
|
-
version: 0.25.
|
225
|
+
version: 0.25.4
|
226
226
|
type: :development
|
227
227
|
prerelease: false
|
228
228
|
version_requirements: !ruby/object:Gem::Requirement
|
229
229
|
requirements:
|
230
230
|
- - '='
|
231
231
|
- !ruby/object:Gem::Version
|
232
|
-
version: 0.25.
|
232
|
+
version: 0.25.4
|
233
233
|
- !ruby/object:Gem::Dependency
|
234
234
|
name: will_paginate
|
235
235
|
requirement: !ruby/object:Gem::Requirement
|