Skip to content

Commit 56b343e

Browse files
committed
Choosing of HTTP/HTTPS protocol for requests
1 parent f72eb11 commit 56b343e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+149
-35
lines changed

lib/recombee_api_client.rb

Lines changed: 50 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,87 +11,103 @@
1111
Gem.find_files('recombee_api_client/api/*.rb').each { |path| require path }
1212

1313
module RecombeeApiClient
14+
##
15+
# Client for sending requests to Recombee recommender system
1416
class RecombeeClient
1517
include HTTParty
1618

17-
def initialize(account, token, options = {})
19+
##
20+
# - +account+ -> Name of your account at Recombee
21+
# - +token+ -> Secret token obtained from Recombee for signing requests
22+
# - +protocol+ -> Default protocol for sending requests. Possible values: 'http', 'https'.
23+
def initialize(account, token, protocol = 'http', options = {})
1824
@account = account
1925
@token = token
26+
@protocol = protocol
2027
@base_uri = ENV['RAPI_URI'] if ENV.key? 'RAPI_URI'
2128
@base_uri||= options[:base_uri]
22-
@base_uri||= 'https://rapi.recombee.com'
29+
@base_uri||= 'rapi.recombee.com'
2330
end
2431

32+
##
33+
# - +request+ -> ApiRequest to be sent to Recombee recommender
2534
def send(request)
26-
@request = request
27-
uri = request.path
28-
uri.slice! ('/{databaseId}/')
29-
uri = URI.escape uri
3035
timeout = request.timeout / 1000
36+
uri = process_request_uri(request)
37+
uri = sign_url(uri)
38+
protocol = request.ensure_https ? 'https' : @protocol
39+
uri = protocol + '://' + @base_uri + uri
3140
# puts uri
3241
begin
3342
case request.method
3443
when :put
35-
hmac_put(uri, timeout)
44+
put(request, uri, timeout)
3645
when :get
37-
hmac_get(uri, timeout)
46+
get(request, uri, timeout)
3847
when :post
39-
hmac_post(uri, timeout, request.body_parameters.to_json)
48+
post(request, uri, timeout)
4049
when :delete
41-
hmac_delete(uri, timeout)
50+
delete(request, uri, timeout)
4251
end
4352
rescue Timeout::Error
44-
fail ApiTimeout.new(@request)
53+
fail ApiTimeout.new(request)
4554
end
4655
end
4756

4857
private
4958

50-
def hmac_put(uri, timeout, options = {})
51-
r = self.class.put(sign_url(uri), query: options, timeout: timeout)
52-
check_errors r
53-
r.body
59+
def put(request, uri, timeout)
60+
response = self.class.put(uri, timeout: timeout)
61+
check_errors(response, request)
62+
response.body
5463
end
5564

56-
def hmac_get(uri, timeout, options = {})
57-
r = self.class.get(sign_url(uri), query: options, timeout: timeout)
58-
check_errors r
59-
JSON.parse(r.body)
65+
def get(request, uri, timeout)
66+
response = self.class.get(uri, timeout: timeout)
67+
check_errors(response, request)
68+
JSON.parse(response.body)
6069
end
6170

