lib/stream/client.rb in stream-ruby-2.5.8 vs lib/stream/client.rb in stream-ruby-2.5.9
- old
+ new
@@ -1,22 +1,23 @@
-require "faraday"
-require "stream/errors"
-require "stream/feed"
-require "stream/signer"
+require 'faraday'
+require 'stream/errors'
+require 'stream/feed'
+require 'stream/signer'
module Stream
- STREAM_URL_RE = %r{https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?getstream\.io\/[\w=-\?%&]+app_id=(?<app_id>\d+)}i
+ STREAM_URL_COM_RE = %r{https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?(?<api_hostname>stream-io-api\.com)\/[\w=-\?%&]+app_id=(?<app_id>\d+)}i
+ STREAM_URL_IO_RE = %r{https\:\/\/(?<key>\w+)\:(?<secret>\w+)@((api\.)|((?<location>[-\w]+)\.))?(?<api_hostname>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 :client_options
if RUBY_VERSION.to_f >= 2.1
- require "stream/batch"
- require "stream/signedrequest"
+ require 'stream/batch'
+ require 'stream/signedrequest'
include Stream::SignedRequest
include Stream::Batch
end
@@ -29,33 +30,42 @@
# @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"]
+ def initialize(api_key = '', api_secret = '', app_id = nil, opts = {})
+ if ENV['STREAM_URL'] =~ Stream::STREAM_URL_COM_RE && (api_key.nil? || api_key.empty?)
+ matches = Stream::STREAM_URL_COM_RE.match(ENV['STREAM_URL'])
+ api_key = matches['key']
+ api_secret = matches['secret']
+ app_id = matches['app_id']
+ opts[:location] = matches['location']
+ opts[:api_hostname] = matches['api_hostname']
+ elsif ENV['STREAM_URL'] =~ Stream::STREAM_URL_IO_RE && (api_key.nil? || api_key.empty?)
+ matches = Stream::STREAM_URL_IO_RE.match(ENV['STREAM_URL'])
+ api_key = matches['key']
+ api_secret = matches['secret']
+ app_id = matches['app_id']
+ opts[:location] = matches['location']
+ opts[:api_hostname] = matches['api_hostname']
end
if api_key.nil? || api_key.empty?
- raise ArgumentError, "empty api_key parameter and missing or invalid STREAM_URL env variable"
+ 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
@signer = Stream::Signer.new(api_secret)
@client_options = {
- :api_version => opts.fetch(:api_version, "v1.0"),
- :location => opts.fetch(:location, nil),
- :default_timeout => opts.fetch(:default_timeout, 3),
- :api_key => @api_key
+ api_version: opts.fetch(:api_version, 'v1.0'),
+ location: opts.fetch(:location, nil),
+ default_timeout: opts.fetch(:default_timeout, 3),
+ api_key: @api_key,
+ api_hostname: opts.fetch(:api_hostname, 'stream-io-api.com')
}
end
# Creates a feed instance
#
@@ -72,60 +82,65 @@
def update_activity(activity)
update_activities([activity])
end
def update_activities(activities)
- auth_token = Stream::Signer.create_jwt_token("activities", "*", @api_secret, "*")
- make_request(:post, "/activities/", auth_token, {}, "activities" => activities)
+ auth_token = Stream::Signer.create_jwt_token('activities', '*', @api_secret, '*')
+ make_request(:post, '/activities/', auth_token, {}, 'activities' => activities)
end
def get_default_params
- { :api_key => @api_key }
+ {:api_key => @api_key}
end
def get_http_client
@http_client ||= StreamHTTPClient.new(@client_options)
end
def make_query_params(params)
- Hash[get_default_params.merge(params).sort_by { |k, v| k.to_s }]
+ Hash[get_default_params.merge(params).sort_by {|k, v| k.to_s}]
end
def make_request(method, relative_url, signature, params = {}, data = {}, headers = {})
- headers["Authorization"] = signature
- headers["stream-auth-type"] = "jwt"
+ headers['Authorization'] = signature
+ headers['stream-auth-type'] = 'jwt'
get_http_client.make_http_request(method, relative_url, make_query_params(params), data, headers)
end
end
class StreamHTTPClient
- require "faraday"
+ require 'faraday'
attr_reader :conn
attr_reader :options
attr_reader :base_path
def initialize(client_params)
@options = client_params
- location_name = "api"
+ location_name = 'api'
unless client_params[:location].nil?
location_name = "#{client_params[:location]}-api"
end
protocol = 'https'
port = ':443'
- if @options[:location] == "qa" || @options[:location] == "localhost"
+ if @options[:location] == 'qa' || @options[:location] == 'localhost'
protocol = 'http'
port = ':80'
if @options[:location] == 'localhost'
port = ':8000'
end
end
+ api_hostname = 'stream-io-api.com'
+ if @options[:api_hostname]
+ api_hostname = @options[:api_hostname]
+ end
+
@base_path = "/api/#{@options[:api_version]}"
- base_url = "#{protocol}://#{location_name}.getstream.io#{port}#{@base_path}"
+ base_url = "#{protocol}://#{location_name}.#{api_hostname}#{port}#{@base_path}"
@conn = Faraday.new(:url => base_url) do |faraday|
# faraday.request :url_encoded
faraday.adapter Faraday.default_adapter
faraday.use RaiseHttpException
@@ -134,59 +149,58 @@
end
@conn.path_prefix = @base_path
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}"
- params["api_key"] = @options[:api_key]
+ headers['Content-Type'] = 'application/json'
+ headers['X-Stream-Client'] = "stream-ruby-client-#{Stream::VERSION}"
+ params['api_key'] = @options[:api_key]
relative_url = "#{@base_path}#{relative_url}?#{URI.encode_www_form(params)}"
body = data.to_json if %w(post put).include? method.to_s
response = @conn.run_request(
- method,
- relative_url,
- body,
- headers
+ method,
+ relative_url,
+ body,
+ headers
)
case response[:status].to_i
- when 200..203
- return ::JSON.parse(response[:body])
+ when 200..203
+ return ::JSON.parse(response[:body])
end
end
end
class RaiseHttpException < Faraday::Middleware
def call(env)
@app.call(env).on_complete do |response|
case response[:status].to_i
- when 200..203
- return response
- when 401
- raise StreamApiResponseException, error_message(response, "Bad feed")
- when 403
- raise StreamApiResponseException, error_message(response, "Bad auth/headers")
- when 404
- raise StreamApiResponseException, error_message(response, "url not found")
- when 204...600
- raise StreamApiResponseException, error_message(response, _build_error_message(response.body))
+ when 200..203
+ return response
+ when 401
+ raise StreamApiResponseException, error_message(response, 'Bad feed')
+ when 403
+ raise StreamApiResponseException, error_message(response, 'Bad auth/headers')
+ when 404
+ raise StreamApiResponseException, error_message(response, 'url not found')
+ when 204...600
+ raise StreamApiResponseException, error_message(response, _build_error_message(response.body))
end
end
end
-
def initialize(app)
super app
@parser = nil
end
private
def _build_error_message(response)
response = JSON.parse(response)
msg = "#{response['exception']} details: #{response['detail']}"
- if response.key?("exception_fields")
- response["exception_fields"].map do |field, messages|
+ if response.key?('exception_fields')
+ response['exception_fields'].map do |field, messages|
msg << "\n#{field}: #{messages}"
end
end
msg
end