datts_right 0.0.12 → 0.0.13

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- datts_right (0.0.11)
4
+ datts_right (0.0.12)
5
5
  datts_right
6
6
  rails (>= 3.0.0)
7
7
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.12
1
+ 0.0.13
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.12"
8
+ s.version = "0.0.13"
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"]
@@ -35,6 +35,9 @@ Gem::Specification.new do |s|
35
35
  "lib/datts_right/page.rb",
36
36
  "lib/datts_right/query_methods.rb",
37
37
  "spec/datt_spec.rb",
38
+ "spec/datts_right/add_dynamic_attributes_spec.rb",
39
+ "spec/datts_right/attributes_spec.rb",
40
+ "spec/datts_right/remove_dynamic_attribute_spec.rb",
38
41
  "spec/datts_right_spec.rb",
39
42
  "spec/spec_helper.rb"
40
43
  ]
@@ -45,6 +48,9 @@ Gem::Specification.new do |s|
45
48
  s.summary = %q{Allows saving of dynamic attributes in your ActiveRecord model}
46
49
  s.test_files = [
47
50
  "spec/datt_spec.rb",
51
+ "spec/datts_right/add_dynamic_attributes_spec.rb",
52
+ "spec/datts_right/attributes_spec.rb",
53
+ "spec/datts_right/remove_dynamic_attribute_spec.rb",
48
54
  "spec/datts_right_spec.rb",
49
55
  "spec/spec_helper.rb"
50
56
  ]
@@ -200,6 +206,12 @@ Gem::Specification.new do |s|
200
206
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
201
207
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
202
208
  s.add_development_dependency(%q<rcov>, [">= 0"])
209
+ s.add_development_dependency(%q<autotest>, [">= 0"])
210
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
211
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
212
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
213
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
214
+ s.add_development_dependency(%q<rcov>, [">= 0"])
203
215
  else
204
216
  s.add_dependency(%q<datts_right>, [">= 0"])
205
217
  s.add_dependency(%q<rails>, [">= 3.0.0"])
@@ -348,6 +360,12 @@ Gem::Specification.new do |s|
348
360
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
349
361
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
350
362
  s.add_dependency(%q<rcov>, [">= 0"])
363
+ s.add_dependency(%q<autotest>, [">= 0"])
364
+ s.add_dependency(%q<sqlite3>, [">= 0"])
365
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
366
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
367
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
368
+ s.add_dependency(%q<rcov>, [">= 0"])
351
369
  end
352
370
  else
353
371
  s.add_dependency(%q<datts_right>, [">= 0"])
@@ -497,6 +515,12 @@ Gem::Specification.new do |s|
497
515
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
498
516
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
499
517
  s.add_dependency(%q<rcov>, [">= 0"])
518
+ s.add_dependency(%q<autotest>, [">= 0"])
519
+ s.add_dependency(%q<sqlite3>, [">= 0"])
520
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
521
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
522
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
523
+ s.add_dependency(%q<rcov>, [">= 0"])
500
524
  end
501
525
  end
502
526
 
@@ -73,6 +73,35 @@ module DattsRight
73
73
  end
74
74
  end
75
75
 
76
+ def attributes=(new_attributes, guard_protected_attributes = true)
77
+ return unless new_attributes.is_a?(Hash)
78
+ attributes = new_attributes.stringify_keys
79
+
80
+ multi_parameter_attributes = []
81
+ attributes = sanitize_for_mass_assignment(attributes) if guard_protected_attributes
82
+
83
+ attributes.each do |k, v|
84
+ if k.include?("(")
85
+ multi_parameter_attributes << [ k, v ]
86
+ else
87
+ #respond_to?(:"#{k}=") ? send(:"#{k}=", v) : raise(UnknownAttributeError, "unknown attribute: #{k}")
88
+ begin
89
+ send("#{k}=", v)
90
+ #puts "Set super #{k} to #{v}"
91
+ rescue NoMethodError => e
92
+ #puts "NoMethodError was raised: #{e}, so we now check to see if '#{k}' is dynamic_attribute"
93
+ if dynamic_attribute?(k)
94
+ write_dynamic_attribute("#{k}", v)
95
+ else
96
+ raise ActiveRecord::UnknownAttributeError, "unknown attribute: #{k}"
97
+ end
98
+ end
99
+ end
100
+ end
101
+
102
+ assign_multiparameter_attributes(multi_parameter_attributes)
103
+ end
104
+
76
105
  private
77
106
 
78
107
  # Called after validation on update so that dynamic attributes behave
