class MCollective::RPC::Result
Simple class to manage compliant results from MCollective::RPC
agents
Currently it just fakes Hash behaviour to the result to remain backward compatible but it also knows which agent and action produced it so you can associate results to a DDL
Attributes
action[R]
agent[R]
results[R]
Public Class Methods
new(agent, action, result={})
click to toggle source
# File lib/mcollective/rpc/result.rb 13 def initialize(agent, action, result={}) 14 @agent = agent 15 @action = action 16 @results = result 17 18 convert_data_based_on_ddl if ddl 19 end
Public Instance Methods
<=>(other)
click to toggle source
# File lib/mcollective/rpc/result.rb 85 def <=>(other) 86 self[:sender] <=> other[:sender] 87 end
[](key)
click to toggle source
# File lib/mcollective/rpc/result.rb 60 def [](key) 61 @results[compatible_key(key)] 62 end
[]=(key, item)
click to toggle source
# File lib/mcollective/rpc/result.rb 64 def []=(key, item) 65 @results[key] = item 66 end
compatible_key(key)
click to toggle source
# File lib/mcollective/rpc/result.rb 52 def compatible_key(key) 53 if key.is_a?(Symbol) && @results.include?(key.to_s) 54 key.to_s 55 else 56 key 57 end 58 end
convert_data_based_on_ddl()
click to toggle source
Converts keys on the supplied data to those listed as outputs in the DDL
. This is to facilitate JSON based transports without forcing everyone to rewrite DDLs and clients to convert symbols to strings, the data will be on symbol keys if the DDL
has a symbol and not a string output defined
# File lib/mcollective/rpc/result.rb 38 def convert_data_based_on_ddl 39 interface = ddl.action_interface(action) 40 41 return if interface.fetch(:output, {}).empty? 42 43 interface[:output].each do |output, properties| 44 next if data.include?(output) 45 46 if output.is_a?(Symbol) && data.include?(output.to_s) 47 data[output] = data.delete(output.to_s) 48 end 49 end 50 end
data()
click to toggle source
# File lib/mcollective/rpc/result.rb 27 def data 28 @results[:data] = @results.delete("data") if @results.include?("data") 29 30 self[:data] 31 end
ddl()
click to toggle source
# File lib/mcollective/rpc/result.rb 21 def ddl 22 @_ddl ||= DDL.new(agent) 23 rescue 24 nil 25 end
each() { |k,v| ... }
click to toggle source
# File lib/mcollective/rpc/result.rb 72 def each 73 @results.each_pair {|k,v| yield(k,v) } 74 end
fetch(key, default)
click to toggle source
# File lib/mcollective/rpc/result.rb 68 def fetch(key, default) 69 @results.fetch(compatible_key(key), default) 70 end
to_json(*a)
click to toggle source
# File lib/mcollective/rpc/result.rb 76 def to_json(*a) 77 {:agent => @agent, 78 :action => @action, 79 :sender => self[:sender], 80 :statuscode => self[:statuscode], 81 :statusmsg => self[:statusmsg], 82 :data => data}.to_json(*a) 83 end