Sha256: 1b058a4a05c5845f8d5770ddc848050bebcb3f9453cdf1efb03c03267ae9efa2

Contents?: true

Size: 1.7 KB

Versions: 112

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

module EacRubyUtils
  class CommonConstructor
    class InstanceInitialize
      attr_reader :common_constructor, :args, :object, :block

      def initialize(common_constructor, args, object, block)
        @common_constructor = common_constructor
        @args = args
        @object = object
        @block = block
      end

      def perform
        validate_args_count
        object.run_callbacks :initialize do
          object_attributes_set
          object_block_set
          object_after_callback
        end
      end

      private

      def arg_value(arg_name)
        arg_index = common_constructor.args.index(arg_name)
        if arg_index < args.count
          args[arg_index]
        else
          common_constructor.default_values[arg_index - common_constructor.args_count_min]
        end
      end

      def object_after_callback
        return unless common_constructor.after_set_block

        object.instance_eval(&common_constructor.after_set_block)
      end

      def object_attribute_set(attr_name, attr_value)
        object.send("#{attr_name}=", attr_value)
      end

      def object_attributes_set
        common_constructor.args.each do |arg_name|
          object_attribute_set(arg_name, arg_value(arg_name))
        end
      end

      def object_block_set
        block_arg = common_constructor.block_arg
        object_attribute_set(block_arg, block) if block_arg
      end

      def validate_args_count
        return if common_constructor.args_count.include?(args.count)

        raise ArgumentError, "#{object.class}.initialize: wrong number of arguments" \
          " (given #{args.count}, expected #{common_constructor.args_count})"
      end
    end
  end
end

Version data entries

112 entries across 112 versions & 2 rubygems

Version Path
eac_tools-0.76.1 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.76.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.75.2 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.119.2 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.75.1 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.75.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.119.1 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.74.1 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.74.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.73.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.119.0 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.72.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.118.1 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.118.0 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.70.1 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.70.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.69.1 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.117.1 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.69.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.68.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb