enum_accessor 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4447e24f3730702d1e8941a42376605fa905064d
4
- data.tar.gz: 9adf5320bb7fe9c8f1e8f719c54146fe8fade703
3
+ metadata.gz: d86255884f7966bd0e809b50e930e329c42d4b41
4
+ data.tar.gz: 6c54bd945c9ae2d6046b5e4b5b13b27dc8cdc01d
5
5
  SHA512:
6
- metadata.gz: 30990654b79c136e12443358a3fae8470d91e0966affe68b8d93a9f65df7cbfd372c4f6c4100345aa7597f7521d03221d991a80a5ea3485077b81f5417063434
7
- data.tar.gz: a308687d6221dab4b912d65e28be73266d9fdb90e0cc6b2591a4a2c47a00dc27537288e728688422030e2ef8dfaed0e681fc70eb09cd081368db8ba836a6416a
6
+ metadata.gz: 6a19a3a40b302f92ac389bde732a5c461d6b5927885eeefce29d5ab0fcede07dc49f98f295ce6504577a23705d4de303303e9a25703d962406791379b1db7be8
7
+ data.tar.gz: d02c42efa9212eba91bd9a90fdb6bf36f717786a55953319f4c892bb0201f8d69e765c3f1ef71570fe57b9ea46446f90af178354a7ff26978538be4b1cade89b
data/README.md CHANGED
@@ -111,24 +111,28 @@ and now `human_*` methods return a translated string. It defaults to `humanize`
111
111
 
112
112
  ```ruby
113
113
  I18n.locale = :ja
114
- user.human_gender # => '女'
115
- User.genders.human_dict # => { 'female' => '女', 'male' => '男' }
114
+ user.human_gender # => '女'
115
+ User.genders.human_dict # => { 'female' => '女', 'male' => '男' }
116
116
 
117
117
  I18n.locale = :en
118
- user.human_gender # => 'Female'
119
- User.genders.human_dict # => { 'female' => 'Female', 'male' => 'Male' }
118
+ user.human_gender # => 'Female'
119
+ User.genders.human_dict # => { 'female' => 'Female', 'male' => 'Male' }
120
120
  ```
121
121
 
122
122
  ## Changelog
123
123
 
124
+ - v1.1.0:
125
+ - Validate by default again.
126
+ - Added `:class_attribute` option to specify class attribute to hold definitions
127
+ - Cache translations on the fly
124
128
  - v1.0.0:
125
129
  - Drop support for Ruby 1.8
126
130
  - Now getter method returns a String rather than a Symbol
127
131
  - Do not validate by default
128
132
  - Added `where_gender(:female)` scope
129
- - Removed the `_raw=` setter as it is now aware of the argument type
133
+ - Removed the `_raw=` as setter automatically handles both types
130
134
  - Removed constants (e.g. `User::GENDERS`) and now use the class attribute to save the definition
131
- - v0.3.0: Add support for `find_or_create_by`
135
+ - v0.3.0: Add support for `find_or_create_by` - just pass integer value
132
136
 
133
137
  ## Other solutions
134
138
 
@@ -7,8 +7,8 @@ module EnumAccessor
7
7
 
8
8
  module ClassMethods
9
9
  def enum_accessor(column, keys, options={})
10
- definition = :"#{column}_enum_accessor"
11
- class_attribute definition # will set instance accessor as well
10
+ definition = options[:class_attribute] || column.to_s.pluralize.to_sym
11
+ class_attribute definition
12
12
  send "#{definition}=", Definition.new(column, keys, self)
13
13
 
14
14
  # Getter
@@ -40,12 +40,7 @@ module EnumAccessor
40
40
 
41
41
  # Human-friendly print
42
42
  define_method("human_#{column}") do
43
- self.class.send "human_#{column}", send(column)
44
- end
45
-
46
- # Class methods
47
- define_singleton_method column.to_s.pluralize do
48
- send(definition)
43
+ send(definition).human_dict[send(column)]
49
44
  end
50
45
 
51
46
  # Human-friendly print on class level
