Class: CarbonMU::IPCMessage

Inherits:
Object
  • Object
show all
Defined in:
lib/carbonmu/ipc/ipc_message.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(op, options = {}) ⇒ IPCMessage

Returns a new instance of IPCMessage.

Raises:

  • (ArgumentError)


25
26
27
28
29
30
31
# File 'lib/carbonmu/ipc/ipc_message.rb', line 25

def initialize(op, options={})
  raise ArgumentError, "invalid op specified: #{op}" unless IPCMessage.valid_ops.include?(op)
  required_parameters = IPCMessage.required_parameters(op) || []
  provided_parameters = options.keys
  raise ArgumentError, "missing parameters for #{op} op: #{required_parameters - provided_parameters}" unless (required_parameters & provided_parameters).size == required_parameters.size
  @params = options.merge(op: op)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_sym, *args, &block) ⇒ Object



33
34
35
# File 'lib/carbonmu/ipc/ipc_message.rb', line 33

def method_missing(method_sym, *args, &block)
  @params.has_key?(method_sym) ? @params[method_sym] : super
end

Instance Attribute Details

#paramsObject (readonly)

Returns the value of attribute params.



23
24
25
# File 'lib/carbonmu/ipc/ipc_message.rb', line 23

def params
  @params
end

Class Method Details

.required_parameters(op) ⇒ Object



9
10
11
12
13
14
15
16
# File 'lib/carbonmu/ipc/ipc_message.rb', line 9

def self.required_parameters(op)
  {
    write: [:connection_id, :output],
    connect: [:connection_id],
    disconnect: [:connection_id],
    command: [:command, :connection_id],
  }[op]
end

.unserialize(text) ⇒ Object



18
19
20
21
# File 'lib/carbonmu/ipc/ipc_message.rb', line 18

def self.unserialize(text)
  hash_with_symbol_keys = Hash[MultiJson.load(text).map{|(k,v)| [k.to_sym,v]}]
  self.new(hash_with_symbol_keys[:op].to_sym, hash_with_symbol_keys)
end

.valid_opsObject



5
6
7
# File 'lib/carbonmu/ipc/ipc_message.rb', line 5

def self.valid_ops
  [:started, :command, :connect, :disconnect, :write, :reboot, :retrieve_existing_connections]
end

Instance Method Details

#==(o) ⇒ Object Also known as: eql?



49
50
51
# File 'lib/carbonmu/ipc/ipc_message.rb', line 49

def ==(o)
  o.class == self.class && o.params == self.params
end

#respond_to?(method_sym, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/carbonmu/ipc/ipc_message.rb', line 37

def respond_to?(method_sym, include_private = false)
  @params.has_key?(method_sym) ? true : super
end

#serializeObject



41
42
43
# File 'lib/carbonmu/ipc/ipc_message.rb', line 41

def serialize
  MultiJson.dump(params)
end

#to_sObject



45
46
47
# File 'lib/carbonmu/ipc/ipc_message.rb', line 45

def to_s
  "<IPCMessage: #{params}>"
end