class Tensai::Util::Initializer::InitializeMethod

Generates initialize method code

Attributes

args[R]

Public Class Methods

new(args) click to toggle source
# File lib/tensai/util/initializer.rb, line 51
def initialize(args)
  @args = args
end

Public Instance Methods

code() click to toggle source
# File lib/tensai/util/initializer.rb, line 55
      def code
        <<~CODE
          def initialize(#{signature})
            #{assign_instance_variables_code}
            #{check_argument_types_code}
            after_initialize
          end
        CODE
      end

Private Instance Methods

assign_instance_variables_code() click to toggle source
# File lib/tensai/util/initializer.rb, line 87
def assign_instance_variables_code
  args.keys.map { |arg| "@#{arg} = #{arg}" }.join(';')
end
check_argument_types_code() click to toggle source
# File lib/tensai/util/initializer.rb, line 83
def check_argument_types_code
  args.keys.map { |arg| "__check_argument_type(:#{arg}, #{arg})" }.join(';')
end
optional_arg?(arg_type) click to toggle source
# File lib/tensai/util/initializer.rb, line 91
def optional_arg?(arg_type)
  arg_type.optional? || arg_type.default?
end
optional_args() click to toggle source
# File lib/tensai/util/initializer.rb, line 79
def optional_args
  args.select { |_, type| optional_arg?(type) }.to_h
end
required_args() click to toggle source
# File lib/tensai/util/initializer.rb, line 75
def required_args
  args.reject { |_, type| optional_arg?(type) }.to_h
end
signature() click to toggle source
# File lib/tensai/util/initializer.rb, line 69
def signature
  optional = optional_args.keys.map { |arg| "#{arg}: nil" }
  required = required_args.keys.map { |arg| "#{arg}:" }
  (optional + required).join(', ')
end