datts_right 0.0.23 → 0.0.24
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.
- data/VERSION +1 -1
- data/datts_right.gemspec +11 -1
- data/lib/datts_right/category.rb +4 -0
- data/lib/datts_right/errors.rb +3 -0
- data/lib/datts_right/instance_methods.rb +37 -13
- data/lib/datts_right/page.rb +4 -0
- data/spec/datts_right/add_definition_spec.rb +4 -0
- data/spec/datts_right/add_definitions_spec.rb +8 -0
- data/spec/datts_right/dynamic_attribute_details_spec.rb +17 -0
- data/spec/datts_right/order_by_dynamic_attribute_spec.rb +44 -0
- data/spec/datts_right/with_dynamic_attribute_key_spec.rb +13 -0
- data/spec/datts_right/with_dynamic_attribute_type_spec.rb +13 -0
- data/spec/datts_right/write_dynamic_attribute_spec.rb +7 -0
- data/spec/datts_right_spec.rb +4 -69
- metadata +13 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.24
|
data/datts_right.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{datts_right}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.24"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ramon Tayag"]
|
@@ -47,13 +47,18 @@ Gem::Specification.new do |s|
|
|
47
47
|
"spec/datts_right/create_definitions_spec.rb",
|
48
48
|
"spec/datts_right/definition_spec.rb",
|
49
49
|
"spec/datts_right/dynamic_attribute_definition_spec.rb",
|
50
|
+
"spec/datts_right/dynamic_attribute_details_spec.rb",
|
50
51
|
"spec/datts_right/find_by_dynamic_attribute_spec.rb",
|
51
52
|
"spec/datts_right/inheritance_spec.rb",
|
53
|
+
"spec/datts_right/order_by_dynamic_attribute_spec.rb",
|
52
54
|
"spec/datts_right/read_dynamic_attribute_spec.rb",
|
53
55
|
"spec/datts_right/remove_definition_spec.rb",
|
54
56
|
"spec/datts_right/remove_definitions_spec.rb",
|
55
57
|
"spec/datts_right/remove_dynamic_attribute_spec.rb",
|
56
58
|
"spec/datts_right/where_dynamic_attribute_spec.rb",
|
59
|
+
"spec/datts_right/with_dynamic_attribute_key_spec.rb",
|
60
|
+
"spec/datts_right/with_dynamic_attribute_type_spec.rb",
|
61
|
+
"spec/datts_right/write_dynamic_attribute_spec.rb",
|
57
62
|
"spec/datts_right_spec.rb",
|
58
63
|
"spec/spec_helper.rb"
|
59
64
|
]
|
@@ -72,13 +77,18 @@ Gem::Specification.new do |s|
|
|
72
77
|
"spec/datts_right/create_definitions_spec.rb",
|
73
78
|
"spec/datts_right/definition_spec.rb",
|
74
79
|
"spec/datts_right/dynamic_attribute_definition_spec.rb",
|
80
|
+
"spec/datts_right/dynamic_attribute_details_spec.rb",
|
75
81
|
"spec/datts_right/find_by_dynamic_attribute_spec.rb",
|
76
82
|
"spec/datts_right/inheritance_spec.rb",
|
83
|
+
"spec/datts_right/order_by_dynamic_attribute_spec.rb",
|
77
84
|
"spec/datts_right/read_dynamic_attribute_spec.rb",
|
78
85
|
"spec/datts_right/remove_definition_spec.rb",
|
79
86
|
"spec/datts_right/remove_definitions_spec.rb",
|
80
87
|
"spec/datts_right/remove_dynamic_attribute_spec.rb",
|
81
88
|
"spec/datts_right/where_dynamic_attribute_spec.rb",
|
89
|
+
"spec/datts_right/with_dynamic_attribute_key_spec.rb",
|
90
|
+
"spec/datts_right/with_dynamic_attribute_type_spec.rb",
|
91
|
+
"spec/datts_right/write_dynamic_attribute_spec.rb",
|
82
92
|
"spec/datts_right_spec.rb",
|
83
93
|
"spec/spec_helper.rb"
|
84
94
|
]
|
data/lib/datts_right/category.rb
CHANGED
data/lib/datts_right/errors.rb
CHANGED
@@ -92,10 +92,13 @@ module DattsRight
|
|
92
92
|
else
|
93
93
|
#respond_to?(:"#{k}=") ? send(:"#{k}=", v) : raise(UnknownAttributeError, "unknown attribute: #{k}")
|
94
94
|
begin
|
95
|
-
|
95
|
+
#puts "Attempt to set super #{k} to #{v}"
|
96
|
+
#puts "Checking to see if #{self.inspect} responds to #{k}= ........... #{self.class.name}##{self.class.respond_to?(:"#{k}=")}, or the record itself: #{respond_to?(:"#{k}=")}"
|
97
|
+
respond_to?(:"#{k}=") ? send(:"#{k}=", v) : raise(ActiveRecord::UnknownAttributeError, "unknown attribute: #{k}")
|
98
|
+
#send("#{k}=", v)
|
96
99
|
#puts "Set super #{k} to #{v}"
|
97
|
-
rescue
|
98
|
-
#puts "
|
100
|
+
rescue ActiveRecord::UnknownAttributeError => e
|
101
|
+
#puts "ActiveRecord::UnknownAttributeError was raised: #{e}, so we now check to see if '#{k}' is dynamic_attribute"
|
99
102
|
if dynamic_attribute?(k)
|
100
103
|
write_dynamic_attribute("#{k}", v)
|
101
104
|
else
|
@@ -120,22 +123,43 @@ module DattsRight
|
|
120
123
|
end
|
121
124
|
|
122
125
|
def add_definition(key, value)
|
123
|
-
|
124
|
-
|
125
|
-
if definition
|
126
|
-
|
126
|
+
if key
|
127
|
+
key = key.to_sym
|
128
|
+
if dynamic_attributes_options[:definition]
|
129
|
+
if definition[key]
|
130
|
+
raise AlreadyDefined, "#{key} is already defined"
|
131
|
+
else
|
132
|
+
definition.merge!({key => value})
|
133
|
+
end
|
127
134
|
else
|
128
|
-
|
135
|
+
raise NoDefinitionError
|
129
136
|
end
|
130
137
|
else
|
131
|
-
raise
|
138
|
+
raise AttributeKeyRequired
|
132
139
|
end
|
133
140
|
end
|
134
141
|
|
135
|
-
def add_definitions(
|
136
|
-
|
137
|
-
|
138
|
-
|
142
|
+
def add_definitions(*args)
|
143
|
+
args.compact! #remove the nil items
|
144
|
+
#puts "args after compacting: #{args.inspect}"
|
145
|
+
args.each do |item|
|
146
|
+
#puts "Working on #{item.inspect} is is a hash? (#{item.is_a?(Hash)}) or something else?"
|
147
|
+
item.each do |k, v|
|
148
|
+
#puts "Working on this k,v pair: #{k}, #{v}"
|
149
|
+
if v.is_a?(Hash) # item is like :robot => {:object_type => "text"}, :robot@ => {:object_type => "text"}
|
150
|
+
#puts "#{v} IS a hash"
|
151
|
+
add_definition k, v
|
152
|
+
else # v is not a hash; item is like {"name"=>"A key", "attr_key"=>"a_key"}, {"name"=>"B key", "attr_key"=>"b_key"}
|
153
|
+
#puts "#{v} is not a hash"
|
154
|
+
item.symbolize_keys! # {:name=>"A key", :description=>"asd", :attr_key=>"a_key"}
|
155
|
+
#puts "item is symbolized: #{item.inspect}"
|
156
|
+
attr_key = item.delete(:attr_key)
|
157
|
+
#puts "This is the attr_key: #{attr_key}"
|
158
|
+
if attr_key # we only want to work on it if there's an attr_key
|
159
|
+
attr_key = attr_key.to_sym
|
160
|
+
add_definition(attr_key, item)
|
161
|
+
end
|
162
|
+
end
|
139
163
|
end
|
140
164
|
end
|
141
165
|
end
|
data/lib/datts_right/page.rb
CHANGED
@@ -24,4 +24,8 @@ describe DattsRight, ".add_definition(key, value)" do
|
|
24
24
|
it "should raise NoMethodError if it doesn't have definition => true" do
|
25
25
|
lambda {Page.create.add_definition(:fake, :object_type => "string")}.should raise_error(DattsRight::NoDefinitionError)
|
26
26
|
end
|
27
|
+
|
28
|
+
it "should raise AttributeKeyRequired if no attr_key is passed" do
|
29
|
+
lambda {Page.create.add_definition(nil, {})}.should raise_error(DattsRight::AttributeKeyRequired)
|
30
|
+
end
|
27
31
|
end
|
@@ -12,6 +12,14 @@ describe DattsRight, ".add_definitions(hash)" do
|
|
12
12
|
c.add_definitions(:robot => {:object_type => "text"}, :another => {:object_type => "string"})
|
13
13
|
end
|
14
14
|
|
15
|
+
it "should accept 'flat' hashes in an array (straight from a form)" do
|
16
|
+
# [{"name"=>"A key", "description"=>"asd", "attr_key"=>"a_key"}, {"name"=>"A key", "description"=>"asd", "attr_key"=>"b_key"}]
|
17
|
+
c = Category.create
|
18
|
+
c.should_receive(:add_definition).with(:a_key, {:name=>"A key"})
|
19
|
+
c.should_receive(:add_definition).with(:b_key, {:name=>"B key"})
|
20
|
+
c.add_definitions({"name"=>"A key", "attr_key"=>"a_key"}, {"name"=>"B key", "attr_key"=>"b_key"})
|
21
|
+
end
|
22
|
+
|
15
23
|
it "should not explode if nil is passed" do
|
16
24
|
lambda {Category.create.add_definitions(nil)}.should_not raise_error(NoMethodError)
|
17
25
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe DattsRight, ".dynamic_attribute_details(key)" do
|
4
|
+
before do
|
5
|
+
reset_database
|
6
|
+
@page = Page.create
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should be aliased by datt_details" do
|
10
|
+
Page.instance_method(:dynamic_attribute_details).should == Page.instance_method(:datt_details)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should allow access to the dynamic_attribute" do
|
14
|
+
@page.add_dynamic_attribute(:price, "integer")
|
15
|
+
@page.dynamic_attribute_details(:price).class.should == DynamicAttribute
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe DattsRight, "order_by_dynamic_attribute" do
|
4
|
+
before do
|
5
|
+
reset_database
|
6
|
+
@page = Page.create
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should be aliased by order_by_datt" do
|
10
|
+
@page.add_dynamic_attribute(:price, "integer")
|
11
|
+
@page.write_dynamic_attribute :price, 2
|
12
|
+
@page.save
|
13
|
+
Page.order_by_dynamic_attribute("price", "integer").should == Page.order_by_datt("price", "integer")
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should default to asc" do
|
17
|
+
@page.add_dynamic_attribute(:price, "integer")
|
18
|
+
@page.write_dynamic_attribute :price, 2
|
19
|
+
@page.save
|
20
|
+
@page_2 = Page.create
|
21
|
+
@page_2.add_dynamic_attribute(:price, "integer")
|
22
|
+
@page_2.write_dynamic_attribute :price, 1
|
23
|
+
@page_2.save
|
24
|
+
@page_3 = Page.create
|
25
|
+
@page_3.add_dynamic_attribute(:price, "float")
|
26
|
+
@page_3.write_dynamic_attribute :price, 3.0
|
27
|
+
@page_3.save
|
28
|
+
@page_4 = Page.create
|
29
|
+
@page_4.add_dynamic_attribute(:price, "float")
|
30
|
+
@page_4.write_dynamic_attribute :price, 3.5
|
31
|
+
@page_4.save
|
32
|
+
|
33
|
+
# What if different records have price but they are of different object_type?
|
34
|
+
# page_1.read_dynamic_attribute(:price) is an "integer" and it's saved in "integer_value" column
|
35
|
+
# page_2.read_dynamic_attribute(:price) is a "float" and it's saved in "float_value"
|
36
|
+
#
|
37
|
+
# How would you work on Page.order_by_dynamic_attribute("price")?
|
38
|
+
#
|
39
|
+
# Answer 1: we could require passing of the object_type in the order method
|
40
|
+
# This way, we know which column to look at => order_by_dynamic_attribute("price", "integer")
|
41
|
+
Page.order_by_dynamic_attribute("price", "integer").should == [@page_2, @page]
|
42
|
+
Page.order_by_dynamic_attribute("price DESC", "float").should == [@page_4, @page_3]
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe ".with_dynamic_attribute_key" do
|
4
|
+
before do
|
5
|
+
reset_database
|
6
|
+
@page = Page.create
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should be aliased by .with_datt_key" do
|
10
|
+
@page.add_dynamic_attribute(:price, "float")
|
11
|
+
Page.with_dynamic_attribute_key(:price).should == Page.with_datt_key(:price)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe ".with_dynamic_attribute_type" do
|
4
|
+
before do
|
5
|
+
reset_database
|
6
|
+
@page = Page.create
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should be aliased by .with_datt_type" do
|
10
|
+
@page.add_dynamic_attribute(:price, "float")
|
11
|
+
Page.with_dynamic_attribute_type("float").should == Page.with_datt_type("float")
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe DattsRight, ".write_dynamic_attribute" do
|
4
|
+
it "should be aliased by write_datt" do
|
5
|
+
Page.instance_method(:write_dynamic_attribute).should == Page.instance_method(:write_datt)
|
6
|
+
end
|
7
|
+
end
|
data/spec/datts_right_spec.rb
CHANGED
@@ -143,75 +143,6 @@ describe DattsRight do
|
|
143
143
|
@page.read_dynamic_attribute(:price).should == 200
|
144
144
|
end
|
145
145
|
|
146
|
-
describe "order_by_dynamic_attribute" do
|
147
|
-
it "should be aliased by order_by_datt" do
|
148
|
-
@page.add_dynamic_attribute(:price, "integer")
|
149
|
-
@page.write_dynamic_attribute :price, 2
|
150
|
-
@page.save
|
151
|
-
Page.order_by_dynamic_attribute("price", "integer").should == Page.order_by_datt("price", "integer")
|
152
|
-
end
|
153
|
-
|
154
|
-
it "should default to asc" do
|
155
|
-
@page.add_dynamic_attribute(:price, "integer")
|
156
|
-
@page.write_dynamic_attribute :price, 2
|
157
|
-
@page.save
|
158
|
-
@page_2 = Page.create
|
159
|
-
@page_2.add_dynamic_attribute(:price, "integer")
|
160
|
-
@page_2.write_dynamic_attribute :price, 1
|
161
|
-
@page_2.save
|
162
|
-
@page_3 = Page.create
|
163
|
-
@page_3.add_dynamic_attribute(:price, "float")
|
164
|
-
@page_3.write_dynamic_attribute :price, 3.0
|
165
|
-
@page_3.save
|
166
|
-
@page_4 = Page.create
|
167
|
-
@page_4.add_dynamic_attribute(:price, "float")
|
168
|
-
@page_4.write_dynamic_attribute :price, 3.5
|
169
|
-
@page_4.save
|
170
|
-
|
171
|
-
# What if different records have price but they are of different object_type?
|
172
|
-
# page_1.read_dynamic_attribute(:price) is an "integer" and it's saved in "integer_value" column
|
173
|
-
# page_2.read_dynamic_attribute(:price) is a "float" and it's saved in "float_value"
|
174
|
-
#
|
175
|
-
# How would you work on Page.order_by_dynamic_attribute("price")?
|
176
|
-
#
|
177
|
-
# Answer 1: we could require passing of the object_type in the order method
|
178
|
-
# This way, we know which column to look at => order_by_dynamic_attribute("price", "integer")
|
179
|
-
Page.order_by_dynamic_attribute("price", "integer").should == [@page_2, @page]
|
180
|
-
Page.order_by_dynamic_attribute("price DESC", "float").should == [@page_4, @page_3]
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
describe ".write_dynamic_attribute" do
|
185
|
-
it "should be aliased by write_datt" do
|
186
|
-
Page.instance_method(:write_dynamic_attribute).should == Page.instance_method(:write_datt)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
describe ".with_dynamic_attribute_key" do
|
191
|
-
it "should be aliased by .with_datt_key" do
|
192
|
-
@page.add_dynamic_attribute(:price, "float")
|
193
|
-
Page.with_dynamic_attribute_key(:price).should == Page.with_datt_key(:price)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
describe ".with_dynamic_attribute_type" do
|
198
|
-
it "should be aliased by .with_datt_type" do
|
199
|
-
@page.add_dynamic_attribute(:price, "float")
|
200
|
-
Page.with_dynamic_attribute_type("float").should == Page.with_datt_type("float")
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
describe ".dynamic_attribute_details(key)" do
|
205
|
-
it "should be aliased by datt_details" do
|
206
|
-
Page.instance_method(:dynamic_attribute_details).should == Page.instance_method(:datt_details)
|
207
|
-
end
|
208
|
-
|
209
|
-
it "should allow access to the dynamic_attribute" do
|
210
|
-
@page.add_dynamic_attribute(:price, "integer")
|
211
|
-
@page.dynamic_attribute_details(:price).class.should == DynamicAttribute
|
212
|
-
end
|
213
|
-
end
|
214
|
-
|
215
146
|
describe "when loading from database" do
|
216
147
|
it "should load the dynamic attributes for use" do
|
217
148
|
@page.add_datt(:body, "text")
|
@@ -243,4 +174,8 @@ describe DattsRight do
|
|
243
174
|
@page.save
|
244
175
|
@page.body.should == "dude"
|
245
176
|
end
|
177
|
+
|
178
|
+
it "should still allow virtual attributes to work (for mass assignment)" do
|
179
|
+
lambda {Category.create.update_attributes(:definition_attributes => {"attr_key" => "some_attr", "object_type" => "string"}, :name => "hello")}.should_not raise_error(ActiveRecord::UnknownAttributeError)
|
180
|
+
end
|
246
181
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datts_right
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 47
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 24
|
10
|
+
version: 0.0.24
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ramon Tayag
|
@@ -178,13 +178,18 @@ files:
|
|
178
178
|
- spec/datts_right/create_definitions_spec.rb
|
179
179
|
- spec/datts_right/definition_spec.rb
|
180
180
|
- spec/datts_right/dynamic_attribute_definition_spec.rb
|
181
|
+
- spec/datts_right/dynamic_attribute_details_spec.rb
|
181
182
|
- spec/datts_right/find_by_dynamic_attribute_spec.rb
|
182
183
|
- spec/datts_right/inheritance_spec.rb
|
184
|
+
- spec/datts_right/order_by_dynamic_attribute_spec.rb
|
183
185
|
- spec/datts_right/read_dynamic_attribute_spec.rb
|
184
186
|
- spec/datts_right/remove_definition_spec.rb
|
185
187
|
- spec/datts_right/remove_definitions_spec.rb
|
186
188
|
- spec/datts_right/remove_dynamic_attribute_spec.rb
|
187
189
|
- spec/datts_right/where_dynamic_attribute_spec.rb
|
190
|
+
- spec/datts_right/with_dynamic_attribute_key_spec.rb
|
191
|
+
- spec/datts_right/with_dynamic_attribute_type_spec.rb
|
192
|
+
- spec/datts_right/write_dynamic_attribute_spec.rb
|
188
193
|
- spec/datts_right_spec.rb
|
189
194
|
- spec/spec_helper.rb
|
190
195
|
has_rdoc: true
|
@@ -231,12 +236,17 @@ test_files:
|
|
231
236
|
- spec/datts_right/create_definitions_spec.rb
|
232
237
|
- spec/datts_right/definition_spec.rb
|
233
238
|
- spec/datts_right/dynamic_attribute_definition_spec.rb
|
239
|
+
- spec/datts_right/dynamic_attribute_details_spec.rb
|
234
240
|
- spec/datts_right/find_by_dynamic_attribute_spec.rb
|
235
241
|
- spec/datts_right/inheritance_spec.rb
|
242
|
+
- spec/datts_right/order_by_dynamic_attribute_spec.rb
|
236
243
|
- spec/datts_right/read_dynamic_attribute_spec.rb
|
237
244
|
- spec/datts_right/remove_definition_spec.rb
|
238
245
|
- spec/datts_right/remove_definitions_spec.rb
|
239
246
|
- spec/datts_right/remove_dynamic_attribute_spec.rb
|
240
247
|
- spec/datts_right/where_dynamic_attribute_spec.rb
|
248
|
+
- spec/datts_right/with_dynamic_attribute_key_spec.rb
|
249
|
+
- spec/datts_right/with_dynamic_attribute_type_spec.rb
|
250
|
+
- spec/datts_right/write_dynamic_attribute_spec.rb
|
241
251
|
- spec/datts_right_spec.rb
|
242
252
|
- spec/spec_helper.rb
|