@@ -73,7 +68,7 @@ module EnumAccessor
73
68
  if options.has_key?(:validate) or options.has_key?(:validation_options)
74
69
  raise ArgumentError, 'validation options are updated. please refer to the documentation.'
75
70
  end
76
- if options[:validates]
71
+ unless options[:validates] == false
77
72
  validation_options = options[:validates].is_a?(Hash) ? options[:validates] : {}
78
73
  validates column, { inclusion: { in: send(definition).dict.keys } }.merge(validation_options)
79
74
  end
@@ -95,11 +90,13 @@ module EnumAccessor
95
90
  @column = column
96
91
  @klass = klass
97
92
  @dict = dict.with_indifferent_access.freeze
93
+ @human_dict = {}
98
94
  end
99
95
 
100
96
  def human_dict
101
- # Don't memoize - I18n.locale can change
102
- Hash[@dict.keys.map{|key| [key, @klass.send("human_#{@column}", key)] }].with_indifferent_access
97
+ @human_dict[I18n.locale] ||= begin
98
+ Hash[@dict.keys.map{|key| [key, @klass.send("human_#{@column}", key)] }].with_indifferent_access.freeze
99
+ end
103
100
  end
104
101
  end
105
102
  end
@@ -1,3 +1,3 @@
1
1
  module EnumAccessor
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -43,15 +43,15 @@ describe EnumAccessor do
43
43
  it 'adds humanized methods' do
44
44
  I18n.locale = :ja
45
45
  expect(User.human_attribute_name(:gender)).to eq('性別')
46
- expect(@user.human_gender).to eq('女')
47
- expect(User.genders.human_dict[:female]).to eq('女')
48
46
  expect(User.genders.human_dict).to eq({ 'female' => '女', 'male' => '男' })
47
+ expect(User.genders.human_dict[:female]).to eq('女')
48
+ expect(@user.human_gender).to eq('女')
49
49
 
50
50
  I18n.locale = :en
51
51
  expect(User.human_attribute_name(:gender)).to eq('Gender')
52
- expect(@user.human_gender).to eq('Female')
53
- expect(User.genders.human_dict[:female]).to eq('Female')
54
52
  expect(User.genders.human_dict).to eq({ 'female' => 'Female', 'male' => 'Male' })
53
+ expect(User.genders.human_dict[:female]).to eq('Female')
54
+ expect(@user.human_gender).to eq('Female')
55
55
  end
56
56
 
57
57
  it 'adds class methods' do
@@ -72,9 +72,9 @@ describe EnumAccessor do
72
72
  end
73
73
 
74
74
  it 'adds validation' do
75
- class UserValidate < ActiveRecord::Base
75
+ class UserNoValidate < ActiveRecord::Base
76
76
  self.table_name = :users
77
- enum_accessor :gender, [:female, :male], validates: true
77
+ enum_accessor :gender, [:female, :male], validates: false
78
78
  end
79
79
 
80
80
  class UserValidateAllowNil < ActiveRecord::Base
@@ -82,7 +82,7 @@ describe EnumAccessor do
82
82
  enum_accessor :gender, [:female, :male], validates: { allow_nil: true }
83
83
  end
84
84
 
85
- user = UserValidate.new
85
+ user = User.new
86
86
  user.gender = 'male'
87
87
  expect(user.valid?).to be_truthy
88
88
  user.gender = nil
@@ -90,6 +90,14 @@ describe EnumAccessor do
90
90
  user.gender = 'bogus' # Becomes nil
91
91
  expect(user.valid?).to be_falsey
92
92
 
93
+ user = UserNoValidate.new
94
+ user.gender = 'male'
95
+ expect(user.valid?).to be_truthy
96
+ user.gender = nil
97
+ expect(user.valid?).to be_truthy
98
+ user.gender = 'bogus' # Becomes nil
99
+ expect(user.valid?).to be_truthy
100
+
93
101
  user = UserValidateAllowNil.new
94
102
  user.gender = 'male'
95
103
  expect(user.valid?).to be_truthy
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enum_accessor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenn Ejima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-21 00:00:00.000000000 Z
11
+ date: 2014-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport