recombee_api_client 5.1.0 → 6.0.0

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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/lib/recombee_api_client/api/add_bookmark.rb +26 -26
  3. data/lib/recombee_api_client/api/add_cart_addition.rb +28 -28
  4. data/lib/recombee_api_client/api/add_detail_view.rb +32 -28
  5. data/lib/recombee_api_client/api/add_item.rb +15 -18
  6. data/lib/recombee_api_client/api/add_item_property.rb +34 -35
  7. data/lib/recombee_api_client/api/add_manual_reql_segment.rb +26 -27
  8. data/lib/recombee_api_client/api/add_purchase.rb +29 -29
  9. data/lib/recombee_api_client/api/add_rating.rb +27 -27
  10. data/lib/recombee_api_client/api/add_search_synonym.rb +29 -30
  11. data/lib/recombee_api_client/api/add_series.rb +20 -21
  12. data/lib/recombee_api_client/api/add_user.rb +14 -17
  13. data/lib/recombee_api_client/api/add_user_property.rb +30 -31
  14. data/lib/recombee_api_client/api/batch.rb +12 -16
  15. data/lib/recombee_api_client/api/composite_recommendation.rb +132 -0
  16. data/lib/recombee_api_client/api/create_auto_reql_segmentation.rb +29 -30
  17. data/lib/recombee_api_client/api/create_manual_reql_segmentation.rb +27 -28
  18. data/lib/recombee_api_client/api/create_property_based_segmentation.rb +30 -31
  19. data/lib/recombee_api_client/api/delete_all_search_synonyms.rb +15 -19
  20. data/lib/recombee_api_client/api/delete_bookmark.rb +21 -22
  21. data/lib/recombee_api_client/api/delete_cart_addition.rb +21 -22
  22. data/lib/recombee_api_client/api/delete_detail_view.rb +21 -22
  23. data/lib/recombee_api_client/api/delete_item.rb +16 -19
  24. data/lib/recombee_api_client/api/delete_item_property.rb +15 -18
  25. data/lib/recombee_api_client/api/delete_manual_reql_segment.rb +16 -19
  26. data/lib/recombee_api_client/api/delete_more_items.rb +18 -19
  27. data/lib/recombee_api_client/api/delete_purchase.rb +21 -22
  28. data/lib/recombee_api_client/api/delete_rating.rb +21 -22
  29. data/lib/recombee_api_client/api/delete_search_synonym.rb +15 -18
  30. data/lib/recombee_api_client/api/delete_segmentation.rb +15 -18
  31. data/lib/recombee_api_client/api/delete_series.rb +21 -22
  32. data/lib/recombee_api_client/api/delete_user.rb +15 -18
  33. data/lib/recombee_api_client/api/delete_user_property.rb +15 -18
  34. data/lib/recombee_api_client/api/delete_view_portion.rb +21 -22
  35. data/lib/recombee_api_client/api/get_item_property_info.rb +14 -17
  36. data/lib/recombee_api_client/api/get_item_values.rb +15 -18
  37. data/lib/recombee_api_client/api/get_segmentation.rb +15 -18
  38. data/lib/recombee_api_client/api/get_user_property_info.rb +15 -18
  39. data/lib/recombee_api_client/api/get_user_values.rb +15 -18
  40. data/lib/recombee_api_client/api/insert_to_series.rb +23 -24
  41. data/lib/recombee_api_client/api/list_item_bookmarks.rb +16 -19
  42. data/lib/recombee_api_client/api/list_item_cart_additions.rb +16 -19
  43. data/lib/recombee_api_client/api/list_item_detail_views.rb +16 -19
  44. data/lib/recombee_api_client/api/list_item_properties.rb +15 -19
  45. data/lib/recombee_api_client/api/list_item_purchases.rb +16 -19
  46. data/lib/recombee_api_client/api/list_item_ratings.rb +16 -19
  47. data/lib/recombee_api_client/api/list_item_view_portions.rb +16 -19
  48. data/lib/recombee_api_client/api/list_items.rb +62 -62
  49. data/lib/recombee_api_client/api/list_scenarios.rb +15 -19
  50. data/lib/recombee_api_client/api/list_search_synonyms.rb +20 -21
  51. data/lib/recombee_api_client/api/list_segmentations.rb +16 -17
  52. data/lib/recombee_api_client/api/list_series.rb +15 -19
  53. data/lib/recombee_api_client/api/list_series_items.rb +15 -18
  54. data/lib/recombee_api_client/api/list_user_bookmarks.rb +15 -18
  55. data/lib/recombee_api_client/api/list_user_cart_additions.rb +15 -18
  56. data/lib/recombee_api_client/api/list_user_detail_views.rb +15 -18
  57. data/lib/recombee_api_client/api/list_user_properties.rb +15 -19
  58. data/lib/recombee_api_client/api/list_user_purchases.rb +15 -18
  59. data/lib/recombee_api_client/api/list_user_ratings.rb +15 -18
  60. data/lib/recombee_api_client/api/list_user_view_portions.rb +15 -18
  61. data/lib/recombee_api_client/api/list_users.rb +56 -56
  62. data/lib/recombee_api_client/api/merge_users.rb +24 -25
  63. data/lib/recombee_api_client/api/recommend_item_segments_to_item.rb +69 -68
  64. data/lib/recombee_api_client/api/recommend_item_segments_to_item_segment.rb +70 -69
  65. data/lib/recombee_api_client/api/recommend_item_segments_to_user.rb +51 -50
  66. data/lib/recombee_api_client/api/recommend_items_to_item.rb +185 -139
  67. data/lib/recombee_api_client/api/recommend_items_to_item_segment.rb +181 -138
  68. data/lib/recombee_api_client/api/recommend_items_to_user.rb +165 -122
  69. data/lib/recombee_api_client/api/recommend_next_items.rb +24 -25
  70. data/lib/recombee_api_client/api/recommend_users_to_item.rb +151 -105
  71. data/lib/recombee_api_client/api/recommend_users_to_user.rb +154 -111
  72. data/lib/recombee_api_client/api/remove_from_series.rb +17 -18
  73. data/lib/recombee_api_client/api/request.rb +1 -1
  74. data/lib/recombee_api_client/api/reset_database.rb +15 -19
  75. data/lib/recombee_api_client/api/search_item_segments.rb +52 -51
  76. data/lib/recombee_api_client/api/search_items.rb +157 -114
  77. data/lib/recombee_api_client/api/set_item_values.rb +28 -29
  78. data/lib/recombee_api_client/api/set_user_values.rb +21 -22
  79. data/lib/recombee_api_client/api/set_values.rb +28 -28
  80. data/lib/recombee_api_client/api/set_view_portion.rb +37 -30
  81. data/lib/recombee_api_client/api/update_auto_reql_segmentation.rb +26 -27
  82. data/lib/recombee_api_client/api/update_manual_reql_segment.rb +25 -26
  83. data/lib/recombee_api_client/api/update_manual_reql_segmentation.rb +24 -25
  84. data/lib/recombee_api_client/api/update_more_items.rb +19 -20
  85. data/lib/recombee_api_client/api/update_property_based_segmentation.rb +26 -27
  86. data/lib/recombee_api_client/errors.rb +2 -5
  87. data/lib/recombee_api_client/inputs/composite_recommendation_stage_parameters.rb +240 -0
  88. data/lib/recombee_api_client/inputs/input.rb +9 -0
  89. data/lib/recombee_api_client/inputs/logic.rb +45 -0
  90. data/lib/recombee_api_client/utils/hash_normalizer.rb +21 -0
  91. data/lib/recombee_api_client/version.rb +1 -1
  92. data/lib/recombee_api_client.rb +40 -35
  93. data/recombee_api_client.gemspec +2 -3
  94. metadata +14 -10
  95. data/lib/recombee_api_client/api/hash_normalizer.rb +0 -21
@@ -10,6 +10,7 @@ require 'cgi'
10
10
 
11
11
  require 'recombee_api_client/errors'
12
12
  Gem.find_files('recombee_api_client/api/*.rb').each { |path| require path }
13
+ Gem.find_files('recombee_api_client/inputs/*.rb').each { |path| require path }
13
14
 
14
15
  module RecombeeApiClient
15
16
  ##
@@ -17,8 +18,8 @@ module RecombeeApiClient
17
18
  class RecombeeClient
18
19
  include HTTParty
19
20
 
20
- BATCH_MAX_SIZE = 10000
21
- USER_AGENT = {'User-Agent' => 'recombee-ruby-api-client/5.1.0'}
21
+ BATCH_MAX_SIZE = 10_000
22
+ USER_AGENT = { 'User-Agent' => 'recombee-ruby-api-client/6.0.0' }
22
23
 
23
24
  ##
24
25
  # - +account+ -> Name of your account at Recombee
@@ -33,8 +34,7 @@ module RecombeeApiClient
33
34
  ##
34
35
  # - +request+ -> ApiRequest to be sent to Recombee recommender
35
36
  def send(request)
36
-
37
- return send_multipart_batch(request) if request.kind_of? Batch and request.requests.size > BATCH_MAX_SIZE
37
+ return send_multipart_batch(request) if request.is_a? Batch and request.requests.size > BATCH_MAX_SIZE
38
38
 
39
39
  timeout = request.timeout / 1000
40
40
  uri = process_request_uri(request)
@@ -54,7 +54,7 @@ module RecombeeApiClient
54
54
  delete(request, uri, timeout)
55
55
  end
56
56
  rescue Timeout::Error
57
- fail ApiTimeout.new(request)
57
+ raise ApiTimeout.new(request)
58
58
  end
59
59
  end
60
60
 
@@ -62,12 +62,15 @@ module RecombeeApiClient
62
62
 
63
63
  def get_regional_base_uri(region)
64
64
  uri = {
65
- 'ap-se' => 'rapi-ap-se.recombee.com',
66
- 'ca-east' => 'rapi-ca-east.recombee.com',
67
- 'eu-west' => 'rapi-eu-west.recombee.com',
68
- 'us-west' => 'rapi-us-west.recombee.com'
69
- }[region.to_s.gsub('_', '-').downcase]
70
- raise ArgumentError.new("Region \"#{region}\" is unknown. You may need to update the version of the SDK.") if uri == nil
65
+ 'ap-se' => 'rapi-ap-se.recombee.com',
66
+ 'ca-east' => 'rapi-ca-east.recombee.com',
67
+ 'eu-west' => 'rapi-eu-west.recombee.com',
68
+ 'us-west' => 'rapi-us-west.recombee.com'
69
+ }[region.to_s.gsub('_', '-').downcase]
70
+ if uri.nil?
71
+ raise ArgumentError.new("Region \"#{region}\" is unknown. You may need to update the version of the SDK.")
72
+ end
73
+
71
74
  uri
72
75
  end
73
76
 
@@ -77,16 +80,17 @@ module RecombeeApiClient
77
80
 
78
81
  if options.key? :region
79
82
  raise ArgumentError.new(':base_uri and :region cannot be specified at the same time') if base_uri
83
+
80
84
  base_uri = get_regional_base_uri(options[:region])
81
85
  end
82
- base_uri||= 'rapi.recombee.com'
86
+ base_uri ||= 'rapi.recombee.com'
83
87
  base_uri
84
88
  end
85
89
 
86
90
  def put(request, uri, timeout)
87
- response = self.class.put(uri, body: request.body_parameters.to_json,
88
- headers: { 'Content-Type' => 'application/json' }.merge(USER_AGENT),
89
- timeout: timeout)
91
+ response = self.class.put(uri, body: request.body_parameters.to_json,
92
+ headers: { 'Content-Type' => 'application/json' }.merge(USER_AGENT),
93
+ timeout: timeout)
90
94
  check_errors(response, request)
91
95
  response.body
92
96
  end
