Quick actions

cmd+k|ctrl+k

Navigation

Languages

rails style initialize

Snippet info

Language

Ruby

Visibility

public

Author

hyrious

Created

2018-09-04T11:06:42Z

Updated

2018-09-15T11:13:38Z

module I
  module ClassMethods
    def init(**kwargs)
      (@_i ||= {}).merge!(kwargs)
    end
  end
  module InstanceMethods
    def initialize(*)
      super if defined? super
      self.class.instance_variable_get(:@_i).each do |k, v|
        singleton_class.class_eval { attr_accessor k }
        instance_variable_set("@#{k}", v)
      end
    end
  end
  def self.included(receiver)
    receiver.extend  ClassMethods
    receiver.include InstanceMethods
  end
end

class A
  include I
  init(a: 42)
end

p A.new.a
INFO