module Baleen::Serializable

Public Class Methods

deserialize(json_string) click to toggle source
# File lib/baleen/serializable.rb, line 6
def self.deserialize(json_string)
  params = JSON.parse(json_string)
  klass = params.delete "klass"
  Object.const_get(klass).new(symbolize_keys(params))
end
symbolize_keys(hash) click to toggle source
# File lib/baleen/serializable.rb, line 12
def self.symbolize_keys(hash)
  hash.inject({}){|new_hash, key_value|
    key, value = key_value
    value = symbolize_keys(value) if value.is_a?(Hash)
    new_hash[key.to_sym] = value
    new_hash
  }
end

Public Instance Methods

dup() click to toggle source
# File lib/baleen/serializable.rb, line 54
def dup
  copy_params = @params.dup
  Object.const_get(self.class.to_s).new(copy_params)
end
method_missing(name, *args) click to toggle source

Dynamically define getter and setter for keys of @params

# File lib/baleen/serializable.rb, line 22
def method_missing(name, *args)
  _name = name.to_s.sub("=", "")

  if @params.has_key?(_name.to_sym)
    self.class.class_eval{
      define_method "#{_name}" do
        @params[_name.to_sym]
      end
    }
    self.class.class_eval{
      define_method "#{_name}=" do |*args|
       @params[_name.to_sym] = args.first
      end
    }
    if name.to_s[-1, 1] == "="
      send(name, args.first)
    else
      send(name)
    end
  else
    raise NoMethodError.new("undefined method: #{name}", name, args)
  end
end
params() click to toggle source
# File lib/baleen/serializable.rb, line 46
def params
  @params
end
to_json() click to toggle source
# File lib/baleen/serializable.rb, line 50
def to_json
  @params.to_json
end