Module: Baleen::Serializable
Class Method Summary
collapse
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
Dynamically define getter and setter for keys of @params
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# 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
|
Class Method Details
.deserialize(json_string) ⇒ Object
6
7
8
9
10
|
# 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) ⇒ Object
12
13
14
15
16
17
18
19
|
# 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
|
Instance Method Details
#dup ⇒ Object
54
55
56
57
|
# File 'lib/baleen/serializable.rb', line 54
def dup
copy_params = @params.dup
Object.const_get(self.class.to_s).new(copy_params)
end
|
#params ⇒ Object
46
47
48
|
# File 'lib/baleen/serializable.rb', line 46
def params
@params
end
|
#to_json ⇒ Object
50
51
52
|
# File 'lib/baleen/serializable.rb', line 50
def to_json
@params.to_json
end
|