Sha256: aa663487b357c3b56f3e045ab9b58d16161c1c2095c4c8b1780f675b69c06a9f

Contents?: true

Size: 1.22 KB

Versions: 5

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

require 'active_support/core_ext/module/delegation'

module EacRubyUtils
  class CommonConstructor
    class SuperArgs
      attr_reader :class_initialize, :args, :object

      delegate :common_constructor, to: :class_initialize

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

      def auto_result
        r = []
        sub_args.each do |name, value|
          i = super_arg_index(name)
          r[i] = value if i
        end
        r
      end

      def result
        result_from_options || auto_result
      end

      def result_from_options
        return unless common_constructor.super_args

        object.instance_exec(&common_constructor.super_args)
      end

      def sub_args
        common_constructor.args.each_with_index.to_h do |name, index|
          [name, args[index]]
        end
      end

      def super_arg_index(name)
        super_method.parameters.each_with_index do |arg, index|
          return index if arg[1] == name
        end
        nil
      end

      def super_method
        class_initialize.klass.superclass&.instance_method(:initialize)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
eac_ruby_utils-0.124.0 lib/eac_ruby_utils/common_constructor/super_args.rb
eac_tools-0.97.2 sub/eac_ruby_utils/lib/eac_ruby_utils/common_constructor/super_args.rb
eac_ruby_utils-0.123.0 lib/eac_ruby_utils/common_constructor/super_args.rb
eac_ruby_utils-0.121.0 lib/eac_ruby_utils/common_constructor/super_args.rb
eac_ruby_utils-0.120.0 lib/eac_ruby_utils/common_constructor/super_args.rb