whiplash_api 1.0.6 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +42 -20
- data/lib/whiplash_api.rb +1 -0
- data/lib/whiplash_api/base.rb +29 -5
- data/lib/whiplash_api/connection.rb +4 -4
- data/lib/whiplash_api/order_item.rb +13 -0
- data/lib/whiplash_api/version.rb +2 -1
- data/lib/whiplash_api/web_hook.rb +18 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b8e4cde329204d9a5cfbaeeee4f98fca367bf2d
|
4
|
+
data.tar.gz: 83e20c82aaa00ece745944f6ddb1c1a853466346
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f978b08e9b7bbc52a70dcfb09a86f050e8043b3a6c2a2155ea83b40467985ad834c1421c313cace4ac00892c2962a72907b80b13bb2672444f9e696724419203
|
7
|
+
data.tar.gz: 1951090bdfa4d3d17a30014721d4573b2aa44a90f2abe3a84b89932951c83e86923c644dfa5caabfa07efd9fb00c892b25a5efd7ce28ff90b8ae60d4837d175d
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -5,10 +5,6 @@ Whiplash API V1 - Ruby Client
|
|
5
5
|
|
6
6
|
This library provides a wrapper around the [Whiplash][whiplash] [Merchandising REST API][api] for use within Ruby apps or via the console.
|
7
7
|
|
8
|
-
### Note
|
9
|
-
|
10
|
-
**If you are using a Rails app, the advised approach is to use ActiveResource. You can get started or gain inspiration from our [example Rails app][app]: **
|
11
|
-
|
12
8
|
### Requirements
|
13
9
|
|
14
10
|
- Ruby 1.9.3+
|
@@ -16,9 +12,9 @@ This library provides a wrapper around the [Whiplash][whiplash] [Merchandising R
|
|
16
12
|
- JSON
|
17
13
|
- ActiveResource
|
18
14
|
|
19
|
-
A valid API key is required to authenticate requests. You can find your API key on your customer account page.
|
15
|
+
A valid API key (v1) or Oauth token (v2) is required to authenticate requests. You can find your API key on your customer account page.
|
20
16
|
|
21
|
-
You can
|
17
|
+
You can also use the test API key `Hc2BHTn3bcrwyPooyYTP` to test this client.
|
22
18
|
|
23
19
|
### Installation
|
24
20
|
|
@@ -40,15 +36,29 @@ To use the API client in your Ruby code, provide the required credentials as fol
|
|
40
36
|
require 'rubygems'
|
41
37
|
require 'whiplash_api'
|
42
38
|
|
43
|
-
|
39
|
+
WhiplashApi::Base.api_key = 'XXXXXXXXXXXXX'
|
44
40
|
```
|
45
|
-
|
46
41
|
An error will be raised if no API key is provided.
|
47
42
|
|
43
|
+
### API Versions
|
44
|
+
|
45
|
+
The default Whiplash API is v1 and uses API keys. The v2 API uses Oauth, and is currently available in private beta.
|
46
|
+
|
47
|
+
Both API versions are fully supported by this gem. Unless specified, API v1 is used.
|
48
|
+
|
49
|
+
NOTE: The API Key is your OAuth access token if you are using API v2. If you want to use API v2, call `.api_version` before setting the OAuth token:
|
50
|
+
|
51
|
+
```
|
52
|
+
WhiplashApi::Base.api_version = 1
|
53
|
+
WhiplashApi::Base.api_key = 'XXXXXXXXXXXXX'
|
54
|
+
```
|
55
|
+
|
56
|
+
### Sandbox usage
|
57
|
+
|
48
58
|
You'll likely want to start by testing in the Sandbox:
|
49
59
|
|
50
60
|
```
|
51
|
-
|
61
|
+
WhiplashApi::Base.testing!
|
52
62
|
```
|
53
63
|
|
54
64
|
You can, also, check a very basic implementation/example inside `exe/whiplash_api` file.
|
@@ -60,17 +70,17 @@ The API currently gives you access to all endpoints supported by [Whiplash][whip
|
|
60
70
|
```
|
61
71
|
$ irb
|
62
72
|
>
|
63
|
-
>
|
73
|
+
> WhiplashApi::Base.api_key = 'XXXXXXXXXXXXX'
|
64
74
|
>
|
65
|
-
> items =
|
75
|
+
> items = WhiplashApi::Item.all
|
66
76
|
>
|
67
|
-
> items =
|
77
|
+
> items = WhiplashApi::Item.sku('SOME-SKU-111')
|
68
78
|
>
|
69
|
-
> order =
|
79
|
+
> order = WhiplashApi::Order.last
|
70
80
|
>
|
71
|
-
> orders =
|
81
|
+
> orders = WhiplashApi::Order.all(:params => {:status => 'shipped', :created_at_min => '2008-01-01'})
|
72
82
|
>
|
73
|
-
> order_item =
|
83
|
+
> order_item = WhiplashApi::OrderItem.originator(ID_IN_YOUR_STORE)
|
74
84
|
>
|
75
85
|
```
|
76
86
|
|
@@ -86,19 +96,31 @@ $ irb
|
|
86
96
|
|
87
97
|
### Testing Whiplash API Gem
|
88
98
|
|
89
|
-
You can run the tests on the current version of this gem, by cloning it
|
99
|
+
You can run the tests on the current version of this gem, by cloning it
|
100
|
+
locally. Tests require setting up the following environment variables:
|
90
101
|
|
91
102
|
```
|
92
|
-
|
103
|
+
WL_API_KEY=Hc2BHTn3bcrwyPooyYTP # for testing if API v1 support
|
104
|
+
WL_OAUTH_KEY=23447e1eaeddf2d1c4af4c9cf88524af2863cb1f72d500dd9328b34735a3f3b0 # for testing if API v2 support
|
105
|
+
WL_API_VERSION=2 # By default, API v2 is used for all tests, but can be toggled using this.
|
106
|
+
WL_CUSTOMER_ID=242 # Use the given Customer ID for API v2
|
107
|
+
rspec spec
|
93
108
|
```
|
94
109
|
|
95
|
-
You can skip
|
110
|
+
You can skip checking support for API v1 by not setting the corresp. env
|
111
|
+
variable.
|
112
|
+
|
113
|
+
You can skip teardown for the tests (where the test suite
|
114
|
+
removes/deleted instances of created resources on the testing server) by
|
115
|
+
setting an environment variable `NO_TEARDOWN`.
|
96
116
|
|
97
|
-
Note that, testing can take a long time, since tests are performed
|
117
|
+
Note that, testing can take a long time, since tests are performed
|
118
|
+
directly on the testing server, and no mocks are used. This is to ensure
|
119
|
+
that the API conforms to the tests, at the same time.
|
98
120
|
|
99
121
|
### Copyright
|
100
122
|
|
101
|
-
Copyright (c)
|
123
|
+
Copyright (c) 2015 Whiplash Merchandising/Mark Dickson. See LICENSE.txt for further details.
|
102
124
|
|
103
125
|
|
104
126
|
[whiplash]: https://www.whiplashmerch.com/
|
data/lib/whiplash_api.rb
CHANGED
data/lib/whiplash_api/base.rb
CHANGED
@@ -7,10 +7,13 @@ module WhiplashApi
|
|
7
7
|
self.format = :json
|
8
8
|
|
9
9
|
class << self
|
10
|
+
attr_accessor :api_version, :api_key, :customer_id
|
11
|
+
|
10
12
|
def testing!
|
11
13
|
self.site = 'http://testing.whiplashmerch.com/api/'
|
12
14
|
|
13
15
|
ActiveSupport::Notifications.subscribe("request.active_resource") do |*args|
|
16
|
+
puts "[ActiveResource] Headers: #{WhiplashApi::Base.headers}"
|
14
17
|
puts "[ActiveResource] Request: #{args.last[:request_uri]}"
|
15
18
|
puts "[ActiveResource] Response: #{args.last[:result].body}"
|
16
19
|
end if ENV['DEBUG'].present?
|
@@ -19,8 +22,6 @@ module WhiplashApi
|
|
19
22
|
# Override the connection that ActiveResource uses, so that we can add our
|
20
23
|
# own error messages for the weird cases when API returns 422 error.
|
21
24
|
def connection(refresh = false)
|
22
|
-
message = "You must set a valid API Key. Current: #{headers['X-API-KEY'].inspect}"
|
23
|
-
raise WhiplashApi::Error, message if headers['X-API-KEY'].blank?
|
24
25
|
@connection = WhiplashApi::Connection.new(site, format) if refresh || @connection.nil?
|
25
26
|
super
|
26
27
|
end
|
@@ -30,12 +31,35 @@ module WhiplashApi
|
|
30
31
|
Thread.current["active.resource.currentthread.headers"]
|
31
32
|
end
|
32
33
|
|
33
|
-
def
|
34
|
-
|
34
|
+
def api_version
|
35
|
+
@api_version ||= WhiplashApi::DEFAULT_API_VERSION
|
35
36
|
end
|
36
37
|
|
37
38
|
def api_version=(v = nil)
|
38
|
-
|
39
|
+
@api_version = v.to_i > 0 ? v.to_i : WhiplashApi::DEFAULT_API_VERSION
|
40
|
+
headers['X-API-VERSION'] = @api_version.to_s
|
41
|
+
end
|
42
|
+
|
43
|
+
def api_key=(api_key)
|
44
|
+
@api_key = api_key
|
45
|
+
raise Error, "You must set a valid API Key." if @api_key.blank?
|
46
|
+
|
47
|
+
if api_version == 1
|
48
|
+
headers['X-API-KEY'] = @api_key
|
49
|
+
else
|
50
|
+
headers['Authorization'] = "Bearer #{@api_key}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def customer_id=(customer_id = nil)
|
55
|
+
@customer_id = customer_id
|
56
|
+
headers['X-CUSTOMER-ID'] = customer_id.to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
def reset_headers!
|
60
|
+
%w[X-API-KEY X-API-VERSION Authorization].each do |key|
|
61
|
+
headers.delete(key)
|
62
|
+
end
|
39
63
|
end
|
40
64
|
|
41
65
|
protected
|
@@ -4,13 +4,13 @@ module WhiplashApi
|
|
4
4
|
|
5
5
|
def request(*arguments)
|
6
6
|
super
|
7
|
-
rescue ActiveResource::ResourceInvalid => e
|
7
|
+
rescue ActiveResource::ResourceInvalid, ActiveResource::ForbiddenAccess, ActiveResource::UnauthorizedAccess => e
|
8
8
|
data = JSON.parse e.response.body
|
9
9
|
case
|
10
10
|
when data['error'].present? && data['error'].downcase =~ /record.*not.*found/
|
11
|
-
raise WhiplashApi::RecordNotFound
|
11
|
+
raise WhiplashApi::RecordNotFound, data['error']
|
12
12
|
when data['error'].present?
|
13
|
-
raise WhiplashApi::Error, data['error'].humanize
|
13
|
+
raise WhiplashApi::Error, "#{e.class}: #{data['error'].humanize}"
|
14
14
|
when data['errors'].present? && data['errors']['base'].present?
|
15
15
|
messages = data['errors']['base']
|
16
16
|
raise WhiplashApi::Error, "Errors were encountered while creating the resource.\n- #{messages.join("\n- ")}"
|
@@ -18,7 +18,7 @@ module WhiplashApi
|
|
18
18
|
messages = data['errors'].map{|k,v| v.map{|message| "#{k.humanize} #{message}"}}.flatten
|
19
19
|
raise WhiplashApi::Error, "Errors were encountered while creating the resource.\n- #{messages.join("\n- ")}"
|
20
20
|
else
|
21
|
-
raise
|
21
|
+
raise
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -35,16 +35,29 @@ module WhiplashApi
|
|
35
35
|
raise RecordNotFound, "No order item found with given ID."
|
36
36
|
end
|
37
37
|
|
38
|
+
def separate(id, args={})
|
39
|
+
response = self.post("#{id}/separate")
|
40
|
+
sanitize_as_resource JSON.parse(response.body)
|
41
|
+
rescue WhiplashApi::RecordNotFound
|
42
|
+
raise RecordNotFound, "No order item found with given ID."
|
43
|
+
end
|
44
|
+
|
38
45
|
def delete(*args)
|
39
46
|
super
|
40
47
|
rescue WhiplashApi::RecordNotFound
|
41
48
|
raise RecordNotFound, "No order item was found with given ID."
|
42
49
|
end
|
50
|
+
|
43
51
|
end
|
44
52
|
|
45
53
|
# instance methods
|
46
54
|
def destroy
|
47
55
|
self.class.delete(self.id)
|
48
56
|
end
|
57
|
+
|
58
|
+
def separate
|
59
|
+
self.class.separate(self.id)
|
60
|
+
end
|
61
|
+
|
49
62
|
end
|
50
63
|
end
|
data/lib/whiplash_api/version.rb
CHANGED
@@ -0,0 +1,18 @@
|
|
1
|
+
module WhiplashApi
|
2
|
+
class WebHook < Base
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def delete(*args)
|
6
|
+
super
|
7
|
+
rescue WhiplashApi::RecordNotFound
|
8
|
+
raise RecordNotFound, "No Web Hook was found with given ID."
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
# instance methods
|
14
|
+
def destroy(args={})
|
15
|
+
self.class.delete(self.id, args)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whiplash_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Dickson
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- lib/whiplash_api/shipnotice.rb
|
139
139
|
- lib/whiplash_api/shipnotice_item.rb
|
140
140
|
- lib/whiplash_api/version.rb
|
141
|
+
- lib/whiplash_api/web_hook.rb
|
141
142
|
- whiplash_api.gemspec
|
142
143
|
homepage: http://github.com/ideaoforder/whiplash_api
|
143
144
|
licenses:
|
@@ -159,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
160
|
version: '0'
|
160
161
|
requirements: []
|
161
162
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.4.
|
163
|
+
rubygems_version: 2.4.5.1
|
163
164
|
signing_key:
|
164
165
|
specification_version: 4
|
165
166
|
summary: Ruby Gem for connecting to the Whiplash Merchandising API
|