eac_ruby_utils 0.115.0 → 0.117.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eac_ruby_utils/acts_as_abstract.rb +17 -6
  3. data/lib/eac_ruby_utils/acts_as_immutable/array_accessor.rb +25 -0
  4. data/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb +57 -0
  5. data/lib/eac_ruby_utils/{immutable → acts_as_immutable}/boolean_accessor.rb +3 -3
  6. data/lib/eac_ruby_utils/{immutable → acts_as_immutable}/class_methods.rb +2 -2
  7. data/lib/eac_ruby_utils/{immutable → acts_as_immutable}/common_accessor.rb +5 -5
  8. data/lib/eac_ruby_utils/{immutable/array_accessor.rb → acts_as_immutable/enumerable_accessor.rb} +11 -8
  9. data/lib/eac_ruby_utils/{immutable → acts_as_immutable}/hash_accessor.rb +5 -5
  10. data/lib/eac_ruby_utils/{immutable → acts_as_immutable}/instance_methods.rb +1 -1
  11. data/lib/eac_ruby_utils/acts_as_immutable/set_accessor.rb +25 -0
  12. data/lib/eac_ruby_utils/{immutable.rb → acts_as_immutable.rb} +1 -1
  13. data/lib/eac_ruby_utils/enumerables_methods.rb +42 -0
  14. data/lib/eac_ruby_utils/envs/executable.rb +14 -2
  15. data/lib/eac_ruby_utils/module_ancestors_variable/base.rb +34 -0
  16. data/lib/eac_ruby_utils/module_ancestors_variable/hash.rb +20 -0
  17. data/lib/eac_ruby_utils/module_ancestors_variable/set.rb +19 -0
  18. data/lib/eac_ruby_utils/module_ancestors_variable.rb +9 -0
  19. data/lib/eac_ruby_utils/patches/module/acts_as_immutable.rb +10 -0
  20. data/lib/eac_ruby_utils/patches/module/immutable.rb +3 -2
  21. data/lib/eac_ruby_utils/patches/object/debug.rb +9 -0
  22. data/lib/eac_ruby_utils/unimplemented_method_error.rb +6 -0
  23. data/lib/eac_ruby_utils/version.rb +1 -1
  24. metadata +19 -10
  25. data/lib/eac_ruby_utils/immutable/base_accessor.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be84b8b3b5f7b60b56a999c8aa958747cf415dc143ed654f192bbcfd7b3d0d1d
4
- data.tar.gz: ca5988e39fe2641aac05312f9ceb18d3a96c1a9d47491832a52a796c7df1a064
3
+ metadata.gz: 82c2a8a36a2f001a3de7c0512e08f4fa9ca7b26b690cc264a682c52b5dc7e1fd
4
+ data.tar.gz: 605b80b24ca686a9d6775fe19a3652619817dc075eb0d6285621bbe4abdabf0f
5
5
  SHA512:
6
- metadata.gz: b21dcf87a2778009eb8571d78aa533e0a1806603c7a298bb181dd0ce3a18cccec688fca12b45954d61abe590a22c538738a0ae570d21a61d03a002f9d4fe74a2
7
- data.tar.gz: '099e597c3949a781819a89a9d8c57eaa246696ee50c7d42e93a56e5e8fb5c7111c68042ed3bc483b9e6db68622b1311622a99a9c3d360c3f9733a86f7003fa24'
6
+ metadata.gz: '00179145dcc8ebc905fe2a8a06b72a27c9d97fed906205c39d30f7de8719262d65f1fde1aec6e585d9d19e916c050302ad0e138dacb6a383ee1ac50b916f7851'
7
+ data.tar.gz: 81d90fa7a83eff36436bc30951ff163a3edb23a8f86e0fe020e2abb7bf4bdba08de459c12bb90022cf0f615a8857786934dc17fa8594ba86f22f397961db1f34
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_utils/module_ancestors_variable/hash'
3
4
  require 'eac_ruby_utils/patches/class/self_included_modules'
4
5
  require 'eac_ruby_utils/patches/module/common_concern'
6
+ require 'eac_ruby_utils/unimplemented_method_error'
5
7
 
6
8
  module EacRubyUtils
