lib/stream/client.rb in stream-ruby-2.2.3 vs lib/stream/client.rb in stream-ruby-2.2.4

- old
+ new

@@ -1,123 +1,117 @@ -require 'httparty' -require 'stream/exceptions' -require 'stream/feed' -require 'stream/signer' +require "httparty" +require "stream/errors" +require "stream/feed" +require "stream/signer" - module Stream - STREAM_URL_RE = /https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?getstream\.io\/[\w=-\?%&]+app_id=(?<app_id>\d+)/i + STREAM_URL_RE = %r{https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?getstream\.io\/[\w=-\?%&]+app_id=(?<app_id>\d+)}i - class Client - attr_reader :api_key - attr_reader :api_secret - attr_reader :app_id - attr_reader :api_version - attr_reader :location - attr_reader :default_timeout + class Client + attr_reader :api_key + attr_reader :api_secret + attr_reader :app_id + attr_reader :api_version + attr_reader :location + attr_reader :default_timeout - if RUBY_VERSION.to_f >= 2.1 - require 'stream/batch' - require 'stream/signedrequest' + if RUBY_VERSION.to_f >= 2.1 + require "stream/batch" + require "stream/signedrequest" - include Stream::SignedRequest - include Stream::Batch - end + include Stream::SignedRequest + include Stream::Batch + end - # - # initializes a Stream API Client - # - # @param [string] api_key your application api_key - # @param [string] api_secret your application secret - # @param [string] app_id the id of your application (optional) - # @param [hash] opts extra options - # - # @example initialise the client to connect to EU-West location - # Stream::Client.new('my_key', 'my_secret', 'my_app_id', :location => 'us-east') - # - def initialize(api_key='', api_secret='', app_id=nil, opts={}) - if ENV['STREAM_URL'] =~ Stream::STREAM_URL_RE and (api_key.nil? || api_key.empty?) - matches = Stream::STREAM_URL_RE.match(ENV['STREAM_URL']) - api_key = matches['key'] - api_secret = matches['secret'] - app_id = matches['app_id'] - opts[:location] = matches['location'] - end + # + # initializes a Stream API Client + # + # @param [string] api_key your application api_key + # @param [string] api_secret your application secret + # @param [string] app_id the id of your application (optional) + # @param [hash] opts extra options + # + # @example initialise the client to connect to EU-West location + # Stream::Client.new('my_key', 'my_secret', 'my_app_id', :location => 'us-east') + # + def initialize(api_key = "", api_secret = "", app_id = nil, opts = {}) + if ENV["STREAM_URL"] =~ Stream::STREAM_URL_RE && (api_key.nil? || api_key.empty?) + matches = Stream::STREAM_URL_RE.match(ENV["STREAM_URL"]) + api_key = matches["key"] + api_secret = matches["secret"] + app_id = matches["app_id"] + opts[:location] = matches["location"] + end - if api_key.nil? || api_key.empty? - raise ArgumentError, 'empty api_key parameter and missing or invalid STREAM_URL env variable' - end + if api_key.nil? || api_key.empty? + raise ArgumentError, "empty api_key parameter and missing or invalid STREAM_URL env variable" + end - @api_key = api_key - @api_secret = api_secret - @app_id = app_id - @location = opts[:location] - @api_version = opts.fetch(:api_version, 'v1.0') - @default_timeout = opts.fetch(:default_timeout, 3) - @signer = Stream::Signer.new(api_secret) - end + @api_key = api_key + @api_secret = api_secret + @app_id = app_id + @location = opts[:location] + @api_version = opts.fetch(:api_version, "v1.0") + @default_timeout = opts.fetch(:default_timeout, 3) + @signer = Stream::Signer.new(api_secret) + end - # - # Creates a feed instance - # - # @param [string] feed_slug the feed slug (eg. flat, aggregated...) - # @param [user_id] user_id the user_id of this feed (eg. User42) - # - # @return [Stream::Feed] - # - def feed(feed_slug, user_id) - token = @signer.sign(feed_slug, user_id) - Stream::Feed.new(self, feed_slug, user_id, token) - end + # + # Creates a feed instance + # + # @param [string] feed_slug the feed slug (eg. flat, aggregated...) + # @param [user_id] user_id the user_id of this feed (eg. User42) + # + # @return [Stream::Feed] + # + def feed(feed_slug, user_id) + token = @signer.sign(feed_slug, user_id) + Stream::Feed.new(self, feed_slug, user_id, token) + end - def get_default_params - {:api_key => @api_key} - end + def get_default_params + { :api_key => @api_key } + end - def get_http_client - StreamHTTPClient.new(@api_version, @location, @default_timeout) - end + def get_http_client + StreamHTTPClient.new(@api_version, @location, @default_timeout) + end - def make_query_params(params) - self.get_default_params.merge(params) - end + def make_query_params(params) + get_default_params.merge(params) + end - def make_request(method, relative_url, signature, params={}, data={}, headers={}) - headers['Authorization'] = signature - self.get_http_client.make_http_request(method, relative_url, self.make_query_params(params), data, headers) - end - + def make_request(method, relative_url, signature, params = {}, data = {}, headers = {}) + headers["Authorization"] = signature + get_http_client.make_http_request(method, relative_url, make_query_params(params), data, headers) end + end - class StreamHTTPClient + class StreamHTTPClient + include HTTParty + attr_reader :base_path - include HTTParty - attr_reader :base_path - - def initialize(api_version='v1.0', location=nil, default_timeout=3) - if location.nil? - location_name = "api" - else - location_name = "#{location}-api" - end - @base_path = "/api/#{api_version}" - self.class.base_uri "https://#{location_name}.getstream.io#{@base_path}" - self.class.default_timeout default_timeout - end - - def make_http_request(method, relative_url, params=nil, data=nil, headers=nil) - headers['Content-Type'] = 'application/json' - headers['User-Agent'] = "stream-ruby-#{Stream::VERSION}" - if ['post', 'put'].include? method.to_s - body = data.to_json - end - response = self.class.send(method, relative_url, :headers => headers, :query => params, :body => body ) - case response.code - when 200..203 - return response - when 204...600 - raise StreamApiResponseException, "#{response['exception']} details: #{response['detail']}" - end - end + def initialize(api_version = "v1.0", location = nil, default_timeout = 3) + if location.nil? + location_name = "api" + else + location_name = "#{location}-api" + end + @base_path = "/api/#{api_version}" + self.class.base_uri "https://#{location_name}.getstream.io#{@base_path}" + self.class.default_timeout default_timeout end + def make_http_request(method, relative_url, params = nil, data = nil, headers = nil) + headers["Content-Type"] = "application/json" + headers["X-Stream-Client"] = "stream-ruby-client-#{Stream::VERSION}" + body = data.to_json if ["post", "put"].include? method.to_s + response = self.class.send(method, relative_url, :headers => headers, :query => params, :body => body) + case response.code + when 200..203 + return response + when 204...600 + raise StreamApiResponseException, "#{response['exception']} details: #{response['detail']}" + end + end + end end