Sha256: 5c01397641905ca3cee7d93d9618258e0b476ddf6ba5bc9f2ff88b04c689927d

Contents?: true

Size: 962 Bytes

Versions: 3

Compression:

Stored size: 962 Bytes

Contents

require 'miu/packet'
require 'miu/messages'

module Miu
  module Readable
    def self.included(base)
      base.class_eval do
        def read_with_packet
          parts = []
          loop do
            parts << read_without_packet
            break unless more_parts?
          end

          packet = Packet.load parts
          begin
            data = Miu::Utility.symbolize_keys(packet.data, true) rescue packet.data
            type = data[:type] rescue nil
            message_class = Miu::Messages.guess(type)
            packet.data = message_class.new data
            packet
          rescue => e
            raise MessageLoadError, e
          end
        end

        alias_method :read_without_packet, :read
        alias_method :read, :read_with_packet
      end

      base.send :include, ::Enumerable
    end

    def each
      if block_given?
        loop do
          yield read
        end
      end

      return self
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
miu-0.2.3 lib/miu/readable.rb
miu-0.2.2 lib/miu/readable.rb
miu-0.2.1 lib/miu/readable.rb