enumerated_attribute 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|