enumerated_attribute 0.2.7
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/.gitignore +16 -0
- data/CHANGELOG.rdoc +49 -0
- data/LICENSE +20 -0
- data/README.rdoc +555 -0
- data/Rakefile +104 -0
- data/init.rb +1 -0
- data/lib/enumerated_attribute.rb +24 -0
- data/lib/enumerated_attribute/attribute.rb +78 -0
- data/lib/enumerated_attribute/attribute/arguments.rb +48 -0
- data/lib/enumerated_attribute/attribute/attribute_descriptor.rb +51 -0
- data/lib/enumerated_attribute/attribute/class_methods.rb +42 -0
- data/lib/enumerated_attribute/attribute/instance_methods.rb +96 -0
- data/lib/enumerated_attribute/integrations.rb +33 -0
- data/lib/enumerated_attribute/integrations/active_record.rb +109 -0
- data/lib/enumerated_attribute/integrations/datamapper.rb +6 -0
- data/lib/enumerated_attribute/integrations/default.rb +25 -0
- data/lib/enumerated_attribute/integrations/object.rb +47 -0
- data/lib/enumerated_attribute/method_definition_dsl.rb +142 -0
- data/lib/enumerated_attribute/rails_helpers.rb +97 -0
- data/lib/jeffp-enumerated_attribute.rb +1 -0
- data/spec/active_record/active_record_spec.rb +363 -0
- data/spec/active_record/association_test_classes.rb +40 -0
- data/spec/active_record/associations_spec.rb +130 -0
- data/spec/active_record/cfg.rb +6 -0
- data/spec/active_record/inheritance_classes.rb +19 -0
- data/spec/active_record/inheritance_spec.rb +60 -0
- data/spec/active_record/race_car.rb +15 -0
- data/spec/active_record/single_table_inheritance_spec.rb +0 -0
- data/spec/active_record/sti_classes.rb +10 -0
- data/spec/active_record/sti_spec.rb +41 -0
- data/spec/active_record/test_in_memory.rb +71 -0
- data/spec/car.rb +67 -0
- data/spec/cfg.rb +8 -0
- data/spec/inheritance_classes.rb +16 -0
- data/spec/inheritance_spec.rb +80 -0
- data/spec/new_and_method_missing_spec.rb +73 -0
- data/spec/plural.rb +8 -0
- data/spec/poro_spec.rb +397 -0
- data/spec/rails/README +243 -0
- data/spec/rails/Rakefile +10 -0
- data/spec/rails/app/controllers/application_controller.rb +10 -0
- data/spec/rails/app/controllers/form_test_controller.rb +38 -0
- data/spec/rails/app/helpers/application_helper.rb +3 -0
- data/spec/rails/app/helpers/form_test_helper.rb +2 -0
- data/spec/rails/app/models/user.rb +9 -0
- data/spec/rails/app/views/form_test/form.html.erb +1 -0
- data/spec/rails/app/views/form_test/form_for.html.erb +10 -0
- data/spec/rails/app/views/form_test/form_tag.html.erb +9 -0
- data/spec/rails/app/views/form_test/index.html.erb +6 -0
- data/spec/rails/app/views/layouts/application.html.erb +11 -0
- data/spec/rails/config/boot.rb +110 -0
- data/spec/rails/config/database.yml +22 -0
- data/spec/rails/config/environment.rb +45 -0
- data/spec/rails/config/environments/development.rb +17 -0
- data/spec/rails/config/environments/production.rb +28 -0
- data/spec/rails/config/environments/test.rb +28 -0
- data/spec/rails/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails/config/initializers/inflections.rb +10 -0
- data/spec/rails/config/initializers/mime_types.rb +5 -0
- data/spec/rails/config/initializers/new_rails_defaults.rb +19 -0
- data/spec/rails/config/initializers/session_store.rb +15 -0
- data/spec/rails/config/locales/en.yml +5 -0
- data/spec/rails/config/routes.rb +43 -0
- data/spec/rails/db/development.sqlite3 +0 -0
- data/spec/rails/db/migrate/20090804230221_create_sessions.rb +16 -0
- data/spec/rails/db/migrate/20090804230546_create_users.rb +21 -0
- data/spec/rails/db/schema.rb +35 -0
- data/spec/rails/db/test.sqlite3 +0 -0
- data/spec/rails/public/404.html +30 -0
- data/spec/rails/public/422.html +30 -0
- data/spec/rails/public/500.html +30 -0
- data/spec/rails/public/favicon.ico +0 -0
- data/spec/rails/public/images/rails.png +0 -0
- data/spec/rails/public/index.html +275 -0
- data/spec/rails/public/javascripts/application.js +2 -0
- data/spec/rails/public/javascripts/controls.js +963 -0
- data/spec/rails/public/javascripts/dragdrop.js +973 -0
- data/spec/rails/public/javascripts/effects.js +1128 -0
- data/spec/rails/public/javascripts/prototype.js +4320 -0
- data/spec/rails/public/robots.txt +5 -0
- data/spec/rails/public/stylesheets/scaffold.css +54 -0
- data/spec/rails/script/about +4 -0
- data/spec/rails/script/autospec +6 -0
- data/spec/rails/script/console +3 -0
- data/spec/rails/script/dbconsole +3 -0
- data/spec/rails/script/destroy +3 -0
- data/spec/rails/script/generate +3 -0
- data/spec/rails/script/performance/benchmarker +3 -0
- data/spec/rails/script/performance/profiler +3 -0
- data/spec/rails/script/plugin +3 -0
- data/spec/rails/script/runner +3 -0
- data/spec/rails/script/server +3 -0
- data/spec/rails/script/spec +10 -0
- data/spec/rails/script/spec_server +9 -0
- data/spec/rails/spec/controllers/form_test_controller_spec.rb +41 -0
- data/spec/rails/spec/integrations/enum_select_spec.rb +75 -0
- data/spec/rails/spec/matchers.rb +12 -0
- data/spec/rails/spec/rcov.opts +2 -0
- data/spec/rails/spec/spec.opts +4 -0
- data/spec/rails/spec/spec_helper.rb +40 -0
- data/spec/rails/spec/views/form_test/form.html.erb_spec.rb +12 -0
- data/spec/rails/spec/views/form_test/form_for.html.erb_spec.rb +12 -0
- data/spec/rails/spec/views/form_test/form_tag.html.erb_spec.rb +12 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec.opts +4 -0
- data/spec/tractor.rb +48 -0
- metadata +182 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require 'enumerated_attribute'
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
require 'test_in_memory'
|
|
2
|
+
require 'active_record'
|
|
3
|
+
require 'enumerated_attribute'
|
|
4
|
+
require 'race_car'
|
|
5
|
+
|
|
6
|
+
describe "RaceCar" do
|
|
7
|
+
|
|
8
|
+
it "should have default labels for :gear attribute" do
|
|
9
|
+
labels_hash = {:reverse=>'Reverse', :neutral=>'Neutral', :first=>'First', :second=>'Second', :over_drive=>'Over drive'}
|
|
10
|
+
labels = ['Reverse', 'Neutral', 'First', 'Second', 'Over drive']
|
|
11
|
+
select_options = [['Reverse', 'reverse'], ['Neutral', 'neutral'], ['First', 'first'], ['Second', 'second'], ['Over drive', 'over_drive']]
|
|
12
|
+
r=RaceCar.new
|
|
13
|
+
r.gears.labels.should == labels
|
|
14
|
+
labels_hash.each do |k,v|
|
|
15
|
+
r.gears.label(k).should == v
|
|
16
|
+
end
|
|
17
|
+
r.gears.hash.should == labels_hash
|
|
18
|
+
r.gears.select_options.should == select_options
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should retrieve :gear enums through enums method" do
|
|
22
|
+
r=RaceCar.new
|
|
23
|
+
r.enums(:gear).should == r.gears
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should return a Symbol type from reader methods" do
|
|
27
|
+
r=RaceCar.new
|
|
28
|
+
r.gear.should be_an_instance_of(Symbol)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should increment and decrement :gear attribute correctly" do
|
|
32
|
+
r=RaceCar.new
|
|
33
|
+
r.gear = :neutral
|
|
34
|
+
r.gear_next.should == :first
|
|
35
|
+
r.gear_next.should == :second
|
|
36
|
+
r.gear_next.should == :over_drive
|
|
37
|
+
r.gear_next.should == :reverse
|
|
38
|
+
r.gear_next.should == :neutral
|
|
39
|
+
r.gear.should == :neutral
|
|
40
|
+
r.gear_previous.should == :reverse
|
|
41
|
+
r.gear_previous.should == :over_drive
|
|
42
|
+
r.gear_previous.should == :second
|
|
43
|
+
r.gear_previous
|
|
44
|
+
r.gear.should == :first
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "should have dynamic predicate methods for :gear attribute" do
|
|
48
|
+
r=RaceCar.new
|
|
49
|
+
r.gear = :second
|
|
50
|
+
r.gear_is_in_second?.should be_true
|
|
51
|
+
r.gear_not_in_second?.should be_false
|
|
52
|
+
r.gear_is_nil?.should be_false
|
|
53
|
+
r.gear_is_not_nil?.should be_true
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should have working dynamic predicate methods on retrieved objects" do
|
|
57
|
+
r=RaceCar.new
|
|
58
|
+
r.gear = :second
|
|
59
|
+
r.save!
|
|
60
|
+
|
|
61
|
+
s=RaceCar.find r.id
|
|
62
|
+
s.should_not be_nil
|
|
63
|
+
s.gear_is_in_second?.should be_true
|
|
64
|
+
s.gear_is_not_in_second?.should be_false
|
|
65
|
+
s.gear_is_nil?.should be_false
|
|
66
|
+
s.gear_is_not_nil?.should be_true
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should find record by enumerated column :gear attributes" do
|
|
70
|
+
r=RaceCar.new
|
|
71
|
+
r.gear = :second
|
|
72
|
+
r.name = 'special'
|
|
73
|
+
r.save!
|
|
74
|
+
|
|
75
|
+
s=RaceCar.find_by_gear_and_name(:second, 'special')
|
|
76
|
+
s.should_not be_nil
|
|
77
|
+
s.id.should == r.id
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should initialize according to enumerated attribute definitions" do
|
|
81
|
+
r = RaceCar.new
|
|
82
|
+
r.gear.should == :neutral
|
|
83
|
+
r.choke.should == :none
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should create new instance using block" do
|
|
87
|
+
r = RaceCar.new do |r|
|
|
88
|
+
r.gear = :first
|
|
89
|
+
r.choke = :medium
|
|
90
|
+
r.lights = 'on'
|
|
91
|
+
end
|
|
92
|
+
r.gear.should == :first
|
|
93
|
+
r.lights.should == 'on'
|
|
94
|
+
r.choke.should == :medium
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should initialize using parameter hash with symbol keys" do
|
|
98
|
+
r=RaceCar.new(:name=>'FastFurious', :gear=>:second, :lights=>'on', :choke=>:medium)
|
|
99
|
+
r.gear.should == :second
|
|
100
|
+
r.lights.should == 'on'
|
|
101
|
+
r.choke.should == :medium
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should initialize using parameter hash with string keys" do
|
|
105
|
+
r=RaceCar.new({'name'=>'FastFurious', 'gear'=>'second', 'lights'=>'on', 'choke'=>'medium'})
|
|
106
|
+
r.gear.should == :second
|
|
107
|
+
r.lights.should == 'on'
|
|
108
|
+
r.choke.should == :medium
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
it "should convert non-column enumerated attributes from string to symbols" do
|
|
113
|
+
r=RaceCar.new
|
|
114
|
+
r.choke = 'medium'
|
|
115
|
+
r.choke.should == :medium
|
|
116
|
+
r.save!
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should convert enumerated column attributes from string to symbols" do
|
|
120
|
+
r=RaceCar.new
|
|
121
|
+
r.gear = 'second'
|
|
122
|
+
r.gear.should == :second
|
|
123
|
+
r.save!
|
|
124
|
+
|
|
125
|
+
s=RaceCar.find r.id
|
|
126
|
+
s.gear.should == :second
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "should not convert non-enumerated column attributes from string to symbols" do
|
|
130
|
+
r=RaceCar.new
|
|
131
|
+
r.lights = 'off'
|
|
132
|
+
r.lights.should == 'off'
|
|
133
|
+
r.save!
|
|
134
|
+
|
|
135
|
+
s=RaceCar.find r.id
|
|
136
|
+
s.lights.should == 'off'
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should raise InvalidEnumeration when parametrically initialized with :gear=>:drive" do
|
|
140
|
+
r=RaceCar.new
|
|
141
|
+
lambda{ r.gear= :drive}.should raise_error(EnumeratedAttribute::InvalidEnumeration)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "should raise InvalidEnumeration when parametrically initialized with :choke=>:all" do
|
|
145
|
+
r=RaceCar.new
|
|
146
|
+
lambda{ r.choke= :all}.should raise_error(EnumeratedAttribute::InvalidEnumeration)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it "should return non-column enumerated attributes from [] method" do
|
|
150
|
+
r = RaceCar.new
|
|
151
|
+
r[:choke].should == :none
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it "should return enumerated column attributes from [] method" do
|
|
155
|
+
r=RaceCar.new
|
|
156
|
+
r.gear = :neutral
|
|
157
|
+
r[:gear].should == :neutral
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "should set non-column enumerated attributes with []= method" do
|
|
161
|
+
r=RaceCar.new
|
|
162
|
+
r[:choke] = :medium
|
|
163
|
+
r.choke.should == :medium
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "should set enumerated column attriubtes with []= method" do
|
|
167
|
+
r=RaceCar.new
|
|
168
|
+
r[:gear] = :second
|
|
169
|
+
r.gear.should == :second
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
it "should raise InvalidEnumeration when setting enumerated column attribute with []= method" do
|
|
173
|
+
r=RaceCar.new
|
|
174
|
+
lambda{ r[:gear]= :drive }.should raise_error(EnumeratedAttribute::InvalidEnumeration)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "should set and retrieve string for non-enumerated column attributes with []=" do
|
|
178
|
+
r=RaceCar.new
|
|
179
|
+
r[:lights] = 'on'
|
|
180
|
+
r.lights.should == 'on'
|
|
181
|
+
r[:lights].should == 'on'
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "should set and retrieve symbol for non-enumerated column attributes with []=" do
|
|
185
|
+
r=RaceCar.new
|
|
186
|
+
r[:lights] = :on
|
|
187
|
+
r.lights.should == :on
|
|
188
|
+
r[:lights].should == :on
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it "should raise InvalidEnumeration for invalid enum passed to attributes=" do
|
|
192
|
+
r=RaceCar.new
|
|
193
|
+
lambda { r.attributes = {:lights=>'off', :gear =>:drive} }.should raise_error(EnumeratedAttribute::InvalidEnumeration)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
=begin
|
|
197
|
+
#do not write symbols to enumerated column attributes using write_attribute
|
|
198
|
+
#do not user read_attribute to read an enumerated column attribute
|
|
199
|
+
it "should write enumeration with write_attribute" do
|
|
200
|
+
r=RaceCar.new
|
|
201
|
+
r.write_attribute(:gear, :first)
|
|
202
|
+
r.gear.should == :first
|
|
203
|
+
r.save!
|
|
204
|
+
|
|
205
|
+
s=RaceCar.find r.id
|
|
206
|
+
s.gear.should == :first
|
|
207
|
+
s.write_attribute(:gear, :second)
|
|
208
|
+
s.save!
|
|
209
|
+
|
|
210
|
+
t=RaceCar.find s.id
|
|
211
|
+
t.gear.should == :second
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "should raise error when setting enumerated column attribute to invalid enum using write_attribute" do
|
|
215
|
+
r=RaceCar.new
|
|
216
|
+
lambda { r.write_attribute(:gear, :yo) }.should raise_error
|
|
217
|
+
end
|
|
218
|
+
=end
|
|
219
|
+
|
|
220
|
+
it "should retrieve symbols for enumerations from ActiveRecord :attributes method" do
|
|
221
|
+
r=RaceCar.new
|
|
222
|
+
r.gear = :second
|
|
223
|
+
r.choke = :medium
|
|
224
|
+
r.lights = 'on'
|
|
225
|
+
r.save!
|
|
226
|
+
|
|
227
|
+
s = RaceCar.find(r.id)
|
|
228
|
+
s.attributes['gear'].should == :second
|
|
229
|
+
s.attributes['lights'].should == 'on'
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
it "should update_attribute for enumerated column attribute" do
|
|
233
|
+
r=RaceCar.new
|
|
234
|
+
r.gear = :first
|
|
235
|
+
r.save!
|
|
236
|
+
r.update_attribute(:gear, :second)
|
|
237
|
+
r.gear.should == :second
|
|
238
|
+
|
|
239
|
+
s=RaceCar.find r.id
|
|
240
|
+
s.gear.should == :second
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
it "should update_attribute for non-enumerated column attribute" do
|
|
244
|
+
r=RaceCar.new
|
|
245
|
+
r.lights = 'on'
|
|
246
|
+
r.save!
|
|
247
|
+
r.update_attribute(:lights, 'off')
|
|
248
|
+
r.lights.should == 'off'
|
|
249
|
+
|
|
250
|
+
s=RaceCar.find r.id
|
|
251
|
+
s.lights.should == 'off'
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
it "should update_attributes for both non- and enumerated column attributes" do
|
|
255
|
+
r=RaceCar.new
|
|
256
|
+
r.gear = :first
|
|
257
|
+
r.lights = 'off'
|
|
258
|
+
r.save!
|
|
259
|
+
r.update_attributes({:gear=>:second, :lights=>'on'})
|
|
260
|
+
s=RaceCar.find r.id
|
|
261
|
+
s.gear.should == :second
|
|
262
|
+
s.lights.should == 'on'
|
|
263
|
+
s.update_attributes({:gear=>'over_drive', :lights=>'off'})
|
|
264
|
+
t=RaceCar.find s.id
|
|
265
|
+
t.gear.should == :over_drive
|
|
266
|
+
t.lights.should == 'off'
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "should provide symbol values for enumerated column attributes from the :attributes method" do
|
|
270
|
+
r=RaceCar.new
|
|
271
|
+
r.lights = 'on'
|
|
272
|
+
r.save!
|
|
273
|
+
|
|
274
|
+
s=RaceCar.find r.id
|
|
275
|
+
s.attributes['gear'].should == :neutral
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
it "should provide normal values for non-enumerated column attributes from the :attributes method" do
|
|
279
|
+
r=RaceCar.new
|
|
280
|
+
r.lights = 'on'
|
|
281
|
+
r.save!
|
|
282
|
+
|
|
283
|
+
s=RaceCar.find r.id
|
|
284
|
+
s.attributes['lights'].should == 'on'
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
it "should raise InvalidEnumeration when setting invalid enumertion value with :attributes= method" do
|
|
288
|
+
r=RaceCar.new
|
|
289
|
+
lambda { r.attributes = {:gear=>:yo, :lights=>'on'} }.should raise_error(EnumeratedAttribute::InvalidEnumeration)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
it "should not set init value for enumerated column attribute saved as nil" do
|
|
293
|
+
r=RaceCar.new
|
|
294
|
+
r.gear = nil
|
|
295
|
+
r.lights = 'on'
|
|
296
|
+
r.save!
|
|
297
|
+
|
|
298
|
+
s=RaceCar.find r.id
|
|
299
|
+
s.gear.should == nil
|
|
300
|
+
s.lights.should == 'on'
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
it "should not set init value for enumerated column attributes saved as value" do
|
|
304
|
+
r=RaceCar.new
|
|
305
|
+
r.gear = :second
|
|
306
|
+
r.lights = 'all'
|
|
307
|
+
r.save!
|
|
308
|
+
|
|
309
|
+
s=RaceCar.find r.id
|
|
310
|
+
s.gear.should == :second
|
|
311
|
+
s.lights.should == 'all'
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it "should save and retrieve its name" do
|
|
315
|
+
r = RaceCar.new
|
|
316
|
+
r.name= 'Green Meanie'
|
|
317
|
+
r.save!
|
|
318
|
+
|
|
319
|
+
s = RaceCar.find r.id
|
|
320
|
+
s.should_not be_nil
|
|
321
|
+
s.name.should == 'Green Meanie'
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
it "should save and retrieve symbols for enumerated column attribute" do
|
|
325
|
+
r = RaceCar.new
|
|
326
|
+
r.gear = :over_drive
|
|
327
|
+
r.save!
|
|
328
|
+
|
|
329
|
+
s = RaceCar.find r.id
|
|
330
|
+
#s.should_not be_nil
|
|
331
|
+
s.gear.should == :over_drive
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
it "should not save values for non-column enumerated attributes" do
|
|
335
|
+
r=RaceCar.new
|
|
336
|
+
r.choke = :medium
|
|
337
|
+
r.save!
|
|
338
|
+
|
|
339
|
+
s=RaceCar.find r.id
|
|
340
|
+
s.choke.should == :none
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
it "should save string and retrieve string for non-enumerated column attributes" do
|
|
344
|
+
r =RaceCar.new
|
|
345
|
+
r.lights = 'on'
|
|
346
|
+
r.save!
|
|
347
|
+
|
|
348
|
+
s = RaceCar.find r.id
|
|
349
|
+
s.lights.should == 'on'
|
|
350
|
+
s[:lights].should == 'on'
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
it "should save symbol and retrieve string for non-enumerated column attributes" do
|
|
354
|
+
r =RaceCar.new
|
|
355
|
+
r.lights = :off
|
|
356
|
+
r.save!
|
|
357
|
+
|
|
358
|
+
s = RaceCar.find r.id
|
|
359
|
+
s.lights.should == "--- :off\n"
|
|
360
|
+
s[:lights].should == "--- :off\n"
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
class Company < ActiveRecord::Base
|
|
3
|
+
has_one :license
|
|
4
|
+
has_many :employees
|
|
5
|
+
has_many :contract_workers
|
|
6
|
+
has_many :contractors, :through=>:contract_workers
|
|
7
|
+
enum_attr :status, %w(s_corp c_corp llc), :nil=>true
|
|
8
|
+
end
|
|
9
|
+
class Employee < ActiveRecord::Base
|
|
10
|
+
belongs_to :company
|
|
11
|
+
enum_attr :status, %w(full_time part_time suspended), :nil=>true
|
|
12
|
+
end
|
|
13
|
+
class License < ActiveRecord::Base
|
|
14
|
+
belongs_to :company
|
|
15
|
+
enum_attr :status, %w(^current expired)
|
|
16
|
+
end
|
|
17
|
+
class Contractor < ActiveRecord::Base
|
|
18
|
+
has_many :contract_workers
|
|
19
|
+
has_many :companies, :through=>:contract_workers
|
|
20
|
+
enum_attr :status, %w(^available unavailable)
|
|
21
|
+
end
|
|
22
|
+
class ContractWorker < ActiveRecord::Base
|
|
23
|
+
belongs_to :company
|
|
24
|
+
belongs_to :contractor
|
|
25
|
+
enum_attr :status, %w(unfresh ^unfresh) #i don't know what to put here
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
#polymorphic
|
|
29
|
+
class Comment < ActiveRecord::Base
|
|
30
|
+
belongs_to :document, :polymorphic=>true
|
|
31
|
+
enum_attr :status, %w(^unflagged flagged)
|
|
32
|
+
end
|
|
33
|
+
class Article < ActiveRecord::Base
|
|
34
|
+
has_one :comment, :as=>:document
|
|
35
|
+
enum_attr :status, %w(^unreviewed accepted)
|
|
36
|
+
end
|
|
37
|
+
class Image < ActiveRecord::Base
|
|
38
|
+
has_one :comment, :as=>:document
|
|
39
|
+
enum_attr :status, %w(^unreviewed accepted)
|
|
40
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
require 'test_in_memory'
|
|
2
|
+
require 'enumerated_attribute'
|
|
3
|
+
require 'active_record'
|
|
4
|
+
require 'association_test_classes'
|
|
5
|
+
|
|
6
|
+
module TestVariables
|
|
7
|
+
def company_name; 'Company A'; end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "Polymorphic associations" do
|
|
11
|
+
include TestVariables
|
|
12
|
+
|
|
13
|
+
it "should retrieve enum'ed attribute for articles and images of a comment" do
|
|
14
|
+
c1 = Comment.new(:comment=>'i like it')
|
|
15
|
+
c1.document = Article.create!(:name=>'Birds of a Feather', :status=>:accepted)
|
|
16
|
+
c1.save!
|
|
17
|
+
c1.status.should == :unflagged
|
|
18
|
+
|
|
19
|
+
c2 = Comment.new(:comment=>'i hate it', :status => :flagged)
|
|
20
|
+
c2.document = Image.create!(:name=>'Martian Landscape', :status=>:unreviewed)
|
|
21
|
+
c2.save!
|
|
22
|
+
c2.status.should == :flagged
|
|
23
|
+
|
|
24
|
+
Comment.find(c1.id).document.status.should == :accepted
|
|
25
|
+
Comment.find(c2.id).document.status.should == :unreviewed
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should retrieve enum'ed attribute for comments on articles and images" do
|
|
30
|
+
a = Article.create!(:name=>'Swimming with Whales', :status=>:accepted)
|
|
31
|
+
a.create_comment(:comment=>'i like it', :status=>:unflagged)
|
|
32
|
+
a.save!
|
|
33
|
+
|
|
34
|
+
i = Image.create!(:name=>'Mountain Climbing', :status=>:unreviewed)
|
|
35
|
+
i.comment = Comment.create!(:comment=>'i do not like it', :status=>:flagged)
|
|
36
|
+
i.save!
|
|
37
|
+
|
|
38
|
+
Image.find(i.id).comment.status.should == :flagged
|
|
39
|
+
Article.find(a.id).comment.status.should == :unflagged
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "Basic Associations" do
|
|
46
|
+
include TestVariables
|
|
47
|
+
|
|
48
|
+
it "should retrieve enum'ed status for its license" do
|
|
49
|
+
c = Company.new(:status=>:llc, :name=>company_name)
|
|
50
|
+
c.save!
|
|
51
|
+
c.create_license(:status=>:current)
|
|
52
|
+
|
|
53
|
+
r = Company.find(c.id)
|
|
54
|
+
lic = r.license
|
|
55
|
+
r.status.should == :llc
|
|
56
|
+
lic.status.should == :current
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should retrieve enum'ed status for multiple employees" do
|
|
60
|
+
c=Company.new(:status=>:llc, :name=>company_name)
|
|
61
|
+
c.save!
|
|
62
|
+
c.employees.create!(:status=>:full_time, :name=>'edward')
|
|
63
|
+
c.employees.create!(:status=>:suspended, :name=>'tina')
|
|
64
|
+
|
|
65
|
+
r=Company.find(c.id)
|
|
66
|
+
r.employees.find_by_name('edward').status.should == :full_time
|
|
67
|
+
r.employees.find_by_name('tina').status.should == :suspended
|
|
68
|
+
Employee.delete_all
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should retrieve enum'ed status for multiple contractors" do
|
|
72
|
+
c=Company.new(:status=>:llc, :name=>company_name)
|
|
73
|
+
c.save!
|
|
74
|
+
c1 = Contractor.new(:status=>:available, :name=>'john')
|
|
75
|
+
c2 = Contractor.new(:status=>:unavailable, :name=>'sally')
|
|
76
|
+
c.contractors << c1
|
|
77
|
+
c.contractors << c2
|
|
78
|
+
|
|
79
|
+
r=Company.find(c.id)
|
|
80
|
+
r.contractors.find_by_name('sally').status.should == :unavailable
|
|
81
|
+
r.contractors.find_by_name('john').status.should == :available
|
|
82
|
+
Contractor.delete_all
|
|
83
|
+
ContractWorker.delete_all
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
describe "License" do
|
|
88
|
+
include TestVariables
|
|
89
|
+
it "should retrieve the status for the company" do
|
|
90
|
+
Company.delete_all
|
|
91
|
+
License.delete_all
|
|
92
|
+
lic = License.create!(:status=>:expired)
|
|
93
|
+
lic.company = Company.create!(:name=>company_name, :status=>:llc)
|
|
94
|
+
lic.save!
|
|
95
|
+
|
|
96
|
+
License.find(lic.id).company.status.should == :llc
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
describe "Contractor" do
|
|
101
|
+
include TestVariables
|
|
102
|
+
it "should retrieve enum'ed status from multiple companies" do
|
|
103
|
+
Company.delete_all
|
|
104
|
+
Contractor.delete_all
|
|
105
|
+
ContractWorker.delete_all
|
|
106
|
+
c = Contractor.create!(:name=>'jack', :status=>:available)
|
|
107
|
+
|
|
108
|
+
c1 = Company.create!(:name=>company_name, :status=>:s_corp)
|
|
109
|
+
c2 = Company.create!(:name=>'other company', :status=>:llc)
|
|
110
|
+
c.companies << c1 << c2
|
|
111
|
+
|
|
112
|
+
j = Contractor.find(c.id)
|
|
113
|
+
j.companies.find_by_name('other company').status.should == :llc
|
|
114
|
+
j.companies.find_by_name(company_name).status.should == :s_corp
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
describe "Employee" do
|
|
119
|
+
include TestVariables
|
|
120
|
+
it "should retrieve enum'ed status from the company" do
|
|
121
|
+
Company.delete_all
|
|
122
|
+
Employee.delete_all
|
|
123
|
+
e = Employee.create!(:name=>'juanita', :status=>:part_time)
|
|
124
|
+
e.company = Company.create!(:name=>company_name, :status=>:c_corp)
|
|
125
|
+
e.save!
|
|
126
|
+
|
|
127
|
+
emp = Employee.find(e.id)
|
|
128
|
+
emp.company.status.should == :c_corp
|
|
129
|
+
end
|
|
130
|
+
end
|