module RecursiveStruct::Data

Public Instance Methods

data() click to toggle source
# File lib/recursive_struct/data.rb, line 3
def data
  @data ||= {}
end
get_data(key) click to toggle source
# File lib/recursive_struct/data.rb, line 14
def get_data(key)
  data[key.to_sym]
end
send_data(key, *args, &block) click to toggle source
# File lib/recursive_struct/data.rb, line 18
def send_data(key, *args, &block)
  data.send(key, *args, &block)
end
set_data(key, value) click to toggle source
# File lib/recursive_struct/data.rb, line 7
def set_data(key, value)
  key = key.to_sym

  data[key] = process(value)
  define_methods(key)
end

Private Instance Methods

define_methods(key) click to toggle source
# File lib/recursive_struct/data.rb, line 34
def define_methods(key)
  unless respond_to?(key)
    define_singleton_method(key) { data[key] }
    define_singleton_method("#{key}=") { |value| data[key] = value }
  end
end
process(value) click to toggle source
# File lib/recursive_struct/data.rb, line 24
def process(value)
  if value.is_a?(Hash)
    RecursiveStruct.new(value)
  elsif value.is_a?(Array)
    value.map { |val| process(val) }
  else
    value
  end
end