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