Sha256: 8dcba786460a33d28734d543563a96e2bfa510496238e758166d083fbf6082a1

Contents?: true

Size: 729 Bytes

Versions: 3

Compression:

Stored size: 729 Bytes

Contents

module Aggro
  module Message
    # Public: Command message.
    class Command < Struct.new(:sender, :commandee_id, :details)
      TYPE_CODE = '03'.freeze

      def self.parse(string)
        new string[2..37], string[38..73], parse_details(string[74..-1])
      end

      def self.parse_details(details)
        Marshal.load details
      end

      def args
        details[:args]
      end

      def command_class
        ActiveSupport::Inflector.safe_constantize name
      end

      def name
        details[:name]
      end

      def to_command
        command_class.new args if command_class
      end

      def to_s
        "#{TYPE_CODE}#{sender}#{commandee_id}#{Marshal.dump details}"
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
aggro-0.0.4 lib/aggro/message/command.rb
aggro-0.0.3 lib/aggro/message/command.rb
aggro-0.0.2 lib/aggro/message/command.rb