7
9
  # Support to abstract methods.
@@ -39,9 +41,7 @@ module EacRubyUtils
39
41
  # @param arguments [Enumerable<Symbol>]
40
42
  # @return [void]
41
43
  def abstract_method(name, *arguments)
42
- define_method name.to_sym do |*_the_args|
43
- raise_abstract_method(name.to_sym, arguments)
44
- end
44
+ abstract_methods_hash[name.to_sym] = arguments
45
45
  end
46
46
 
47
47
  # @param methods_names [Enumerable<Object>] Each item can be a symbolizable or a hash.
@@ -63,6 +63,12 @@ module EacRubyUtils
63
63
  def abstract_methods_from_hash(hash)
64
64
  hash.each { |name, arguments| abstract_method(name, *arguments) }
65
65
  end
66
+
67
+ # @return [Hash<Symbol, Array]
68
+ def abstract_methods_hash
69
+ @abstract_methods_hash ||=
70
+ ::EacRubyUtils::ModuleAncestorsVariable::Hash.new(self, __method__)
71
+ end
66
72
  end
67
73
 
68
74
  module InstanceMethods
@@ -76,13 +82,18 @@ module EacRubyUtils
76
82
  super
77
83
  end
78
84
 
85
+ # @param method_name [Symbol]
86
+ # @return [Boolean]
79
87
  def abstract_method?(method_name)
80
- self.class.abstract_methods.include?(method_name.to_sym)
88
+ return false if self.class.method_defined?(method_name)
89
+
90
+ self.class.send(:abstract_methods_hash).key?(method_name.to_sym)
81
91
  end
82
92
 
83
93
  def raise_abstract_method(method_name, arguments = [])
84
- raise ::NoMethodError, "Abstract method #{method_name}(#{arguments.join(', ')}) hit in " \
85
- "#{self}\" (Class: #{self.class})"
94
+ raise ::EacRubyUtils::UnimplementedMethodError,
95
+ "Abstract method #{method_name}(#{arguments.join(', ')}) hit in " \
96
+ "#{self}\" (Class: #{self.class})"
86
97
  end
87
98
  end
88
99
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/acts_as_immutable/enumerable_accessor'
4
+
5
+ module EacRubyUtils
6
+ module ActsAsImmutable
7
+ class ArrayAccessor < ::EacRubyUtils::ActsAsImmutable::EnumerableAccessor
8
+ INITIAL_VALUE = [].freeze
9
+
10
+ # @param value [Object]
11
+ # @return [Array]
12
+ def immutable_value_set_assert(value)
13
+ return value if value.is_a?(::Array)
14
+ return value.to_a if value.respond_to?(:to_a)
15
+
16
+ Array(value)
17
+ end
18
+
19
+ # @return [Array] A empty array.
20
+ def initial_value
21
+ INITIAL_VALUE
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/object/if_respond'
4
+
5
+ module EacRubyUtils
6
+ module ActsAsImmutable
7
+ class BaseAccessor
8
+ FILTER_GET_METHOD_NAME_FORMAT = '%s_get_filter'
9
+ FILTER_SET_METHOD_NAME_FORMAT = '%s_set_filter'
10
+
11
+ common_constructor :name do
12
+ self.name = name.to_sym
13
+ end
14
+
15
+ def duplicate_object(object)
16
+ accessor_new_value = yield(immutable_value_get(object))
17
+ new_values = object.send(:immutable_values_get).merge(name => accessor_new_value)
18
+ r = object.class.new(*object.immutable_constructor_args)
19
+ r.send(:immutable_values_set, new_values)
20
+ r
21
+ end
22
+
23
+ def immutable_value_get(object)
24
+ object.send(:immutable_values_get)[name]
25
+ end
26
+
27
+ # @param object [Object]
28
+ # @return [Object]
29
+ def immutable_value_get_filtered(object)
30
+ r = immutable_value_get(object)
31
+ if object.respond_to?(immutable_value_get_filtered_method_name, true)
32
+ r = object.send(immutable_value_get_filtered_method_name, r)
33
+ end
34
+ r
35
+ end
36
+
37
+ # @return [Symbol]
38
+ def immutable_value_get_filtered_method_name
39
+ format(FILTER_GET_METHOD_NAME_FORMAT, name)
40
+ end
41
+
42
+ # @param object [Object]
43
+ # @return [Object]
44
+ def immutable_value_set_filtered(object, value)
45
+ if object.respond_to?(immutable_value_set_filtered_method_name, true)
46
+ value = object.send(immutable_value_set_filtered_method_name, value)
47
+ end
48
+ immutable_value_set(object, value)
49
+ end
50
+
51
+ # @return [Symbol]
52
+ def immutable_value_set_filtered_method_name
53
+ format(FILTER_SET_METHOD_NAME_FORMAT, name)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_ruby_utils/immutable/common_accessor'
3
+ require 'eac_ruby_utils/acts_as_immutable/common_accessor'
4
4
  require 'eac_ruby_utils/patches/class/common_constructor'