@@ -98,44 +102,45 @@ module RecombeeApiClient
98
102
  end
99
103
 
100
104
  def post(request, uri, timeout)
101
- response = self.class.post(uri, body: request.body_parameters.to_json,
102
- headers: { 'Content-Type' => 'application/json' }.merge(USER_AGENT),
103
- timeout: timeout)
105
+ response = self.class.post(uri, body: request.body_parameters.to_json,
106
+ headers: { 'Content-Type' => 'application/json' }.merge(USER_AGENT),
107
+ timeout: timeout)
104
108
  check_errors(response, request)
105
109
  begin
106
- return JSON.parse(response.body)
110
+ JSON.parse(response.body)
107
111
  rescue JSON::ParserError
108
- return response.body
112
+ response.body
109
113
  end
110
114
  end
111
115
 
112
116
  def delete(request, uri, timeout)
113
117
  response = self.class.delete(uri, body: request.body_parameters.to_json,
114
- headers: { 'Content-Type' => 'application/json' }.merge(USER_AGENT),
115
- timeout: timeout)
118
+ headers: { 'Content-Type' => 'application/json' }.merge(USER_AGENT),
119
+ timeout: timeout)
116
120
  check_errors(response, request)
117
121
  begin
118
- return JSON.parse(response.body)
122
+ JSON.parse(response.body)
119
123
  rescue JSON::ParserError
120
- return response.body
124
+ response.body
121
125
  end
122
126
  end
123
127
 
124
128
  def check_errors(response, request)
125
129
  status_code = response.code
126
- return if status_code == 200 || status_code == 201
127
- fail ResponseError.new(request, status_code, response.body)
130
+ return if [200, 201].include?(status_code)
131
+
132
+ raise ResponseError.new(request, status_code, response.body)
128
133
  end
129
134
 
130
135
  def send_multipart_batch(request)
131
136
  requests_parts = request.requests.each_slice(BATCH_MAX_SIZE)
132
- responses = requests_parts.map {|rqs| Batch.new(rqs)}.map{|batch| send(batch)}
133
- responses.inject([]){|result,resp| result + resp}
137
+ responses = requests_parts.map { |rqs| Batch.new(rqs) }.map { |batch| send(batch) }
138
+ responses.inject([]) { |result, resp| result + resp }
134
139
  end
135
140
 
136
141
  def process_request_uri(request)
137
142
  uri = request.path
138
- uri.slice! ('/{databaseId}/')
143
+ uri.slice!('/{databaseId}/')
139
144
  uri += query_parameters_to_url(request)
140
145
  uri
141
146
  end
@@ -143,15 +148,16 @@ module RecombeeApiClient
143
148
  def query_parameters_to_url(req)
144
149
  ps = ''
145
150
  req.query_parameters.each do |name, val|
146
- ps += (ps.include? '?') ? '&' : '?'
151
+ ps += ps.include?('?') ? '&' : '?'
147
152
  ps += "#{name}=#{format_query_parameter_value(val)}"
148
153
  end
149
154
  ps
150
155
  end
151
156
 
152
157
  def format_query_parameter_value(value)
153
- return CGI::escape("#{value}") unless value.kind_of?(Array)
154
- value.map{|v| CGI::escape("#{v}")}.join(',')
158
+ return CGI.escape("#{value}") unless value.is_a?(Array)
159
+
160
+ value.map { |v| CGI.escape("#{v}") }.join(',')
155
161
  end
156
162
 
157
163
  # Sign request with HMAC, request URI must be exacly the same
@@ -160,12 +166,11 @@ module RecombeeApiClient
160
166
  uri = "/#{@account}/#{req_part}"
161
167
  time = hmac_time(uri)
162
168
  sign = hmac_sign(uri, time)
163
- res = uri + time + "&hmac_sign=#{sign}"
164
- res
169
+ uri + time + "&hmac_sign=#{sign}"
165
170
  end
166
171
 
167
172
  def hmac_time(uri)
168
- res = (uri.include? '?') ? '&' : '?'
173
+ res = uri.include?('?') ? '&' : '?'
169
174
  res << "hmac_timestamp=#{Time.now.utc.to_i}"
