dynabix 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dynabix (0.3.0)
4
+ dynabix (0.3.1)
5
5
  activerecord (~> 3.0)
6
6
 
7
7
  GEM
@@ -7,6 +7,10 @@ Most recent changes are at the top
7
7
  Changes
8
8
  -------
9
9
 
10
- ### 0.3.0 - TBD ###
10
+ ### 0.3.1 - 5/7/2012 ###
11
+
12
+ * fix for activerecord not marking nested model serializers dirty
13
+
14
+ ### 0.3.0 - 5/4/2012 ###
11
15
 
12
16
  * Initial release
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.3.1
@@ -137,6 +137,8 @@ def create_reader(serializer, attr)
137
137
 
138
138
  def create_writer(serializer, attr)
139
139
  define_method("#{attr}=".to_sym) do |value|
140
+ # mark this attribute as dirty because AR will not mark serializers of nested models dirty
141
+ self.send("#{serializer}_will_change!")
140
142
  self[serializer][attr.to_sym] = value
141
143
  end
142
144
  end
@@ -132,6 +132,55 @@ class Bar < ActiveRecord::Base
132
132
  end
133
133
  end
134
134
  end
135
+ end
136
+
137
+
138
+ describe "using metadata with nested models" do
139
+
140
+ class Waterheater < ActiveRecord::Base
141
+ belongs_to :home
142
+ has_metadata :metadata, :efficiency
143
+ end
144
+
145
+ class Home < ActiveRecord::Base
146
+ has_many :waterheaters
147
+ accepts_nested_attributes_for :waterheaters
148
+ end
149
+
150
+ it "should save the child model metadata directly" do
151
+ home = Home.create(:name => "my home")
152
+ waterheater = home.waterheaters.new
153
+ waterheater.name = "system 1"
154
+ waterheater.efficiency = "90"
155
+ home.save!
156
+ home.waterheaters(reload=true).count.should == 1
157
+
158
+ waterheater = home.waterheaters.first
159
+ waterheater.name.should == "system 1"
160
+ waterheater.efficiency.should == "90"
161
+ end
162
+
163
+ it "should save the child model metadata via update_attributes" do
164
+ home = Home.create(:name => "my home")
165
+
166
+ waterheater = home.waterheaters.new
167
+ waterheater.name = "system 1"
168
+ waterheater.efficiency = "99"
169
+ home.save!
170
+ waterheater = home.waterheaters(reload=true).first
171
+ waterheater.name.should == "system 1"
172
+ waterheater.efficiency.should == "99"
173
+ home.reload
174
+
175
+ home.update_attributes({"name" => "new home name", "waterheaters_attributes" => {"0" => {"id" => waterheater.id, "efficiency" => "88"}} })
176
+
177
+ home.reload
178
+ home.name.should == "new home name"
179
+
180
+ waterheater = Waterheater.find waterheater.id
181
+ waterheater.efficiency.should == "88"
182
+ end
135
183
 
136
184
  end
185
+
137
186
  end
@@ -24,4 +24,18 @@
24
24
  t.timestamps
25
25
  end
26
26
 
27
+ create_table :homes, :force => true do |t|
28
+ t.text :name
29
+
30
+ t.timestamps
31
+ end
32
+
33
+ create_table :waterheaters, :force => true do |t|
34
+ t.text :name
35
+ t.integer :home_id
36
+ t.text :metadata
37
+
38
+ t.timestamps
39
+ end
40
+
27
41
  end
metadata CHANGED
@@ -1,184 +1,189 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dynabix
3
- version: !ruby/object:Gem::Version
4
- version: 0.3.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 17
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 1
10
+ version: 0.3.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Robert Wahler
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-05-04 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: activerecord
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '3.0'
17
+
18
+ date: 2012-05-07 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
22
21
  type: :runtime
22
+ name: activerecord
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
- requirements:
26
+ requirements:
27
27
  - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '3.0'
30
- - !ruby/object:Gem::Dependency
31
- name: bundler
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 1.0.14
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 3
32
+ - 0
33
+ version: "3.0"
34
+ requirement: *id001
35
+ - !ruby/object:Gem::Dependency
38
36
  type: :development
37
+ name: bundler
39
38
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 11
45
+ segments:
46
+ - 1
47
+ - 0
48
+ - 14
45
49
  version: 1.0.14
46
- - !ruby/object:Gem::Dependency
47
- name: rspec
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: 2.6.0
50
+ requirement: *id002
51
+ - !ruby/object:Gem::Dependency
54
52
  type: :development
53
+ name: rspec
55
54
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
55
+ version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 23
61
+ segments:
62
+ - 2
63
+ - 6
64
+ - 0
61
65
  version: 2.6.0
62
- - !ruby/object:Gem::Dependency
63
- name: aruba
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - '='
68
- - !ruby/object:Gem::Version
69
- version: 0.4.5
66
+ requirement: *id003
67
+ - !ruby/object:Gem::Dependency
70
68
  type: :development
69
+ name: aruba
71
70
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - '='
76
- - !ruby/object:Gem::Version
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - "="
75
+ - !ruby/object:Gem::Version
76
+ hash: 5
77
+ segments:
78
+ - 0
79
+ - 4
80
+ - 5
77
81
  version: 0.4.5
78
- - !ruby/object:Gem::Dependency
79
- name: rake
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: 0.8.7
82
+ requirement: *id004
83
+ - !ruby/object:Gem::Dependency
86
84
  type: :development
