Sha256: 69a81ac2ce26b34e93307d0fae9e3eefeae1062a39e65a7e15c149e4be4df1b5
Contents?: true
Size: 1.65 KB
Versions: 35
Compression:
Stored size: 1.65 KB
Contents
# encoding: utf-8 require 'active_support' # attr_accessor + initialize module AttributesInitializable extend ActiveSupport::Concern module ClassMethods # generate attr_accessor + initialize # params # - symbols : attribute names def attr_accessor_init(*symbols) generate_attr_accessor(symbols) generate_initializer(symbols) end # generate attr_reader + initialize # params # - symbols : attribute names def attr_reader_init(*symbols) generate_attr_reader(symbols) generate_initializer(symbols) end # generate attr_writer + initialize # params # - symbols : attribute names def attr_writer_init(*symbols) generate_attr_writer(symbols) generate_initializer(symbols) end private def generate_attr_accessor(symbols) generate_attr symbols, :accessor end def generate_attr_reader(symbols) generate_attr symbols, :reader end def generate_attr_writer(symbols) generate_attr symbols, :writer end 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 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 end end
Version data entries
35 entries across 35 versions & 1 rubygems