/lib/mcollective/rpc/request.rb
Ruby | 62 lines | 46 code | 9 blank | 7 comment | 2 complexity | 6661d76a2ac596c5f7086b7c6b941cd0 MD5 | raw file
- module MCollective
- module RPC
- # Simple class to manage compliant requests for MCollective::RPC agents
- class Request
- attr_accessor :time, :action, :data, :sender, :agent, :uniqid, :caller, :ddl
- def initialize(msg, ddl)
- @time = msg[:msgtime]
- @action = msg[:body][:action]
- @data = msg[:body][:data]
- @sender = msg[:senderid]
- @agent = msg[:body][:agent]
- @uniqid = msg[:requestid]
- @caller = msg[:callerid] || "unknown"
- @ddl = ddl
- end
- # If data is a hash, quick helper to get access to it's include? method
- # else returns false
- def include?(key)
- return false unless @data.is_a?(Hash)
- return @data.include?(key)
- end
- # If no :process_results is specified always respond else respond
- # based on the supplied property
- def should_respond?
- return @data[:process_results] if @data.include?(:process_results)
- return true
- end
- # If data is a hash, gives easy access to its members, else returns nil
- def [](key)
- return nil unless @data.is_a?(Hash)
- return @data[key]
- end
- def fetch(key, default)
- return nil unless @data.is_a?(Hash)
- return @data.fetch(key, default)
- end
- def to_hash
- return {:agent => @agent,
- :action => @action,
- :data => @data}
- end
- # Validate the request against the DDL
- def validate!
- @ddl.validate_rpc_request(@action, @data)
- end
- def to_json
- to_hash.merge!({:sender => @sender,
- :callerid => @callerid,
- :uniqid => @uniqid}).to_json
- end
- end
- end
- end