simple_enum 1.6.2 → 1.6.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,7 @@
1
+ .DS_Store
2
+ _site
1
3
  doc
2
4
  pkg
3
5
  *.rbc
4
6
  .*.sw?
7
+ tmp
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
+ services: mongodb
2
3
  rvm:
3
4
  - 1.8.7
4
5
  - 1.9.3
data/Gemfile.lock CHANGED
@@ -1,41 +1,46 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_enum (1.6.2)
4
+ simple_enum (1.6.3)
5
5
  activesupport (>= 3.0.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- activemodel (3.2.0)
11
- activesupport (= 3.2.0)
10
+ activemodel (3.2.8)
11
+ activesupport (= 3.2.8)
12
12
  builder (~> 3.0.0)
13
- activerecord (3.2.0)
14
- activemodel (= 3.2.0)
15
- activesupport (= 3.2.0)
16
- arel (~> 3.0.0)
13
+ activerecord (3.2.8)
14
+ activemodel (= 3.2.8)
15
+ activesupport (= 3.2.8)
16
+ arel (~> 3.0.2)
17
17
  tzinfo (~> 0.3.29)
18
- activesupport (3.2.0)
18
+ activerecord-jdbc-adapter (1.2.2)
19
+ activerecord-jdbcsqlite3-adapter (1.2.2)
20
+ activerecord-jdbc-adapter (~> 1.2.2)
21
+ jdbc-sqlite3 (~> 3.7.2)
22
+ activesupport (3.2.8)
19
23
  i18n (~> 0.6)
20
24
  multi_json (~> 1.0)
21
- arel (3.0.0)
22
- bson (1.5.2)
23
- bson (1.5.2-java)
24
- bson_ext (1.5.2)
25
- bson (= 1.5.2)
25
+ arel (3.0.2)
26
+ bson (1.6.4)
27
+ bson (1.6.4-java)
28
+ bson_ext (1.6.4)
29
+ bson (~> 1.6.4)
26
30
  builder (3.0.0)
27
31
  i18n (0.6.0)
28
- minitest (2.10.1)
29
- mongo (1.5.2)
30
- bson (= 1.5.2)
31
- mongoid (2.4.1)
32
+ jdbc-sqlite3 (3.7.2)
33
+ minitest (3.3.0)
34
+ mongo (1.6.2)
35
+ bson (~> 1.6.2)
36
+ mongoid (2.4.12)
32
37
  activemodel (~> 3.1)
33
- mongo (~> 1.3)
38
+ mongo (<= 1.6.2)
34
39
  tzinfo (~> 0.3.22)
35
- multi_json (1.0.4)
40
+ multi_json (1.3.6)
36
41
  rake (0.9.2.2)
37
- sqlite3 (1.3.5)
38
- tzinfo (0.3.31)
42
+ sqlite3 (1.3.6)
43
+ tzinfo (0.3.33)
39
44
 
40
45
  PLATFORMS
41
46
  java
data/README.rdoc CHANGED
@@ -276,6 +276,8 @@ or <em>b)</em> a custom method to convert an object to a symbolized form named +
276
276
  * @dbalatero - rails 2.3.5 bugfix & validator fixes
277
277
  * @johnthethird - feature for <tt>_for_select</tt> to return the values
278
278
  * @sinsiliux - ruby 1.9 fixes and removed AR dependency
279
+ * @sled - mongoid support
280
+ * and all others: https://github.com/lwe/simple_enum/graphs/contributors thanks
279
281
 
280
282
  == Licence & Copyright
281
283
  Copyright (c) 2011 by Lukas Westermann, Licenced under MIT Licence (see LICENCE file)
data/Rakefile CHANGED
@@ -28,3 +28,9 @@ namespace :test do
28
28
  end
29
29
 
30
30
  task :test => [:'test:activerecord', :'test:mongoid']
31
+
32
+ # Mongodb
33
+ directory "tmp/mongodb.data"
34
+ task :mongodb => [:'tmp/mongodb.data'] do |t|
35
+ system "mongod", "--dbpath", "tmp/mongodb.data"
36
+ end
data/lib/simple_enum.rb CHANGED
@@ -37,6 +37,7 @@ module SimpleEnum
37
37
  # <tt>false</tt> no exception is thrown and the internal value is set to <tt>nil</tt> (default is <tt>true</tt>)
38
38
  # * <tt>:dirty</tt> - Boolean value which if set to <tt>true</tt> generates <tt>..._was</tt> and <tt>..._changed?</tt>
39
39
  # methods for the enum, which delegate to the internal column.
40
+ # * <tt>:strings</tt> - Boolean value which if set to <tt>true</tt> defaults array values as strings instead of integers.
40
41
  def default_options
