connect_client 0.2.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +39 -38
- data/Gemfile +2 -2
- data/LICENSE +22 -22
- data/README.md +45 -45
- data/Rakefile +21 -21
- data/connect_client.gemspec +24 -24
- data/data/cacert.pem +3988 -3988
- data/lib/connect_client.rb +48 -40
- data/lib/connect_client/client.rb +42 -42
- data/lib/connect_client/configuration.rb +11 -11
- data/lib/connect_client/event.rb +72 -72
- data/lib/connect_client/event_push_response.rb +48 -48
- data/lib/connect_client/http/deferred_http_response.rb +8 -8
- data/lib/connect_client/http/event_endpoint.rb +135 -131
- data/lib/connect_client/security/filtered_key_generation.rb +41 -0
- data/lib/connect_client/version.rb +1 -1
- data/spec/connect_client/client_spec.rb +68 -68
- data/spec/connect_client/configuration_spec.rb +54 -54
- data/spec/connect_client/event_push_response_spec.rb +149 -149
- data/spec/connect_client/event_spec.rb +93 -93
- data/spec/connect_client/http/http_event_endpoint_spec.rb +124 -124
- data/spec/connect_client/http/synchrony/{event_endpoint_spec.rb → http_event_endpoint_spec.rb} +59 -59
- data/spec/connect_client/security/filtered_key_generation_spec.rb +13 -0
- data/spec/connect_client_spec.rb +24 -24
- metadata +7 -4
    
        data/lib/connect_client.rb
    CHANGED
    
    | @@ -1,41 +1,49 @@ | |
| 1 | 
            -
            require_relative 'connect_client/client'
         | 
| 2 | 
            -
            require_relative 'connect_client/configuration'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
                def  | 
| 8 | 
            -
                   | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
                  @client =  | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                def  | 
| 19 | 
            -
                   | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
                 | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
                  @client
         | 
| 33 | 
            -
                end | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
                def  | 
| 38 | 
            -
                   | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 1 | 
            +
            require_relative 'connect_client/client'
         | 
| 2 | 
            +
            require_relative 'connect_client/configuration'
         | 
| 3 | 
            +
            require_relative 'connect_client/security/filtered_key_generation.rb'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module ConnectClient
         | 
| 6 | 
            +
              class << self
         | 
| 7 | 
            +
                def gem_root
         | 
| 8 | 
            +
                  File.expand_path '../..', __FILE__
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def configure
         | 
| 12 | 
            +
                  config = Configuration.new
         | 
| 13 | 
            +
                  yield(config)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  @client = ConnectClient::Client.new config
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def reset
         | 
| 19 | 
            +
                  @client = nil
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def generate_filtered_key(key_json, master_key)
         | 
| 23 | 
            +
                  ConnectClient::Security.generate_filtered_key key_json, master_key
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def method_missing(method, *args, &block)
         | 
| 27 | 
            +
                  return super unless client.respond_to?(method)
         | 
| 28 | 
            +
                  client.send(method, *args, &block)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def respond_to?(method)
         | 
| 32 | 
            +
                  return (!@client.nil? && @client.respond_to?(method)) || super
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                private
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                def client
         | 
| 38 | 
            +
                  raise UnconfiguredError if @client.nil?
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  @client
         | 
| 41 | 
            +
                end 
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              class UnconfiguredError < StandardError
         | 
| 45 | 
            +
                def message
         | 
| 46 | 
            +
                  "Connect must configured before it can be used, please call Connect.configure"
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 41 49 | 
             
            end
         | 
| @@ -1,43 +1,43 @@ | |
| 1 | 
            -
            require_relative 'http/event_endpoint'
         | 
| 2 | 
            -
            require_relative 'event'
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            module ConnectClient
         | 
| 5 | 
            -
              class Client
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                def initialize(config)
         | 
| 8 | 
            -
                  @end_point = ConnectClient::Http::EventEndpoint.new config
         | 
| 9 | 
            -
                end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                def push(collection_name_or_batches, event_or_events = nil)
         | 
| 12 | 
            -
                  has_multiple_events = event_or_events.is_a?(Array)
         | 
| 13 | 
            -
                  has_collection_name = collection_name_or_batches.is_a?(String) || collection_name_or_batches.is_a?(Symbol)
         | 
| 14 | 
            -
                  is_batch = !has_collection_name || has_multiple_events
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  if is_batch
         | 
| 17 | 
            -
                    batch = create_batch(has_collection_name, collection_name_or_batches, event_or_events)
         | 
| 18 | 
            -
                    @end_point.push_batch batch
         | 
| 19 | 
            -
                  else
         | 
| 20 | 
            -
                    @end_point.push(collection_name_or_batches, ConnectClient::Event.new(event_or_events))
         | 
| 21 | 
            -
                  end
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                private
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                def create_batch(has_collection_name, collection_name_or_batches, event_or_events)
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  batches = has_collection_name ?
         | 
| 29 | 
            -
                            { collection_name_or_batches.to_sym => event_or_events } :
         | 
| 30 | 
            -
                            collection_name_or_batches
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                  create_event = Proc.new do |event_data| 
         | 
| 33 | 
            -
                      ConnectClient::Event.new event_data
         | 
| 34 | 
            -
                  end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                  map_all_events = Proc.new do |col_name, events| 
         | 
| 37 | 
            -
                    [col_name, events.map(&create_event)]
         | 
| 38 | 
            -
                  end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                  Hash[batches.map(&map_all_events)]
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
              end
         | 
| 1 | 
            +
            require_relative 'http/event_endpoint'
         | 
| 2 | 
            +
            require_relative 'event'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module ConnectClient
         | 
| 5 | 
            +
              class Client
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def initialize(config)
         | 
| 8 | 
            +
                  @end_point = ConnectClient::Http::EventEndpoint.new config
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def push(collection_name_or_batches, event_or_events = nil)
         | 
| 12 | 
            +
                  has_multiple_events = event_or_events.is_a?(Array)
         | 
| 13 | 
            +
                  has_collection_name = collection_name_or_batches.is_a?(String) || collection_name_or_batches.is_a?(Symbol)
         | 
| 14 | 
            +
                  is_batch = !has_collection_name || has_multiple_events
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  if is_batch
         | 
| 17 | 
            +
                    batch = create_batch(has_collection_name, collection_name_or_batches, event_or_events)
         | 
| 18 | 
            +
                    @end_point.push_batch batch
         | 
| 19 | 
            +
                  else
         | 
| 20 | 
            +
                    @end_point.push(collection_name_or_batches, ConnectClient::Event.new(event_or_events))
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                private
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def create_batch(has_collection_name, collection_name_or_batches, event_or_events)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  batches = has_collection_name ?
         | 
| 29 | 
            +
                            { collection_name_or_batches.to_sym => event_or_events } :
         | 
| 30 | 
            +
                            collection_name_or_batches
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  create_event = Proc.new do |event_data| 
         | 
| 33 | 
            +
                      ConnectClient::Event.new event_data
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  map_all_events = Proc.new do |col_name, events| 
         | 
| 37 | 
            +
                    [col_name, events.map(&create_event)]
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                  Hash[batches.map(&map_all_events)]
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 43 | 
             
            end
         | 
| @@ -1,12 +1,12 @@ | |
| 1 | 
            -
            module ConnectClient
         | 
| 2 | 
            -
              class Configuration
         | 
| 3 | 
            -
              attr_accessor :base_url, :api_key, :project_id, :async
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              def initialize(api_key = '', project_id = '', async = false, base_url = 'https://api.getconnect.io')
         | 
| 6 | 
            -
                @base_url = base_url
         | 
| 7 | 
            -
                @api_key = api_key
         | 
| 8 | 
            -
                @project_id = project_id
         | 
| 9 | 
            -
                @async = async
         | 
| 10 | 
            -
              end
         | 
| 11 | 
            -
              end
         | 
| 1 | 
            +
            module ConnectClient
         | 
| 2 | 
            +
              class Configuration
         | 
| 3 | 
            +
              attr_accessor :base_url, :api_key, :project_id, :async
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def initialize(api_key = '', project_id = '', async = false, base_url = 'https://api.getconnect.io')
         | 
| 6 | 
            +
                @base_url = base_url
         | 
| 7 | 
            +
                @api_key = api_key
         | 
| 8 | 
            +
                @project_id = project_id
         | 
| 9 | 
            +
                @async = async
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
              end
         | 
| 12 12 | 
             
            end
         | 
    
        data/lib/connect_client/event.rb
    CHANGED
    
    | @@ -1,73 +1,73 @@ | |
| 1 | 
            -
            require 'securerandom'
         | 
| 2 | 
            -
            require 'json'
         | 
| 3 | 
            -
            require 'time'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            module ConnectClient
         | 
| 6 | 
            -
              class Event
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                @@RESERVED_PROPERTY_REGEX = /tp_.+/i
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                attr_reader :data
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                def initialize(data)
         | 
| 13 | 
            -
                  event_data_defaults = { id: SecureRandom.uuid, timestamp: Time.now }
         | 
| 14 | 
            -
                  @data = map_iso_dates event_data_defaults.merge(data)
         | 
| 15 | 
            -
                  validate
         | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                def validate
         | 
| 19 | 
            -
                  invalid_properties = @data.keys.grep(@@RESERVED_PROPERTY_REGEX)
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  raise EventDataValidationError.new(invalid_properties) if invalid_properties.any?
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                def to_json(options = nil)
         | 
| 25 | 
            -
                  @data.to_json
         | 
