enum_ish 1.2.2 → 1.3.3

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
  SHA256:
3
- metadata.gz: 17969b00055223b32c415d1dffeb22855a8efa1de17aa46fbf0cf51114f65de5
4
- data.tar.gz: 9fcc271cbd49bc7ad4e670b88a3c8120f21a8e6b38d8192b1705d7fd94811f85
3
+ metadata.gz: aad3607cc8b6c21e15582ee8ec3240d664c9c145c270f322f2e9cda3966ef920
4
+ data.tar.gz: 4dc14db67c76e0d7e23b8ce287605b1a10c965824b19aa45dc53f3f855a1b092
5
5
  SHA512:
6
- metadata.gz: b3449674e452b6d28fb71ce522fff9ffcece57d56c396e09911a2d21aa23071ea633df22b02fd1691e5c51d269c19ebdebbfadeee48ef08e106153fbc755194c
7
- data.tar.gz: ffe384c257c5f77bd684b17fcdba46f4e1b4cc3486d1d1dc6ef3304f8b8c0a950c42f68be4255cc62e495279279804ef6fb74ebbbdcfe64627e491430525bc2c
6
+ metadata.gz: 9d4f274982727f7aa04b6b71b3a6017ba598fa27287065a1703412f94a58332eb478cb4ea7da0c218fbb2fd0f7cc08f5439c1520986ec7107a6fbd2b093a2133
7
+ data.tar.gz: a2038ffa1f1ab5ce99d5166565339f84b6711698537dda7c918d1db9873780bf60bfcdd2e7db38f68282ff58410d866f9b2a02a60d05c6d7e771b13c0dcbc82b
@@ -0,0 +1,47 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-16.04
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby: [2.3, 2.4, 2.5, 2.6, 2.7, 3.0]
12
+ gemfile: ['rails50', 'rails51', 'rails52', 'rails60', 'rails61']
13
+ exclude:
14
+ - ruby: 2.3
15
+ gemfile: rails60
16
+ - ruby: 2.3
17
+ gemfile: rails61
18
+ - ruby: 2.4
19
+ gemfile: rails60
20
+ - ruby: 2.4
21
+ gemfile: rails61
22
+ - ruby: 3.0
23
+ gemfile: rails50
24
+ - ruby: 3.0
25
+ gemfile: rails51
26
+ - ruby: 3.0
27
+ gemfile: rails52
28
+
29
+ name: ruby ${{ matrix.ruby }}, ${{ matrix.gemfile }}
30
+
31
+ env:
32
+ BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
33
+
34
+ steps:
35
+ - uses: actions/checkout@v2
36
+ - uses: ruby/setup-ruby@v1
37
+ with:
38
+ ruby-version: ${{ matrix.ruby }}
39
+ bundler-cache: true
40
+ - name: Prepare test
41
+ run: |
42
+ cd spec/dummy
43
+ BUNDLE_GEMFILE=../../${{ env.BUNDLE_GEMFILE }} RAILS_ENV=test bundle exec rake db:create db:migrate db:seed
44
+ cd ../..
45
+ - name: Run test
46
+ run: |
47
+ bundle exec rspec
@@ -1,5 +1,25 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.3.3
4
+
5
+ * Support rails 6.1.
6
+
7
+ ## 1.3.2
8
+
9
+ * Fix deprecation warning for ruby 2.7.
10
+
11
+ ## 1.3.1
12
+
13
+ * Fix default value for model included ActiveModel.
14
+
15
+ ## 1.3.0
16
+
17
+ * Support array field.
18
+
19
+ ## 1.2.3
20
+
21
+ * Keep enum definitions as a hash internally.
22
+
3
23
  ## 1.2.2
4
24
 
5
25
  * Support assignment of string in addition to symbol.
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem "rails", "~> 6.1.0"
4
+
5
+ gemspec path: "../"
@@ -11,9 +11,8 @@ module EnumIsh
11
11
  def enum_ish(name, map, config = {})
12
12
  enum = Enum.new(name, map, config)
13
13
 
14
- self.class_attribute :_enum_ish_enums unless self.respond_to?(:_enum_ish_enums)
15
- self._enum_ish_enums ||= []
16
- self._enum_ish_enums << enum
14
+ self._enum_ish_enums ||= {}
15
+ self._enum_ish_enums[name.to_sym] = enum
17
16
 
