enumerate_it 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -47,7 +47,7 @@ applications, I put them inside models/.
47
47
  :single => [1, 'Single'],
48
48
  :married => [2, 'Married'],
49
49
  :widow => [3, 'Widow'],
50
- :divorced => [4, 'Divorced'],
50
+ :divorced => [4, 'Divorced']
51
51
  )
52
52
  end
53
53
 
@@ -129,6 +129,35 @@ This will create:
129
129
  Remember that in Rails 3 you can add validations to any kind of class and not only to those derived from
130
130
  ActiveRecord::Base.
131
131
 
132
+ == I18n
133
+
134
+ I18n lookup is provided on both '_humanized' and 'Enumeration#to_a' methods, given the hash key is a Symbol. The I18n strings are
135
+ located on enumerations.'enumeration_name'.'key' :
136
+
137
+ class RelationshipStatus < EnumerateIt::Base
138
+ associate_values(
139
+ :married => 1,
140
+ :single => 2,
141
+ :divorced => [3, 'He's divorced']
142
+ )
143
+ end
144
+
145
+ # your locale file
146
+ pt:
147
+ enumerations:
148
+ relationship_status:
149
+ single: Casado
150
+
151
+ p = Person.new
152
+ p.relationship_status = RelationshipStatus::MARRIED
153
+ p.relationship_status_humanize # => 'Casado'
154
+
155
+ p.relationship_status = RelationshipStatus::SINGLE
156
+ p.relationship_status_humanize # => 'Single' => nonexistent key
157
+
158
+ p.relationship_status = RelationshipStatus::DIVORCED
159
+ p.relationship_status_humanize # => 'He's divorced' => uses the provided string
160
+
132
161
  == Installation
133
162
 
134
163
  gem install enumerate_it
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
data/enumerate_it.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{enumerate_it}
8
- s.version = "0.4.0"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["C\303\241ssio Marques"]
12
- s.date = %q{2010-04-10}
12
+ s.date = %q{2010-04-14}
13
13
  s.description = %q{Have a legacy database and need some enumerations in your models to match those stupid '4 rows/2 columns' tables with foreign keys and stop doing joins just to fetch a simple description? Or maybe use some integers instead of strings as the code for each value of your enumerations? Here's EnumerateIt.}
14
14
  s.email = %q{cassiommc@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,8 @@ Gem::Specification.new do |s|
26
26
  "enumerate_it.gemspec",
27
27
  "lib/enumerate_it.rb",
28
28
  "spec/enumerate_it_spec.rb",
29
+ "spec/i18n/en.yml",
30
+ "spec/i18n/pt.yml",
29
31
  "spec/spec.opts",
30
32
  "spec/spec_helper.rb"
31
33
  ]
data/lib/enumerate_it.rb CHANGED
@@ -167,7 +167,7 @@ module EnumerateIt
167
167
  def self.normalize_enumeration(values_hash)
168
168
  values_hash.each_pair do |key, value|
169
169
  unless value.is_a? Array
170
- values_hash[key] = [value, key.to_s.gsub(/_/, ' ').split.map(&:capitalize).join(' ')]
170
+ values_hash[key] = [value, key]
171
171
  end
172
172
  end
173
173
  values_hash
@@ -183,15 +183,22 @@ module EnumerateIt
183
183
 
184
184
  def self.define_enumeration_list(values_hash)
185
185
  def self.list
186
- @@registered_enumerations[self].values.map { |value| value[0] }.sort
186
+ @@registered_enumerations[self].values.map { |value| translate(value[0]) }.sort
187
187
  end
188
188
 
189
189
  def self.enumeration
190
190
  @@registered_enumerations[self]
191
191
  end
192
-
192
+
193
193
  def self.to_a
194
- @@registered_enumerations[self].values.map {|value| value.reverse }.sort_by { |value| value[0] }
194
+ @@registered_enumerations[self].values.map {|value| [translate(value[1]), value[0]] }.sort_by { |value| value[0] }
195
+ end
196
+
197
+ def self.translate(value)
198
+ return value unless value.is_a? Symbol
199
+
200
+ default = value.to_s.to_s.gsub(/_/, ' ').split.map(&:capitalize).join(' ')
201
+ I18n.t("enumerations.#{self.name.underscore}.#{value.to_s.underscore}", :default => default)
195
202
  end
196
203
  end
197
204
  end
@@ -213,7 +220,8 @@ module EnumerateIt
213
220
  class_eval do
214
221
  define_method "#{attribute_name}_humanize" do
215
222
  values = klass.enumeration.values.detect { |v| v[0] == self.send(attribute_name) }
216
- values ? values[1] : nil
223
+
224
+ values ? klass.translate(values[1]) : nil
217
225
  end
218
226
  end
219
227
  end
@@ -24,6 +24,7 @@ describe EnumerateIt do
24
24
  has_enumeration_for :foobar, :with => TestEnumeration
25
25
 
26
26
  def initialize(foobar); @foobar = foobar; end
27
+ I18n.locale = :en
27
28
  end
28
29
 
29
30
  @target = TestClass.new(TestEnumeration::VALUE_2)
@@ -55,10 +56,19 @@ describe EnumerateIt do
55
56
 
56
57
  @target = TestClassForEnumerationWithoutArray.new(TestEnumerationWithoutArray::VALUE_TWO)
57
58
  end
58
-
59
+
59
60
  it "humanizes the respective hash key" do
60
61
  @target.foobar_humanize.should == 'Value Two'
61
62
  end
63
+
64
+ it "translates the respective hash key when a translation is found" do
65
+ @target.foobar = TestEnumerationWithoutArray::VALUE_ONE
66
+ @target.foobar_humanize.should == 'First Value'
67
+ I18n.locale = :pt
68
+
69
+ @target.foobar_humanize.should == 'Primeiro Valor'
70
+ end
71
+
62
72
  end
63
73
 
64
74
  context "without passing the enumeration class" do
@@ -117,6 +127,12 @@ describe EnumerateIt do
117
127
  it "returns an array with the values and human representations" do
118
128
  TestEnumeration.to_a.should == [['Hey, I am 1!', '1'], ['Hey, I am 2!', '2'], ['Hey, I am 3!', '3']]
119
129
  end
130
+
131
+ it "translates the available values" do
132
+ TestEnumerationWithoutArray.to_a.should == [['First Value', '1'], ['Value Two', '2']]
133
+ I18n.locale = :pt
134
+ TestEnumerationWithoutArray.to_a.should == [['Primeiro Valor', '1'], ['Value Two', '2']]
135
+ end
120
136
  end
121
137
 
122
138
  context "when included in ActiveRecord::Base" do
data/spec/i18n/en.yml ADDED
@@ -0,0 +1,4 @@
1
+ en:
2
+ enumerations:
3
+ test_enumeration_without_array:
4
+ value_one: First Value
data/spec/i18n/pt.yml ADDED
@@ -0,0 +1,4 @@
1
+ pt:
2
+ enumerations:
3
+ test_enumeration_without_array:
4
+ value_one: Primeiro Valor
data/spec/spec_helper.rb CHANGED
@@ -7,3 +7,4 @@ require 'spec/autorun'
7
7
  require 'rubygems'
8
8
  require 'active_record'
9
9
 
10
+ I18n.load_path = Dir['spec/i18n/*.yml']
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 4
7
+ - 5
8
8
  - 0
9
- version: 0.4.0
9
+ version: 0.5.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - "C\xC3\xA1ssio Marques"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-10 00:00:00 -03:00
17
+ date: 2010-04-14 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -50,6 +50,8 @@ files:
50
50
  - enumerate_it.gemspec
51
51
  - lib/enumerate_it.rb
52
52
  - spec/enumerate_it_spec.rb
53
+ - spec/i18n/en.yml
54
+ - spec/i18n/pt.yml
53
55
  - spec/spec.opts
54
56
  - spec/spec_helper.rb
55
57
  has_rdoc: true