dynabix 0.3.0 → 0.3.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.
- data/Gemfile.lock +1 -1
- data/HISTORY.markdown +5 -1
- data/VERSION +1 -1
- data/lib/dynabix/metadata.rb +2 -0
- data/spec/dynabix/metadata_spec.rb +49 -0
- data/spec/schema.rb +14 -0
- metadata +163 -150
data/Gemfile.lock
CHANGED
data/HISTORY.markdown
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.1
|
data/lib/dynabix/metadata.rb
CHANGED
@@ -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
|
data/spec/schema.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
-
|
47
|
-
|
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
|
-
|
63
|
-
|
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
|
-
|
79
|
-
|
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
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
111
|
-
|
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
|
-
|
127
|
-
|
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
|
-
|
143
|
-
|
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
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
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
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
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
|
-
|
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
|
-
|
223
|
-
segments:
|
225
|
+
requirements:
|
226
|
+
- - ">="
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
hash: 3
|
229
|
+
segments:
|
224
230
|
- 0
|
225
|
-
|
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:
|