Sha256: b5a9e11c993befbbec2ac4ca756840e893222091cf6193092cf78b287b8fa01c

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

=begin

    This file is part of the Arachni-RPC project and may be subject to
    redistribution and commercial restrictions. Please see the Arachni-RPC
    web site for more information on licensing and terms of use.

=end

module Arachni
module RPC

#
# Represents an RPC message, serves as the basis for {Request} and {Response}.
#
# @author: Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
#
class Message

    #
    # @param    [Hash]   opts   sets instance attributes
    #
    def initialize( opts = {} )
        opts.each_pair { |k, v| instance_variable_set( "@#{k}".to_sym, v ) }
    end

    #
    # Merges the attributes of another message with self.
    #
    # (The param doesn't *really* have to be a message, any object will do.)
    #
    # @param    [Message]   message
    #
    def merge!( message )
        message.instance_variables.each do |var|
            val = message.instance_variable_get( var )
            instance_variable_set( var, val )
        end
    end

    #
    # Prepares the message for transmission (i.e. converts the message to a Hash).
    #
    # Attributes that should not be included can be skipped by implementing
    # {#transmit?} and returning the appropriate value.
    #
    # @return   [Hash]
    #
    def prepare_for_tx
        instance_variables.inject({}) do |h, k|
            h[normalize( k )] = instance_variable_get( k ) if transmit?( k )
            h
        end
    end

    #
    # Decides which attributes should be skipped by {#prepare_for_tx}.
    #
    # @param    [Symbol]    attr    attribute symbol (i.e. :@token)
    #
    def transmit?( attr )
        true
    end

    private

    def normalize( attr )
        attr.to_s.gsub( '@', '' )
    end

end

end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
arachni-rpc-0.1.3 lib/arachni/rpc/message.rb
arachni-rpc-0.1.2 lib/arachni/rpc/message.rb