ar_doc_store 0.1.0 → 0.1.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4a712bbb6d8bdecd00a0266ffa78914695441c3
|
4
|
+
data.tar.gz: 7f05b2322e14a906d047b4762c85014126c9989c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8d6cd07419016a93663a11d2134ba2b1f2d60ff35013759031e807fde872f03204410dc7574a19f570ee8d8ccd5b974d1864c189d4e7efc1523ee878c324595
|
7
|
+
data.tar.gz: b235a93f0323b82e4e2ac226e903729d162fec7cea3a91be892bd1850bd11f7f80a9b0ee05240d6303a8a6037bedb77b4709d54284f670c7b554f2e433e9e432
|
@@ -31,18 +31,19 @@ module ArDocStore
|
|
31
31
|
def create_reader_for(assn_name, class_name)
|
32
32
|
add_method assn_name.to_sym, -> {
|
33
33
|
ivar = "@#{assn_name}"
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
instance_variable_get(ivar) || begin
|
35
|
+
my_class_name = class_name.constantize
|
36
|
+
items = read_store_attribute(:data, assn_name)
|
37
|
+
if items.is_a?(Array) || items.is_a?(ArDocStore::EmbeddedCollection)
|
38
|
+
items = ArDocStore::EmbeddedCollection.new items.map { |item| my_class_name.new(item) }
|
39
|
+
else
|
40
|
+
items ||= ArDocStore::EmbeddedCollection.new
|
41
|
+
end
|
42
|
+
instance_variable_set ivar, (items)
|
43
|
+
items.parent = self
|
44
|
+
items.map {|item| item.parent = self }
|
45
|
+
items
|
40
46
|
end
|
41
|
-
items ||= ArDocStore::EmbeddedCollection.new
|
42
|
-
instance_variable_set ivar, (items)
|
43
|
-
items.parent = self
|
44
|
-
items.map {|item| item.parent = self }
|
45
|
-
items
|
46
47
|
}
|
47
48
|
end
|
48
49
|
def create_writer_for(assn_name, class_name)
|
@@ -51,6 +51,8 @@ module ArDocStore
|
|
51
51
|
self
|
52
52
|
end
|
53
53
|
|
54
|
+
# TODO: This doesn't work very well for embeds_many because the parent needs to have its setter triggered
|
55
|
+
# before the embedded model will actually get saved.
|
54
56
|
def save
|
55
57
|
parent && parent.save
|
56
58
|
end
|
@@ -76,10 +78,6 @@ module ArDocStore
|
|
76
78
|
@attributes[key] = value
|
77
79
|
end
|
78
80
|
|
79
|
-
def data_will_change!
|
80
|
-
true
|
81
|
-
end
|
82
|
-
|
83
81
|
def to_param
|
84
82
|
id
|
85
83
|
end
|
@@ -88,6 +86,7 @@ module ArDocStore
|
|
88
86
|
|
89
87
|
module ClassMethods
|
90
88
|
|
89
|
+
#:nodoc:
|
91
90
|
def store_accessor(store, key)
|
92
91
|
self.virtual_attributes ||= HashWithIndifferentAccess.new
|
93
92
|
virtual_attributes[key] ||= true
|
data/lib/ar_doc_store/storage.rb
CHANGED
@@ -43,9 +43,20 @@ module ArDocStore
|
|
43
43
|
def attribute_name_from_foreign_key(name)
|
44
44
|
is_store_accessor_method?(name) ? name : name.match(/\'(\w+)\'/)[0].gsub("'", '')
|
45
45
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
|
47
|
+
def clean_attribute_names_for_arel(attribute_names)
|
48
|
+
attribute_names.reject{|attribute_name| is_stored_attribute?(attribute_name)}
|
49
|
+
end
|
50
|
+
|
51
|
+
# Overridden otherwise insert and update queries get fooled into thinking that stored attributes are real columns.
|
52
|
+
def arel_attributes_with_values_for_create(attribute_names) #:nodoc:
|
53
|
+
super clean_attribute_names_for_arel(attribute_names)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Overridden otherwise insert and update queries get fooled into thinking that stored attributes are real columns.
|
57
|
+
def arel_attributes_with_values_for_update(attribute_names) #:nodoc:
|
58
|
+
super clean_attribute_names_for_arel(attribute_names)
|
59
|
+
end
|
49
60
|
end
|
50
61
|
|
51
62
|
module ClassMethods
|
@@ -61,6 +72,7 @@ module ArDocStore
|
|
61
72
|
define_virtual_attribute_method name
|
62
73
|
end
|
63
74
|
|
75
|
+
#:nodoc:
|
64
76
|
def add_ransacker(key, predicate = nil)
|
65
77
|
return unless respond_to?(:ransacker)
|
66
78
|
ransacker key do
|
@@ -72,6 +84,7 @@ module ArDocStore
|
|
72
84
|
end
|
73
85
|
end
|
74
86
|
|
87
|
+
#:nodoc:
|
75
88
|
def store_attributes(typecast_method, predicate=nil, attributes=[], default_value=nil)
|
76
89
|
attributes = [attributes] unless attributes.respond_to?(:each)
|
77
90
|
attributes.each do |key|
|
@@ -85,6 +98,7 @@ module ArDocStore
|
|
85
98
|
end
|
86
99
|
end
|
87
100
|
|
101
|
+
#:nodoc:
|
88
102
|
def store_attribute_from_symbol(typecast_method, key, default_value)
|
89
103
|
define_method key.to_sym, -> {
|
90
104
|
value = read_store_attribute(:data, key)
|
@@ -92,12 +106,10 @@ module ArDocStore
|
|
92
106
|
value.public_send(typecast_method)
|
93
107
|
elsif default_value
|
94
108
|
write_default_store_attribute(key, default_value)
|
95
|
-
# write_store_attribute(:data, key, default_value)
|
96
109
|
default_value
|
97
110
|
end
|
98
111
|
}
|
99
112
|
define_method "#{key}=".to_sym, -> (value) {
|
100
|
-
# data_will_change! if @initalized
|
101
113
|
if value == '' || value.nil?
|
102
114
|
write_store_attribute :data, key, nil
|
103
115
|
else
|
@@ -106,6 +118,9 @@ module ArDocStore
|
|
106
118
|
}
|
107
119
|
end
|
108
120
|
|
121
|
+
# TODO: add default value support.
|
122
|
+
# Default ought to be a hash of attributes,
|
123
|
+
# also accept a proc that receives the newly initialized object
|
109
124
|
def store_attribute_from_class(class_name, key)
|
110
125
|
define_method key.to_sym, -> {
|
111
126
|
ivar = "@#{key}"
|
@@ -147,32 +162,36 @@ module ArDocStore
|
|
147
162
|
attribute_method_matchers_cache.clear
|
148
163
|
end
|
149
164
|
|
150
|
-
|
151
|
-
|
165
|
+
# Allows you to define several string attributes at once. Deprecated.
|
152
166
|
def string_attributes(*args)
|
153
167
|
args.each do |arg|
|
154
168
|
attribute arg, as: :string
|
155
169
|
end
|
156
170
|
end
|
157
171
|
|
172
|
+
# Allows you to define several float attributes at once. Deprecated.
|
158
173
|
def float_attributes(*args)
|
159
174
|
args.each do |arg|
|
160
175
|
attribute arg, as: :float
|
161
176
|
end
|
162
177
|
end
|
163
178
|
|
179
|
+
# Allows you to define several integer attributes at once. Deprecated.
|
164
180
|
def integer_attributes(*args)
|
165
181
|
args.each do |arg|
|
166
182
|
attribute arg, as: :integer
|
167
183
|
end
|
168
184
|
end
|
169
185
|
|
186
|
+
# Allows you to define several boolean attributes at once. Deprecated.
|
170
187
|
def boolean_attributes(*args)
|
171
188
|
args.each do |arg|
|
172
189
|
attribute arg, as: :boolean
|
173
190
|
end
|
174
191
|
end
|
175
|
-
|
192
|
+
|
193
|
+
# Shorthand for attribute :name, as: :enumeration, values: %w{a b c}
|
194
|
+
# Deprecated.
|
176
195
|
def enumerates(field, *args)
|
177
196
|
options = args.extract_options!
|
178
197
|
options[:as] = :enumeration
|
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: 0.1.
|
4
|
+
version: 0.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: 2015-03-
|
11
|
+
date: 2015-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|