Top Level Namespace

Defined Under Namespace

Modules: AttrInit

Instance Method Summary collapse

Instance Method Details

#accessor_struct(*attrs) ⇒ Object



39
40
41
42
43
# File 'lib/attr_init.rb', line 39

def accessor_struct(*attrs)
  attr_accessor *attrs
  attr_init *attrs
  attr_hash *attrs
end

#attr_hash(*attrs) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/attr_init.rb', line 24

def attr_hash(*attrs)
  define_method(:to_h) do
    self.class.class_variable_get(:@@_hidden_attrs)
    .each_with_object({}) do |attr, hash|
      hash[attr] = public_send(attr)
    end
  end
end

#attr_init(*attrs) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/attr_init.rb', line 3

def attr_init(*attrs)
  begin
    hidden_attrs = superclass.class_variable_get :@@_hidden_attrs
    class_variable_set :@@_hidden_attrs, hidden_attrs + attrs
  rescue NameError => e
    class_variable_set :@@_hidden_attrs, attrs
  end

  define_method(:attr_init) do |params|
    self.class.class_variable_get(:@@_hidden_attrs).each do |a|
      instance_variable_set "@#{a}", params[a]
    end
  end

  protected :attr_init

  define_method(:initialize) do |params|
    attr_init(params)
  end
end

#reader_struct(*attrs) ⇒ Object



33
34
35
36
37
# File 'lib/attr_init.rb', line 33

def reader_struct(*attrs)
  attr_reader *attrs
  attr_init *attrs
  attr_hash *attrs
end