5
5
 
6
6
  module EacRubyUtils
7
- module Immutable
8
- class BooleanAccessor < ::EacRubyUtils::Immutable::CommonAccessor
7
+ module ActsAsImmutable
8
+ class BooleanAccessor < ::EacRubyUtils::ActsAsImmutable::CommonAccessor
9
9
  def apply(klass)
10
10
  super
11
11
  accessor = self
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- module Immutable
4
+ module ActsAsImmutable
5
5
  module ClassMethods
6
6
  def immutable_accessor(*accessors)
7
7
  options = accessors.extract_options!
8
8
  options[:type] ||= const_get('TYPE_COMMON')
9
9
  accessors.each do |name|
10
10
  class_name = options.fetch(:type).to_s.camelize + 'Accessor'
11
- ::EacRubyUtils::Immutable.const_get(class_name).new(name).apply(self)
11
+ ::EacRubyUtils::ActsAsImmutable.const_get(class_name).new(name).apply(self)
12
12
  end
13
13
  end
14
14
 
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_ruby_utils/immutable/base_accessor'
3
+ require 'eac_ruby_utils/acts_as_immutable/base_accessor'
4
4
  require 'eac_ruby_utils/patches/class/common_constructor'
5
5
 
6
6
  module EacRubyUtils
7
- module Immutable
8
- class CommonAccessor < ::EacRubyUtils::Immutable::BaseAccessor
7
+ module ActsAsImmutable
8
+ class CommonAccessor < ::EacRubyUtils::ActsAsImmutable::BaseAccessor
9
9
  def apply(klass)
10
10
  accessor = self
11
11
  klass.send(:define_method, name) do |*args|
12
12
  case args.count
13
- when 0 then next accessor.immutable_value_get(self)
14
- when 1 then next accessor.immutable_value_set(self, args.first)
13
+ when 0 then next accessor.immutable_value_get_filtered(self)
14
+ when 1 then next accessor.immutable_value_set_filtered(self, args.first)
15
15
  else
16
16
  raise ::ArgumentError, "wrong number of arguments (given #{args.count}, expected 0..1)"
17
17
  end
@@ -1,12 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/inflector'
4
- require 'eac_ruby_utils/immutable/base_accessor'
4
+ require 'eac_ruby_utils/acts_as_immutable/base_accessor'
5
5
  require 'eac_ruby_utils/patches/class/common_constructor'
6
6
 
7
7
  module EacRubyUtils
8
- module Immutable
9
- class ArrayAccessor < ::EacRubyUtils::Immutable::BaseAccessor
8
+ module ActsAsImmutable
9
+ # Should implement in concrect classes:
10
+ # * immutable_value_set_assert(value)
11
+ # * initial_value()
12
+ class EnumerableAccessor < ::EacRubyUtils::ActsAsImmutable::BaseAccessor
10
13
  def apply(klass)
11
14
  apply_singular(klass)
12
15
  apply_plural(klass)
@@ -16,8 +19,8 @@ module EacRubyUtils
16
19
  accessor = self
17
20
  klass.send(:define_method, ::ActiveSupport::Inflector.pluralize(name)) do |*args|
18
21
  case args.count
19
- when 0 then next accessor.immutable_value_get(self)
20
- when 1 then next accessor.immutable_value_set(self, args.first)
22
+ when 0 then next accessor.immutable_value_get_filtered(self)
23
+ when 1 then next accessor.immutable_value_set_filtered(self, args.first)
21
24
  else
