ar_doc_store 2.0.2 → 2.1
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/ar_doc_store.gemspec +2 -2
- data/lib/ar_doc_store.rb +2 -0
- data/lib/ar_doc_store/attributes/array.rb +2 -0
- data/lib/ar_doc_store/attributes/base.rb +4 -3
- data/lib/ar_doc_store/attributes/boolean.rb +2 -0
- data/lib/ar_doc_store/attributes/callback_support.rb +3 -1
- data/lib/ar_doc_store/attributes/date.rb +3 -1
- data/lib/ar_doc_store/attributes/datetime.rb +3 -1
- data/lib/ar_doc_store/attributes/decimal.rb +2 -0
- data/lib/ar_doc_store/attributes/embeds_base.rb +7 -1
- data/lib/ar_doc_store/attributes/embeds_many.rb +5 -1
- data/lib/ar_doc_store/attributes/embeds_one.rb +4 -4
- data/lib/ar_doc_store/attributes/enumeration.rb +2 -0
- data/lib/ar_doc_store/attributes/float.rb +2 -0
- data/lib/ar_doc_store/attributes/integer.rb +2 -0
- data/lib/ar_doc_store/attributes/string.rb +2 -0
- data/lib/ar_doc_store/embeddable_model.rb +3 -1
- data/lib/ar_doc_store/embedded_collection.rb +5 -1
- data/lib/ar_doc_store/embedding.rb +2 -0
- data/lib/ar_doc_store/model.rb +8 -4
- data/lib/ar_doc_store/storage.rb +4 -1
- data/lib/ar_doc_store/types/embeds_many.rb +6 -4
- data/lib/ar_doc_store/types/embeds_one.rb +3 -1
- data/lib/ar_doc_store/version.rb +3 -1
- metadata +10 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0118efe822fe133ce4561bbb5feb3dc3640666b6f9cab8b116f041241e160594'
|
4
|
+
data.tar.gz: db55c5000a7215f5d1a3d312965f562c79c209b3446b1a630cd84ffe25a79f49
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00b523748532b1e6109e12e09941cead7a4df9b927286e82ced80d6d47bc47859e2df9ede2fcb7b77b483cd2c19470714c386cd866dfb09fb874fab9274e0753
|
7
|
+
data.tar.gz: b3020b345638f79c1ebb035d40d0ac764343a7a6caf58a94c3bbeaeceeb46570b56953adcd3fc8081eea7a5185809cc471d47973d538571fe16f9c23fd88dd15
|
data/ar_doc_store.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "activerecord", ">=
|
21
|
+
spec.add_dependency "activerecord", ">=6.1"
|
22
22
|
spec.add_dependency "pg"
|
23
|
-
spec.add_development_dependency "bundler", "~>
|
23
|
+
spec.add_development_dependency "bundler", "~> 2.2"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
spec.add_development_dependency "simplecov"
|
26
26
|
end
|
data/lib/ar_doc_store.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
module Attributes
|
3
5
|
class Base
|
@@ -34,10 +36,9 @@ module ArDocStore
|
|
34
36
|
attribute attribute_name, attribute_type.new, **options
|
35
37
|
define_method "#{attribute_name}=".to_sym, -> (value) {
|
36
38
|
value = nil if value == '' || value == ['']
|
37
|
-
|
38
|
-
new_value =
|
39
|
+
write_attribute attribute_name, value
|
40
|
+
new_value = read_attribute attribute_name
|
39
41
|
write_store_attribute(json_column, attribute_name, new_value)
|
40
|
-
new_value
|
41
42
|
}
|
42
43
|
end
|
43
44
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
module Attributes
|
3
5
|
class EmbedsBase < Base
|
@@ -20,16 +22,20 @@ module ArDocStore
|
|
20
22
|
end
|
21
23
|
|
22
24
|
def create_build_method
|
25
|
+
# override in subclass
|
23
26
|
end
|
24
27
|
|
25
28
|
def create_ensure_method
|
29
|
+
# override in subclass
|
26
30
|
end
|
27
31
|
|
28
32
|
def create_attributes_method
|
33
|
+
# override in subclass
|
29
34
|
end
|
30
35
|
|
31
36
|
def create_validation
|
37
|
+
# override in subclass
|
32
38
|
end
|
33
39
|
end
|
34
40
|
end
|
35
|
-
end
|
41
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
module Attributes
|
3
5
|
class EmbedsMany < EmbedsBase
|
@@ -30,7 +32,7 @@ module ArDocStore
|
|
30
32
|
item.parent = new_value
|
31
33
|
end
|
32
34
|
write_store_attribute json_column, :#{attribute}, new_value
|
33
|
-
new_value
|
35
|
+
new_value
|
34
36
|
end
|
35
37
|
CODE
|
36
38
|
end
|
@@ -66,6 +68,7 @@ module ArDocStore
|
|
66
68
|
model.class_eval <<-CODE, __FILE__, __LINE__ + 1
|
67
69
|
def #{attribute}_attributes=(values)
|
68
70
|
return if values.blank?
|
71
|
+
|
69
72
|
if values.respond_to?(:each)
|
70
73
|
if values.respond_to?(:values)
|
71
74
|
values = values.values
|
@@ -111,6 +114,7 @@ module ArDocStore
|
|
111
114
|
|
112
115
|
def process_existing_model(value)
|
113
116
|
return false unless value.key?(:id)
|
117
|
+
|
114
118
|
model = find_model_by_value(value)
|
115
119
|
model && destroy_or_update(model, value) or add(value)
|
116
120
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
module Attributes
|
3
5
|
class EmbedsOne < EmbedsBase
|
@@ -8,7 +10,7 @@ module ArDocStore
|
|
8
10
|
attribute :#{attribute}, ArDocStore::Types::EmbedsOne.new("#{@class_name}")
|
9
11
|
def #{attribute}
|
10
12
|
value = send :attribute, :#{attribute}
|
11
|
-
value && value.parent = self
|
13
|
+
value && value.parent = self
|
12
14
|
value && value.embedded_as = :#{attribute}
|
13
15
|
value
|
14
16
|
end
|
@@ -18,7 +20,7 @@ module ArDocStore
|
|
18
20
|
value && #{attribute}.parent = self
|
19
21
|
value && #{attribute}.embedded_as = :#{attribute}
|
20
22
|
write_store_attribute json_column, :#{attribute}, #{attribute}
|
21
|
-
#{attribute}
|
23
|
+
#{attribute}
|
22
24
|
end
|
23
25
|
CODE
|
24
26
|
end
|
@@ -62,8 +64,6 @@ module ArDocStore
|
|
62
64
|
validate :validate_embedded_record_for_#{attribute}
|
63
65
|
CODE
|
64
66
|
end
|
65
|
-
|
66
67
|
end
|
67
|
-
|
68
68
|
end
|
69
69
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'securerandom'
|
2
4
|
|
3
5
|
module ArDocStore
|
@@ -71,7 +73,7 @@ module ArDocStore
|
|
71
73
|
end
|
72
74
|
|
73
75
|
def read_store_attribute(store, attr)
|
74
|
-
attributes[attr]
|
76
|
+
attributes[attr.to_s]
|
75
77
|
end
|
76
78
|
|
77
79
|
def write_store_attribute(store, attribute, value)
|
@@ -1,14 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
class EmbeddedCollection < Array
|
3
5
|
attr_accessor :parent, :embedded_as
|
4
6
|
def save
|
5
7
|
parent.send :write_store_attribute, parent.json_column, embedded_as, as_json
|
6
8
|
end
|
9
|
+
|
7
10
|
def persist
|
8
11
|
each &:persist
|
9
12
|
end
|
13
|
+
|
10
14
|
def inspect
|
11
15
|
"ArDocStore::EmbeddedCollection - #{as_json.inspect}"
|
12
16
|
end
|
13
17
|
end
|
14
|
-
end
|
18
|
+
end
|
data/lib/ar_doc_store/model.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
module Model
|
3
5
|
def self.included(mod)
|
@@ -12,18 +14,20 @@ module ArDocStore
|
|
12
14
|
def assign_json_data
|
13
15
|
json_data = respond_to?(json_column) && self[json_column]
|
14
16
|
return if json_data.blank?
|
17
|
+
|
15
18
|
json_attributes.keys.each do |key|
|
16
19
|
next unless json_data.key?(key)
|
17
|
-
send :attribute=, key, json_data[key]
|
18
|
-
self[key].parent = self if self[key].respond_to?(:parent)
|
20
|
+
send :attribute=, key, json_data[key] if self.respond_to?("#{key}=")
|
21
|
+
self[key].parent = self if self[key].respond_to?(:parent=)
|
19
22
|
self[key].embedded_as = key if self[key].respond_to?(:embedded_as)
|
20
23
|
mutations_from_database.forget_change(key) unless new_record?
|
21
24
|
end
|
22
25
|
end
|
23
26
|
def mark_embeds_as_persisted
|
24
27
|
json_attributes.values.each do |value|
|
25
|
-
if value.respond_to?(:embedded?) && value.embedded? && respond_to?(value.attribute)
|
26
|
-
public_send(value.attribute)
|
28
|
+
if value.respond_to?(:embedded?) && value.embedded? && respond_to?(value.attribute)
|
29
|
+
val = public_send(value.attribute)
|
30
|
+
val.persist if val && val.respond_to?(:persist)
|
27
31
|
end
|
28
32
|
end
|
29
33
|
end
|
data/lib/ar_doc_store/storage.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
module Storage
|
3
5
|
|
4
6
|
def self.included(mod)
|
5
|
-
|
6
7
|
mod.class_attribute :json_column
|
7
8
|
mod.json_column ||= :data
|
8
9
|
mod.class_attribute :json_attributes
|
@@ -17,12 +18,14 @@ module ArDocStore
|
|
17
18
|
type ||= options.delete(:as) || :string
|
18
19
|
class_name = ArDocStore.mappings[type] || "ArDocStore::Attributes::#{type.to_s.classify}"
|
19
20
|
raise "Invalid attribute type: #{class_name}" unless const_defined?(class_name)
|
21
|
+
|
20
22
|
json_attributes[name] = class_name.constantize.build self, name, options
|
21
23
|
end
|
22
24
|
|
23
25
|
#:nodoc:
|
24
26
|
def add_ransacker(key, predicate = nil)
|
25
27
|
return unless respond_to?(:ransacker)
|
28
|
+
|
26
29
|
ransacker key do |parent|
|
27
30
|
sql = "(#{parent.table[json_column].name}->>'#{key}')"
|
28
31
|
if predicate.present?
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ArDocStore
|
2
4
|
module Types
|
3
5
|
class EmbedsMany < ActiveModel::Type::Value
|
@@ -25,9 +27,9 @@ module ArDocStore
|
|
25
27
|
end
|
26
28
|
|
27
29
|
def serialize(values)
|
28
|
-
if values.nil?
|
29
|
-
|
30
|
-
|
30
|
+
return if values.nil?
|
31
|
+
|
32
|
+
if values.respond_to?(:each)
|
31
33
|
values.map { |value|
|
32
34
|
if value.nil?
|
33
35
|
nil
|
@@ -49,4 +51,4 @@ module ArDocStore
|
|
49
51
|
end
|
50
52
|
end
|
51
53
|
end
|
52
|
-
end
|
54
|
+
end
|
data/lib/ar_doc_store/version.rb
CHANGED
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: 2.
|
4
|
+
version: '2.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Furber
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '6.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pg
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.2'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -135,7 +135,7 @@ homepage: https://github.com/dfurber/ar_doc_store
|
|
135
135
|
licenses:
|
136
136
|
- MIT
|
137
137
|
metadata: {}
|
138
|
-
post_install_message:
|
138
|
+
post_install_message:
|
139
139
|
rdoc_options: []
|
140
140
|
require_paths:
|
141
141
|
- lib
|
@@ -150,9 +150,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
150
|
- !ruby/object:Gem::Version
|
151
151
|
version: '0'
|
152
152
|
requirements: []
|
153
|
-
|
154
|
-
|
155
|
-
signing_key:
|
153
|
+
rubygems_version: 3.1.4
|
154
|
+
signing_key:
|
156
155
|
specification_version: 4
|
157
156
|
summary: A document storage gem meant for ActiveRecord PostgresQL JSON storage.
|
158
157
|
test_files:
|