ar_doc_store 2.1 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ar_doc_store/attributes/base.rb +7 -6
- data/lib/ar_doc_store/attributes/embeds_many.rb +3 -3
- data/lib/ar_doc_store/attributes/embeds_one.rb +2 -2
- data/lib/ar_doc_store/embeddable_model.rb +8 -0
- data/lib/ar_doc_store/model.rb +10 -0
- data/lib/ar_doc_store/types/embeds_one.rb +6 -8
- data/lib/ar_doc_store/version.rb +1 -1
- data/test/attributes/embeds_one_attribute_test.rb +2 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab415cae0a0fff588b20796660e16da2d406a9800d689ffc1d4e3c02e725636c
|
4
|
+
data.tar.gz: ec609a135f59c8e04c05fdbc8b907a86e49b7818e0d3f406f57d2f62223ce4ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d321c097e506f2005a2be86dbbe6245011fdda1859bd819c80af147b9d1357106a70c4fcc983e00e50ccb3b4800984f734302c8da8700098a5a3dd33e34da46
|
7
|
+
data.tar.gz: 931e6d3655e830d7df0913508aca632f1bdcb7f32b0d356efb9b8aac9d058210c2d70f2fd23093d6ef012b14d43e7c46ff257c0f5a1247af79c1537bd64bfb7a
|
@@ -34,12 +34,13 @@ module ArDocStore
|
|
34
34
|
options.merge!(default: default) if default.present?
|
35
35
|
model.class_eval do
|
36
36
|
attribute attribute_name, attribute_type.new, **options
|
37
|
-
define_method "#{attribute_name}=".to_sym, -> (value) {
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
37
|
+
# define_method "#{attribute_name}=".to_sym, -> (value) {
|
38
|
+
# value = nil if value == '' || value == ['']
|
39
|
+
# write_attribute attribute_name, value
|
40
|
+
# # new_value = read_attribute attribute_name
|
41
|
+
# # write_store_attribute(json_column, attribute_name, new_value)
|
42
|
+
# attributes[attribute_name]
|
43
|
+
# }
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -9,7 +9,7 @@ module ArDocStore
|
|
9
9
|
model.class_eval <<-CODE, __FILE__, __LINE__ + 1
|
10
10
|
attribute :#{attribute}, ArDocStore::Types::EmbedsMany.new("#{@class_name}")
|
11
11
|
def #{attribute}
|
12
|
-
value =
|
12
|
+
value = read_attribute :#{attribute}
|
13
13
|
if value && !value.is_a?(ArDocStore::EmbeddedCollection)
|
14
14
|
value = ArDocStore::EmbeddedCollection.new value
|
15
15
|
else
|
@@ -24,8 +24,8 @@ module ArDocStore
|
|
24
24
|
end
|
25
25
|
def #{attribute}=(value)
|
26
26
|
value = nil if value == '' || value == ['']
|
27
|
-
|
28
|
-
new_value =
|
27
|
+
write_attribute :#{attribute}, value
|
28
|
+
new_value = read_attribute :#{attribute}
|
29
29
|
new_value.parent = self
|
30
30
|
new_value.embedded_as = :#{attribute}
|
31
31
|
new_value.each do |item|
|
@@ -9,7 +9,7 @@ module ArDocStore
|
|
9
9
|
model.class_eval <<-CODE, __FILE__, __LINE__ + 1
|
10
10
|
attribute :#{attribute}, ArDocStore::Types::EmbedsOne.new("#{@class_name}")
|
11
11
|
def #{attribute}
|
12
|
-
value =
|
12
|
+
value = read_attribute :#{attribute}
|
13
13
|
value && value.parent = self
|
14
14
|
value && value.embedded_as = :#{attribute}
|
15
15
|
value
|
@@ -19,11 +19,11 @@ module ArDocStore
|
|
19
19
|
write_attribute :#{attribute}, value
|
20
20
|
value && #{attribute}.parent = self
|
21
21
|
value && #{attribute}.embedded_as = :#{attribute}
|
22
|
-
write_store_attribute json_column, :#{attribute}, #{attribute}
|
23
22
|
#{attribute}
|
24
23
|
end
|
25
24
|
CODE
|
26
25
|
end
|
26
|
+
# TODO: figure out how to set parent on read and write
|
27
27
|
|
28
28
|
def create_build_method
|
29
29
|
model.class_eval <<-CODE, __FILE__, __LINE__ + 1
|
data/lib/ar_doc_store/model.rb
CHANGED
@@ -7,6 +7,7 @@ module ArDocStore
|
|
7
7
|
mod.send :include, ArDocStore::Embedding
|
8
8
|
mod.send :include, InstanceMethods
|
9
9
|
mod.after_initialize :assign_json_data
|
10
|
+
mod.before_validation :save_json_data
|
10
11
|
mod.before_save :mark_embeds_as_persisted
|
11
12
|
end
|
12
13
|
|
@@ -23,6 +24,15 @@ module ArDocStore
|
|
23
24
|
mutations_from_database.forget_change(key) unless new_record?
|
24
25
|
end
|
25
26
|
end
|
27
|
+
|
28
|
+
def save_json_data
|
29
|
+
json_attributes.each do |key, value|
|
30
|
+
next unless changes.key?(key)
|
31
|
+
|
32
|
+
write_store_attribute json_column, key, read_attribute(key)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
26
36
|
def mark_embeds_as_persisted
|
27
37
|
json_attributes.values.each do |value|
|
28
38
|
if value.respond_to?(:embedded?) && value.embedded? && respond_to?(value.attribute)
|
@@ -11,21 +11,19 @@ module ArDocStore
|
|
11
11
|
|
12
12
|
def cast(value)
|
13
13
|
@class_name = @class_name.constantize if class_name.respond_to?(:constantize)
|
14
|
-
if value.nil?
|
15
|
-
|
16
|
-
|
14
|
+
return if value.nil?
|
15
|
+
|
16
|
+
if value.kind_of?(class_name)
|
17
17
|
value
|
18
18
|
elsif value.respond_to?(:to_hash)
|
19
19
|
class_name.new value
|
20
|
-
else
|
21
|
-
nil
|
22
20
|
end
|
23
21
|
end
|
24
22
|
|
25
23
|
def serialize(value)
|
26
|
-
if value.nil?
|
27
|
-
|
28
|
-
|
24
|
+
return if value.nil?
|
25
|
+
|
26
|
+
if value.kind_of?(class_name)
|
29
27
|
value.serializable_hash
|
30
28
|
else
|
31
29
|
cast(value).serializable_hash
|
data/lib/ar_doc_store/version.rb
CHANGED
@@ -45,7 +45,8 @@ class EmbedsOneAttributeTest < MiniTest::Test
|
|
45
45
|
b.entrance.name = 'Baz'
|
46
46
|
assert b.entrance_changed?
|
47
47
|
assert b.entrance.name_changed?
|
48
|
-
|
48
|
+
# b.validate
|
49
|
+
# assert_equal b.data['entrance']['name'], b.entrance.name
|
49
50
|
b.save
|
50
51
|
c = Building.find(a.id)
|
51
52
|
assert_equal b.data, c.data
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar_doc_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Furber
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
150
|
- !ruby/object:Gem::Version
|
151
151
|
version: '0'
|
152
152
|
requirements: []
|
153
|
-
rubygems_version: 3.
|
153
|
+
rubygems_version: 3.2.3
|
154
154
|
signing_key:
|
155
155
|
specification_version: 4
|
156
156
|
summary: A document storage gem meant for ActiveRecord PostgresQL JSON storage.
|