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.
@@ -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
@@ -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