@@ -0,0 +1,37 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe DattsRight, ".add_dynamic_attribute(attr_key, object_type)" do
4
+ before do
5
+ reset_database
6
+ @page = Page.create
7
+ end
8
+
9
+ it "should be aliased by add_datt" do
10
+ Page.instance_method(:add_dynamic_attribute).should == Page.instance_method(:add_datt)
11
+ end
12
+
13
+ it "should add a dynamic attribute" do
14
+ @page.add_dynamic_attribute(:rocks, "string")
15
+ @page.dynamic_attribute_details(:rocks).value.should be_nil
16
+ @page.add_dynamic_attribute(:rock, "string", "123")
17
+ @page.read_datt(:rock).should == "123"
18
+ @page.dynamic_attribute_details(:rock).value.should == "123"
19
+ end
20
+
21
+ it "should ignore when trying to add same attribute" do
22
+ @page.add_dynamic_attribute(:rocks, "string")
23
+ @page.add_dynamic_attribute(:rocks, "integer")
24
+ @page.dynamic_attribute_details(:rocks).object_type.should == "string"
25
+ end
26
+
27
+ it "should return false if the method that is being added already exists" do
28
+ @page.add_dynamic_attribute(:name, "text").should be_false
29
+ end
30
+
31
+ it "should not make any changes to the original attribute" do
32
+ @page.update_attribute(:name, "juno")
33
+ @page.add_dynamic_attribute(:name, "text")
34
+ @page.name.should == "juno"
35
+ end
36
+ end
37
+
@@ -0,0 +1,21 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe DattsRight, ".attributes=" do
4
+ before do
5
+ reset_database
6
+ @page = Page.create
7
+ end
8
+
9
+ it "should accept a mix of normal and dynamic attributes" do
10
+ @page.add_dynamic_attribute(:price, "integer", 200)
11
+ @page.attributes = {:name => "fark", :price => 300}
12
+ @page.name.should == "fark"
13
+ @page.read_datt(:price).should == 300
14
+ end
15
+
16
+ it "should raise UnknownAttributeError if the attribute doesn't exist" do
17
+ lambda {
18
+ @page.attributes = {:name => "fark", :body => "lark"}
19
+ }.should raise_error(ActiveRecord::UnknownAttributeError, "unknown attribute: body")
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe DattsRight, ".remove_dynamic_attribute(attr_key)" do
4
+ before do
5
+ reset_database
6
+ @page = Page.create
7
+ end
8
+
9
+ it "should be aliased by remove_datt" do
10
+ Page.instance_method(:remove_dynamic_attribute).should == Page.instance_method(:remove_datt)
11
+ end
12
+
13
+ it "should remove the attribute completely" do
14
+ @page.add_dynamic_attribute(:rocks, "string")
15
+ @page.remove_dynamic_attribute(:rocks)
16
+ lambda { @page.rocks }.should raise_error(NoMethodError)
17
+ end
18
+
19
+ it "should not explode if the attribute being removed isn't there" do
20
+ @page.add_dynamic_attribute(:rocks, "string")
21
+ @page.remove_dynamic_attribute(:rocks)
22
+ lambda {
23
+ @page.remove_dynamic_attribute(:rocks)
24
+ }.should_not raise_error(NoMethodError)
25
+ end
26
+ end
@@ -1,4 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ # Raised when unknown attributes are supplied via mass assignment.
3
+ #class UnknownAttributeError < NoMethodError
4
+ #end
2
5
 
3
6
  describe DattsRight do
4
7
  before do
@@ -435,4 +438,19 @@ describe DattsRight do
435
438
  @page.save
436
439
  @page.body.should == "dude"
437
440
  end
441
+
442
+ describe ".attributes=" do
443
+ it "should accept a mix of normal and dynamic attributes" do
444
+ @page.add_dynamic_attribute(:price, "integer", 200)
445
+ @page.attributes = {:name => "fark", :price => 300}
446
+ @page.name.should == "fark"
447
+ @page.read_datt(:price).should == 300
448
+ end
449
+
450
+ it "should raise UnknownAttributeError if the attribute doesn't exist" do
451
+ lambda {
452
+ @page.attributes = {:name => "fark", :body => "lark"}
453
+ }.should raise_error(ActiveRecord::UnknownAttributeError, "unknown attribute: body")
454
+ end
455
+ end
438
456
  end
data/spec/spec_helper.rb CHANGED
@@ -2,6 +2,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rubygems'
4
4
  require 'active_record'
5
+ require 'active_record/errors'
5
6
  require 'rspec'
6
7
  require 'datts_right'
