module NxtInit::InstanceMethods

Public Class Methods

new(*args, **attrs) click to toggle source
Calls superclass method
# File lib/nxt_init.rb, line 39
def initialize(*args, **attrs)
  option_keys = self.class.send(:attr_init_opts).keys

  attr_init_opts = attrs.slice(*option_keys)
  other_options = attrs.slice!(*option_keys)
  # passing **{} is like calling super({}) which does not work when super does not except arguments#
  initialize_attrs_from_options(**attr_init_opts)
  other_options.empty? ? super(*args) : super(*args, **other_options)
end

Private Instance Methods

initialize_attrs_from_options(**attrs) click to toggle source
# File lib/nxt_init.rb, line 51
def initialize_attrs_from_options(**attrs)
  self.class.send(:attr_init_opts).each do |_, opt|
    value = opt.resolve(attrs, target: self)
    instance_variable_set("@#{opt.key}", value)
  end
end