18
17
  if defined?(ActiveRecord::Base) && self.ancestors.include?(ActiveRecord::Base)
19
18
  ActiveRecordDefiner.new(self).define(enum)
@@ -21,4 +20,8 @@ module EnumIsh
21
20
  Definer.new(self).define(enum)
22
21
  end
23
22
  end
23
+
24
+ def self.extended(klass)
25
+ klass.class_attribute :_enum_ish_enums
26
+ end
24
27
  end
@@ -24,7 +24,13 @@ module EnumIsh
24
24
  enum.mapping.fetch(value, value)
25
25
  end
26
26
 
27
- decorate_attribute_type(enum.name, :enum) do |subtype|
27
+ args =
28
+ if ActiveRecord.version > Gem::Version.new('6.1.0.a')
29
+ [enum.name]
30
+ else
31
+ [enum.name, :enum]
32
+ end
33
+ decorate_attribute_type(*args) do |subtype|
28
34
  EnumIsh::ActiveRecordEnumType.new(enum.name, enum.mapping, subtype)
29
35
  end
30
36
  end
@@ -15,27 +15,31 @@ module EnumIsh
15
15
  def define_text(enum)
16
16
  @klass.class_eval do
17
17
  define_method "#{Config.text_prefix}#{enum.name}#{Config.text_suffix}" do |options = {}|
18
- value = public_send(enum.name)
19
- dic = Dictionary.new(self.class).load(enum, options)
20
- dic[value] || value
18
+ dict = Dictionary.new(self.class, enum, options)
19
+ dict.translate_value(public_send(enum.name))
21
20
  end
22
- end
21
+ end
23
22
  end
24
23
 
25
24
  def define_options(enum)
26
25
  @klass.class_eval do
27
26
  define_singleton_method "#{Config.options_prefix}#{enum.name}#{Config.options_suffix}" do |options = {}|
28
- dic = Dictionary.new(self).load(enum, options)
29
- dic.to_a.map { |value, label| [label, value] }
27
+ dict = Dictionary.new(self, enum, options)
28
+ dict.translate_options
30
29
  end
31
30
  end
32
31
  end
33
32
 
34
33
  def define_predicate(enum)
35
- enum.mapping.each do |key, value|
34
+ enum.mapping.each do |enum_key, enum_value|
36
35
  @klass.class_eval do
37
- define_method "#{enum.name}_#{key}?".tr('.', '_') do
38
- public_send(enum.name) == value
36
+ define_method "#{enum.name}_#{enum_key}?".tr('.', '_') do
37
+ value = public_send(enum.name)
38
+ if value.is_a?(Array)
39
+ value == [enum_value]
40
+ else
41
+ value == enum_value
42
+ end
39
43
  end
40
44
  end
41
45
  end
@@ -45,15 +49,15 @@ module EnumIsh
45
49
  mod = Module.new
46
50
  mod.module_eval do
47
51
  define_method :initialize do |*args|
52
+ super(*args)
48
53
  if respond_to?(enum.name) && public_send(enum.name).nil?
49
54
  default = enum.setting[:default]
50
55
  default = instance_exec(&default) if default.kind_of?(Proc)
51
56
  public_send("#{enum.name}=", default)
52
57
  end
53
- super(*args)
54
58
  end
55
59
  end
56
- @klass.prepend mod
60
+ @klass.send(:include, mod)
57
61
  end
58
62
 
59
63
  def define_accessor(enum)
@@ -62,10 +66,10 @@ module EnumIsh
62
66
  instance_variable_get("@#{enum.name}")
63
67
  end
64
68
  define_method "#{enum.name}" do
65
- enum.mapping.invert[instance_variable_get("@#{enum.name}")]
69
+ enum.to_sym(instance_variable_get("@#{enum.name}"))
66
70
  end
67
71
  define_method "#{enum.name}=" do |value|
68
- instance_variable_set("@#{enum.name}", enum.mapping.fetch(value, value))
72
+ instance_variable_set("@#{enum.name}", enum.to_raw(value))
69
73
  end
70
74
  end
71
75
  end
@@ -1,17 +1,30 @@
1
1
  module EnumIsh
2
2
  class Dictionary
3
- def initialize(klass)
3
+ def initialize(klass, enum, options = {})
4
4
  @klass = klass
5
+ @dict = load(enum, options)
5
6
  end
