simple_enum 1.2.0 → 1.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/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ gem "activesupport", "~> 3.0.0", :require => "active_support"
4
+ gem "activerecord", "~> 3.0.0", :require => "active_record"
5
+
6
+ gem "sqlite3-ruby", :require => "sqlite3", :platforms => :ruby
7
+ gem "jdbc-sqlite3", :require => "jdbcsqlite3", :platforms => :jruby
data/Gemfile.BACKPORT ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ gem "activesupport", "~> 2.3.8", :require => "active_support"
4
+ gem "activerecord", "~> 2.3.8", :require => "active_record"
5
+
6
+ gem "sqlite3-ruby", :require => "sqlite3", :platforms => :ruby
7
+ gem "jdbc-sqlite3", :require => "jdbcsqlite3", :platforms => :jruby
@@ -0,0 +1,16 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activerecord (2.3.10)
5
+ activesupport (= 2.3.10)
6
+ activesupport (2.3.10)
7
+ sqlite3-ruby (1.3.2)
8
+
9
+ PLATFORMS
10
+ ruby
11
+
12
+ DEPENDENCIES
13
+ activerecord (~> 2.3.8)
14
+ activesupport (~> 2.3.8)
15
+ jdbc-sqlite3
16
+ sqlite3-ruby
data/Gemfile.lock ADDED
@@ -0,0 +1,28 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.1)
5
+ activesupport (= 3.0.1)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.4.1)
8
+ activerecord (3.0.1)
9
+ activemodel (= 3.0.1)
10
+ activesupport (= 3.0.1)
11
+ arel (~> 1.0.0)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.1)
14
+ arel (1.0.1)
15
+ activesupport (~> 3.0.0)
16
+ builder (2.1.2)
17
+ i18n (0.4.2)
18
+ sqlite3-ruby (1.3.2)
19
+ tzinfo (0.3.23)
20
+
21
+ PLATFORMS
22
+ ruby
23
+
24
+ DEPENDENCIES
25
+ activerecord (~> 3.0.0)
26
+ activesupport (~> 3.0.0)
27
+ jdbc-sqlite3
28
+ sqlite3-ruby
data/lib/simple_enum.rb CHANGED
@@ -21,7 +21,7 @@ require 'simple_enum/validation'
21
21
  module SimpleEnum
22
22
 
23
23
  # +SimpleEnum+ version string.
24
- VERSION = "1.2.0".freeze
24
+ VERSION = "1.3.0".freeze
25
25
 
26
26
  class << self
27
27
 
@@ -176,24 +176,23 @@ module SimpleEnum
176
176
  end
177
177
 
178
178
  # allow access to defined values hash, e.g. in a select helper or finder method.
179
- self_name = enum_cd.to_s.pluralize
180
- self_name.upcase! if options[:upcase]
179
+ attr_name = enum_cd.to_s.pluralize
180
+ enum_attr = :"#{attr_name.downcase}_enum_hash"
181
+ write_inheritable_attribute(enum_attr, values)
181
182
 
