lwe-simple_enum 0.3.0
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 +2 -0
- data/LICENCE +20 -0
- data/README.rdoc +183 -0
- data/Rakefile +68 -0
- data/VERSION.yml +4 -0
- data/init.rb +1 -0
- data/lib/simple_enum.rb +233 -0
- data/lib/simple_enum/array_support.rb +15 -0
- data/lib/simple_enum/enum_hash.rb +36 -0
- data/lib/simple_enum/object_support.rb +37 -0
- data/lib/simple_enum/validation.rb +37 -0
- data/lib/simple_enum/version.rb +14 -0
- data/locales/en.yml +6 -0
- data/simple_enum.gemspec +72 -0
- data/test/array_conversions_test.rb +22 -0
- data/test/class_methods_test.rb +108 -0
- data/test/enum_hash_test.rb +33 -0
- data/test/finders_test.rb +41 -0
- data/test/models.rb +8 -0
- data/test/object_backed_test.rb +67 -0
- data/test/object_support_test.rb +27 -0
- data/test/prefixes_test.rb +38 -0
- data/test/se_array_support_test.rb +32 -0
- data/test/simple_enum_test.rb +97 -0
- data/test/test_helper.rb +66 -0
- data/test/without_shortcuts_test.rb +40 -0
- metadata +89 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class ObjectSupportTest < ActiveSupport::TestCase
|
|
2
|
+
|
|
3
|
+
test "ensure that symbols stay symbols" do
|
|
4
|
+
assert_same :sym, :sym.to_enum_sym
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
test "ensure that strings are just converted to symbols, whatever they look like" do
|
|
8
|
+
assert_same :sym, 'sym'.to_enum_sym
|
|
9
|
+
assert_same :OtherSym, 'OtherSym'.to_enum_sym
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "convert custom class to symbol, by providing attr_accessor :name" do
|
|
13
|
+
has_name = Class.new do
|
|
14
|
+
attr_accessor :name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
named = has_name.new
|
|
18
|
+
named.name = 'sym'
|
|
19
|
+
|
|
20
|
+
assert_same :sym, named.to_enum_sym
|
|
21
|
+
|
|
22
|
+
another_named = has_name.new
|
|
23
|
+
another_named.name = 'Contains Spaces?'
|
|
24
|
+
|
|
25
|
+
assert_same :contains_spaces, another_named.to_enum_sym
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class PrefixesTest < ActiveSupport::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
reload_db
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "set :prefix => true and ensure that 'gender' is prefixed to <symbol>? and <symbol>! methods" do
|
|
9
|
+
with_prefix = Class.new(ActiveRecord::Base) do
|
|
10
|
+
set_table_name 'dummies'
|
|
11
|
+
as_enum :gender, [:male, :female], :prefix => true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
d = with_prefix.new :gender => :male
|
|
15
|
+
assert_respond_to d, :gender_male?
|
|
16
|
+
assert_respond_to d, :gender_male!
|
|
17
|
+
assert_respond_to d, :gender_female?
|
|
18
|
+
assert_respond_to d, :gender_female!
|
|
19
|
+
|
|
20
|
+
# just ensure that it DOES NOT RESPOND TO good old male!
|
|
21
|
+
assert !d.respond_to?(:male!)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
test "set :prefix => 'didum' and ensure that 'didum' is prefix to <symbol>? and <symbol>! methods" do
|
|
25
|
+
with_string_prefix = Class.new(ActiveRecord::Base) do
|
|
26
|
+
set_table_name 'dummies'
|
|
27
|
+
as_enum :gender, [:male, :female], :prefix => 'didum'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
d = with_string_prefix.new :gender => :female
|
|
31
|
+
assert_respond_to d, :didum_female?
|
|
32
|
+
assert_respond_to d, :didum_female!
|
|
33
|
+
|
|
34
|
+
# just check wheter the results are still correct :)
|
|
35
|
+
assert d.didum_female?
|
|
36
|
+
assert !d.didum_male?
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
class SeArraySupportTest < ActiveSupport::TestCase
|
|
2
|
+
test "that when simple array is merge to hash, array values are the keys and indicies are values" do
|
|
3
|
+
a = [:a, :b, :c, :d]
|
|
4
|
+
h = a.to_hash_magic
|
|
5
|
+
|
|
6
|
+
assert_same 0, h[:a]
|
|
7
|
+
assert_same 1, h[:b]
|
|
8
|
+
assert_same 2, h[:c]
|
|
9
|
+
assert_same 3, h[:d]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
test "that an already correct looking array is converted to a hash" do
|
|
13
|
+
a = [[:a, 5], [:b, 10]]
|
|
14
|
+
h = a.to_hash_magic
|
|
15
|
+
|
|
16
|
+
assert_same 5, h[:a]
|
|
17
|
+
assert_same 10, h[:b]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "that an array of ActiveRecords are converted to <obj> => obj.id" do
|
|
21
|
+
reload_db :genders => true # reload db
|
|
22
|
+
a = Gender.find(:all, :order => :id)
|
|
23
|
+
|
|
24
|
+
male = Gender.find(0)
|
|
25
|
+
female = Gender.find(1)
|
|
26
|
+
|
|
27
|
+
h = a.to_hash_magic
|
|
28
|
+
|
|
29
|
+
assert_same 0, h[male]
|
|
30
|
+
assert_same 1, h[female]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class SimpleEnumTest < ActiveSupport::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
reload_db
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
test "get the correct integer values when setting to symbol" do
|
|
9
|
+
d = Dummy.new
|
|
10
|
+
d.gender = :male
|
|
11
|
+
assert_equal(0, d.gender_cd)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
test "get the correct symbol when setting the integer value" do
|
|
15
|
+
d = Dummy.new
|
|
16
|
+
d.gender_cd = 1
|
|
17
|
+
assert_equal(:female, d.gender)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
test "verify that <symbol>? returns correct result" do
|
|
21
|
+
d = Dummy.new
|
|
22
|
+
d.gender = :male
|
|
23
|
+
assert_equal(true, d.male?)
|
|
24
|
+
assert_equal(false, d.female?)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
test "get symbol when rows are fetched from db" do
|
|
28
|
+
# Anna
|
|
29
|
+
assert_equal(:female, Dummy.find(1).gender)
|
|
30
|
+
assert_equal(:alpha, Dummy.find(1).word)
|
|
31
|
+
assert_equal(:foo, Dummy.find(1).didum)
|
|
32
|
+
|
|
33
|
+
# Bella
|
|
34
|
+
assert_equal(true, Dummy.find(2).female?)
|
|
35
|
+
assert_equal(true, Dummy.find(2).beta?)
|
|
36
|
+
assert_equal(:bar, Dummy.find(2).didum)
|
|
37
|
+
|
|
38
|
+
# Chris
|
|
39
|
+
assert_equal(false, Dummy.find(3).female?)
|
|
40
|
+
assert_equal(:gamma, Dummy.find(3).word)
|
|
41
|
+
assert_equal(:foobar, Dummy.find(3).didum)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
test "create and save new record then test symbols" do
|
|
45
|
+
d = Dummy.create({ :name => 'Dummy', :gender_cd => 0 }) # :gender => male
|
|
46
|
+
assert_equal(true, d.male?)
|
|
47
|
+
|
|
48
|
+
# change :gender_cd to 1
|
|
49
|
+
d.female!
|
|
50
|
+
d.save!
|
|
51
|
+
assert_equal(true, Dummy.find(d.id).female?)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
test "add validation and test validations" do
|
|
55
|
+
Dummy.class_eval do; validates_as_enum :gender; end
|
|
56
|
+
#with_validation = Class.new(Dummy) do
|
|
57
|
+
# validates_as_enum :gender
|
|
58
|
+
#end
|
|
59
|
+
|
|
60
|
+
d = Dummy.new :gender_cd => 5 # invalid number :)
|
|
61
|
+
assert_equal(false, d.save)
|
|
62
|
+
d.gender_cd = 1
|
|
63
|
+
assert_equal(true, d.save)
|
|
64
|
+
assert_equal(:female, d.gender)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
test "raises ArgumentError if invalid symbol is passed" do
|
|
68
|
+
assert_raise ArgumentError do
|
|
69
|
+
Dummy.new :gender => :foo
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
test "raises NO ArgumentError if :whiny => false is defined" do
|
|
74
|
+
not_whiny = Class.new(Dummy) do
|
|
75
|
+
as_enum :gender, [:male, :female], :whiny => false
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
d = not_whiny.new :gender => :foo
|
|
79
|
+
assert_nil(d.gender)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
test "ensure that setting to 'nil' works if :whiny => true and :whiny => false" do
|
|
83
|
+
d = Dummy.new :gender => :male
|
|
84
|
+
assert_equal(:male, d.gender)
|
|
85
|
+
d.gender = nil
|
|
86
|
+
assert_nil(d.gender)
|
|
87
|
+
|
|
88
|
+
not_whiny_again = Class.new(Dummy) do
|
|
89
|
+
as_enum :gender, [:male, :female], :whiny => false
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
d = not_whiny_again.new :gender => :male
|
|
93
|
+
assert_equal(:male, d.gender)
|
|
94
|
+
d.gender = nil
|
|
95
|
+
assert_nil(d.gender)
|
|
96
|
+
end
|
|
97
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Setup environment for both tests and IRB interactive console
|
|
2
|
+
#
|
|
3
|
+
|
|
4
|
+
$KCODE = 'u' # to make parameterize work...
|
|
5
|
+
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
|
|
8
|
+
gem 'sqlite3-ruby'
|
|
9
|
+
|
|
10
|
+
require 'active_support'
|
|
11
|
+
require 'active_record'
|
|
12
|
+
|
|
13
|
+
# setup fake rails env
|
|
14
|
+
ROOT = File.join(File.dirname(__FILE__), '..')
|
|
15
|
+
RAILS_ROOT = ROOT
|
|
16
|
+
RAILS_ENV = 'test'
|
|
17
|
+
|
|
18
|
+
# create database connection (in memory db!)
|
|
19
|
+
ActiveRecord::Base.establish_connection({ :adapter => 'sqlite3', :database => ':memory:'})
|
|
20
|
+
|
|
21
|
+
# load simple_enum
|
|
22
|
+
require File.join(ROOT, 'init')
|
|
23
|
+
|
|
24
|
+
# load dummy class
|
|
25
|
+
require File.join(ROOT, 'test', 'models')
|
|
26
|
+
|
|
27
|
+
# Reload database
|
|
28
|
+
def reload_db(options = {})
|
|
29
|
+
options = { :fill => true, :genders => false }.merge(options)
|
|
30
|
+
ActiveRecord::Base.connection.create_table :dummies, :force => true do |t|
|
|
31
|
+
t.column :name, :string
|
|
32
|
+
t.column :gender_cd, :integer
|
|
33
|
+
t.column :word_cd, :string, :limit => 5
|
|
34
|
+
t.column :other, :integer
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Create ref-data table and fill with records
|
|
38
|
+
ActiveRecord::Base.connection.create_table :genders, :force => true do |t|
|
|
39
|
+
t.column :name, :string
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if options[:fill]
|
|
43
|
+
# fill db with some rows
|
|
44
|
+
Dummy.create({ :name => 'Anna', :gender_cd => 1, :word_cd => 'alpha', :other => 0})
|
|
45
|
+
Dummy.create({ :name => 'Bella', :gender_cd => 1, :word_cd => 'beta', :other => 1})
|
|
46
|
+
Dummy.create({ :name => 'Chris', :gender_cd => 0, :word_cd => 'gamma', :other => 2})
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
if options[:genders]
|
|
50
|
+
male = Gender.new({ :name => 'male' })
|
|
51
|
+
male.id = 0;
|
|
52
|
+
male.save!
|
|
53
|
+
|
|
54
|
+
female = Gender.new({ :name => 'female' })
|
|
55
|
+
female.id = 1;
|
|
56
|
+
female.save!
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# do some magic to initialze DB for IRB session
|
|
61
|
+
if Object.const_defined?('IRB')
|
|
62
|
+
reload_db :fill => true, :genders => true
|
|
63
|
+
else # and load test classes when in test cases...
|
|
64
|
+
require 'test/unit'
|
|
65
|
+
require 'active_support/test_case'
|
|
66
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class SlimDummy < ActiveRecord::Base
|
|
4
|
+
set_table_name 'dummies'
|
|
5
|
+
as_enum :gender, [:male, :female], :slim => true
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class WithoutShortcutsTest < ActiveSupport::TestCase
|
|
9
|
+
def setup
|
|
10
|
+
reload_db
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test "that no shortcut methods are generated if :slim => true" do
|
|
14
|
+
jane = SlimDummy.new
|
|
15
|
+
jane.gender = :female
|
|
16
|
+
|
|
17
|
+
# ensure that other methods still work as expected
|
|
18
|
+
assert_equal 1, jane.gender_cd
|
|
19
|
+
assert_equal :female, jane.gender
|
|
20
|
+
|
|
21
|
+
# then check for availability of shortcut methods
|
|
22
|
+
assert !jane.respond_to?(:male!), "should not respond_to <male!>"
|
|
23
|
+
assert !jane.respond_to?(:female?), "should not respond_to <female?>"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "that saving and loading from a DB still works, even if :slim => true" do
|
|
27
|
+
anna = SlimDummy.find_by_name 'Anna'
|
|
28
|
+
|
|
29
|
+
assert_equal 1, anna.gender_cd
|
|
30
|
+
assert_equal :female, anna.gender
|
|
31
|
+
|
|
32
|
+
# change anna, save + reload
|
|
33
|
+
anna.gender = :male
|
|
34
|
+
anna.save!
|
|
35
|
+
anna.reload
|
|
36
|
+
|
|
37
|
+
assert_equal 0, anna.gender_cd
|
|
38
|
+
assert_equal :male, anna.gender
|
|
39
|
+
end
|
|
40
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: lwe-simple_enum
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.3.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Lukas Westermann
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-07-07 00:00:00 -07:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description:
|
|
17
|
+
email: lukas.westermann@gmail.com
|
|
18
|
+
executables: []
|
|
19
|
+
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files:
|
|
23
|
+
- README.rdoc
|
|
24
|
+
files:
|
|
25
|
+
- .gitignore
|
|
26
|
+
- LICENCE
|
|
27
|
+
- README.rdoc
|
|
28
|
+
- Rakefile
|
|
29
|
+
- VERSION.yml
|
|
30
|
+
- init.rb
|
|
31
|
+
- lib/simple_enum.rb
|
|
32
|
+
- lib/simple_enum/array_support.rb
|
|
33
|
+
- lib/simple_enum/enum_hash.rb
|
|
34
|
+
- lib/simple_enum/object_support.rb
|
|
35
|
+
- lib/simple_enum/validation.rb
|
|
36
|
+
- lib/simple_enum/version.rb
|
|
37
|
+
- locales/en.yml
|
|
38
|
+
- simple_enum.gemspec
|
|
39
|
+
- test/array_conversions_test.rb
|
|
40
|
+
- test/class_methods_test.rb
|
|
41
|
+
- test/enum_hash_test.rb
|
|
42
|
+
- test/finders_test.rb
|
|
43
|
+
- test/models.rb
|
|
44
|
+
- test/object_backed_test.rb
|
|
45
|
+
- test/object_support_test.rb
|
|
46
|
+
- test/prefixes_test.rb
|
|
47
|
+
- test/se_array_support_test.rb
|
|
48
|
+
- test/simple_enum_test.rb
|
|
49
|
+
- test/test_helper.rb
|
|
50
|
+
- test/without_shortcuts_test.rb
|
|
51
|
+
has_rdoc: true
|
|
52
|
+
homepage: http://github.com/lwe/simple_enum
|
|
53
|
+
post_install_message:
|
|
54
|
+
rdoc_options:
|
|
55
|
+
- --charset=UTF-8
|
|
56
|
+
require_paths:
|
|
57
|
+
- lib
|
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: "0"
|
|
63
|
+
version:
|
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: "0"
|
|
69
|
+
version:
|
|
70
|
+
requirements: []
|
|
71
|
+
|
|
72
|
+
rubyforge_project:
|
|
73
|
+
rubygems_version: 1.2.0
|
|
74
|
+
signing_key:
|
|
75
|
+
specification_version: 3
|
|
76
|
+
summary: Simple enum-like field support for ActiveRecord (including validations and i18n)
|
|
77
|
+
test_files:
|
|
78
|
+
- test/array_conversions_test.rb
|
|
79
|
+
- test/class_methods_test.rb
|
|
80
|
+
- test/enum_hash_test.rb
|
|
81
|
+
- test/finders_test.rb
|
|
82
|
+
- test/models.rb
|
|
83
|
+
- test/object_backed_test.rb
|
|
84
|
+
- test/object_support_test.rb
|
|
85
|
+
- test/prefixes_test.rb
|
|
86
|
+
- test/se_array_support_test.rb
|
|
87
|
+
- test/simple_enum_test.rb
|
|
88
|
+
- test/test_helper.rb
|
|
89
|
+
- test/without_shortcuts_test.rb
|