search_spring 0.2.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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/README.md +48 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/data/ca-certificates.crt +3919 -0
- data/lib/search_spring/client.rb +70 -0
- data/lib/search_spring/errors.rb +30 -0
- data/lib/search_spring/version.rb +3 -0
- data/lib/search_spring.rb +9 -0
- data/search_spring.gemspec +32 -0
- metadata +213 -0
@@ -0,0 +1,70 @@
|
|
1
|
+
require_relative 'errors'
|
2
|
+
module SearchSpring
|
3
|
+
API_ENDPOINT = 'https://api.searchspring.net'.freeze
|
4
|
+
|
5
|
+
#
|
6
|
+
#
|
7
|
+
class Client
|
8
|
+
attr_reader :site_id, :conn, :secret_key
|
9
|
+
|
10
|
+
def initialize(site_id, secret_key, req_options = {})
|
11
|
+
@site_id = site_id
|
12
|
+
@secret_key = secret_key
|
13
|
+
raise Errors::AuthenticationError, 'No Site ID provided.' unless @site_id
|
14
|
+
unless @secret_key
|
15
|
+
raise Errors::AuthenticationError, 'No Secret Key provided.'
|
16
|
+
end
|
17
|
+
|
18
|
+
@conn = connection(req_options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def upsert(feed_id:, products: [])
|
22
|
+
conn.post(
|
23
|
+
'api/index/upsert.json',
|
24
|
+
feedId: feed_id,
|
25
|
+
records: products
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def update(feed_id:, products: [])
|
30
|
+
conn.post(
|
31
|
+
'api/index/update.json',
|
32
|
+
feedId: feed_id,
|
33
|
+
records: products
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def delete(feed_id:, product_ids: [])
|
38
|
+
conn.post(
|
39
|
+
'api/index/delete.json',
|
40
|
+
feedId: feed_id,
|
41
|
+
records: product_ids
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def connection(options = {})
|
48
|
+
Faraday.new(default_req_options.merge(options)) do |f|
|
49
|
+
f.headers['Accept'] = 'application/json'
|
50
|
+
f.request :json
|
51
|
+
f.request :basic_auth, site_id, secret_key
|
52
|
+
f.response :logger
|
53
|
+
f.adapter :excon
|
54
|
+
f.use Errors::RequestError
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def default_req_options
|
59
|
+
{
|
60
|
+
url: API_ENDPOINT,
|
61
|
+
ssl: {
|
62
|
+
ca_path: SearchSpring::DEFAULT_CA_BUNDLE_PATH,
|
63
|
+
ca_file: File.join(
|
64
|
+
SearchSpring::DEFAULT_CA_BUNDLE_PATH, 'ca-certificates.crt'
|
65
|
+
)
|
66
|
+
}
|
67
|
+
}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SearchSpring
|
2
|
+
module Errors
|
3
|
+
class SearchSpringError < ::StandardError; end
|
4
|
+
class NotFound < SearchSpringError; end
|
5
|
+
class UnprocessableEntity < SearchSpringError; end
|
6
|
+
class InternalServerError < SearchSpringError; end
|
7
|
+
class NotAuthorized < SearchSpringError; end
|
8
|
+
class AuthenticationError < SearchSpringError; end
|
9
|
+
|
10
|
+
class RequestError < Faraday::Response::Middleware
|
11
|
+
def on_complete(env)
|
12
|
+
# Ignore any non-error response codes
|
13
|
+
return if (status = env[:status]) < 400
|
14
|
+
case status
|
15
|
+
when 404
|
16
|
+
raise Errors::NotFound, env[:body]
|
17
|
+
when 422
|
18
|
+
raise Errors::UnprocessableEntity, env[:body]
|
19
|
+
when 401
|
20
|
+
raise Errors::NotAuthorized, env[:body]
|
21
|
+
when 407
|
22
|
+
# mimic the behavior that we get with proxy requests with HTTPS
|
23
|
+
raise Faraday::Error::ConnectionFailed, %{407 "Proxy Authentication Required "}
|
24
|
+
else
|
25
|
+
raise Errors::InternalServerError, env[:body] # Treat any other errors as 500
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'search_spring/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'search_spring'
|
8
|
+
spec.version = SearchSpring::VERSION
|
9
|
+
spec.authors = ['Maxim Pechnikov']
|
10
|
+
spec.email = ['parallel588@gmail.com']
|
11
|
+
spec.summary = 'You heard us, a Ruby wrapper for the SearchSpring Live Indexing API'
|
12
|
+
spec.description = 'Ruby wrapper for the SearchSpring Live Indexing API'
|
13
|
+
spec.homepage = 'https://searchspring.com/'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
16
|
+
f.match(%r{^(test|spec|features)/})
|
17
|
+
end
|
18
|
+
spec.bindir = 'exe'
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_runtime_dependency 'excon', '~> 0.54', '>= 0.54.0'
|
23
|
+
spec.add_runtime_dependency 'faraday', ['>= 0.9.2', '< 1.0']
|
24
|
+
spec.add_runtime_dependency 'faraday_middleware', ['>= 0.9.2', '< 1.0']
|
25
|
+
spec.add_runtime_dependency 'multi_json', '~> 1.12', '>= 1.12.1'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.14'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.5'
|
30
|
+
spec.add_development_dependency 'pry', '~> 0.10.3'
|
31
|
+
spec.add_development_dependency 'webmock', '~> 2.3', '>= 2.3.2'
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,213 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: search_spring
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Maxim Pechnikov
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: excon
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.54'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.54.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.54'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.54.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: faraday
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.9.2
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.0'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.9.2
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '1.0'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: faraday_middleware
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.9.2
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1.0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.9.2
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '1.0'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: multi_json
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '1.12'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.12.1
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.12'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 1.12.1
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: bundler
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.14'
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '1.14'
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: rake
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - "~>"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '10.0'
|
114
|
+
type: :development
|
115
|
+
prerelease: false
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - "~>"
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '10.0'
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: rspec
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - "~>"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '3.5'
|
128
|
+
type: :development
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - "~>"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '3.5'
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: pry
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - "~>"
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.10.3
|
142
|
+
type: :development
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 0.10.3
|
149
|
+
- !ruby/object:Gem::Dependency
|
150
|
+
name: webmock
|
151
|
+
requirement: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - "~>"
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '2.3'
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 2.3.2
|
159
|
+
type: :development
|
160
|
+
prerelease: false
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '2.3'
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: 2.3.2
|
169
|
+
description: Ruby wrapper for the SearchSpring Live Indexing API
|
170
|
+
email:
|
171
|
+
- parallel588@gmail.com
|
172
|
+
executables: []
|
173
|
+
extensions: []
|
174
|
+
extra_rdoc_files: []
|
175
|
+
files:
|
176
|
+
- ".gitignore"
|
177
|
+
- ".rspec"
|
178
|
+
- ".travis.yml"
|
179
|
+
- Gemfile
|
180
|
+
- README.md
|
181
|
+
- Rakefile
|
182
|
+
- bin/console
|
183
|
+
- bin/setup
|
184
|
+
- lib/data/ca-certificates.crt
|
185
|
+
- lib/search_spring.rb
|
186
|
+
- lib/search_spring/client.rb
|
187
|
+
- lib/search_spring/errors.rb
|
188
|
+
- lib/search_spring/version.rb
|
189
|
+
- search_spring.gemspec
|
190
|
+
homepage: https://searchspring.com/
|
191
|
+
licenses: []
|
192
|
+
metadata: {}
|
193
|
+
post_install_message:
|
194
|
+
rdoc_options: []
|
195
|
+
require_paths:
|
196
|
+
- lib
|
197
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
requirements: []
|
208
|
+
rubyforge_project:
|
209
|
+
rubygems_version: 2.5.2
|
210
|
+
signing_key:
|
211
|
+
specification_version: 4
|
212
|
+
summary: You heard us, a Ruby wrapper for the SearchSpring Live Indexing API
|
213
|
+
test_files: []
|