mschuerig-easy_enums 0.0.4 → 0.0.5

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.
Files changed (3) hide show
  1. data/lib/easy_enums.rb +25 -1
  2. data/test/test_easy_enums.rb +26 -0
  3. metadata +5 -5
data/lib/easy_enums.rb CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  module EasyEnumerations
3
- VERSION = '0.0.4'
3
+ VERSION = '0.0.5'
4
4
 
5
5
  def self.included(base)
6
6
  base.extend(ClassMethods)
@@ -21,6 +21,10 @@ module EasyEnumerations
21
21
  @enum_cache.values
22
22
  end
23
23
 
24
+ def names
25
+ @enum_cache.keys
26
+ end
27
+
24
28
  def count(*args)
25
29
  if args.empty?
26
30
  @enum_cache.size
@@ -48,6 +52,21 @@ module EasyEnumerations
48
52
  yield obj.name
49
53
  end
50
54
  end
55
+
56
+ def valid_name!(name, options = {})
57
+ name = ActiveSupport::Inflector.singularize(name) if options[:singularize]
58
+ name = clean_name(name) if options[:clean]
59
+ unless names.include?(name)
60
+ raise ArgumentError, "Not a valid name for a #{self.name}: #{name.inspect}"
61
+ end
62
+ name
63
+ end
64
+
65
+ private
66
+
67
+ def clean_name(name)
68
+ ActiveSupport::Inflector.transliterate(name).gsub(' ', '_').gsub(/[^[:alnum:]_]/, '').underscore.to_s
69
+ end
51
70
  end
52
71
 
53
72
  class EnumerationCreator
@@ -74,12 +93,17 @@ module EasyEnumerations
74
93
  end
75
94
 
76
95
  def reload
96
+ @keys = @values = nil
77
97
  @cache = @model.find(:all).inject({}) do |c, e|
78
98
  c[e.name] = e
79
99
  c
80
100
  end
81
101
  end
82
102
 
103
+ def keys
104
+ @keys ||= @cache.keys
105
+ end
106
+
83
107
  def values
84
108
  @values ||= @cache.values
85
109
  end
@@ -82,8 +82,34 @@ class TestEasyEnums < Test::Unit::TestCase
82
82
  Enumbed.all.map { |e| e.name }.sort
83
83
  end
84
84
 
85
+ def test_names
86
+ assert_equal ['blue', 'green', 'red'],
87
+ Enumbed.names.sort
88
+ end
89
+
85
90
  def test_two_enums_do_not_interfere
86
91
  assert_equal ["Fall", "Spring", "Summer", "Winter"],
87
92
  Season.all.map { |e| e.name }.sort
88
93
  end
94
+
95
+ def test_reload
96
+ Enumbed.create!(:name => 'pink')
97
+ Enumbed.reload
98
+ assert_equal ['blue', 'green', 'pink', 'red'],
99
+ Enumbed.all.map { |e| e.name }.sort
100
+ assert_equal ['blue', 'green', 'pink', 'red'],
101
+ Enumbed.names.sort
102
+ end
103
+
104
+ def test_valid_name_for_valid_name
105
+ assert_nothing_raised do
106
+ Enumbed.valid_name!('red')
107
+ end
108
+ end
109
+
110
+ def test_valid_name_for_invalid_name
111
+ assert_raises ArgumentError do
112
+ Enumbed.valid_name!('black')
113
+ end
114
+ end
89
115
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mschuerig-easy_enums
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Schuerig
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-02 00:00:00 -07:00
12
+ date: 2009-05-22 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3.0
33
+ version: 1.4.1
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: hoe
@@ -62,7 +62,7 @@ files:
62
62
  - rails/init.rb
63
63
  - test/test_easy_enums.rb
64
64
  - test/test_helper.rb
65
- has_rdoc: false
65
+ has_rdoc: true
66
66
  homepage: http://github.com/mschuerig/easy_enums
67
67
  post_install_message:
68
68
  rdoc_options:
@@ -87,7 +87,7 @@ requirements: []
87
87
  rubyforge_project: easy_enums
88
88
  rubygems_version: 1.2.0
89
89
  signing_key:
90
- specification_version: 2
90
+ specification_version: 3
91
91
  summary: Simplistic enumerations for ActiveRecord.
92
92
  test_files:
93
93
  - test/test_helper.rb