enum_accessor 1.0.0 → 1.1.0

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.
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