module Fugazi::InstanceMethods

Public Class Methods

new(*args, **kwargs) click to toggle source
# File lib/fugazi.rb, line 39
def initialize(*args, **kwargs)
  e = args.length - self.class.field_args.length - 1
  labels = self.class.field_args + (self.class.default_args.to_a[0..e] || []).map { |n, _| n }
  labels.zip(args).each do |label, arg|
    instance_variable_set "@#{label}", arg
    self.class.send :attr_reader, label
  end

  (self.class.default_args.to_a[e + 1..-1] || []).each do |default, value|
    instance_variable_set "@#{default}", value
    self.class.send :attr_reader, default
  end

  kwargs.each do |key, arg|
    instance_variable_set "@#{key}", arg
    self.class.send :attr_reader, key
  end

  self.class.default_keyword_args.each do |key, default|
    unless kwargs.key? key
      instance_variable_set "@#{key}", default
      self.class.send :attr_reader, key
    end
  end
end