6
7
 
7
- def load(enum, options = {})
8
- translated = translate(enum, options)
9
- filter(translated, options)
8
+ def translate_value(value)
9
+ if value.is_a?(Array)
10
+ value.map { |v| @dict[v] || v }
11
+ else
12
+ @dict[value] || value
13
+ end
14
+ end
15
+
16
+ def translate_options
17
+ @dict.to_a.map { |value, label| [label, value] }
10
18
  end
11
19
 
12
20
  private
13
21
 
14
- def translate(enum, options)
22
+ def load(enum, options)
23
+ dict = translate_dict(enum, options)
24
+ filter(dict, options)
25
+ end
26
+
27
+ def translate_dict(enum, options)
15
28
  dict = load_dict(enum, options)
16
29
  translated = enum.mapping.map { |k, v| dict[k] ? [k, dict[k]] : [k, v.to_s] }.to_h
17
30
  translated = translated.map { |k, v| [enum.mapping[k], v] }.to_h unless enum.setting[:accessor]
@@ -20,7 +33,7 @@ module EnumIsh
20
33
 
21
34
  def load_dict(enum, options)
22
35
  key = i18n_key(enum, options)
23
- dict = I18n.t("enum_ish.#{@klass.name.underscore}.#{key}", i18n_options(enum, options))
36
+ dict = I18n.t("enum_ish.#{@klass.name.underscore}.#{key}", **i18n_options(enum, options))
24
37
  dict.map { |k, v| [k.to_s.to_sym, v.to_s] }.to_h
25
38
  end
26
39
 
@@ -10,6 +10,23 @@ module EnumIsh
10
10
  @setting = init_setting(setting)
11
11
  end
12
12
 
13
+ def to_raw(value)
14
+ if value.is_a?(Array)
15
+ value.map { |v| @mapping.fetch(v, v) }
16
+ else
17
+ @mapping.fetch(value, value)
18
+ end
19
+ end
20
+
21
+ def to_sym(value)
22
+ inverted = @mapping.invert
23
+ if value.is_a?(Array)
24
+ value.map { |v| inverted[v] }
25
+ else
26
+ inverted[value]
27
+ end
28
+ end
29
+
13
30
  private
14
31
 
15
32
  def init_mapping(mapping)
@@ -1,3 +1,3 @@
1
1
  module EnumIsh
2
- VERSION = '1.2.2'
2
+ VERSION = '1.3.3'
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.2.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshikazu Kaneta
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-13 00:00:00.000000000 Z
11
+ date: 2021-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -101,9 +101,9 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
+ - ".github/workflows/ci.yml"
104
105
  - ".gitignore"
105
106
  - ".rspec"
106
- - ".travis.yml"
107
107
  - CHANGELOG.md
108
108
  - Gemfile
109
109
  - LICENSE
@@ -114,6 +114,7 @@ files:
114
114
  - gemfiles/rails51.gemfile
115
115
  - gemfiles/rails52.gemfile
116
116
  - gemfiles/rails60.gemfile
117
+ - gemfiles/rails61.gemfile
117
118
  - lib/enum_ish.rb
118
119
  - lib/enum_ish/active_record_definer.rb
119
120
  - lib/enum_ish/active_record_enum_type.rb
@@ -141,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
142
  - !ruby/object:Gem::Version
142
143
  version: '0'
143
144
  requirements: []
144
- rubygems_version: 3.0.3
145
+ rubygems_version: 3.2.3
145
146
  signing_key:
146
147
  specification_version: 4
147
148
  summary: A ruby and rails extension to generate enum-like methods
@@ -1,23 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3
4
- - 2.4
5
- - 2.5
6
- - 2.6
7
- gemfile:
8
- - gemfiles/rails50.gemfile
9
- - gemfiles/rails51.gemfile
10
- - gemfiles/rails52.gemfile
11
- - gemfiles/rails60.gemfile
12
- matrix:
13
- exclude:
14
- - rvm: 2.3
15
- gemfile: gemfiles/rails60.gemfile
16
- - rvm: 2.4
17
- gemfile: gemfiles/rails60.gemfile
18
- before_script:
19
- - cd spec/dummy
20
- - bundle exec rake db:create db:migrate db:seed RAILS_ENV=test
21
- - cd ../..
22
- script:
23
- - bundle exec rspec