182
- class_eval(<<-EOM, __FILE__, __LINE__ + 1)
183
- @#{self_name} = values
184
-
185
- def self.#{self_name}(*args)
186
- return @#{self_name} if args.first.nil?
187
- return @#{self_name}[args.first] if args.size == 1
188
- args.inject([]) { |ary, sym| ary << @#{self_name}[sym]; ary }
183
+ class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
184
+ def self.#{attr_name}(*args)
185
+ return read_inheritable_attribute(#{enum_attr.inspect}) if args.first.nil?
186
+ return read_inheritable_attribute(#{enum_attr.inspect})[args.first] if args.size == 1
187
+ args.inject([]) { |ary, sym| ary << read_inheritable_attribute(#{enum_attr.inspect})[sym]; ary }
189
188
  end
190
189
 
191
- def self.#{self_name}_for_select(&block)
192
- self.#{self_name}.map do |k,v|
193
- [block_given? ? yield(k,v) : self.human_enum_name(#{self_name.inspect}, k), k]
190
+ def self.#{attr_name}_for_select(&block)
191
+ self.#{attr_name}.map do |k,v|
192
+ [block_given? ? yield(k,v) : self.human_enum_name(#{attr_name.inspect}, k), k]
194
193
  end.sort
195
194
  end
196
- EOM
195
+ RUBY
197
196
 
198
197
  # only create if :slim is not defined
199
198
  if options[:slim] != true
@@ -214,11 +213,7 @@ module SimpleEnum
214
213
 
215
214
  # allow class access to each value
216
215
  unless options[:slim] === :class
217
- if self.respond_to? :singleton_class
218
- singleton_class.send(:define_method, "#{prefix}#{sym}", Proc.new { |*args| args.first ? k : code })
219
- else
220
- metaclass.send(:define_method, "#{prefix}#{sym}", Proc.new { |*args| args.first ? k : code })
221
- end
216
+ singleton_class.send(:define_method, "#{prefix}#{sym}", Proc.new { |*args| args.first ? k : code })
222
217
  end
223
218
  end
224
219
  end
@@ -6,10 +6,11 @@ class ArrayConversionsTest < ActiveSupport::TestCase
6
6
  end
7
7
 
8
8
  test "that conversion of Gender.find(:all).map {...} to enumeration values as symbols works the same as [:male,:female]" do
9
- with_enum = Class.new(ActiveRecord::Base) do
9
+ class DummyArrayTest1 < ActiveRecord::Base
10
10
  set_table_name 'dummies'
11
11
  as_enum :gender, Gender.find(:all).map { |g| [g.name.to_sym, g.id] }
12
12
  end
13
+ with_enum = DummyArrayTest1
13
14
 
14
15
  assert_equal 0, with_enum.male
15
16
  assert_equal 1, with_enum.female
@@ -10,9 +10,14 @@ class ClassMethodsTest < ActiveSupport::TestCase
10
10
  assert_equal Dummy.genders(:male), Dummy.genders[:male]
11
11
  assert_nil Dummy.genders(:inexistent)
12
12
  assert_nil Dummy.genders[:inexistent]
13
+ assert_not_nil Dummy.genders[:female]
14
+ end
15
+
16
+ test "inheritance of `genders` to subclasses (#issue/3)" do
17
+ assert_equal({ :female => 1, :male => 0}, SpecificDummy.genders)
13
18
  end
14
19
 
15
- test "GENDERS constant created" do
20
+ test "genders reader created" do
16
21
  assert_equal [0, 1], Dummy.genders.values.sort
17
22
  assert_equal %w{female male}, Dummy.genders.keys.map(&:to_s).sort
18
23
  end
@@ -35,10 +40,11 @@ class ClassMethodsTest < ActiveSupport::TestCase
35
40
  end
36
41
 
37
42
  test "that no Klass.shortcut are created if :slim => true" do
38
- with_slim = Class.new(ActiveRecord::Base) do
43
+ class Dummy1 < ActiveRecord::Base
39
44
  set_table_name 'dummies'
40
45
  as_enum :gender, [:male, :female], :slim => true
41
46
  end
47
+ with_slim = Dummy1
42
48
 
43
49
  assert !with_slim.respond_to?(:male)
44
50
  assert !with_slim.respond_to?(:female)
@@ -46,11 +52,12 @@ class ClassMethodsTest < ActiveSupport::TestCase
46
52
  end
47
53
 
48
54
  test "that no Klass.shortcut's are created if :slim => :class, though instance shortcuts are" do
49
- with_slim_class = Class.new(ActiveRecord::Base) do
55
+ class Dummy2 < ActiveRecord::Base
50
56
  set_table_name 'dummies'
51
57
  as_enum :gender, [:male, :female], :slim => :class
52
58
  end
53
-
59
+ with_slim_class = Dummy2
60
+
54
61
  jane = with_slim_class.new
55
62
 
56
63
  assert_respond_to jane, :male!
@@ -63,10 +70,11 @@ class ClassMethodsTest < ActiveSupport::TestCase
63
70
  end
64
71
 
65
72
  test "that Klass.shortcut respect :prefix => true and are prefixed by \#{enum_cd}" do
66
- with_prefix = Class.new(ActiveRecord::Base) do
73
+ class Dummy3 < ActiveRecord::Base
67
74
  set_table_name 'dummies'
68
75
  as_enum :gender, [:male, :female], :prefix => true
69
76
  end
77
+ with_prefix = Dummy3
70
78
 
71
79
  assert !with_prefix.respond_to?(:male)
72
80
  assert !with_prefix.respond_to?(:female)
@@ -77,10 +85,11 @@ class ClassMethodsTest < ActiveSupport::TestCase
77
85
  end
78
86
 
79
87
  test "to ensure that Klass.shortcut also work with custom prefixes" do
80
- with_custom_prefix = Class.new(ActiveRecord::Base) do
88
+ class Dummy4 < ActiveRecord::Base
81
89
  set_table_name 'dummies'
82
90
  as_enum :gender, [:male, :female], :prefix => :g
83
91
  end
92
+ with_custom_prefix = Dummy4
84
93
 
85
94
  assert !with_custom_prefix.respond_to?(:male)
86
95
  assert !with_custom_prefix.respond_to?(:female)
@@ -90,18 +99,7 @@ class ClassMethodsTest < ActiveSupport::TestCase
90
99
  assert_equal 1, with_custom_prefix.g_female
91
100
  assert_respond_to with_custom_prefix, :genders
92
101
  end
93
-
94
- test "new :upcase option for those guys picky with coding guidelines etc." do
95
- with_upcase = Class.new(ActiveRecord::Base) do
96
- set_table_name 'dummies'
97
- as_enum :gender, [:male, :female], :upcase => true
98
- end
99
102
 
100
- assert_respond_to with_upcase, :GENDERS
101
- assert_same 0, with_upcase.GENDERS.male
102
- assert_same 1, with_upcase.GENDERS[:female]
103
- end
104
-
105
103
  test "that the human_enum_name method returns translated/humanized values" do
106
104
  assert_equal :male.to_s.humanize, Dummy.human_enum_name(:genders, :male)
107
105
  assert_equal "Girl", Dummy.human_enum_name(:genders, :female)
data/test/models.rb CHANGED
@@ -5,4 +5,9 @@ class Dummy < ActiveRecord::Base
5
5
  end
6
6
 
7
7
  class Gender < ActiveRecord::Base
8
- end
8
+ end
9
+
10
+ # Used to test STI stuff
11
+ class SpecificDummy < Dummy
12
+ set_table_name 'dummies'
13
+ end
data/test/test_helper.rb CHANGED
@@ -4,7 +4,9 @@
4
4
  $KCODE = 'u' unless RUBY_VERSION =~ /^1\.9/ # to make parameterize work...
5
5
 
6
6
  require 'rubygems'
7
+ require 'bundler/setup'
7
8
 
9
+ require 'test/unit'
8
10
  require 'active_support'
9
11
  require 'active_record'
10
12
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_enum
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 1.2.0
10
+ version: 1.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Lukas Westermann
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-30 00:00:00 +02:00
18
+ date: 2010-11-19 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -29,6 +29,10 @@ extra_rdoc_files:
29
29
  - README.rdoc
30
30
  files:
31
31
  - .gitignore
32
+ - Gemfile
33
+ - Gemfile.BACKPORT
34
+ - Gemfile.BACKPORT.lock
35
+ - Gemfile.lock
32
36
  - LICENCE
33
37
  - README.rdoc
34
38
  - Rakefile