Module: Accessible::Accessorizers
Instance Method Summary collapse
- #accessorize_data(data) ⇒ Object
- #accessorize_obj(obj) ⇒ Object
- #define_accessors(obj, key) ⇒ Object
- #define_getter(obj, key) ⇒ Object
- #define_setter(obj, key) ⇒ Object
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 |