85
+ name: rake
87
86
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: 0.8.7
94
- - !ruby/object:Gem::Dependency
95
- name: sqlite3-ruby
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
87
+ version_requirements: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ hash: 49
93
+ segments:
94
+ - 0
95
+ - 8
96
+ - 7
101
97
  version: 0.8.7
98
+ requirement: *id005
99
+ - !ruby/object:Gem::Dependency
102
100
  type: :development
101
+ name: sqlite3-ruby
103
102
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
103
+ version_requirements: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 49
109
+ segments:
110
+ - 0
111
+ - 8
112
+ - 7
109
113
  version: 0.8.7
110
- - !ruby/object:Gem::Dependency
111
- name: yard
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: 0.7.4
114
+ requirement: *id006
115
+ - !ruby/object:Gem::Dependency
118
116
  type: :development
117
+ name: yard
119
118
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
119
+ version_requirements: &id007 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ hash: 11
125
+ segments:
126
+ - 0
127
+ - 7
128
+ - 4
125
129
  version: 0.7.4
126
- - !ruby/object:Gem::Dependency
127
- name: redcarpet
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: 1.17.2
130
+ requirement: *id007
131
+ - !ruby/object:Gem::Dependency
134
132
  type: :development
133
+ name: redcarpet
135
134
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
135
+ version_requirements: &id008 !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ hash: 87
141
+ segments:
142
+ - 1
143
+ - 17
144
+ - 2
141
145
  version: 1.17.2
142
- - !ruby/object:Gem::Dependency
143
- name: guard
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ~>
148
- - !ruby/object:Gem::Version
149
- version: '1.0'
146
+ requirement: *id008
147
+ - !ruby/object:Gem::Dependency
150
148
  type: :development
149
+ name: guard
151
150
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
151
+ version_requirements: &id009 !ruby/object:Gem::Requirement
153
152
  none: false
154
- requirements:
153
+ requirements:
155
154
  - - ~>
156
- - !ruby/object:Gem::Version
157
- version: '1.0'
158
- - !ruby/object:Gem::Dependency
159
- name: guard-rspec
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ~>
164
- - !ruby/object:Gem::Version
165
- version: '0.6'
155
+ - !ruby/object:Gem::Version
156
+ hash: 15
157
+ segments:
158
+ - 1
159
+ - 0
160
+ version: "1.0"
161
+ requirement: *id009
162
+ - !ruby/object:Gem::Dependency
166
163
  type: :development
164
+ name: guard-rspec
167
165
  prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
166
+ version_requirements: &id010 !ruby/object:Gem::Requirement
169
167
  none: false
170
- requirements:
168
+ requirements:
171
169
  - - ~>
172
- - !ruby/object:Gem::Version
173
- version: '0.6'
174
- description: Dynabix dynamically creates read/write accessors on ActiveRecord models
175
- for storing attributes in a serialized Hash
176
- email:
170
+ - !ruby/object:Gem::Version
171
+ hash: 7
172
+ segments:
173
+ - 0
174
+ - 6
175
+ version: "0.6"
176
+ requirement: *id010
177
+ description: Dynabix dynamically creates read/write accessors on ActiveRecord models for storing attributes in a serialized Hash
178
+ email:
177
179
  - robert@gearheadforhire.com
178
180
  executables: []
181
+
179
182
  extensions: []
183
+
180
184
  extra_rdoc_files: []
181
- files:
185
+
186
+ files:
182
187
  - .gemfiles
183
188
  - .gitattributes
184
189
  - .gitignore
@@ -204,36 +209,44 @@ files:
204
209
  - spec/spec_helper.rb
205
210
  homepage: http://rubygems.org/gems/dynabix
206
211
  licenses: []
212
+
207
213
  post_install_message:
208
- rdoc_options:
214
+ rdoc_options:
209
215
  - --title
210
216
  - Dynabix Documentation
211
217
  - --main
212
218
  - README.markdown
213
219
  - --line-numbers
214
220
  - --inline-source
215
- require_paths:
221
+ require_paths:
216
222
  - lib
217
- required_ruby_version: !ruby/object:Gem::Requirement
223
+ required_ruby_version: !ruby/object:Gem::Requirement
218
224
  none: false
219
- requirements:
220
- - - ! '>='
221
- - !ruby/object:Gem::Version
222
- version: '0'
223
- segments:
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ hash: 3
229
+ segments:
224
230
  - 0
225
- hash: 575564662145783656
226
- required_rubygems_version: !ruby/object:Gem::Requirement
231
+ version: "0"
232
+ required_rubygems_version: !ruby/object:Gem::Requirement
227
233
  none: false
228
- requirements:
229
- - - ! '>='
230
- - !ruby/object:Gem::Version
234
+ requirements:
235
+ - - ">="
236
+ - !ruby/object:Gem::Version
237
+ hash: 23
238
+ segments:
239
+ - 1
240
+ - 3
241
+ - 6
231
242
  version: 1.3.6
232
243
  requirements: []
244
+
233
245
  rubyforge_project: dynabix
234
246
  rubygems_version: 1.8.21
235
247
  signing_key:
236
248
  specification_version: 3
237
249
  summary: An ActiveRecord 3.x Ruby gem for attribute serialization
238
250
  test_files: []
251
+
239
252
  has_rdoc: