Sha256: 099bd3920dd6f592fbe63ba8e2eae62b80ff13d6af5c084e55133717004a7f2a

Contents?: true

Size: 1.38 KB

Versions: 160

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

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

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

      def run
        validate_args_count
        object.run_callbacks :initialize do
          object_attributes_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_attributes_set
        common_constructor.args.each do |arg_name|
          object.send("#{arg_name}=", arg_value(arg_name))
        end
      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

160 entries across 160 versions & 4 rubygems

Version Path
eac_tools-0.24.1 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.100.0 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.24.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.99.0 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.23.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.22.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.21.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.20.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.19.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.18.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.17.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.16.1 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.98.0 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.16.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.15.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.14.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.97.0 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.13.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_ruby_utils-0.96.1 lib/eac_ruby_utils/common_constructor/instance_initialize.rb
eac_tools-0.12.0 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/instance_initialize.rb