22
25
  raise ::ArgumentError, "wrong number of arguments (given #{args.count}, expected 0..1)"
23
26
  end
@@ -32,17 +35,17 @@ module EacRubyUtils
32
35
  end
33
36
 
34
37
  def immutable_value_get(object)
35
- super || []
38
+ super || initial_value.dup
36
39
  end
37
40
 
38
41
  def immutable_value_push(object, value)
39
42
  duplicate_object(object) do |old_value|
40
- (old_value || []) + [value]
43
+ (old_value || initial_value.dup) + [value]
41
44
  end
42
45
  end
43
46
 
44
47
  def immutable_value_set(object, value)
45
- duplicate_object(object) { |_old_value| value }
48
+ duplicate_object(object) { |_old_value| immutable_value_set_assert(value) }
46
49
  end
47
50
  end
48
51
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_ruby_utils/immutable/base_accessor'
3
+ require 'eac_ruby_utils/acts_as_immutable/base_accessor'
4
4
  require 'eac_ruby_utils/patches/class/common_constructor'
5
5
 
6
6
  module EacRubyUtils
7
- module Immutable
8
- class HashAccessor < ::EacRubyUtils::Immutable::BaseAccessor
7
+ module ActsAsImmutable
8
+ class HashAccessor < ::EacRubyUtils::ActsAsImmutable::BaseAccessor
9
9
  def apply(klass)
10
10
  apply_plural(klass)
11
11
  apply_singular(klass)
@@ -33,8 +33,8 @@ module EacRubyUtils
33
33
  accessor = self
34
34
  klass.send(:define_method, ::ActiveSupport::Inflector.pluralize(name)) do |*args|
35
35
  case args.count
36
- when 0 then next accessor.immutable_value_get(self)
37
- when 1 then next accessor.immutable_value_set(self, args[0])
36
+ when 0 then next accessor.immutable_value_get_filtered(self)
37
+ when 1 then next accessor.immutable_value_set_filtered(self, args[0])
38
38
  else
39
39
  raise ::ArgumentError, "wrong number of arguments (given #{args.count}, expected 0..1)"
40
40
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- module Immutable
4
+ module ActsAsImmutable
5
5
  module InstanceMethods
6
6
  def immutable_constructor_args
7
7
  []
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/acts_as_immutable/enumerable_accessor'
4
+
5
+ module EacRubyUtils
6
+ module ActsAsImmutable
7
+ class SetAccessor < ::EacRubyUtils::ActsAsImmutable::EnumerableAccessor
8
+ INITIAL_VALUE = ::Set.new.freeze
9
+
10
+ # @param value [Object]
11
+ # @return [Set]
12
+ def immutable_value_set_assert(value)
13
+ return value if value.is_a?(::Set)
14
+ return value.to_set if value.respond_to?(:to_set)
15
+
16
+ ::Set.new(value)
17
+ end
18
+
19
+ # @return [Set] A empty Set.
20
+ def initial_value
21
+ INITIAL_VALUE
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,7 +4,7 @@ require 'eac_ruby_utils/patches/module/common_concern'
4
4
  require 'eac_ruby_utils/require_sub'
5
5
 
6
6
  module EacRubyUtils
7
- module Immutable
7
+ module ActsAsImmutable
8
8
  ::EacRubyUtils.require_sub __FILE__
9
9
 