| 26 | 
            -
                end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                def to_s
         | 
| 29 | 
            -
                  "Event Data: #{@data}"
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                private
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                def map_iso_dates(data)
         | 
| 35 | 
            -
                  utc_converter = lambda { |value|
         | 
| 36 | 
            -
                    value_to_convert = value
         | 
| 37 | 
            -
                    map_utc = lambda { |value_item| utc_converter.call(value_item) }
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                    return value_to_convert.map(&map_utc) if value_to_convert.respond_to? :map
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                    value_to_convert = value_to_convert.to_time if value_to_convert.is_a?(DateTime) || value_to_convert.is_a?(Date)
         | 
| 42 | 
            -
                    value_to_convert = value_to_convert.utc.iso8601 if value_to_convert.is_a? Time
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                    value_to_convert
         | 
| 45 | 
            -
                  }
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                  mappedData = data.map do |key, value|
         | 
| 48 | 
            -
                    if value.is_a? Hash
         | 
| 49 | 
            -
                      [key, map_iso_dates(value)]
         | 
| 50 | 
            -
                    else
         | 
| 51 | 
            -
                      [key, utc_converter.call(value)]
         | 
| 52 | 
            -
                    end
         | 
| 53 | 
            -
                  end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                  Hash[mappedData]
         | 
| 56 | 
            -
                end
         | 
| 57 | 
            -
              end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
              class EventDataValidationError < StandardError
         | 
| 60 | 
            -
                attr_reader :invalid_property_names
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                def initialize(invalid_property_names)
         | 
| 63 | 
            -
                  @invalid_property_names = invalid_property_names
         | 
| 64 | 
            -
                end
         | 
| 65 | 
            -
             | 
| 66 | 
            -
                def message
         | 
| 67 | 
            -
                  messages = ['The following properties use the reserved prefix tp_:'] + @invalid_property_names.map do |property_name|
         | 
| 68 | 
            -
                    "->#{property_name}"
         | 
| 69 | 
            -
                  end
         | 
| 70 | 
            -
                  messages.join "\n"
         | 
| 71 | 
            -
                end
         | 
| 72 | 
            -
              end
         | 
| 1 | 
            +
            require 'securerandom'
         | 
| 2 | 
            +
            require 'json'
         | 
| 3 | 
            +
            require 'time'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module ConnectClient
         | 
| 6 | 
            +
              class Event
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                @@RESERVED_PROPERTY_REGEX = /tp_.+/i
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                attr_reader :data
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def initialize(data)
         | 
| 13 | 
            +
                  event_data_defaults = { id: SecureRandom.uuid, timestamp: Time.now }
         | 
| 14 | 
            +
                  @data = map_iso_dates event_data_defaults.merge(data)
         | 
| 15 | 
            +
                  validate
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def validate
         | 
| 19 | 
            +
                  invalid_properties = @data.keys.grep(@@RESERVED_PROPERTY_REGEX)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  raise EventDataValidationError.new(invalid_properties) if invalid_properties.any?
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def to_json(options = nil)
         | 
| 25 | 
            +
                  @data.to_json
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def to_s
         | 
| 29 | 
            +
                  "Event Data: #{@data}"
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def map_iso_dates(data)
         | 
| 35 | 
            +
                  utc_converter = lambda { |value|
         | 
| 36 | 
            +
                    value_to_convert = value
         | 
| 37 | 
            +
                    map_utc = lambda { |value_item| utc_converter.call(value_item) }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    return value_to_convert.map(&map_utc) if value_to_convert.respond_to? :map
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    value_to_convert = value_to_convert.to_time if value_to_convert.is_a?(DateTime) || value_to_convert.is_a?(Date)
         | 
| 42 | 
            +
                    value_to_convert = value_to_convert.utc.iso8601 if value_to_convert.is_a? Time
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    value_to_convert
         | 
| 45 | 
            +
                  }
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  mappedData = data.map do |key, value|
         | 
| 48 | 
            +
                    if value.is_a? Hash
         | 
| 49 | 
            +
                      [key, map_iso_dates(value)]
         | 
| 50 | 
            +
                    else
         | 
| 51 | 
            +
                      [key, utc_converter.call(value)]
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  Hash[mappedData]
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              class EventDataValidationError < StandardError
         | 
| 60 | 
            +
                attr_reader :invalid_property_names
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                def initialize(invalid_property_names)
         | 
| 63 | 
            +
                  @invalid_property_names = invalid_property_names
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                def message
         | 
| 67 | 
            +
                  messages = ['The following properties use the reserved prefix tp_:'] + @invalid_property_names.map do |property_name|
         | 
| 68 | 
            +
                    "->#{property_name}"
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
                  messages.join "\n"
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 73 | 
             
            end
         | 
| @@ -1,49 +1,49 @@ | |
| 1 | 
            -
            require 'json'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module ConnectClient
         | 
