Sha256: 854f89ca337168b69c6f6e2b84d45662ad3532fd1fd6e86e697923d5431acedf

Contents?: true

Size: 890 Bytes

Versions: 17

Compression:

Stored size: 890 Bytes

Contents

module Apnotic

  class Push
    attr_reader :http2_request

    def initialize(http2_request)
      @http2_request = http2_request
      @headers       = {}
      @data          = ''
      @events        = {}

      listen_for_http2_events
    end

    def on(event, &block)
      raise ArgumentError, 'on event must provide a block' unless block_given?

      @events[event] ||= []
      @events[event] << block
    end

    def emit(event, arg)
      return unless @events[event]
      @events[event].each { |b| b.call(arg) }
    end

    private

    def listen_for_http2_events
      @http2_request.on(:headers) { |headers| @headers.merge!(headers) }
      @http2_request.on(:body_chunk) { |chunk| @data << chunk }
      @http2_request.on(:close) do
        response = Apnotic::Response.new(headers: @headers, body: @data)
        emit(:response, response)
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
apnotic-1.7.2 lib/apnotic/push.rb
apnotic-1.7.1 lib/apnotic/push.rb
apnotic-1.7.0 lib/apnotic/push.rb
apnotic-1.6.1 lib/apnotic/push.rb
apnotic-1.6.0 lib/apnotic/push.rb
apnotic-1.5.0 lib/apnotic/push.rb
apnotic-1.4.1 lib/apnotic/push.rb
apnotic-1.4.0 lib/apnotic/push.rb
apnotic-1.3.1 lib/apnotic/push.rb
apnotic-1.3.0 lib/apnotic/push.rb
apnotic-1.2.0 lib/apnotic/push.rb
apnotic-1.1.0 lib/apnotic/push.rb
apnotic-1.0.1 lib/apnotic/push.rb
apnotic-1.0.0 lib/apnotic/push.rb
apnotic-0.10.2 lib/apnotic/push.rb
apnotic-0.10.1 lib/apnotic/push.rb
apnotic-0.10.0 lib/apnotic/push.rb