module AttributesInitializable::ClassMethods

Public Instance Methods

attr_accessor_init(*symbols) click to toggle source

generate attr_accessor + initialize params

  • symbols : attribute names

# File lib/attributes_initializable.rb, line 12
def attr_accessor_init(*symbols)
  generate_attr_accessor(symbols)
  generate_initializer(symbols)
end
attr_reader_init(*symbols) click to toggle source

generate attr_reader + initialize params

  • symbols : attribute names

# File lib/attributes_initializable.rb, line 20
def attr_reader_init(*symbols)
  generate_attr_reader(symbols)
  generate_initializer(symbols)
end
attr_writer_init(*symbols) click to toggle source

generate attr_writer + initialize params

  • symbols : attribute names

# File lib/attributes_initializable.rb, line 28
def attr_writer_init(*symbols)
  generate_attr_writer(symbols)
  generate_initializer(symbols)
end

Private Instance Methods

generate_attr(symbols, type) click to toggle source
# File lib/attributes_initializable.rb, line 47
def generate_attr(symbols, type)
  results = symbols.reduce([]) do |results, sym|
    fail TypeError, "invalid type #{sym.class}. you have to use Symbol" unless sym.class == Symbol
    results << ":#{sym}"
  end
  class_eval "attr_#{type} #{results.join(',')}"
end
generate_attr_accessor(symbols) click to toggle source
# File lib/attributes_initializable.rb, line 35
def generate_attr_accessor(symbols)
  generate_attr symbols, :accessor
end
generate_attr_reader(symbols) click to toggle source
# File lib/attributes_initializable.rb, line 39
def generate_attr_reader(symbols)
  generate_attr symbols, :reader
end
generate_attr_writer(symbols) click to toggle source
# File lib/attributes_initializable.rb, line 43
def generate_attr_writer(symbols)
  generate_attr symbols, :writer
end
generate_initializer(symbols) click to toggle source
# File lib/attributes_initializable.rb, line 55
def generate_initializer(symbols)
  instance_eval do
    define_method :initialize do |values = nil, &block|
      return block.call self if block
      symbols.each { |symbol|instance_variable_set("@#{symbol}", values[symbol]) }
    end
  end
end