enum_ish 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
- SHA1:
3
- metadata.gz: 72e9f45d9096f7b3cb71b41f0eec2db69993d4b6
4
- data.tar.gz: b642520f713d95c7730d9096af0b69a11a9007ac
2
+ SHA256:
3
+ metadata.gz: 86b4cbe506b5b3a8cb444859dccda2f26dace53d2b3efbfa26d5aac1ab8313b8
4
+ data.tar.gz: 496e004c5d0992cde158973eaf48bbf22a361d0fe130c30632913aaada92ec9d
5
5
  SHA512:
6
- metadata.gz: df6c0a64caa6dfc6551c82f759dbb3697024d58d77c10ad9b552e9cf766680151db386b4fd733033e9dbda4205e7dbe5ae2e71c66ff5d17fdd382968a887b48a
7
- data.tar.gz: f7ef88a3ebd6b5f13be8fb9d6ee7505d69eded7a4358279bf07196cb76238c258fd9afe7f9f99fb399f065793e50970e2266dbb8005fbd4511c5ad74cc1daa7b
6
+ metadata.gz: 7bca545b6e8fb12143d801a16a9dbed2e0b3fc23deb07501ac74698681293b3c110a60c964be835e86fb1e26aacfcbddf72377e2df31e7dcf530385742d499cc
7
+ data.tar.gz: ba39d1e0fd59d0c4180f779c568d3bf00a9b2099072def2602397abbeb154a8f6ab1f395c23793e199b511f8bdf98e771741f9e44b7a740aac5eb83c0224fcaf
data/README.md CHANGED
@@ -48,6 +48,8 @@ user = User.new
48
48
  user.status = 'enable'
49
49
  user.status_text #=> "有効"
50
50
  User.status_options #=> [["有効", "enable"], ["無効", "disable"]]
51
+ User.status_options(only: 'enable') #=> [["有効", "enable"]]
52
+ User.status_options(except: 'enable') #=> [["無効", "disable"]]
51
53
  ```
52
54
 
53
55
  ### Additional translations
@@ -88,6 +90,19 @@ user = User.new
88
90
  user.status #=> "enable"
89
91
  ```
90
92
 
93
+ Use default value with block:
94
+
95
+ ```ruby
96
+ class User
97
+ extend EnumIsh
98
+ attr_accessor :status, :flag
99
+ enum_ish :status, ['enable', 'disable'], default: -> { flag ? 'enable' : 'disable' }
100
+ end
101
+
102
+ user = User.new
103
+ user.status #=> "disable"
104
+ ```
105
+
91
106
  ### Predicates
92
107
 
93
108
  Generate predicate methods:
data/enum_ish.gemspec CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_dependency "activesupport", ">= 5.0"
21
+ spec.add_dependency "i18n"
21
22
 
22
23
  spec.add_development_dependency "rails", ">= 5.0"
23
24
  spec.add_development_dependency "sqlite3"
@@ -1,5 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem "rails", "~> 5.2.0.rc1"
3
+ gem "rails", "~> 5.2.0"
4
4
 
5
5
  gemspec path: "../"
@@ -9,7 +9,14 @@ module EnumIsh
9
9
  @klass.class_eval do
10
10
  after_initialize method
11
11
  define_method method do
12
- public_send("#{attr}=", config[:default]) if respond_to?(attr) && public_send(attr).nil?
12
+ if respond_to?(attr) && public_send(attr).nil?
13
+ default = if config[:default].kind_of?(Proc)
14
+ instance_exec(&config[:default])
15
+ else
16
+ config[:default]
17
+ end
18
+ public_send("#{attr}=", default)
19
+ end
13
20
  end
14
21
  end
15
22
  end
@@ -35,7 +42,7 @@ module EnumIsh
35
42
 
36
43
  @klass.class_eval do
37
44
  scope method, ->(value) {
38
- where(attr => value)
45
+ where(attr => (enum[value] || value))
39
46
  }
40
47
  end
41
48
  end
@@ -64,7 +64,14 @@ module EnumIsh
64
64
  mod = Module.new
65
65
  mod.module_eval do
66
66
  define_method :initialize do |*args|
67
- public_send("#{attr}=", config[:default]) if respond_to?(attr) && public_send(attr).nil?
67
+ if respond_to?(attr) && public_send(attr).nil?
68
+ default = if config[:default].kind_of?(Proc)
69
+ instance_exec(&config[:default])
70
+ else
71
+ config[:default]
72
+ end
73
+ public_send("#{attr}=", default)
74
+ end
68
75
  super(*args)
69
76
  end
70
77
  end
@@ -104,14 +111,25 @@ module EnumIsh
104
111
 
105
112
  translated = enum.map { |k, v| dict[k] ? [k, dict[k]] : [k, v.to_s] }.to_h
106
113
  translated = translated.map { |k, v| [enum[k], v] }.to_h unless config[:accessor]
114
+
115
+ if options[:except]
116
+ except = Array(options[:except])
117
+ translated.reject! { |k, v| except.include?(k) }
118
+ end
119
+ if options[:only]
120
+ only = Array(options[:only])
121
+ translated.select! { |k, v| only.include?(k) }
122
+ end
123
+
107
124
  translated
108
125
  end
109
126
 
110
127
  private
111
128
 
112
129
  def load_i18n(attr, enum, options)
113
- attr_key = [attr, options.delete(:format)].compact.join('/')
114
- i18n_options = options.merge(default: [:"enum_ish.defaults.#{attr_key}", enum.invert])
130
+ attr_key = [attr, options[:format]].compact.join('/')
131
+ i18n_options = (options[:i18n_options] || {}).merge(default: [:"enum_ish.defaults.#{attr_key}", enum.invert])
132
+
115
133
  dict = I18n.t("enum_ish.#{@klass.name.underscore}.#{attr_key}", i18n_options)
116
134
  dict.map { |k, v| [k.to_s.to_sym, v.to_s] }.to_h
117
135
  end
@@ -1,3 +1,3 @@
1
1
  module EnumIsh
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enum_ish
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
  - Yoshikazu Kaneta
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-19 00:00:00.000000000 Z
11
+ date: 2018-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: i18n
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rails
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -149,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
163
  version: '0'
150
164
  requirements: []
151
165
  rubyforge_project:
152
- rubygems_version: 2.5.2.2
166
+ rubygems_version: 2.7.4
153
167
  signing_key:
154
168
  specification_version: 4
155
169
  summary: A ruby and rails extension to generate enum-like methods