mschuerig-easy_enums 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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