| 4 | 
            -
              class EventPushResponse
         | 
| 5 | 
            -
                attr_reader :data
         | 
| 6 | 
            -
                attr_reader :http_status_code
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                def initialize(code, content_type, response_body, events_pushed)
         | 
| 9 | 
            -
                  @http_status_code = code.to_s
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  if content_type.include? 'application/json'
         | 
| 12 | 
            -
                    body = response_body
         | 
| 13 | 
            -
                    body = '{}' if response_body.to_s.empty?
         | 
| 14 | 
            -
                    parse_body(body, events_pushed)
         | 
| 15 | 
            -
                  else
         | 
| 16 | 
            -
                    @data = response_body
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                def success?
         | 
| 21 | 
            -
                  @http_status_code.start_with? '2'
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                def to_s
         | 
| 25 | 
            -
                  %{
         | 
| 26 | 
            -
                    Status: #{@http_status_code}
         | 
| 27 | 
            -
                    Successful: #{success?}
         | 
| 28 | 
            -
                    Data: #{data}
         | 
| 29 | 
            -
                  }
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                private
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                def parse_body(body, events_pushed)
         | 
| 35 | 
            -
                  @data = JSON.parse(body, :symbolize_names => true)
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                  if (events_pushed.is_a?(Hash) && @data.is_a?(Hash))
         | 
| 38 | 
            -
                    @data.merge!(events_pushed) do |collection_name, responses, events|
         | 
| 39 | 
            -
                      responses.zip(events).map do |response, event|
         | 
| 40 | 
            -
                        response[:event] = event.data 
         | 
| 41 | 
            -
                        response
         | 
| 42 | 
            -
                      end
         | 
| 43 | 
            -
                    end
         | 
| 44 | 
            -
                  else
         | 
| 45 | 
            -
                    @data[:event] = events_pushed.data
         | 
| 46 | 
            -
                  end
         | 
| 47 | 
            -
                end
         | 
| 48 | 
            -
              end
         | 
| 1 | 
            +
            require 'json'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module ConnectClient
         | 
| 4 | 
            +
              class EventPushResponse
         | 
| 5 | 
            +
                attr_reader :data
         | 
| 6 | 
            +
                attr_reader :http_status_code
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def initialize(code, content_type, response_body, events_pushed)
         | 
| 9 | 
            +
                  @http_status_code = code.to_s
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  if content_type.include? 'application/json'
         | 
| 12 | 
            +
                    body = response_body
         | 
| 13 | 
            +
                    body = '{}' if response_body.to_s.empty?
         | 
| 14 | 
            +
                    parse_body(body, events_pushed)
         | 
| 15 | 
            +
                  else
         | 
| 16 | 
            +
                    @data = response_body
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def success?
         | 
| 21 | 
            +
                  @http_status_code.start_with? '2'
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def to_s
         | 
| 25 | 
            +
                  %{
         | 
| 26 | 
            +
                    Status: #{@http_status_code}
         | 
| 27 | 
            +
                    Successful: #{success?}
         | 
| 28 | 
            +
                    Data: #{data}
         | 
| 29 | 
            +
                  }
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def parse_body(body, events_pushed)
         | 
| 35 | 
            +
                  @data = JSON.parse(body, :symbolize_names => true)
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  if (events_pushed.is_a?(Hash) && @data.is_a?(Hash))
         | 
| 38 | 
            +
                    @data.merge!(events_pushed) do |collection_name, responses, events|
         | 
| 39 | 
            +
                      responses.zip(events).map do |response, event|
         | 
| 40 | 
            +
                        response[:event] = event.data 
         | 
| 41 | 
            +
                        response
         | 
| 42 | 
            +
                      end
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
                  else
         | 
| 45 | 
            +
                    @data[:event] = events_pushed.data
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 49 | 
             
            end
         | 
| @@ -1,9 +1,9 @@ | |
| 1 | 
            -
            module ConnectClient
         | 
| 2 | 
            -
              module Http
         | 
| 3 | 
            -
                class DeferredHttpResponse
         | 
| 4 | 
            -
                  include EventMachine::Deferrable
         | 
| 5 | 
            -
                  alias_method :response_received, :callback
         | 
| 6 | 
            -
                  alias_method :error_occured, :errback
         | 
| 7 | 
            -
                end
         | 
| 8 | 
            -
              end
         | 
| 1 | 
            +
            module ConnectClient
         | 
| 2 | 
            +
              module Http
         | 
| 3 | 
            +
                class DeferredHttpResponse
         | 
| 4 | 
            +
                  include EventMachine::Deferrable
         | 
| 5 | 
            +
                  alias_method :response_received, :callback
         | 
| 6 | 
            +
                  alias_method :error_occured, :errback
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 9 | 
             
            end
         |