41
42
  @default_options ||= {
42
43
  :whiny => true,
@@ -154,16 +155,17 @@ module SimpleEnum
154
155
  # <tt>false</tt> no exception is thrown and the internal value is set to <tt>nil</tt> (default is <tt>true</tt>)
155
156
  # * <tt>:dirty</tt> - Boolean value which if set to <tt>true</tt> generates <tt>..._was</tt> and <tt>..._changed?</tt>
156
157
  # methods for the enum, which delegate to the internal column (default is <tt>false</tt>)
158
+ # * <tt>:strings</tt> - Boolean value which if set to <tt>true</tt> stores array values as strings instead of it's index.
157
159
  # * <tt>:field</tt> - Also allowed as valid key, for Mongoid integration + default options, see simple_enum#27.
158
160
  #
159
161
  def as_enum(enum_cd, values, options = {})
160
162
  options = SimpleEnum.default_options.merge({ :column => "#{enum_cd}_cd" }).merge(options)
161
- options.assert_valid_keys(:column, :whiny, :prefix, :slim, :upcase, :dirty, :field)
163
+ options.assert_valid_keys(:column, :whiny, :prefix, :slim, :upcase, :dirty, :strings, :field)
162
164
 
163
165
  metaclass = (class << self; self; end)
164
166
 
165
- # convert array to hash...
166
- values = SimpleEnum::EnumHash.new(values)
167
+ # convert array to hash
168
+ values = SimpleEnum::EnumHash.new(values, options[:strings])
167
169
  values_inverted = values.invert
168
170
 
169
171
  # store info away
@@ -4,7 +4,6 @@ module SimpleEnum
4
4
  # Works like to original +Hash+ class, but with some added value,
5
5
  # like access to
6
6
  #
7
- #
8
7
  class EnumHash < ::ActiveSupport::OrderedHash
9
8
 
10
9
  # Converts an entity to a symbol, uses to_enum_sym, if possible.
@@ -16,7 +15,7 @@ module SimpleEnum
16
15
  sym unless sym.blank?
17
16
  end
18
17
 
19
- def initialize(args = [])
18
+ def initialize(args = [], strings = false)
20
19
  super()
21
20
 
22
21
  @reverse_sym_lookup = {}
@@ -28,7 +27,7 @@ module SimpleEnum
28
27
  ary = args.send(args.respond_to?(:enum_with_index) ? :enum_with_index : :each_with_index).to_a unless args.first.respond_to?(:map)
29
28
  ary = args.map { |e| [e, e.id] } if args.first.respond_to?(:map) && !args.first.is_a?(Array)
30
29
  ary ||= args
31
- ary.each { |e| set_value_for_reverse_lookup(e[0], e[1]) }
30
+ ary.each { |e| set_value_for_reverse_lookup(e[0], strings ? e[0].to_s : e[1]) }
32
31
  end
33
32
  end
34
33
 
@@ -54,4 +53,4 @@ module SimpleEnum
54
53
  @sym_value_lookup[sym] = value
55
54
  end
56
55
  end
57
- end
56
+ end
@@ -1,5 +1,5 @@
1
1
  module SimpleEnum
2
2
 
3
3
  # +SimpleEnum+ version string.
4
- VERSION = "1.6.2"
4
+ VERSION = "1.6.3"
5
5
  end
data/simple_enum.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.authors = ["Lukas Westermann"]
16
16
  s.email = ["lukas.westermann@gmail.com"]
17
- s.homepage = "http://github.com/lwe/simple_enum"
17
+ s.homepage = "http://lwe.github.com/simple_enum/"
18
18
 
19
19
  s.files = `git ls-files`.split("\n")
20
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -2,10 +2,10 @@ require 'test_helper'
2
2
  require 'simple_enum/enum_hash'
3
3
 
4
4
  class EnumHashTest < MiniTest::Unit::TestCase
5
-
5
+
6
6
  def test_create_new_enumhash_instance_from_array_of_symbols
7
7
  genders = SimpleEnum::EnumHash.new [:male, :female]
8
-
8
+
9
9
  assert_same 0, genders[:male]
10
10
  assert_same 1, genders[:female]
11
11
  assert_same 0, genders.male
@@ -14,54 +14,60 @@ class EnumHashTest < MiniTest::Unit::TestCase
14
14
 
15
15
  def test_create_new_enumhash_instance_from_hash
16
16
  status = SimpleEnum::EnumHash.new :inactive => 0, :active => 1, :archived => 99
17
-
17
+
18
18
  assert_same 0, status.inactive
19
19
  assert_same 1, status[:active]
20
20
  end
21
-
21
+
22
22
  def test_create_new_enumhash_instance_from_query_results
23
23
  reload_db :genders => true
24
24
  genders = SimpleEnum::EnumHash.new Gender.all
25
-
25
+
26
26
  assert_same 0, genders[@male]
27
27
  assert_same genders[@male], genders[:male]
28
28
  assert_same 1, genders.female
29
29
  assert_equal @male, genders.send(:male, true)
30
30
  end
31
-
31
+
32
32
  def test_that_enumhash_keys_are_ordered
33
33
  ordered = SimpleEnum::EnumHash.new [:alpha, :beta, :gamma, :delta, :epsilon, :zeta, :eta]
34
34
  expected_keys = [:alpha, :beta, :gamma, :delta, :epsilon, :zeta, :eta]
35
35
  assert_equal expected_keys, ordered.keys
36
36
  end
37
-
37
+
38
38
  def test_valid_key_value_association_when_simple_array_is_merged_into_enumhash
39
39
  a = [:a, :b, :c, :d]
40
40
  h = SimpleEnum::EnumHash.new(a)
41
-
41
+
42
42
  assert_same 0, h[:a]
43
43
  assert_same 1, h[:b]
44
44
  assert_same 2, h[:c]
45
45
  assert_same 3, h[:d]
46
46
  assert_equal [:a, :b, :c, :d], h.keys
47
47
  end
48
-
48
+
49
49
  def test_that_an_already_correct_looking_array_is_converted_to_hash
50
50
  a = [[:a, 5], [:b, 10]]
51
51
  h = SimpleEnum::EnumHash.new(a)
52
-
52
+
53
53
  assert_same 5, h[:a]
54
54
  assert_same 10, h[:b]
55
55
  assert_equal [:a, :b], h.keys
56
56
  end
57
-
57
+
58
58
  def test_that_an_array_of_query_results_are_converted_to_result_ids
59
59
  reload_db :genders => true # reload db
60
60
  a = Gender.all
61
-
61
+
62
62
  h = SimpleEnum::EnumHash.new(a)
63
-
63
+
64
64
  assert_same 0, h[@male]
65
65
  assert_same 1, h[@female]
66
- end
67
- end
66
+ end
67
+
68
+ def test_strings_option
69
+ h = SimpleEnum::EnumHash.new([:male, :female], true)
70
+ assert_equal "male", h[:male]
71
+ assert_equal "female", h[:female]
72
+ end
73
+ end
data/test/mongoid_test.rb CHANGED
@@ -1,13 +1,15 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class MongoidTest < MiniTest::Unit::TestCase
4
- @@default_options = SimpleEnum.default_options
5
-
6
4
  def setup
7
- SimpleEnum.default_options.clear.merge(@@default_options)
5
+ @default_options = SimpleEnum.default_options
8
6
  reload_db
9
7
  end
10
8
 
9
+ def teardown
10
+ SimpleEnum.default_options.clear.update(@default_options)
11
+ end
12
+
11
13
  def test_creates_a_field_per_default
12
14
  skip('Only available in mongoid') unless mongoid?
13
15
  klass = anonymous_dummy do
@@ -28,6 +28,7 @@ def reload_db(options = {})
28
28
  t.column :name, :string
29
29
  t.column :gender_cd, :integer
30
30
  t.column :word_cd, :string, :limit => 5
31
+ t.column :role_cd, :string
31
32
  t.column :other, :integer
32
33
  end
33
34
 
@@ -81,6 +82,7 @@ class Dummy < ActiveRecord::Base
81
82
  as_enum :gender, [:male, :female]
82
83
  as_enum :word, { :alpha => 'alpha', :beta => 'beta', :gamma => 'gamma'}
83
84
  as_enum :didum, [ :foo, :bar, :foobar ], :column => 'other'
85
+ as_enum :role, [:admin, :member, :anon], :strings => true
84
86
  end
85
87
 
86
88
  class Gender < ActiveRecord::Base
data/test/orm/mongoid.rb CHANGED
@@ -71,6 +71,7 @@ class Dummy
71
71
  as_enum :gender, [:male, :female]
72
72
  as_enum :word, { :alpha => 'alpha', :beta => 'beta', :gamma => 'gamma'}
73
73
  as_enum :didum, [ :foo, :bar, :foobar ], :column => 'other'
74
+ as_enum :role, [:admin, :member, :anon], :strings => true
74
75
 
75
76
  before_save :check_typed
76
77
 
@@ -254,4 +254,16 @@ class SimpleEnumTest < MiniTest::Unit::TestCase
254
254
  d = Dummy.new
255
255
  assert_nil(d.human_gender)
256
256
  end
257
+
258
+ def test_strings_option
259
+ d = Dummy.new :role => :anon
260
+
261
+ assert_equal :anon, d.role
262
+ assert_equal 'anon', d.role_cd
263
+
264
+ d.role = :admin
265
+
266
+ assert_equal :admin, d.role
267
+ assert_equal 'admin', d.role_cd
268
+ end
257
269
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_enum
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 9
5
+ prerelease:
5
6
  segments:
6
7
  - 1
7
8
  - 6
8
- - 2
9
- version: 1.6.2
9
+ - 3
10
+ version: 1.6.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - Lukas Westermann
@@ -14,78 +15,87 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2012-08-22 00:00:00 +02:00
18
- default_executable:
18
+ date: 2012-09-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- type: :runtime
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ requirement: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
+ hash: 7
26
27
  segments:
27
28
  - 3
28
29
  - 0
29
30
  - 0
30
31
  version: 3.0.0
31
- name: activesupport
32
- requirement: *id001
33
32
  prerelease: false
33
+ type: :runtime
34
+ name: activesupport
35
+ version_requirements: *id001
34
36
  - !ruby/object:Gem::Dependency
35
- type: :development
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
37
39
  requirements:
38
40
  - - ">="
39
41
  - !ruby/object:Gem::Version
42
+ hash: 63
40
43
  segments:
41
44
  - 0
42
45
  - 9
43
46
  - 2
44
47
  version: 0.9.2
45
- name: rake
46
- requirement: *id002
47
48
  prerelease: false
48
- - !ruby/object:Gem::Dependency
49
49
  type: :development
50
- version_requirements: &id003 !ruby/object:Gem::Requirement
50
+ name: rake
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
51
55
  requirements:
52
56
  - - ">="
53
57
  - !ruby/object:Gem::Version
58
+ hash: 3
54
59
  segments:
55
60
  - 2
56
61
  - 3
57
62
  - 0
58
63
  version: 2.3.0
59
- name: minitest
60
- requirement: *id003
61
64
  prerelease: false
62
- - !ruby/object:Gem::Dependency
63
65
  type: :development
64
- version_requirements: &id004 !ruby/object:Gem::Requirement
66
+ name: minitest
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
65
71
  requirements:
66
72
  - - ">="
67
73
  - !ruby/object:Gem::Version
74
+ hash: 7
68
75
  segments:
69
76
  - 3
70
77
  - 0
71
78
  - 0
72
79
  version: 3.0.0
73
- name: activerecord
74
- requirement: *id004
75
80
  prerelease: false
76
- - !ruby/object:Gem::Dependency
77
81
  type: :development
78
- version_requirements: &id005 !ruby/object:Gem::Requirement
82
+ name: activerecord
83
+ version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
79
87
  requirements:
80
88
  - - ~>
81
89
  - !ruby/object:Gem::Version
90
+ hash: 3
82
91
  segments:
83
92
  - 2
84
93
  - 0
85
94
  version: "2.0"
86
- name: mongoid
87
- requirement: *id005
88
95
  prerelease: false
96
+ type: :development
97
+ name: mongoid
98
+ version_requirements: *id005
89
99
  description: Provides enum-like fields for ActiveRecord, ActiveModel and Mongoid models.
90
100
  email:
91
101
  - lukas.westermann@gmail.com
@@ -126,8 +136,7 @@ files:
126
136
  - test/simple_enum_test.rb
127
137
  - test/test_helper.rb
128
138
  - test/without_shortcuts_test.rb
129
- has_rdoc: true
130
- homepage: http://github.com/lwe/simple_enum
139
+ homepage: http://lwe.github.com/simple_enum/
131
140
  licenses:
132
141
  - MIT
133
142
  post_install_message:
@@ -136,18 +145,22 @@ rdoc_options: []
136
145
  require_paths:
137
146
  - lib
138
147
  required_ruby_version: !ruby/object:Gem::Requirement
148
+ none: false
139
149
  requirements:
140
150
  - - ">="
141
151
  - !ruby/object:Gem::Version
152
+ hash: 57
142
153
  segments:
143
154
  - 1
144
155
  - 8
145
156
  - 7
146
157
  version: 1.8.7
147
158
  required_rubygems_version: !ruby/object:Gem::Requirement
159
+ none: false
148
160
  requirements:
149
161
  - - ">="
150
162
  - !ruby/object:Gem::Version
163
+ hash: 23
151
164
  segments:
152
165
  - 1
153
166
  - 3
@@ -156,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
169
  requirements: []
157
170
 
158
171
  rubyforge_project:
159
- rubygems_version: 1.3.6
172
+ rubygems_version: 1.8.24
160
173
  signing_key:
161
174
  specification_version: 3
162
175
  summary: Simple enum-like field support for models.