170
175
  end
171
176
 
@@ -1,5 +1,4 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'recombee_api_client/version'
5
4
 
@@ -19,8 +18,8 @@ Gem::Specification.new do |spec|
19
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
19
  spec.require_paths = ['lib']
21
20
 
22
- spec.add_dependency 'multi_json', '~> 1.15'
23
21
  spec.add_dependency 'httparty', '~> 0.18'
22
+ spec.add_dependency 'multi_json', '~> 1.15'
24
23
 
25
24
  spec.add_development_dependency 'bundler', '~> 2.6.2'
26
25
  spec.add_development_dependency 'rake', '~> 13.0'
metadata CHANGED
@@ -1,42 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recombee_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ondřej Fiedler
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-07-24 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: multi_json
13
+ name: httparty
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '1.15'
18
+ version: '0.18'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '1.15'
25
+ version: '0.18'
26
26
  - !ruby/object:Gem::Dependency
27
- name: httparty
27
+ name: multi_json
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.18'
32
+ version: '1.15'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.18'
39
+ version: '1.15'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: bundler
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -105,6 +105,7 @@ files:
105
105
  - lib/recombee_api_client/api/add_user.rb
106
106
  - lib/recombee_api_client/api/add_user_property.rb
107
107
  - lib/recombee_api_client/api/batch.rb
108
+ - lib/recombee_api_client/api/composite_recommendation.rb
108
109
  - lib/recombee_api_client/api/create_auto_reql_segmentation.rb
109
110
  - lib/recombee_api_client/api/create_manual_reql_segmentation.rb
110
111
  - lib/recombee_api_client/api/create_property_based_segmentation.rb
@@ -129,7 +130,6 @@ files:
129
130
  - lib/recombee_api_client/api/get_segmentation.rb
130
131
  - lib/recombee_api_client/api/get_user_property_info.rb
131
132
  - lib/recombee_api_client/api/get_user_values.rb
132
- - lib/recombee_api_client/api/hash_normalizer.rb
133
133
  - lib/recombee_api_client/api/insert_to_series.rb
134
134
  - lib/recombee_api_client/api/list_item_bookmarks.rb
135
135
  - lib/recombee_api_client/api/list_item_cart_additions.rb
@@ -177,6 +177,10 @@ files:
177
177
  - lib/recombee_api_client/api/update_more_items.rb
178
178
  - lib/recombee_api_client/api/update_property_based_segmentation.rb
179
179
  - lib/recombee_api_client/errors.rb
180
+ - lib/recombee_api_client/inputs/composite_recommendation_stage_parameters.rb
181
+ - lib/recombee_api_client/inputs/input.rb
182
+ - lib/recombee_api_client/inputs/logic.rb
183
+ - lib/recombee_api_client/utils/hash_normalizer.rb
180
184
  - lib/recombee_api_client/version.rb
181
185
  - recombee_api_client.gemspec
182
186
  homepage: https://recombee.com
@@ -197,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
201
  - !ruby/object:Gem::Version
198
202
  version: '0'
199
203
  requirements: []
200
- rubygems_version: 3.6.2
204
+ rubygems_version: 3.7.2
201
205
  specification_version: 4
202
206
  summary: Client for Recombee recommendation API
203
207
  test_files: []
@@ -1,21 +0,0 @@
1
- module RecombeeApiClient
2
- ##
3
- # Module to convert Ruby conventions to Recombee's API namings
4
- #
5
- module HashNormalizer
6
- def normalize_optional opts
7
- opts_new = {}
8
- opts.each do |k,v|
9
- case k
10
- when String then opts_new[camelize(k)] = opts.delete(k)
11
- when Symbol then opts_new[camelize(k.to_s)] = opts.delete(k)
12
- end
13
- end
14
- opts_new
15
- end
16
-
17
- def camelize str
18
- str.gsub(/_(.)/) {|e| $1.upcase}
19
- end
20
- end
21
- end