module Mandate::InitializerInjector

Public Class Methods

extended(base) click to toggle source
# File lib/mandate/initializer_injector.rb, line 3
def self.extended(base)
  class << base
    def initialize_with(*attrs)
      define_method :initialize do |*args|
        unless args.length == attrs.length
          raise ArgumentError.new("Wrong number of arguments (given #{args.length}, expected #{attrs.length})")
        end

        attrs.zip(args).each do |attr,arg|
          instance_variable_set("@#{attr}", arg)
        end
      end

      attrs.each do |attr|
        define_method attr do instance_variable_get("@#{attr}") end
        private attr
      end
    end
  end
end