activerecord-typedstore 0.4.1 → 0.4.2
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/active_record/typed_store/coder.rb +2 -0
- data/lib/active_record/typed_store/extension.rb +10 -0
- data/lib/active_record/typed_store/typed_hash.rb +1 -1
- data/lib/active_record/typed_store/version.rb +1 -1
- data/spec/active_record/typed_store/typed_hash_spec.rb +9 -2
- data/spec/active_record/typed_store_spec.rb +28 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4576d86d981102fb975b790007a6c030d1023e80
|
4
|
+
data.tar.gz: 04265638898e9a80318d931fcfbe4291026f63ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb80e3bfe74bf53c36a4e9c12c2aea8cc5bf612af892dccc2b9c9d52ff3863b9f797ae86634937fb5a99504e1a439520f25dc8a97bf8f1e46619eee6a368fc12
|
7
|
+
data.tar.gz: 5bc7ab0513420edd67af9821ce47947f70b31873b8e74f539fd0eefc5aacb2b327a4c92834e54e183e17a590c2fdd67837e2eaee031506eb9493b4aa57966ee8
|
@@ -102,6 +102,16 @@ module ActiveRecord::TypedStore
|
|
102
102
|
|
103
103
|
private
|
104
104
|
|
105
|
+
def write_attribute(attr_name, value)
|
106
|
+
if coder = self.class.serialized_attributes[attr_name]
|
107
|
+
if coder.is_a?(ActiveRecord::TypedStore::Coder)
|
108
|
+
return super(attr_name, coder.as_indifferent_hash(value))
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
super
|
113
|
+
end
|
114
|
+
|
105
115
|
def store_column(store_attribute, key)
|
106
116
|
store = store_columns(store_attribute)
|
107
117
|
store && store[key]
|
@@ -196,9 +196,16 @@ describe ActiveRecord::TypedStore::TypedHash do
|
|
196
196
|
hash.merge!(source: '')
|
197
197
|
expect(hash[:source]).to be == 'web'
|
198
198
|
end
|
199
|
-
|
200
199
|
end
|
201
|
-
|
202
200
|
end
|
203
201
|
|
202
|
+
context 'unknown columns' do
|
203
|
+
let(:column) { ['age', :integer] }
|
204
|
+
|
205
|
+
it 'can be assigned' do
|
206
|
+
hash = hash_class.new
|
207
|
+
hash[:unknown_key] = 42
|
208
|
+
expect(hash[:unknown_key]).to be == 42
|
209
|
+
end
|
210
|
+
end
|
204
211
|
end
|
@@ -452,6 +452,22 @@ shared_examples 'a store' do |retain_type=true|
|
|
452
452
|
|
453
453
|
let(:model) { described_class.new }
|
454
454
|
|
455
|
+
describe 'assigning the store' do
|
456
|
+
|
457
|
+
it 'coerce it to the proper typed hash' do
|
458
|
+
expect {
|
459
|
+
model.settings = {}
|
460
|
+
}.to_not change { model.settings.class }
|
461
|
+
end
|
462
|
+
|
463
|
+
it 'still handle default values' do
|
464
|
+
expect {
|
465
|
+
model.settings = {}
|
466
|
+
}.to_not change { model.settings['nickname'] }
|
467
|
+
end
|
468
|
+
|
469
|
+
end
|
470
|
+
|
455
471
|
describe 'attributes' do
|
456
472
|
|
457
473
|
it 'retrieve default if assigned nil and null not allowed' do
|
@@ -459,9 +475,18 @@ shared_examples 'a store' do |retain_type=true|
|
|
459
475
|
expect(model.age).to be == 12
|
460
476
|
end
|
461
477
|
|
462
|
-
|
463
|
-
|
464
|
-
|
478
|
+
context 'when column cannot be blank' do
|
479
|
+
|
480
|
+
it 'retreive default if not persisted yet, and nothing was assigned' do
|
481
|
+
expect(model.nickname).to be == 'Please enter your nickname'
|
482
|
+
end
|
483
|
+
|
484
|
+
it 'retreive default if assigned a blank value' do
|
485
|
+
model.update_attributes(nickname: '')
|
486
|
+
expect(model.nickname).to be == 'Please enter your nickname'
|
487
|
+
expect(model.reload.nickname).to be == 'Please enter your nickname'
|
488
|
+
end
|
489
|
+
|
465
490
|
end
|
466
491
|
|
467
492
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-typedstore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|