enum_machine 2.3.0 → 2.3.1

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
  SHA256:
3
- metadata.gz: 86f84c741963ae08afc9fc2072a816140b13a8f819fecf2739460cf1118ac10d
4
- data.tar.gz: c8eea28785d2845c8ccaf8892f9c63f8e600054b5e8c74998656f1fbda3ced97
3
+ metadata.gz: 9652b2333de5222d8012acef09006ba1f57f6d5eed4a69afc52aa8e43c930c69
4
+ data.tar.gz: 3e9929cc5e1f14a78d28321e61c052cc0067d338f219dc70ffa829982a3701f6
5
5
  SHA512:
6
- metadata.gz: db343c2b699f2d00ead6c0ae58a033b3269e4680f55711eb82b136ed0c7092ec3365ce6b5cddd19d28378f2cf1952d67e5e411f6fb97d9a0059ad7ca79a1af5d
7
- data.tar.gz: 98e5ad6a7e5ecff10a12c96f2d24a1d19b75b7903bd55fa70aec36d628502ed090d0568d0f5e9ddbd941e08804171d4ad0e09d84dc44b3836d33aca55545c33c
6
+ metadata.gz: 9381ee9e5e0faf50c90becfbea6b1299c50db93e49617735886ccaac987a95f01ee8bd654cd6afa63ad6ff0feb26f8701d79e201ae8f4b8368bfe4a7f2cb7236
7
+ data.tar.gz: e2d7f9c85b2decd744b4163c31f24597f4785cf4fe4e69d262156d6ecec8538cec437315183682e35236f8436ecdc82c53424535ae143d6bac626b9052b46c6a
data/Gemfile.lock CHANGED
@@ -22,7 +22,7 @@ GIT
22
22
  PATH
23
23
  remote: .
24
24
  specs:
25
- enum_machine (2.3.0)
25
+ enum_machine (2.3.1)
26
26
  activemodel
27
27
  activerecord
28
28
  activesupport
data/README.md CHANGED
@@ -298,11 +298,17 @@ comment.review_type.bonus_value # => 100
298
298
  # Form helpers (when i18n_scope is set)
299
299
  Comment::REVIEW_TYPE.values_for_form
300
300
  # => [["Text", "text"], ["Photo", "photo"], ["Video", "video"]]
301
+
302
+ # Reuse with enum_decorator in other classes or models
303
+ class UserFeedback < ActiveRecord::Base
304
+ # requires `review_type` database column (or `attr_accessor :review_type` in plain classes)
305
+ include Comment::REVIEW_TYPE.enum_decorator
306
+ end
301
307
  ```
302
308
 
303
309
  In `ActiveRecord` models, `enum_machine :attribute` relies on a database column for persistence
304
310
  and dirty tracking. `EnumMachine.enum` is designed for everything else where you still want
305
- enum capabilities without an underlying column.
311
+ enum capabilities without an underlying column, and can be plugged into classes via `.enum_decorator`.
306
312
 
307
313
  ## Benchmarks
308
314
  [test/performance.rb](../master/test/performance.rb)
@@ -19,6 +19,10 @@ module EnumMachine
19
19
  value_attribute_mapping[key] if value_attribute_mapping.key?(key)
20
20
  end
21
21
 
22
+ define_singleton_method(:enum_decorator) do
23
+ @enum_decorator ||= BuildEnumClass.build_enum_decorator(self, name.demodulize.underscore)
24
+ end
25
+
22
26
  if i18n_scope
23
27
  def self.values_for_form(specific_values = nil)
24
28
  (specific_values || values).map { |v| [human_name_for(v), v] }
@@ -59,5 +63,26 @@ module EnumMachine
59
63
  end
60
64
  end
61
65
  end
66
+
67
+ def self.build_enum_decorator(enum_class, attr)
68
+ enum_const_name = attr.to_s.upcase
69
+
70
+ define_methods =
71
+ Module.new do
72
+ define_method(attr) do
73
+ enum_value = super()
74
+ return unless enum_value
75
+
76
+ enum_class.value_attribute_mapping.fetch(enum_value)
77
+ end
78
+ end
79
+
80
+ Module.new do
81
+ define_singleton_method(:included) do |decorating_class|
82
+ decorating_class.prepend define_methods
83
+ decorating_class.const_set enum_const_name, enum_class
84
+ end
85
+ end
86
+ end
62
87
  end
63
88
  end
@@ -18,26 +18,8 @@ module EnumMachine
18
18
  if defined?(ActiveRecord) && klass <= ActiveRecord::Base
19
19
  klass.enum_machine(attr, enum_values, i18n_scope: i18n_scope)
20
20
  else
21
- enum_const_name = attr.to_s.upcase
22
21
  enum_class = EnumMachine.enum(enum_values, i18n_scope: i18n_scope, value_decorator: value_decorator)
23
-
24
- define_methods =
25
- Module.new do
26
- define_method(attr) do
27
- enum_value = super()
28
- return unless enum_value
29
-
30
- enum_class.value_attribute_mapping.fetch(enum_value)
31
- end
32
- end
33
-
34
- enum_decorator =
35
- Module.new do
36
- define_singleton_method(:included) do |decorating_class|
37
- decorating_class.prepend define_methods
38
- decorating_class.const_set enum_const_name, enum_class
39
- end
40
- end
22
+ enum_decorator = BuildEnumClass.build_enum_decorator(enum_class, attr)
41
23
  enum_class.define_singleton_method(:enum_decorator) { enum_decorator }
42
24
 
43
25
  klass.include(enum_decorator)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EnumMachine
4
- VERSION = "2.3.0"
4
+ VERSION = "2.3.1"
5
5
  end
data/lib/enum_machine.rb CHANGED
@@ -7,6 +7,7 @@ require_relative "enum_machine/attribute_persistence_methods"
7
7
  require_relative "enum_machine/build_enum_class"
8
8
  require_relative "enum_machine/machine"
9
9
  require "active_support"
10
+ require "active_support/core_ext/string"
10
11
 
11
12
  module EnumMachine
12
13
  class Error < StandardError; end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enum_machine
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ermolaev Andrey