Module: Accessible::Accessorizers

Extended by:
Accessorizers
Included in:
Accessorizers
Defined in:
lib/accessible/accessorizers.rb

Instance Method Summary collapse

Instance Method Details

#accessorize_data(data) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/accessible/accessorizers.rb', line 5

def accessorize_data(data)
  HashMethods.each_hash(data) do |hash|
    hash.each do |key, value|
      define_accessors(hash, key)
      accessorize_data(value)
    end
  end
end

#accessorize_obj(obj) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/accessible/accessorizers.rb', line 14

def accessorize_obj(obj)
  if !obj.respond_to?(:to_h)
    raise(NotImplementedError, "Expected `#{obj}` to respond to `:to_h`")
  end

  obj.to_h.keys.each do |key|
    define_accessors(obj, key)
  end
end

#define_accessors(obj, key) ⇒ Object



24
25
26
27
# File 'lib/accessible/accessorizers.rb', line 24

def define_accessors(obj, key)
  define_getter(obj, key)
  define_setter(obj, key)
end

#define_getter(obj, key) ⇒ Object



29
30
31
32
33
# File 'lib/accessible/accessorizers.rb', line 29

def define_getter(obj, key)
  obj.define_singleton_method(key) do
    obj.to_h.fetch(key)
  end
end

#define_setter(obj, key) ⇒ Object



35
36
37
38
39
# File 'lib/accessible/accessorizers.rb', line 35

def define_setter(obj, key)
  obj.define_singleton_method("#{key}=") do |new_value|
    obj.to_h[key] = Accessible::Accessorizers.accessorize_data(new_value)
  end
end