Sha256: 02f3935e65ef4ec17c13c7cf7319a090a222668a97b5a9b242e30867283250f8

Contents?: true

Size: 1.67 KB

Versions: 28

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/patches/object/if_respond'

module EacRubyUtils
  module ActsAsImmutable
    class BaseAccessor
      FILTER_GET_METHOD_NAME_FORMAT = '%s_get_filter'
      FILTER_SET_METHOD_NAME_FORMAT = '%s_set_filter'

      common_constructor :name do
        self.name = name.to_sym
      end

      def duplicate_object(object)
        accessor_new_value = yield(immutable_value_get(object))
        new_values = object.send(:immutable_values_get).merge(name => accessor_new_value)
        r = object.class.new(*object.immutable_constructor_args)
        r.send(:immutable_values_set, new_values)
        r
      end

      def immutable_value_get(object)
        object.send(:immutable_values_get)[name]
      end

      # @param object [Object]
      # @return [Object]
      def immutable_value_get_filtered(object)
        r = immutable_value_get(object)
        if object.respond_to?(immutable_value_get_filtered_method_name, true)
          r = object.send(immutable_value_get_filtered_method_name, r)
        end
        r
      end

      # @return [Symbol]
      def immutable_value_get_filtered_method_name
        format(FILTER_GET_METHOD_NAME_FORMAT, name)
      end

      # @param object [Object]
      # @return [Object]
      def immutable_value_set_filtered(object, value)
        if object.respond_to?(immutable_value_set_filtered_method_name, true)
          value = object.send(immutable_value_set_filtered_method_name, value)
        end
        immutable_value_set(object, value)
      end

      # @return [Symbol]
      def immutable_value_set_filtered_method_name
        format(FILTER_SET_METHOD_NAME_FORMAT, name)
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
eac_ruby_utils-0.124.0 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.97.2 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.123.0 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.121.0 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.120.0 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.76.1 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.76.0 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.75.2 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.119.2 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.75.1 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.75.0 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.119.1 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.74.1 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.74.0 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.73.0 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.119.0 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.72.0 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.118.1 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_ruby_utils-0.118.0 lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb
eac_tools-0.70.1 sub/eac_ruby_utils/lib/eac_ruby_utils/acts_as_immutable/base_accessor.rb