7
8
  require 'datts_right/page'
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: 7
4
+ hash: 5
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 12
10
- version: 0.0.12
9
+ - 13
10
+ version: 0.0.13
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ramon Tayag
@@ -2224,6 +2224,96 @@ dependencies:
2224
2224
  name: rcov
2225
2225
  version_requirements: *id147
2226
2226
  prerelease: false
2227
+ - !ruby/object:Gem::Dependency
2228
+ type: :development
2229
+ requirement: &id148 !ruby/object:Gem::Requirement
2230
+ none: false
2231
+ requirements:
2232
+ - - ">="
2233
+ - !ruby/object:Gem::Version
2234
+ hash: 3
2235
+ segments:
2236
+ - 0
2237
+ version: "0"
2238
+ name: autotest
2239
+ version_requirements: *id148
2240
+ prerelease: false
2241
+ - !ruby/object:Gem::Dependency
2242
+ type: :development
2243
+ requirement: &id149 !ruby/object:Gem::Requirement
2244
+ none: false
2245
+ requirements:
2246
+ - - ">="
2247
+ - !ruby/object:Gem::Version
2248
+ hash: 3
2249
+ segments:
2250
+ - 0
2251
+ version: "0"
2252
+ name: sqlite3
2253
+ version_requirements: *id149
2254
+ prerelease: false
2255
+ - !ruby/object:Gem::Dependency
2256
+ type: :development
2257
+ requirement: &id150 !ruby/object:Gem::Requirement
2258
+ none: false
2259
+ requirements:
2260
+ - - ~>
2261
+ - !ruby/object:Gem::Version
2262
+ hash: 3
2263
+ segments:
2264
+ - 2
2265
+ - 3
2266
+ - 0
2267
+ version: 2.3.0
2268
+ name: rspec
2269
+ version_requirements: *id150
2270
+ prerelease: false
2271
+ - !ruby/object:Gem::Dependency
2272
+ type: :development
2273
+ requirement: &id151 !ruby/object:Gem::Requirement
2274
+ none: false
2275
+ requirements:
2276
+ - - ~>
2277
+ - !ruby/object:Gem::Version
2278
+ hash: 23
2279
+ segments:
2280
+ - 1
2281
+ - 0
2282
+ - 0
2283
+ version: 1.0.0
2284
+ name: bundler
2285
+ version_requirements: *id151
2286
+ prerelease: false
2287
+ - !ruby/object:Gem::Dependency
2288
+ type: :development
2289
+ requirement: &id152 !ruby/object:Gem::Requirement
2290
+ none: false
2291
+ requirements:
2292
+ - - ~>
2293
+ - !ruby/object:Gem::Version
2294
+ hash: 7
2295
+ segments:
2296
+ - 1
2297
+ - 5
2298
+ - 2
2299
+ version: 1.5.2
2300
+ name: jeweler
2301
+ version_requirements: *id152
2302
+ prerelease: false
2303
+ - !ruby/object:Gem::Dependency
2304
+ type: :development
2305
+ requirement: &id153 !ruby/object:Gem::Requirement
2306
+ none: false
2307
+ requirements:
2308
+ - - ">="
2309
+ - !ruby/object:Gem::Version
2310
+ hash: 3
2311
+ segments:
2312
+ - 0
2313
+ version: "0"
2314
+ name: rcov
2315
+ version_requirements: *id153
2316
+ prerelease: false
2227
2317
  description: Creates a separate table that saves all your dynamic attributes.
2228
2318
  email: ramon@tayag.net
2229
2319
  executables: []
@@ -2252,6 +2342,9 @@ files:
2252
2342
  - lib/datts_right/page.rb
2253
2343
  - lib/datts_right/query_methods.rb
2254
2344
  - spec/datt_spec.rb
2345
+ - spec/datts_right/add_dynamic_attributes_spec.rb
2346
+ - spec/datts_right/attributes_spec.rb
2347
+ - spec/datts_right/remove_dynamic_attribute_spec.rb
2255
2348
  - spec/datts_right_spec.rb
2256
2349
  - spec/spec_helper.rb
2257
2350
  has_rdoc: true
@@ -2290,5 +2383,8 @@ specification_version: 3
2290
2383
  summary: Allows saving of dynamic attributes in your ActiveRecord model
2291
2384
  test_files:
2292
2385
  - spec/datt_spec.rb
2386
+ - spec/datts_right/add_dynamic_attributes_spec.rb
2387
+ - spec/datts_right/attributes_spec.rb
2388
+ - spec/datts_right/remove_dynamic_attribute_spec.rb
2293
2389
  - spec/datts_right_spec.rb
2294
2390
  - spec/spec_helper.rb