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 +4 -4
- data/README.md +10 -6
- data/lib/enum_accessor.rb +8 -11
- data/lib/enum_accessor/version.rb +1 -1
- data/spec/enum_accessor_spec.rb +15 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d86255884f7966bd0e809b50e930e329c42d4b41
|
4
|
+
data.tar.gz: 6c54bd945c9ae2d6046b5e4b5b13b27dc8cdc01d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
114
|
+
user.human_gender # => '女'
|
115
|
+
User.genders.human_dict # => { 'female' => '女', 'male' => '男' }
|
116
116
|
|
117
117
|
I18n.locale = :en
|
118
|
-
user.human_gender
|
119
|
-
User.genders.human_dict
|
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=`
|
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
|
|
data/lib/enum_accessor.rb
CHANGED
@@ -7,8 +7,8 @@ module EnumAccessor
|
|
7
7
|
|
8
8
|
module ClassMethods
|
9
9
|
def enum_accessor(column, keys, options={})
|
10
|
-
definition = :
|
11
|
-
class_attribute definition
|
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
|
-
|
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
|
-
|
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
|
-
|
102
|
-
|
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
|
data/spec/enum_accessor_spec.rb
CHANGED
@@ -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
|
75
|
+
class UserNoValidate < ActiveRecord::Base
|
76
76
|
self.table_name = :users
|
77
|
-
enum_accessor :gender, [:female, :male], validates:
|
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 =
|
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.
|
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-
|
11
|
+
date: 2014-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|