Module: Baleen::Serializable

Included in:
Message::Base, Task::Base, Task::Cucumber, Task::ImageUpdate, Validation::Validator
Defined in:
lib/baleen/serializable.rb

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

#dupObject



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

#paramsObject



46
47
48
# File 'lib/baleen/serializable.rb', line 46

def params
  @params
end

#to_jsonObject



50
51
52
# File 'lib/baleen/serializable.rb', line 50

def to_json
  @params.to_json
end