62-
def hmac_post(uri, timeout, options = {})
63-
url = sign_url(uri)
71+
def post(request, uri, timeout)
6472
# pass arguments in body
65-
r = self.class.post(url, body: options,
73+
response = self.class.post(uri, body: request.body_parameters.to_json,
6674
headers: { 'Content-Type' => 'application/json' },
6775
timeout: timeout)
68-
check_errors r
76+
check_errors(response, request)
6977
begin
70-
return JSON.parse(r.body)
78+
return JSON.parse(response.body)
7179
rescue JSON::ParserError
72-
return r.body
80+
return response.body
7381
end
7482
end
7583

76-
def hmac_delete(uri, timeout, options = {})
77-
r = self.class.delete(sign_url(uri), query: options, timeout: timeout)
78-
check_errors r
79-
r.body
84+
def delete(request, uri, timeout)
85+
response = self.class.delete(uri, timeout: timeout)
86+
check_errors(response, request)
87+
response.body
8088
end
8189

82-
def check_errors(response)
90+
def check_errors(response, request)
8391
status_code = response.code
8492
return if status_code == 200 || status_code == 201
85-
fail ResponseError.new(@request, status_code, response.body)
93+
fail ResponseError.new(request, status_code, response.body)
94+
end
95+
96+
def process_request_uri(request)
97+
uri = request.path
98+
uri.slice! ('/{databaseId}/')
99+
uri = URI.escape uri
100+
uri
86101
end
87102

88103
# Sign request with HMAC, request URI must be exacly the same
89104
# We have 30s to complete request with this token
90-
def sign_url(req)
91-
uri = "/#{@account}/#{req}"
105+
def sign_url(req_part)
106+
uri = "/#{@account}/#{req_part}"
92107
time = hmac_time(uri)
93108
sign = hmac_sign(uri, time)
94-
@base_uri + uri + time + "&hmac_sign=#{sign}"
109+
res = uri + time + "&hmac_sign=#{sign}"
110+
res
95111
end
96112

97113
def hmac_time(uri)

lib/recombee_api_client/api/add_bookmark.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module RecombeeApiClient
1212
class AddBookmark < ApiRequest
1313
attr_reader :user_id, :item_id, :timestamp, :cascade_create
1414
attr_accessor :timeout
15+
attr_accessor :ensure_https
1516

1617
##
1718
# * *Required arguments*
@@ -29,6 +30,7 @@ def initialize(user_id, item_id, optional = {})
2930
@cascade_create = optional['cascadeCreate']
3031
@optional = optional
3132
@timeout = 1000
33+
@ensure_https = false
3234
@optional.each do |par, _|
3335
fail UnknownOptionalParameter.new(par) unless ["timestamp","cascadeCreate"].include? par
3436
end

lib/recombee_api_client/api/add_cart_addition.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module RecombeeApiClient
1212
class AddCartAddition < ApiRequest
1313
attr_reader :user_id, :item_id, :timestamp, :cascade_create
1414
attr_accessor :timeout
15+
attr_accessor :ensure_https
1516

1617
##
1718
# * *Required arguments*
@@ -29,6 +30,7 @@ def initialize(user_id, item_id, optional = {})
2930
@cascade_create = optional['cascadeCreate']
3031
@optional = optional
3132
@timeout = 1000
33+
@ensure_https = false
3234
@optional.each do |par, _|
3335
fail UnknownOptionalParameter.new(par) unless ["timestamp","cascadeCreate"].include? par
3436
end

lib/recombee_api_client/api/add_detail_view.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module RecombeeApiClient
1212
class AddDetailView < ApiRequest
1313
attr_reader :user_id, :item_id, :timestamp, :duration, :cascade_create
1414
attr_accessor :timeout
15+
attr_accessor :ensure_https
1516

1617
##
1718
# * *Required arguments*
@@ -31,6 +32,7 @@ def initialize(user_id, item_id, optional = {})
3132
@cascade_create = optional['cascadeCreate']
3233
@optional = optional
3334
@timeout = 1000
35+
@ensure_https = false
3436
@optional.each do |par, _|
3537
fail UnknownOptionalParameter.new(par) unless ["timestamp","duration","cascadeCreate"].include? par
3638
end

lib/recombee_api_client/api/add_group.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ module RecombeeApiClient
1111
class AddGroup < ApiRequest
1212
attr_reader :group_id
1313
attr_accessor :timeout
14+
attr_accessor :ensure_https
1415

1516
##
1617
# * *Required arguments*
@@ -19,6 +20,7 @@ class AddGroup < ApiRequest
1920
def initialize(group_id)
2021
@group_id = group_id
2122
@timeout = 1000
23+
@ensure_https = false
2224
end
2325

2426
# HTTP method

lib/recombee_api_client/api/add_item.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module RecombeeApiClient
1414
class AddItem < ApiRequest
1515
attr_reader :item_id
1616
attr_accessor :timeout
17+
attr_accessor :ensure_https
1718

1819
##
1920
# * *Required arguments*
@@ -22,6 +23,7 @@ class AddItem < ApiRequest
2223
def initialize(item_id)
2324
@item_id = item_id
2425
@timeout = 1000
26+
@ensure_https = false
2527
end
2628

2729
# HTTP method

lib/recombee_api_client/api/add_item_property.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module RecombeeApiClient
1212
class AddItemProperty < ApiRequest
1313
attr_reader :property_name, :type
1414
attr_accessor :timeout
15+
attr_accessor :ensure_https
1516

1617
##
1718
# * *Required arguments*
@@ -24,6 +25,7 @@ def initialize(property_name, type)
2425
@property_name = property_name
2526
@type = type
2627
@timeout = 1000
28+
@ensure_https = false
2729
end
2830

2931
# HTTP method

lib/recombee_api_client/api/add_purchase.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module RecombeeApiClient
1212
class AddPurchase < ApiRequest
1313
attr_reader :user_id, :item_id, :timestamp, :cascade_create
1414
attr_accessor :timeout
15+
attr_accessor :ensure_https
1516

1617
##
1718
# * *Required arguments*
@@ -29,6 +30,7 @@ def initialize(user_id, item_id, optional = {})
2930
@cascade_create = optional['cascadeCreate']
3031
@optional = optional
3132
@timeout = 1000
33+
@ensure_https = false
3234
@optional.each do |par, _|
3335
fail UnknownOptionalParameter.new(par) unless ["timestamp","cascadeCreate"].include? par
3436
end

lib/recombee_api_client/api/add_rating.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ module RecombeeApiClient
1212
class AddRating < ApiRequest
1313
attr_reader :user_id, :item_id, :timestamp, :rating, :cascade_create
1414
attr_accessor :timeout
15+
attr_accessor :ensure_https
1516

1617
##
1718
# * *Required arguments*
@@ -31,6 +32,7 @@ def initialize(user_id, item_id, rating, optional = {})
3132
@cascade_create = optional['cascadeCreate']
3233
@optional = optional
3334
@timeout = 1000
35+
@ensure_https = false
3436
@optional.each do |par, _|
3537
fail UnknownOptionalParameter.new(par) unless ["timestamp","cascadeCreate"].include? par
3638
end

lib/recombee_api_client/api/add_series.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ module RecombeeApiClient
1111
class AddSeries < ApiRequest
1212
attr_reader :series_id
1313
attr_accessor :timeout
14+
attr_accessor :ensure_https
1415

1516
##
1617
# * *Required arguments*
@@ -19,6 +20,7 @@ class AddSeries < ApiRequest
1920
def initialize(series_id)
2021
@series_id = series_id
2122
@timeout = 1000
23+
@ensure_https = false
2224
end
2325

2426
# HTTP method

0 commit comments

Comments
 (0)