simple_enum 1.6.9 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/LICENSE +1 -1
- data/README.md +248 -0
- data/Rakefile +4 -21
- data/lib/simple_enum/accessors/accessor.rb +55 -0
- data/lib/simple_enum/accessors/ignore_accessor.rb +11 -0
- data/lib/simple_enum/accessors/whiny_accessor.rb +12 -0
- data/lib/simple_enum/accessors.rb +18 -0
- data/lib/simple_enum/attribute.rb +77 -0
- data/lib/simple_enum/enum.rb +37 -0
- data/lib/simple_enum/hasher.rb +26 -0
- data/lib/simple_enum/mongoid.rb +11 -15
- data/lib/simple_enum/translation.rb +17 -0
- data/lib/simple_enum/version.rb +2 -2
- data/lib/simple_enum.rb +19 -276
- data/simple_enum.gemspec +9 -9
- data/spec/simple_enum/accessors_spec.rb +212 -0
- data/spec/simple_enum/attribute_spec.rb +208 -0
- data/spec/simple_enum/enum_spec.rb +96 -0
- data/spec/simple_enum/hasher_spec.rb +63 -0
- data/spec/simple_enum/mongoid_spec.rb +44 -0
- data/spec/simple_enum/translation_spec.rb +66 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/support/active_record_support.rb +23 -0
- data/spec/support/i18n_support.rb +12 -0
- data/spec/support/model_support.rb +47 -0
- data/spec/support/mongoid_support.rb +21 -0
- metadata +50 -56
- data/README.rdoc +0 -293
- data/lib/simple_enum/enum_hash.rb +0 -64
- data/lib/simple_enum/validation.rb +0 -58
- data/locales/en.yml +0 -10
- data/test/array_conversions_test.rb +0 -21
- data/test/class_methods_test.rb +0 -114
- data/test/dirty_attributes_test.rb +0 -37
- data/test/enum_hash_test.rb +0 -73
- data/test/finders_test.rb +0 -45
- data/test/locales.yml +0 -25
- data/test/mongoid_test.rb +0 -66
- data/test/object_backed_test.rb +0 -61
- data/test/orm/active_record.rb +0 -114
- data/test/orm/common.rb +0 -23
- data/test/orm/mongoid.rb +0 -114
- data/test/poro_test.rb +0 -20
- data/test/prefixes_test.rb +0 -36
- data/test/simple_enum_test.rb +0 -314
- data/test/test_helper.rb +0 -40
- data/test/without_shortcuts_test.rb +0 -39
data/test/prefixes_test.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class PrefixesTest < MiniTest::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
reload_db
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_that_gender_is_prefixed_in_getters_and_setters
|
9
|
-
with_prefix = anonymous_dummy do
|
10
|
-
as_enum :gender, [:male, :female], :prefix => true
|
11
|
-
end
|
12
|
-
|
13
|
-
d = with_prefix.new :gender => :male
|
14
|
-
assert_respond_to d, :gender_male?
|
15
|
-
assert_respond_to d, :gender_male!
|
16
|
-
assert_respond_to d, :gender_female?
|
17
|
-
assert_respond_to d, :gender_female!
|
18
|
-
|
19
|
-
# just ensure that it DOES NOT RESPOND TO good old male!
|
20
|
-
assert !d.respond_to?(:male!)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_that_custom_prefix_is_applied_to_getters_and_setters
|
24
|
-
with_string_prefix = anonymous_dummy do
|
25
|
-
as_enum :gender, [:male, :female], :prefix => 'didum'
|
26
|
-
end
|
27
|
-
|
28
|
-
d = with_string_prefix.new :gender => :female
|
29
|
-
assert_respond_to d, :didum_female?
|
30
|
-
assert_respond_to d, :didum_female!
|
31
|
-
|
32
|
-
# just check wheter the results are still correct :)
|
33
|
-
assert d.didum_female?
|
34
|
-
assert !d.didum_male?
|
35
|
-
end
|
36
|
-
end
|
data/test/simple_enum_test.rb
DELETED
@@ -1,314 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class SimpleEnumTest < MiniTest::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
reload_db
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_reading_public_enum_definitions
|
9
|
-
assert_equal "gender_cd", Dummy.enum_definitions[:gender][:column]
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_enum_definitions_only_available_from_class
|
13
|
-
assert_raises(NoMethodError) { Dummy.new.enum_definitions }
|
14
|
-
assert_raises(NoMethodError) { Dummy.new.enum_definitions= {} }
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_enum_definitions_local_to_model
|
18
|
-
assert_equal nil, Computer.enum_definitions[:gender]
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_getting_the_correct_integer_values_when_setting_to_symbol
|
22
|
-
d = Dummy.new
|
23
|
-
d.gender = :male
|
24
|
-
assert_equal(0, d.gender_cd)
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_getting_the_correct_symbold_when_setting_the_integer_value
|
28
|
-
d = Dummy.new
|
29
|
-
d.gender_cd = 1
|
30
|
-
assert_equal(:female, d.gender)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_that_checker_returns_correct_result
|
34
|
-
d = Dummy.new
|
35
|
-
d.gender = :male
|
36
|
-
assert_equal(true, d.male?)
|
37
|
-
assert_equal(false, d.female?)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_setting_value_as_key
|
41
|
-
d = Dummy.new
|
42
|
-
d.gender = 1
|
43
|
-
assert_equal(:female, d.gender)
|
44
|
-
assert_equal(1, d.gender_cd)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_setting_value_when_it_is_not_a_string_and_strings_is_true
|
48
|
-
d = Dummy.new
|
49
|
-
d.numeric = 100
|
50
|
-
assert_equal(:"100", d.numeric)
|
51
|
-
assert_equal("100", d.numeric_cd)
|
52
|
-
d.numeric = 3.14
|
53
|
-
assert_equal(:"3.14", d.numeric)
|
54
|
-
assert_equal("3.14", d.numeric_cd)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_setting_value_to_nil_when_enum_has_nil_as_symbol_and_strings_is_true
|
58
|
-
d = Dummy.new
|
59
|
-
d.nilish = nil
|
60
|
-
assert_equal(nil, d.nilish)
|
61
|
-
assert_equal(nil, d.nilish_cd)
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_setting_value_as_key_in_constructor
|
65
|
-
d = Dummy.new :gender => 1
|
66
|
-
assert_equal(:female, d.gender)
|
67
|
-
assert_equal(1, d.gender_cd)
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_enum_comparisons
|
71
|
-
d = Dummy.new
|
72
|
-
assert_equal(false, d.gender?)
|
73
|
-
d.gender = :male
|
74
|
-
assert_equal(true, d.gender?)
|
75
|
-
assert_equal(true, d.gender?(:male))
|
76
|
-
assert_equal(false, d.gender?(:female))
|
77
|
-
assert_equal(false, d.gender?(:whot))
|
78
|
-
d.gender = :female
|
79
|
-
assert_equal(true, d.gender?(:female))
|
80
|
-
assert_equal(false, d.gender?(:male))
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_enum_comparisons_with_strings
|
84
|
-
d = Dummy.new(:gender => :male)
|
85
|
-
assert_equal(true, d.gender?("male"))
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_enum_comparisons_with_nil_always_returns_false
|
89
|
-
d = Dummy.new(:gender => :male)
|
90
|
-
assert_equal(false, d.gender?(nil))
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_getting_symbol_when_data_is_fetched_from_datasource
|
94
|
-
dummies = Dummy.all
|
95
|
-
|
96
|
-
# Anna
|
97
|
-
assert_equal(:female, dummies[0].gender)
|
98
|
-
assert_equal(:alpha, dummies[0].word)
|
99
|
-
assert_equal(:foo, dummies[0].didum)
|
100
|
-
|
101
|
-
# Bella
|
102
|
-
assert_equal(true, dummies[1].female?)
|
103
|
-
assert_equal(true, dummies[1].beta?)
|
104
|
-
assert_equal(:bar, dummies[1].didum)
|
105
|
-
|
106
|
-
# Chris
|
107
|
-
assert_equal(false, dummies[2].female?)
|
108
|
-
assert_equal(:gamma, dummies[2].word)
|
109
|
-
assert_equal(:foobar, dummies[2].didum)
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_creating_and_saving_a_new_datasource_object_then_test_symbols
|
113
|
-
d = Dummy.create({ :name => 'Dummy', :gender_cd => 0 }) # :gender => male
|
114
|
-
assert_equal(true, d.male?)
|
115
|
-
|
116
|
-
# change :gender_cd to 1
|
117
|
-
d.female!
|
118
|
-
d.save!
|
119
|
-
assert_equal(true, Dummy.find(d.id).female?)
|
120
|
-
end
|
121
|
-
|
122
|
-
def test_validation_if
|
123
|
-
validate_if_comp = extend_computer do
|
124
|
-
validates_as_enum :manufacturer, :if => lambda { |computer|
|
125
|
-
computer.name == "Fred"
|
126
|
-
}
|
127
|
-
end
|
128
|
-
|
129
|
-
computer = validate_if_comp.new(:manufacturer_cd => 48328432)
|
130
|
-
|
131
|
-
computer.name = nil
|
132
|
-
assert_equal(true, computer.save)
|
133
|
-
|
134
|
-
computer.name = "Fred"
|
135
|
-
assert_equal(false, computer.save)
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_validation_unless
|
139
|
-
validate_unless_comp = extend_computer do
|
140
|
-
validates_as_enum :manufacturer, :unless => lambda { |computer|
|
141
|
-
computer.name == "Unless"
|
142
|
-
}
|
143
|
-
end
|
144
|
-
|
145
|
-
computer = validate_unless_comp.new(:manufacturer_cd => 48328432)
|
146
|
-
|
147
|
-
computer.name = nil
|
148
|
-
assert_equal(false, computer.save)
|
149
|
-
assert_equal(1, computer.errors[:manufacturer].size)
|
150
|
-
|
151
|
-
computer.name = "Unless"
|
152
|
-
assert_equal(true, computer.save)
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_validation_on_update
|
156
|
-
validate_update_comp = extend_computer do
|
157
|
-
validates_as_enum :manufacturer, :on => :update
|
158
|
-
end
|
159
|
-
|
160
|
-
computer = validate_update_comp.new(:manufacturer_cd => nil)
|
161
|
-
assert_equal(true, computer.save)
|
162
|
-
|
163
|
-
computer.name = 'Something else'
|
164
|
-
assert_equal(false, computer.save)
|
165
|
-
assert_equal(1, computer.errors[:manufacturer].size)
|
166
|
-
end
|
167
|
-
|
168
|
-
def test_validation_on_create
|
169
|
-
validate_create_comp = extend_computer do
|
170
|
-
validates_as_enum :manufacturer, :on => :create
|
171
|
-
end
|
172
|
-
|
173
|
-
computer = validate_create_comp.new(:manufacturer_cd => nil)
|
174
|
-
assert_equal(false, computer.save)
|
175
|
-
assert_equal(1, computer.errors[:manufacturer].size)
|
176
|
-
|
177
|
-
computer.manufacturer = :apple
|
178
|
-
assert_equal(true, computer.save)
|
179
|
-
|
180
|
-
computer.manufacturer = nil
|
181
|
-
assert_equal(true, computer.save)
|
182
|
-
end
|
183
|
-
|
184
|
-
def test_validation_allow_nil
|
185
|
-
validate_nil_comp = extend_computer do
|
186
|
-
validates_as_enum :manufacturer, :allow_nil => true
|
187
|
-
end
|
188
|
-
|
189
|
-
computer = validate_nil_comp.new(:manufacturer_cd => nil)
|
190
|
-
assert_equal(true, computer.save)
|
191
|
-
|
192
|
-
computer.manufacturer = :apple
|
193
|
-
assert_equal(true, computer.save)
|
194
|
-
|
195
|
-
computer.manufacturer_cd = 84321483219
|
196
|
-
assert_equal(false, computer.save)
|
197
|
-
assert_equal(1, computer.errors[:manufacturer].size)
|
198
|
-
end
|
199
|
-
|
200
|
-
def test_default_error_messages_using_translations
|
201
|
-
validated_comp = extend_computer("ValidatedComputer") do
|
202
|
-
validates_as_enum :manufacturer
|
203
|
-
validates_as_enum :operating_system
|
204
|
-
end
|
205
|
-
|
206
|
-
computer = validated_comp.new
|
207
|
-
assert !computer.save, "save should return false"
|
208
|
-
assert_equal "invalid option supplied", computer.errors[:manufacturer].first
|
209
|
-
assert_equal "y u no os?", computer.errors[:operating_system].first
|
210
|
-
end
|
211
|
-
|
212
|
-
def test_allow_setting_custom_error_via_message
|
213
|
-
validate_msg_comp = extend_computer do
|
214
|
-
validates_as_enum :manufacturer, :message => "invalid manufacturer"
|
215
|
-
end
|
216
|
-
|
217
|
-
computer = validate_msg_comp.new
|
218
|
-
assert !computer.valid?, "valid? should return false"
|
219
|
-
assert_equal "invalid manufacturer", computer.errors[:manufacturer].first
|
220
|
-
end
|
221
|
-
|
222
|
-
def test_validator
|
223
|
-
validator_comp = extend_computer do
|
224
|
-
validates :manufacturer, :operating_system, :as_enum => true
|
225
|
-
end
|
226
|
-
|
227
|
-
computer = validator_comp.new
|
228
|
-
assert !computer.save, "save should return false"
|
229
|
-
assert_equal(1, computer.errors[:manufacturer].size)
|
230
|
-
assert_equal(1, computer.errors[:operating_system].size)
|
231
|
-
|
232
|
-
computer.manufacturer_cd = 84321483219
|
233
|
-
assert !computer.save, "save should return false"
|
234
|
-
assert_equal(1, computer.errors[:manufacturer].size)
|
235
|
-
|
236
|
-
computer.manufacturer_cd = 0
|
237
|
-
computer.operating_system_cd = 0
|
238
|
-
assert_equal(true, computer.save)
|
239
|
-
end
|
240
|
-
|
241
|
-
def test_validator_allows_symbols_as_raw_colum_value_if_strings_is_true
|
242
|
-
validated_dummy = extend_dummy do
|
243
|
-
validates_as_enum :role
|
244
|
-
end
|
245
|
-
|
246
|
-
d = validated_dummy.new :role_cd => :admin
|
247
|
-
assert d.valid?, "valid? should return true"
|
248
|
-
end
|
249
|
-
|
250
|
-
def test_that_argumenterror_is_raised_if_invalid_symbol_is_passed
|
251
|
-
assert_raises ArgumentError do
|
252
|
-
Dummy.new :gender => :foo
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
def test_that_no_argumenterror_is_raised_if_whiny_is_false
|
257
|
-
not_whiny = Class.new(Dummy) do
|
258
|
-
as_enum :gender, [:male, :female], :whiny => false
|
259
|
-
end
|
260
|
-
|
261
|
-
d = not_whiny.new :gender => :foo
|
262
|
-
assert_nil(d.gender)
|
263
|
-
d.gender = ''
|
264
|
-
assert_nil(d.gender)
|
265
|
-
end
|
266
|
-
|
267
|
-
def test_that_setting_to_nil_works_if_whiny_is_true_or_false
|
268
|
-
d = Dummy.new :gender => :male
|
269
|
-
assert_equal(:male, d.gender)
|
270
|
-
d.gender = nil
|
271
|
-
assert_nil(d.gender)
|
272
|
-
d.gender = ''
|
273
|
-
assert_nil(d.gender)
|
274
|
-
|
275
|
-
not_whiny_again = Class.new(Dummy) do
|
276
|
-
as_enum :gender, [:male, :female], :whiny => false
|
277
|
-
end
|
278
|
-
|
279
|
-
d = not_whiny_again.new :gender => :male
|
280
|
-
assert_equal(:male, d.gender)
|
281
|
-
d.gender = nil
|
282
|
-
assert_nil(d.gender)
|
283
|
-
d.gender = ''
|
284
|
-
assert_nil(d.gender)
|
285
|
-
end
|
286
|
-
|
287
|
-
def test_argument_error_is_raised_when_using_enum_name_eq_column_name
|
288
|
-
begin
|
289
|
-
invalid_dummy = anonymous_dummy do
|
290
|
-
as_enum :gender_cd, [:male, :female], :column => "gender_cd"
|
291
|
-
end
|
292
|
-
assert false, "no error raised"
|
293
|
-
rescue ArgumentError => e
|
294
|
-
assert e.to_s =~ /use different names for/, "invalid ArgumentError raised"
|
295
|
-
end
|
296
|
-
end
|
297
|
-
|
298
|
-
def test_human_name_for_nil_value
|
299
|
-
d = Dummy.new
|
300
|
-
assert_nil(d.human_gender)
|
301
|
-
end
|
302
|
-
|
303
|
-
def test_strings_option
|
304
|
-
d = Dummy.new :role => :anon
|
305
|
-
|
306
|
-
assert_equal :anon, d.role
|
307
|
-
assert_equal 'anon', d.role_cd
|
308
|
-
|
309
|
-
d.role = :admin
|
310
|
-
|
311
|
-
assert_equal :admin, d.role
|
312
|
-
assert_equal 'admin', d.role_cd
|
313
|
-
end
|
314
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# Setup environment for both tests and IRB interactive console
|
2
|
-
#
|
3
|
-
$KCODE = 'u' if RUBY_VERSION =~ /^1\.8/ # to make parameterize work...
|
4
|
-
|
5
|
-
require 'rubygems'
|
6
|
-
require 'bundler/setup'
|
7
|
-
|
8
|
-
require 'minitest/autorun'
|
9
|
-
require 'active_support'
|
10
|
-
require 'active_support/version'
|
11
|
-
|
12
|
-
# setup fake rails env
|
13
|
-
ROOT = File.join(File.dirname(__FILE__), '..')
|
14
|
-
RAILS_ROOT = ROOT
|
15
|
-
RAILS_ENV = 'test'
|
16
|
-
|
17
|
-
# load orms
|
18
|
-
ORM = ENV['SIMPLE_ENUM_TEST_ORM'] || 'active_record'
|
19
|
-
|
20
|
-
def mongoid?; return ORM == 'mongoid';end
|
21
|
-
def activerecord?; return ORM == 'active_record';end
|
22
|
-
|
23
|
-
# load database implemntation
|
24
|
-
require ORM
|
25
|
-
|
26
|
-
# load simple enum AFTER ORM
|
27
|
-
require 'simple_enum'
|
28
|
-
|
29
|
-
# load ORM specific stuff
|
30
|
-
require 'orm/common'
|
31
|
-
require "orm/#{ORM}"
|
32
|
-
|
33
|
-
# Add locales
|
34
|
-
I18n.load_path << File.join(File.dirname(__FILE__), 'locales.yml')
|
35
|
-
|
36
|
-
# setup db
|
37
|
-
setup_db
|
38
|
-
|
39
|
-
# Test environment info
|
40
|
-
puts "Testing against: activesupport-#{ActiveSupport::VERSION::STRING}, #{ORM.to_s}-#{orm_version}"
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class WithoutShortcutsTest < MiniTest::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
reload_db
|
6
|
-
|
7
|
-
named_dummy('SlimDummy') do
|
8
|
-
as_enum :gender, [:male, :female], :slim => true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_that_no_shortcut_methods_are_generated_if_slime_is_true
|
13
|
-
jane = SlimDummy.new
|
14
|
-
jane.gender = :female
|
15
|
-
|
16
|
-
# ensure that other methods still work as expected
|
17
|
-
assert_equal 1, jane.gender_cd
|
18
|
-
assert_equal :female, jane.gender
|
19
|
-
|
20
|
-
# then check for availability of shortcut methods
|
21
|
-
assert !jane.respond_to?(:male!), "should not respond_to <male!>"
|
22
|
-
assert !jane.respond_to?(:female?), "should not respond_to <female?>"
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_that_saving_and_loading_from_datasource_works_even_if_slim_is_true
|
26
|
-
anna = SlimDummy.where(:name => 'Anna').first
|
27
|
-
|
28
|
-
assert_equal 1, anna.gender_cd
|
29
|
-
assert_equal :female, anna.gender
|
30
|
-
|
31
|
-
# change anna, save + reload
|
32
|
-
anna.gender = :male
|
33
|
-
anna.save!
|
34
|
-
anna.reload
|
35
|
-
|
36
|
-
assert_equal 0, anna.gender_cd
|
37
|
-
assert_equal :male, anna.gender
|
38
|
-
end
|
39
|
-
end
|