10
10
  common_concern do
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/object/debug'
4
+
5
+ module EacRubyUtils
6
+ module EnumerablesMethods
7
+ class << self
8
+ WRITE_METHOD_PATTERNS = [/\A[a-z].*[\!\=]\z/i] +
9
+ %i[\[\]= <<].map { |m| /\A#{::Regexp.quote(m)}\z/ } +
10
+ %i[add clear delete divide keep reset shift subtract]
11
+ .map { |m| /\A#{::Regexp.quote(m)}.*\z/ }
12
+
13
+ # @param klass [Klass]
14
+ # @return [Enumerable<Symbol>]
15
+ def self_methods_names(klass)
16
+ (klass.public_instance_methods - klass.superclass.public_instance_methods).sort
17
+ end
18
+
19
+ # @param method_name [Symbol]
20
+ # @return [Boolean]
21
+ def write_method?(method_name)
22
+ WRITE_METHOD_PATTERNS.any? { |pattern| pattern.match?(method_name.to_s) }
23
+ end
24
+ end
25
+
26
+ ARRAY_METHODS = self_methods_names(::Array)
27
+ ARRAY_WRITE_METHODS = ARRAY_METHODS.select { |m| write_method?(m) }
28
+ ARRAY_READ_METHODS = ARRAY_METHODS - ARRAY_WRITE_METHODS
29
+
30
+ ENUMERABLE_METHODS = ::Enumerable.public_instance_methods.sort
31
+ ENUMERABLE_WRITE_METHODS = ENUMERABLE_METHODS.select { |m| write_method?(m) }
32
+ ENUMERABLE_READ_METHODS = ENUMERABLE_METHODS - ENUMERABLE_WRITE_METHODS
33
+
34
+ HASH_METHODS = self_methods_names(::Hash)
35
+ HASH_WRITE_METHODS = HASH_METHODS.select { |m| write_method?(m) }
36
+ HASH_READ_METHODS = HASH_METHODS - HASH_WRITE_METHODS
37
+
38
+ SET_METHODS = self_methods_names(::Set)
39
+ SET_WRITE_METHODS = SET_METHODS.select { |m| write_method?(m) } + [:merge]
40
+ SET_READ_METHODS = SET_METHODS - SET_WRITE_METHODS
41
+ end
42
+ end
@@ -9,7 +9,7 @@ module EacRubyUtils
9
9
  include ::EacRubyUtils::Listable
10
10
  include ::EacRubyUtils::SimpleCache
11
11
 
12
- lists.add_symbol :option, :check_args, :auto_validate
12
+ lists.add_symbol :option, :check_args, :exec_args, :auto_validate
13
13
 
14
14
  DEFAULT_AUTO_VALIDATE = true
15
15
 
@@ -53,7 +53,7 @@ module EacRubyUtils
53
53
  end
54
54
 
55
55
  def executable_args
56
- executable_args_from_envvar || [name]
56
+ executable_args_from_envvar || executable_args_from_options || executable_args_from_name
57
57
  end
58
58
 
59
59
  def executable_args_envvar
@@ -64,6 +64,18 @@ module EacRubyUtils
64
64
  ENV[executable_args_envvar].if_present { |v| ::Shellwords.split(v) }
65
65
  end
66
66
 
67
+ # @return [Enumerable<String>]
68
+ def executable_args_from_name
69
+ ::Shellwords.split(name)
70
+ end
71
+
72
+ # @return [Enumerable<String>]
73
+ def executable_args_from_options
74
+ options[OPTION_EXEC_ARGS].if_present do |v|
75
+ v.is_a?(::Enumerable) ? v.map(&:to_s) : ::Shellwords.split(v.to_s)
76
+ end
77
+ end
78
+
67
79
  private
68
80
 
69
81
  attr_writer :options
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/class/common_constructor'
4
+
5
+ module EacRubyUtils
6
+ module ModuleAncestorsVariable
7
+ class Base
8
+ common_constructor :the_module, :method_name, :initial_value
9
+
10
+ # @param current [Object]
11
+ # @param other [Object]
12
+ # @return [Object]
13
+ def merge_operation(current, other)
14
+ current.merge(other)
15
+ end
16
+
17
+ # return [Hash]
18
+ def ancestors_variable
19
+ the_module.ancestors.inject(initial_value.dup) do |a, e|
20
+ if e.respond_to?(method_name, true)
21
+ merge_operation(a, e.send(method_name).send(:self_variable))
22
+ else
23
+ a
24
+ end
25
+ end
26
+ end
27
+
28
+ # @return [Hash]
29
+ def self_variable
30
+ @self_variable ||= initial_value.dup
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/module/delegation'
4
+ require 'eac_ruby_utils/module_ancestors_variable/base'
5
+ require 'eac_ruby_utils/enumerables_methods'
6
+
7
+ module EacRubyUtils
8
+ module ModuleAncestorsVariable
9
+ class Hash < ::EacRubyUtils::ModuleAncestorsVariable::Base
10
+ INITIAL_VALUE = {}.freeze
11
+
12
+ def initialize(the_module, method_name)
13
+ super(the_module, method_name, INITIAL_VALUE)
14
+ end
15
+
16
+ delegate(*::EacRubyUtils::EnumerablesMethods::HASH_READ_METHODS, to: :ancestors_variable)
17
+ delegate(*::EacRubyUtils::EnumerablesMethods::HASH_WRITE_METHODS, to: :self_variable)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/module/delegation'
4
+ require 'eac_ruby_utils/module_ancestors_variable/base'
5
+
6
+ module EacRubyUtils
7
+ module ModuleAncestorsVariable
8
+ class Set < ::EacRubyUtils::ModuleAncestorsVariable::Base
9
+ INITIAL_VALUE = ::Set.new
10
+
11
+ def initialize(the_module, method_name)
12
+ super(the_module, method_name, INITIAL_VALUE)
13
+ end
14
+
15
+ delegate(*::EacRubyUtils::EnumerablesMethods::SET_READ_METHODS, to: :ancestors_variable)
16
+ delegate(*::EacRubyUtils::EnumerablesMethods::SET_WRITE_METHODS, to: :self_variable)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/module/require_sub'
4
+
5
+ module EacRubyUtils
6
+ class ModuleAncestorsHash
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patch'
4
+ require 'eac_ruby_utils/acts_as_immutable'
5
+
6
+ class Module
7
+ def acts_as_immutable
8
+ ::EacRubyUtils.patch(self, ::EacRubyUtils::ActsAsImmutable)
9
+ end
10
+ end
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'eac_ruby_utils/patch'
4
- require 'eac_ruby_utils/immutable'
4
+ require 'eac_ruby_utils/acts_as_immutable'
5
5
 
6
6
  class Module
7
+ # @deprecated Use {#acts_as_immutable} instead.
7
8
  def enable_immutable
8
- ::EacRubyUtils.patch(self, ::EacRubyUtils::Immutable)
9
+ ::EacRubyUtils.patch(self, ::EacRubyUtils::ActsAsImmutable)
9
10
  end
10
11
  end
@@ -1,6 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_utils/patches/object/if_present'
4
+ require 'pp'
5
+
3
6
  class Object
7
+ def compact_debug(*methods_names)
8
+ methods_names.each do |method_name|
9
+ send(method_name).print_debug(label: method_name)
10
+ end
11
+ end
12
+
4
13
  def pretty_debug(options = {})
5
14
  print_debug_options(options)
6
15
 
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EacRubyUtils
4
+ class UnimplementedMethodError < ::StandardError
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRubyUtils
4
- VERSION = '0.115.0'
4
+ VERSION = '0.117.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_ruby_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.115.0
4
+ version: 0.117.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esquilo Azul Company
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-12 00:00:00.000000000 Z
11
+ date: 2023-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -129,6 +129,16 @@ files:
129
129
  - README.rdoc
130
130
  - lib/eac_ruby_utils.rb
131
131
  - lib/eac_ruby_utils/acts_as_abstract.rb
132
+ - lib/eac_ruby_utils/acts_as_immutable.rb
133
+ - lib/eac_ruby_utils/acts_as_immutable/array_accessor.rb
134
+ - lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
135
+ - lib/eac_ruby_utils/acts_as_immutable/boolean_accessor.rb
136
+ - lib/eac_ruby_utils/acts_as_immutable/class_methods.rb
137
+ - lib/eac_ruby_utils/acts_as_immutable/common_accessor.rb
138
+ - lib/eac_ruby_utils/acts_as_immutable/enumerable_accessor.rb
139
+ - lib/eac_ruby_utils/acts_as_immutable/hash_accessor.rb
140
+ - lib/eac_ruby_utils/acts_as_immutable/instance_methods.rb
141
+ - lib/eac_ruby_utils/acts_as_immutable/set_accessor.rb
132
142
  - lib/eac_ruby_utils/arguments_consumer.rb
133
143
  - lib/eac_ruby_utils/bit.rb
134
144
  - lib/eac_ruby_utils/bit_array.rb
@@ -152,6 +162,7 @@ files:
152
162
  - lib/eac_ruby_utils/core_ext.rb
153
163
  - lib/eac_ruby_utils/custom_format.rb
154
164
  - lib/eac_ruby_utils/enum.rb
165
+ - lib/eac_ruby_utils/enumerables_methods.rb
155
166
  - lib/eac_ruby_utils/envs.rb
156
167
  - lib/eac_ruby_utils/envs/base_command.rb
157
168
  - lib/eac_ruby_utils/envs/base_command/append_command_options.rb
@@ -184,14 +195,6 @@ files:
184
195
  - lib/eac_ruby_utils/fs/temp/file.rb
185
196
  - lib/eac_ruby_utils/gems_registry.rb
186
197
  - lib/eac_ruby_utils/gems_registry/gem.rb
187
- - lib/eac_ruby_utils/immutable.rb
188
- - lib/eac_ruby_utils/immutable/array_accessor.rb
189
- - lib/eac_ruby_utils/immutable/base_accessor.rb
190
- - lib/eac_ruby_utils/immutable/boolean_accessor.rb
191
- - lib/eac_ruby_utils/immutable/class_methods.rb
192
- - lib/eac_ruby_utils/immutable/common_accessor.rb
193
- - lib/eac_ruby_utils/immutable/hash_accessor.rb
194
- - lib/eac_ruby_utils/immutable/instance_methods.rb
195
198
  - lib/eac_ruby_utils/inflector.rb
196
199
  - lib/eac_ruby_utils/listable.rb
197
200
  - lib/eac_ruby_utils/listable/class_methods.rb
@@ -208,6 +211,10 @@ files:
208
211
  - lib/eac_ruby_utils/locales/from_gem.rb
209
212
  - lib/eac_ruby_utils/locales/module_i18n_translate.rb
210
213
  - lib/eac_ruby_utils/method_class.rb
214
+ - lib/eac_ruby_utils/module_ancestors_variable.rb
215
+ - lib/eac_ruby_utils/module_ancestors_variable/base.rb
216
+ - lib/eac_ruby_utils/module_ancestors_variable/hash.rb
217
+ - lib/eac_ruby_utils/module_ancestors_variable/set.rb
211
218
  - lib/eac_ruby_utils/options_consumer.rb
212
219
  - lib/eac_ruby_utils/patch.rb
213
220
  - lib/eac_ruby_utils/patches.rb
@@ -235,6 +242,7 @@ files:
235
242
  - lib/eac_ruby_utils/patches/module.rb
236
243
  - lib/eac_ruby_utils/patches/module/abstract_methods.rb
237
244
  - lib/eac_ruby_utils/patches/module/acts_as_abstract.rb
245
+ - lib/eac_ruby_utils/patches/module/acts_as_immutable.rb
238
246
  - lib/eac_ruby_utils/patches/module/common_concern.rb
239
247
  - lib/eac_ruby_utils/patches/module/compare_by.rb
240
248
  - lib/eac_ruby_utils/patches/module/context.rb
@@ -302,6 +310,7 @@ files:
302
310
  - lib/eac_ruby_utils/static_method_class.rb
303
311
  - lib/eac_ruby_utils/string_delimited.rb
304
312
  - lib/eac_ruby_utils/struct.rb
313
+ - lib/eac_ruby_utils/unimplemented_method_error.rb
305
314
  - lib/eac_ruby_utils/version.rb
306
315
  - lib/eac_ruby_utils/yaml.rb
307
316
  homepage:
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module EacRubyUtils
4
- module Immutable
5
- class BaseAccessor
6
- common_constructor :name do
7
- self.name = name.to_sym
8
- end
9
-
10
- def duplicate_object(object)
11
- accessor_new_value = yield(immutable_value_get(object))
12
- new_values = object.send(:immutable_values_get).merge(name => accessor_new_value)
13
- r = object.class.new(*object.immutable_constructor_args)
14
- r.send(:immutable_values_set, new_values)
15
- r
16
- end
17
-
18
- def immutable_value_get(object)
19
- object.send(:immutable_values_get)[name]
20
- end
21
- end
22
- end
23
- end