simple_enum 1.6.9 → 2.0.0.rc1
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.
- 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
|