aws_agcod_2 1.1.0 → 1.1.1
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 +4 -4
- data/README.md +2 -2
- data/lib/aws_agcod.rb +5 -5
- data/lib/aws_agcod/cancel_gift_card.rb +4 -4
- data/lib/aws_agcod/config.rb +3 -3
- data/lib/aws_agcod/create_gift_card.rb +11 -11
- data/lib/aws_agcod/gift_card_activity_list.rb +20 -20
- data/lib/aws_agcod/request.rb +15 -15
- data/lib/aws_agcod/response.rb +7 -7
- data/lib/aws_agcod/signature.rb +16 -16
- data/lib/aws_agcod/version.rb +1 -1
- data/spec/aws_agcod/cancel_gift_card_spec.rb +17 -17
- data/spec/aws_agcod/config_spec.rb +14 -14
- data/spec/aws_agcod/create_gift_card_spec.rb +37 -37
- data/spec/aws_agcod/get_available_funds_spec.rb +6 -6
- data/spec/aws_agcod/gift_card_activity_list_spec.rb +20 -20
- data/spec/aws_agcod/request_spec.rb +23 -23
- data/spec/aws_agcod/response_spec.rb +25 -25
- data/spec/aws_agcod_spec.rb +4 -4
- data/spec/spec_helper.rb +5 -5
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1d03083227c8e83a78a5bd5080293fd21682bfd9d94d979ab6465f9848f18b3a
|
|
4
|
+
data.tar.gz: 41d35ecbde14d73906af7ab4e08c5c00c1c2768f49bd82ed4cb56e3d13aaeea2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 19b706ad529e1578c7116051b54a90d1432de36ea1ffcf442e67eaa2dc5c549e5de05248925d9e046888f7d3884deccbdfcecae995b9e976af5b2255dbd39870
|
|
7
|
+
data.tar.gz: 0d0c070d32a953dd436ffc50e60f96a159415e961cd68ff4650c528265416df84d9c0c1d6052ab2f14a23f5c9937c7b1afde4621084b2bd4727068306512c6f4
|
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AGCOD
|
|
2
2
|
|
|
3
3
|
[](https://travis-ci.org/compwron/aws_agcod)
|
|
4
|
-
[](http://badge.fury.io/rb/aws_agcod_2)
|
|
5
5
|
|
|
6
6
|
Amazon Gift Code On Demand (AGCOD) API v2 implementation for distributing Amazon gift cards (gift codes) instantly in any denomination.
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ Amazon Gift Code On Demand (AGCOD) API v2 implementation for distributing Amazon
|
|
|
10
10
|
Add this line to your application's Gemfile:
|
|
11
11
|
|
|
12
12
|
```ruby
|
|
13
|
-
gem '
|
|
13
|
+
gem 'aws_agcod_2' # https://rubygems.org/gems/aws_agcod_2
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
And then execute:
|
data/lib/aws_agcod.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
1
|
+
require 'aws_agcod/version'
|
|
2
|
+
require 'aws_agcod/config'
|
|
3
|
+
require 'aws_agcod/create_gift_card'
|
|
4
|
+
require 'aws_agcod/cancel_gift_card'
|
|
5
|
+
require 'aws_agcod/gift_card_activity_list'
|
|
6
6
|
|
|
7
7
|
module AGCOD
|
|
8
8
|
def self.configure(&block)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'aws_agcod/request'
|
|
2
2
|
|
|
3
3
|
module AGCOD
|
|
4
4
|
class CancelGiftCard
|
|
@@ -7,9 +7,9 @@ module AGCOD
|
|
|
7
7
|
def_delegators :@response, :status, :success?, :error_message
|
|
8
8
|
|
|
9
9
|
def initialize(httpable, request_id, gc_id)
|
|
10
|
-
@response = Request.new(httpable,
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
@response = Request.new(httpable,'CancelGiftCard',
|
|
11
|
+
'creationRequestId' => request_id,
|
|
12
|
+
'gcId' => gc_id
|
|
13
13
|
).response
|
|
14
14
|
end
|
|
15
15
|
end
|
data/lib/aws_agcod/config.rb
CHANGED
|
@@ -8,14 +8,14 @@ module AGCOD
|
|
|
8
8
|
:production
|
|
9
9
|
|
|
10
10
|
URI = {
|
|
11
|
-
sandbox:
|
|
12
|
-
production:
|
|
11
|
+
sandbox: 'https://agcod-v2-gamma.amazon.com',
|
|
12
|
+
production: 'https://agcod-v2.amazon.com'
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
def initialize
|
|
16
16
|
# API defaults
|
|
17
17
|
@production = false
|
|
18
|
-
@region =
|
|
18
|
+
@region = 'us-east-1'
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def uri
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'aws_agcod/request'
|
|
2
2
|
|
|
3
3
|
module AGCOD
|
|
4
4
|
class CreateGiftCardError < StandardError; end
|
|
@@ -10,34 +10,34 @@ module AGCOD
|
|
|
10
10
|
|
|
11
11
|
def_delegators :@response, :status, :success?, :error_message
|
|
12
12
|
|
|
13
|
-
def initialize(httpable, request_id, amount, currency =
|
|
13
|
+
def initialize(httpable, request_id, amount, currency = 'USD')
|
|
14
14
|
unless CURRENCIES.include?(currency.to_s)
|
|
15
15
|
raise CreateGiftCardError, "Currency #{currency} not supported, available types are #{CURRENCIES.join(", ")}"
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
@response = Request.new(httpable,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
@response = Request.new(httpable, 'CreateGiftCard',
|
|
19
|
+
'creationRequestId' => request_id,
|
|
20
|
+
'value' => {
|
|
21
|
+
'currencyCode' => currency,
|
|
22
|
+
'amount' => amount
|
|
23
23
|
}
|
|
24
24
|
).response
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def claim_code
|
|
28
|
-
@response.payload[
|
|
28
|
+
@response.payload['gcClaimCode']
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def expiration_date
|
|
32
|
-
@expiration_date ||= Time.parse @response.payload[
|
|
32
|
+
@expiration_date ||= Time.parse @response.payload['gcExpirationDate']
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def gc_id
|
|
36
|
-
@response.payload[
|
|
36
|
+
@response.payload['gcId']
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def request_id
|
|
40
|
-
@response.payload[
|
|
40
|
+
@response.payload['creationRequestId']
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'aws_agcod/request'
|
|
2
2
|
|
|
3
3
|
module AGCOD
|
|
4
4
|
class GiftCardActivityListError < StandardError; end
|
|
@@ -9,19 +9,19 @@ module AGCOD
|
|
|
9
9
|
|
|
10
10
|
def initialize(payload)
|
|
11
11
|
@payload = payload
|
|
12
|
-
@status = payload[
|
|
13
|
-
@created_at = payload[
|
|
14
|
-
@type = payload[
|
|
15
|
-
@card_number = payload[
|
|
16
|
-
@amount = payload[
|
|
17
|
-
@error_code = payload[
|
|
18
|
-
@gc_id = payload[
|
|
19
|
-
@partner_id = payload[
|
|
20
|
-
@request_id = payload[
|
|
12
|
+
@status = payload['activityStatus']
|
|
13
|
+
@created_at = payload['activityTime']
|
|
14
|
+
@type = payload['activityType']
|
|
15
|
+
@card_number = payload['cardNumber']
|
|
16
|
+
@amount = payload['cardValue']['amount'] if payload['cardValue']
|
|
17
|
+
@error_code = payload['failureCode']
|
|
18
|
+
@gc_id = payload['gcId']
|
|
19
|
+
@partner_id = payload['partnerId']
|
|
20
|
+
@request_id = payload['requestId']
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def is_real?
|
|
24
|
-
@payload[
|
|
24
|
+
@payload['isRealOp'] == 'true'
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -29,25 +29,25 @@ module AGCOD
|
|
|
29
29
|
extend Forwardable
|
|
30
30
|
|
|
31
31
|
LIMIT = 1000 # limit per request
|
|
32
|
-
TIME_FORMAT =
|
|
32
|
+
TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
|
|
33
33
|
|
|
34
34
|
def_delegators :@response, :success?, :error_message
|
|
35
35
|
|
|
36
36
|
def initialize(httpable, request_id, start_time, end_time, page = 1, per_page = 100, show_no_ops = false)
|
|
37
37
|
raise GiftCardActivityListError, "Only #{LIMIT} records allowed per request." if per_page > LIMIT
|
|
38
38
|
|
|
39
|
-
@response = Request.new(httpable,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
@response = Request.new(httpable,'GetGiftCardActivityPage',
|
|
40
|
+
'requestId' => request_id,
|
|
41
|
+
'utcStartDate' => start_time.strftime(TIME_FORMAT),
|
|
42
|
+
'utcEndDate' => end_time.strftime(TIME_FORMAT),
|
|
43
|
+
'pageIndex' => (page - 1) * per_page,
|
|
44
|
+
'pageSize' => per_page,
|
|
45
|
+
'showNoOps' => show_no_ops
|
|
46
46
|
).response
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def results
|
|
50
|
-
@response.payload[
|
|
50
|
+
@response.payload['cardActivityList'].map { |payload| GiftCardActivity.new(payload) }
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
end
|
data/lib/aws_agcod/request.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
4
|
-
require
|
|
1
|
+
require 'aws_agcod/signature'
|
|
2
|
+
require 'aws_agcod/response'
|
|
3
|
+
require 'http'
|
|
4
|
+
require 'yaml'
|
|
5
5
|
|
|
6
6
|
module AGCOD
|
|
7
7
|
class Request
|
|
8
|
-
TIME_FORMAT =
|
|
8
|
+
TIME_FORMAT = '%Y%m%dT%H%M%SZ'
|
|
9
9
|
MOCK_REQUEST_IDS = %w(F0000 F2005)
|
|
10
10
|
|
|
11
11
|
attr_reader :response
|
|
@@ -23,12 +23,12 @@ module AGCOD
|
|
|
23
23
|
time = Time.now.utc
|
|
24
24
|
|
|
25
25
|
headers = {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
'content-type' => 'application/json',
|
|
27
|
+
'x-amz-date' => time.strftime(TIME_FORMAT),
|
|
28
|
+
'accept' => 'application/json',
|
|
29
|
+
'host' => uri.host,
|
|
30
30
|
"x-amz-target" => "com.amazonaws.agcod.AGCODService.#{@action}",
|
|
31
|
-
|
|
31
|
+
'date' => time.to_s
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
Signature.new(AGCOD.config).sign(uri, headers, body)
|
|
@@ -40,19 +40,19 @@ module AGCOD
|
|
|
40
40
|
|
|
41
41
|
def body
|
|
42
42
|
@body ||= @params.merge(
|
|
43
|
-
|
|
43
|
+
'partnerId' => AGCOD.config.partner_id
|
|
44
44
|
).to_json
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def sanitized_params(params)
|
|
48
48
|
# Prefix partner_id when it's not given as part of request_id for creationRequestId and it's not a mock request_id
|
|
49
|
-
if params[
|
|
50
|
-
params[
|
|
49
|
+
if params['creationRequestId'] && !(params['creationRequestId'] =~ /#{AGCOD.config.partner_id}/) && !(MOCK_REQUEST_IDS.member?(params["creationRequestId"]))
|
|
50
|
+
params['creationRequestId'] = "#{AGCOD.config.partner_id}#{params['creationRequestId']}"
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
# Remove partner_id when it's prefixed in requestId
|
|
54
|
-
if params[
|
|
55
|
-
params[
|
|
54
|
+
if params['requestId'] && !!(params['requestId'] =~ /^#{AGCOD.config.partner_id}/)
|
|
55
|
+
params['requestId'].sub!(/^#{AGCOD.config.partner_id}/, '')
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
params
|
data/lib/aws_agcod/response.rb
CHANGED
|
@@ -11,21 +11,21 @@ module AGCOD
|
|
|
11
11
|
# SUCCESS -- Operation succeeded
|
|
12
12
|
# FAILURE -- Operation failed
|
|
13
13
|
# RESEND -- A temporary/recoverable system failure that can be resolved by the partner retrying the request
|
|
14
|
-
@status = if payload[
|
|
15
|
-
payload[
|
|
16
|
-
elsif payload[
|
|
17
|
-
payload[
|
|
14
|
+
@status = if payload['status']
|
|
15
|
+
payload['status']
|
|
16
|
+
elsif payload['agcodResponse']
|
|
17
|
+
payload['agcodResponse']['status']
|
|
18
18
|
else
|
|
19
|
-
|
|
19
|
+
'FAILURE'
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def success?
|
|
24
|
-
status ==
|
|
24
|
+
status == 'SUCCESS'
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def error_message
|
|
28
|
-
"#{payload[
|
|
28
|
+
"#{payload['errorCode']} #{payload['errorType']} - #{payload['message']}"
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
end
|
data/lib/aws_agcod/signature.rb
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
# this class generates signed headers for making proper request to AGCOD service.
|
|
3
3
|
#
|
|
4
4
|
# Based on https://github.com/ifeelgoods/aws4/blob/master/lib/aws4/signer.rb
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
5
|
+
require 'openssl'
|
|
6
|
+
require 'uri'
|
|
7
|
+
require 'pathname'
|
|
8
8
|
|
|
9
9
|
module AGCOD
|
|
10
10
|
class Signature
|
|
11
|
-
SERVICE =
|
|
11
|
+
SERVICE = 'AGCODService'
|
|
12
12
|
|
|
13
13
|
def initialize(credentials)
|
|
14
14
|
@access_key = credentials.access_key
|
|
@@ -16,14 +16,14 @@ module AGCOD
|
|
|
16
16
|
@region = credentials.region || DEFAULT_REGION
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
def sign(uri, headers, body =
|
|
19
|
+
def sign(uri, headers, body = '')
|
|
20
20
|
@uri = uri
|
|
21
21
|
@headers = headers
|
|
22
22
|
@body = body
|
|
23
|
-
@date = headers[
|
|
23
|
+
@date = headers['x-amz-date']
|
|
24
24
|
|
|
25
25
|
signed_headers = headers.dup
|
|
26
|
-
signed_headers[
|
|
26
|
+
signed_headers['Authorization'] = authorization
|
|
27
27
|
|
|
28
28
|
signed_headers
|
|
29
29
|
end
|
|
@@ -35,22 +35,22 @@ module AGCOD
|
|
|
35
35
|
"AWS4-HMAC-SHA256 Credential=#{@access_key}/#{credential_string}",
|
|
36
36
|
"SignedHeaders=#{@headers.keys.map(&:downcase).sort.join(";")}",
|
|
37
37
|
"Signature=#{signature}"
|
|
38
|
-
].join(
|
|
38
|
+
].join(', ')
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
# Reference http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
|
|
42
42
|
def signature
|
|
43
|
-
k_date = hmac(
|
|
43
|
+
k_date = hmac('AWS4' + @secret_key, @date[0, 8])
|
|
44
44
|
k_region = hmac(k_date, @region)
|
|
45
45
|
k_service = hmac(k_region, SERVICE)
|
|
46
|
-
k_credentials = hmac(k_service,
|
|
46
|
+
k_credentials = hmac(k_service, 'aws4_request')
|
|
47
47
|
hexhmac(k_credentials, string_to_sign)
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
# Reference http://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html
|
|
51
51
|
def string_to_sign
|
|
52
52
|
@string_to_sign ||= [
|
|
53
|
-
|
|
53
|
+
'AWS4-HMAC-SHA256', # Algorithm
|
|
54
54
|
@date, # RequestDate
|
|
55
55
|
credential_string, # CredentialScope
|
|
56
56
|
hexdigest(canonical_request) # HashedCanonicalRequest
|
|
@@ -58,17 +58,17 @@ module AGCOD
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def credential_string
|
|
61
|
-
@credential_string ||= [@date[0, 8], @region, SERVICE,
|
|
61
|
+
@credential_string ||= [@date[0, 8], @region, SERVICE, 'aws4_request'].join('/')
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
# Reference http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
|
|
65
65
|
def canonical_request
|
|
66
66
|
@canonical_request ||= [
|
|
67
|
-
|
|
67
|
+
'POST', # HTTPRequestMethod
|
|
68
68
|
Pathname.new(@uri.path).cleanpath.to_s, # CanonicalURI
|
|
69
69
|
@uri.query, # CanonicalQueryString
|
|
70
70
|
@headers.sort.map { |k, v| [k.downcase, v.strip].join(":") }.join("\n") + "\n", # CanonicalHeaders
|
|
71
|
-
@headers.sort.map { |k, v| k.downcase }.join(
|
|
71
|
+
@headers.sort.map { |k, v| k.downcase }.join(';'), # SignedHeaders
|
|
72
72
|
hexdigest(@body) # HexEncode(Hash(RequestPayload))
|
|
73
73
|
].join("\n")
|
|
74
74
|
end
|
|
@@ -85,11 +85,11 @@ module AGCOD
|
|
|
85
85
|
# is a mechanism for calculating a message authentication code
|
|
86
86
|
# involving a hash function in combination with a secret key
|
|
87
87
|
def hmac(key, value)
|
|
88
|
-
OpenSSL::HMAC.digest(OpenSSL::Digest.new(
|
|
88
|
+
OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, value)
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def hexhmac(key, value)
|
|
92
|
-
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new(
|
|
92
|
+
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, value)
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
end
|
data/lib/aws_agcod/version.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'aws_agcod/cancel_gift_card'
|
|
3
3
|
|
|
4
4
|
describe AGCOD::CancelGiftCard do
|
|
5
|
-
let(:partner_id) {
|
|
5
|
+
let(:partner_id) { 'Testa' }
|
|
6
6
|
let(:response) { spy }
|
|
7
7
|
let(:httpable) { HTTP }
|
|
8
8
|
|
|
@@ -12,25 +12,25 @@ describe AGCOD::CancelGiftCard do
|
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
context
|
|
16
|
-
let(:request_id) {
|
|
17
|
-
let(:gc_id) {
|
|
15
|
+
context '.new' do
|
|
16
|
+
let(:request_id) { 'test1' }
|
|
17
|
+
let(:gc_id) { 'FOO' }
|
|
18
18
|
|
|
19
|
-
it
|
|
19
|
+
it 'makes cancel request' do
|
|
20
20
|
expect(AGCOD::Request).to receive(:new) do |_, action, params|
|
|
21
|
-
expect(action).to eq(
|
|
22
|
-
expect(params[
|
|
23
|
-
expect(params[
|
|
21
|
+
expect(action).to eq('CancelGiftCard')
|
|
22
|
+
expect(params['creationRequestId']).to eq(request_id)
|
|
23
|
+
expect(params['gcId']).to eq(gc_id)
|
|
24
24
|
end.and_return(response)
|
|
25
25
|
|
|
26
26
|
AGCOD::CancelGiftCard.new(httpable, request_id, gc_id)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
shared_context
|
|
31
|
-
let(:gc_id) {
|
|
32
|
-
let(:creation_request_id) {
|
|
33
|
-
let(:status) {
|
|
30
|
+
shared_context 'request with response' do
|
|
31
|
+
let(:gc_id) { 'BAR' }
|
|
32
|
+
let(:creation_request_id) { 'BAZ' }
|
|
33
|
+
let(:status) { 'SUCCESS' }
|
|
34
34
|
let(:request) { AGCOD::CancelGiftCard.new(httpable, creation_request_id, gc_id) }
|
|
35
35
|
|
|
36
36
|
before do
|
|
@@ -39,10 +39,10 @@ describe AGCOD::CancelGiftCard do
|
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
context
|
|
43
|
-
include_context
|
|
42
|
+
context '#status' do
|
|
43
|
+
include_context 'request with response'
|
|
44
44
|
|
|
45
|
-
it
|
|
45
|
+
it 'returns the response status' do
|
|
46
46
|
expect(request.status).to eq(status)
|
|
47
47
|
end
|
|
48
48
|
end
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'aws_agcod/config'
|
|
3
3
|
|
|
4
4
|
describe AGCOD::Config do
|
|
5
5
|
let(:config) { AGCOD::Config.new }
|
|
6
6
|
|
|
7
|
-
context
|
|
8
|
-
it
|
|
7
|
+
context '.new' do
|
|
8
|
+
it 'sets default uri and region' do
|
|
9
9
|
expect(config.uri).not_to be_nil
|
|
10
10
|
expect(config.region).not_to be_nil
|
|
11
11
|
expect(config.production).to eq(false)
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
context
|
|
16
|
-
context
|
|
15
|
+
context '#uri' do
|
|
16
|
+
context 'when uri is set' do
|
|
17
17
|
before do
|
|
18
|
-
config.uri =
|
|
18
|
+
config.uri = 'https://custom-uri.example.com'
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
it
|
|
22
|
-
expect(config.uri).to eq(
|
|
21
|
+
it 'returns the custom uri' do
|
|
22
|
+
expect(config.uri).to eq('https://custom-uri.example.com')
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
context
|
|
27
|
-
context
|
|
26
|
+
context 'when uri is not set' do
|
|
27
|
+
context 'when production is enabled' do
|
|
28
28
|
before do
|
|
29
29
|
config.production = true
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
it
|
|
32
|
+
it 'returns the production uri' do
|
|
33
33
|
expect(config.uri).to eq(AGCOD::Config::URI[:production])
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
context
|
|
38
|
-
it
|
|
37
|
+
context 'when production is disabled' do
|
|
38
|
+
it 'returns the sandbox uri' do
|
|
39
39
|
expect(config.uri).to eq(AGCOD::Config::URI[:sandbox])
|
|
40
40
|
end
|
|
41
41
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'aws_agcod/create_gift_card'
|
|
3
3
|
|
|
4
4
|
describe AGCOD::CreateGiftCard do
|
|
5
|
-
let(:partner_id) {
|
|
6
|
-
let(:request_id) {
|
|
5
|
+
let(:partner_id) { 'Testa' }
|
|
6
|
+
let(:request_id) { 'test1' }
|
|
7
7
|
let(:amount) { 10 }
|
|
8
8
|
let(:currency) { AGCOD::CreateGiftCard::CURRENCIES.first }
|
|
9
9
|
let(:response) { spy }
|
|
@@ -15,16 +15,16 @@ describe AGCOD::CreateGiftCard do
|
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
context
|
|
19
|
-
context
|
|
20
|
-
it
|
|
18
|
+
context '.new' do
|
|
19
|
+
context 'when currency available' do
|
|
20
|
+
it 'makes create request' do
|
|
21
21
|
expect(AGCOD::Request).to receive(:new) do |httpable, action, params|
|
|
22
22
|
expect(httpable).to eq(HTTP)
|
|
23
|
-
expect(action).to eq(
|
|
24
|
-
expect(params[
|
|
25
|
-
expect(params[
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
expect(action).to eq('CreateGiftCard')
|
|
24
|
+
expect(params['creationRequestId']).to eq(request_id)
|
|
25
|
+
expect(params['value']).to eq(
|
|
26
|
+
'currencyCode' => currency,
|
|
27
|
+
'amount' => amount
|
|
28
28
|
)
|
|
29
29
|
end.and_return(response)
|
|
30
30
|
|
|
@@ -32,10 +32,10 @@ describe AGCOD::CreateGiftCard do
|
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
context
|
|
36
|
-
let(:currency) {
|
|
35
|
+
context 'when currency not available' do
|
|
36
|
+
let(:currency) { 'NOTEXIST' }
|
|
37
37
|
|
|
38
|
-
it
|
|
38
|
+
it 'raises error' do
|
|
39
39
|
expect {
|
|
40
40
|
AGCOD::CreateGiftCard.new(httpable, request_id, amount, currency)
|
|
41
41
|
}.to raise_error(
|
|
@@ -46,13 +46,13 @@ describe AGCOD::CreateGiftCard do
|
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
shared_context
|
|
50
|
-
let(:claim_code) {
|
|
51
|
-
let(:expiration_date) {
|
|
52
|
-
let(:gc_id) {
|
|
53
|
-
let(:creation_request_id) {
|
|
54
|
-
let(:status) {
|
|
55
|
-
let(:payload) { {
|
|
49
|
+
shared_context 'request with response' do
|
|
50
|
+
let(:claim_code) { 'FOO' }
|
|
51
|
+
let(:expiration_date) { 'Wed Mar 12 22:59:59 UTC 2025' }
|
|
52
|
+
let(:gc_id) { 'BAR' }
|
|
53
|
+
let(:creation_request_id) { 'BAZ' }
|
|
54
|
+
let(:status) { 'SUCCESS' }
|
|
55
|
+
let(:payload) { {'gcClaimCode' => claim_code, 'gcId' => gc_id, 'creationRequestId' => creation_request_id, 'gcExpirationDate' => expiration_date} }
|
|
56
56
|
let(:request) { AGCOD::CreateGiftCard.new(httpable, request_id, amount, currency) }
|
|
57
57
|
|
|
58
58
|
before do
|
|
@@ -62,42 +62,42 @@ describe AGCOD::CreateGiftCard do
|
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
context
|
|
66
|
-
include_context
|
|
65
|
+
context '#claim_code' do
|
|
66
|
+
include_context 'request with response'
|
|
67
67
|
|
|
68
|
-
it
|
|
68
|
+
it 'returns claim_code' do
|
|
69
69
|
expect(request.claim_code).to eq(claim_code)
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
context
|
|
74
|
-
include_context
|
|
73
|
+
context '#expiration_date' do
|
|
74
|
+
include_context 'request with response'
|
|
75
75
|
|
|
76
|
-
it
|
|
76
|
+
it 'returns expiration_date' do
|
|
77
77
|
expect(request.expiration_date).to eq(Time.parse expiration_date)
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
81
|
-
context
|
|
82
|
-
include_context
|
|
81
|
+
context '#gc_id' do
|
|
82
|
+
include_context 'request with response'
|
|
83
83
|
|
|
84
|
-
it
|
|
84
|
+
it 'returns gc_id' do
|
|
85
85
|
expect(request.gc_id).to eq(gc_id)
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
-
context
|
|
90
|
-
include_context
|
|
89
|
+
context '#request_id' do
|
|
90
|
+
include_context 'request with response'
|
|
91
91
|
|
|
92
|
-
it
|
|
92
|
+
it 'returns creation request_id' do
|
|
93
93
|
expect(request.request_id).to eq(creation_request_id)
|
|
94
94
|
end
|
|
95
95
|
end
|
|
96
96
|
|
|
97
|
-
context
|
|
98
|
-
include_context
|
|
97
|
+
context '#status' do
|
|
98
|
+
include_context 'request with response'
|
|
99
99
|
|
|
100
|
-
it
|
|
100
|
+
it 'returns the response status' do
|
|
101
101
|
expect(request.status).to eq(status)
|
|
102
102
|
end
|
|
103
103
|
end
|
|
@@ -17,20 +17,20 @@ describe AGCOD::GetAvailableFunds do
|
|
|
17
17
|
}),
|
|
18
18
|
}),
|
|
19
19
|
)
|
|
20
|
-
let(:payload) { {
|
|
20
|
+
let(:payload) { { 'availableFunds' => { 'amount' => amount, 'currencyCode' => currency_code }, 'status' => status, 'timestamp' => timestamp } }
|
|
21
21
|
|
|
22
22
|
let(:request_response) {
|
|
23
23
|
OpenStruct.new(response:
|
|
24
24
|
OpenStruct.new(payload:
|
|
25
25
|
{
|
|
26
|
-
|
|
26
|
+
'availableFunds' => [
|
|
27
27
|
{
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
'amount' => amount,
|
|
29
|
+
'currencyCode' => currency_code
|
|
30
30
|
}
|
|
31
31
|
],
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
'status' => status,
|
|
33
|
+
'timestamp' => timestamp
|
|
34
34
|
}
|
|
35
35
|
)
|
|
36
36
|
)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'aws_agcod/gift_card_activity_list'
|
|
3
3
|
|
|
4
4
|
describe AGCOD::GiftCardActivityList do
|
|
5
|
-
let(:partner_id) {
|
|
6
|
-
let(:request_id) {
|
|
7
|
-
let(:start_time) { double(
|
|
8
|
-
let(:end_time) { double(
|
|
5
|
+
let(:partner_id) { 'Testa' }
|
|
6
|
+
let(:request_id) { 'test1' }
|
|
7
|
+
let(:start_time) { double('start_time') }
|
|
8
|
+
let(:end_time) { double('end_time') }
|
|
9
9
|
let(:page) { 1 }
|
|
10
10
|
let(:per_page) { AGCOD::GiftCardActivityList::LIMIT }
|
|
11
11
|
let(:show_no_ops) { true }
|
|
@@ -18,8 +18,8 @@ describe AGCOD::GiftCardActivityList do
|
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
context
|
|
22
|
-
it
|
|
21
|
+
context '.new' do
|
|
22
|
+
it 'makes request' do
|
|
23
23
|
expect(start_time).to receive(:strftime).with(
|
|
24
24
|
AGCOD::GiftCardActivityList::TIME_FORMAT
|
|
25
25
|
).and_return(start_time)
|
|
@@ -29,22 +29,22 @@ describe AGCOD::GiftCardActivityList do
|
|
|
29
29
|
).and_return(end_time)
|
|
30
30
|
|
|
31
31
|
expect(AGCOD::Request).to receive(:new) do |_, action, params|
|
|
32
|
-
expect(action).to eq(
|
|
33
|
-
expect(params[
|
|
34
|
-
expect(params[
|
|
35
|
-
expect(params[
|
|
36
|
-
expect(params[
|
|
37
|
-
expect(params[
|
|
38
|
-
expect(params[
|
|
32
|
+
expect(action).to eq('GetGiftCardActivityPage')
|
|
33
|
+
expect(params['requestId']).to eq(request_id)
|
|
34
|
+
expect(params['utcStartDate']).to eq(start_time)
|
|
35
|
+
expect(params['utcEndDate']).to eq(end_time)
|
|
36
|
+
expect(params['pageIndex']).to eq((page - 1) * per_page)
|
|
37
|
+
expect(params['pageSize']).to eq(per_page)
|
|
38
|
+
expect(params['showNoOps']).to eq(show_no_ops)
|
|
39
39
|
end.and_return(response)
|
|
40
40
|
|
|
41
41
|
AGCOD::GiftCardActivityList.new(httpable, request_id, start_time, end_time, page, per_page, show_no_ops)
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
context
|
|
44
|
+
context 'when request per_page reaches limit' do
|
|
45
45
|
let(:per_page) { AGCOD::GiftCardActivityList::LIMIT + 1 }
|
|
46
46
|
|
|
47
|
-
it
|
|
47
|
+
it 'raises error' do
|
|
48
48
|
expect {
|
|
49
49
|
AGCOD::GiftCardActivityList.new(httpable, request_id, start_time, end_time, page, per_page, show_no_ops)
|
|
50
50
|
}.to raise_error(
|
|
@@ -55,8 +55,8 @@ describe AGCOD::GiftCardActivityList do
|
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
-
context
|
|
59
|
-
let(:payload) { {
|
|
58
|
+
context '#results' do
|
|
59
|
+
let(:payload) { { 'cardActivityList' => [spy] } }
|
|
60
60
|
let(:request) { AGCOD::GiftCardActivityList.new(httpable, request_id, start_time, end_time, page, per_page, show_no_ops) }
|
|
61
61
|
|
|
62
62
|
before do
|
|
@@ -66,7 +66,7 @@ describe AGCOD::GiftCardActivityList do
|
|
|
66
66
|
allow(response).to receive(:payload) { payload }
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
it
|
|
69
|
+
it 'returns GiftCardActivity instances' do
|
|
70
70
|
request.results.each do |item|
|
|
71
71
|
expect(item).to be_a(AGCOD::GiftCardActivity)
|
|
72
72
|
end
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'aws_agcod/request'
|
|
3
3
|
|
|
4
4
|
describe AGCOD::Request do
|
|
5
|
-
let(:action) {
|
|
5
|
+
let(:action) { 'Foo' }
|
|
6
6
|
let(:params) { {} }
|
|
7
|
-
let(:signature) { double(
|
|
8
|
-
let(:signed_headers) { double(
|
|
9
|
-
let(:base_uri) {
|
|
10
|
-
let(:partner_id) {
|
|
7
|
+
let(:signature) { double('Signature') }
|
|
8
|
+
let(:signed_headers) { double('signed_headers') }
|
|
9
|
+
let(:base_uri) { 'https://example.com' }
|
|
10
|
+
let(:partner_id) { 'BAR' }
|
|
11
11
|
let(:config) { double(uri: base_uri, partner_id: partner_id) }
|
|
12
12
|
let(:httpable) { HTTP }
|
|
13
13
|
|
|
14
|
-
context
|
|
14
|
+
context '#new' do
|
|
15
15
|
before do
|
|
16
16
|
allow(AGCOD).to receive(:config) { config }
|
|
17
17
|
allow(AGCOD::Signature).to receive(:new).with(config) { signature }
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
context
|
|
20
|
+
context 'with creationRequestId as special testing value' do
|
|
21
21
|
let(:params) { { creationRequestId: creationRequestId } }
|
|
22
22
|
|
|
23
23
|
subject { AGCOD::Request.new(httpable, action, params) }
|
|
@@ -26,48 +26,48 @@ describe AGCOD::Request do
|
|
|
26
26
|
allow(signature).to receive(:sign).and_return(signed_headers)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
context
|
|
30
|
-
let(:creationRequestId) {
|
|
29
|
+
context 'with special creationRequestId F0000' do
|
|
30
|
+
let(:creationRequestId) { 'F0000' }
|
|
31
31
|
|
|
32
|
-
it
|
|
32
|
+
it 'does not add partnerId to creationRequestId' do
|
|
33
33
|
expect(HTTP).to receive(:post) do |_, options|
|
|
34
|
-
expect(JSON.parse(options[:body])[
|
|
34
|
+
expect(JSON.parse(options[:body])['creationRequestId']).to eq('F0000')
|
|
35
35
|
end.and_return(double(body: params.to_json))
|
|
36
36
|
subject
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
context
|
|
41
|
-
let(:creationRequestId) {
|
|
40
|
+
context 'with special creationRequestId F2005' do
|
|
41
|
+
let(:creationRequestId) { 'F2005' }
|
|
42
42
|
|
|
43
|
-
it
|
|
43
|
+
it 'does not add partnerId to creationRequestId' do
|
|
44
44
|
expect(HTTP).to receive(:post) do |_, options|
|
|
45
|
-
expect(JSON.parse(options[:body])[
|
|
45
|
+
expect(JSON.parse(options[:body])['creationRequestId']).to eq('F2005')
|
|
46
46
|
end.and_return(double(body: params.to_json))
|
|
47
47
|
subject
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
it
|
|
52
|
+
it 'sends post request to endpoint uri' do
|
|
53
53
|
expect(signature).to receive(:sign) do |uri, headers, body|
|
|
54
54
|
expect(uri).to eq(URI("#{base_uri}/#{action}"))
|
|
55
55
|
expect(headers.keys).to match_array(%w(content-type x-amz-date accept host x-amz-target date))
|
|
56
|
-
expect(headers[
|
|
57
|
-
expect(headers[
|
|
58
|
-
expect(JSON.parse(body)[
|
|
56
|
+
expect(headers['content-type']).to eq('application/json')
|
|
57
|
+
expect(headers['x-amz-target']).to eq("com.amazonaws.agcod.AGCODService.#{action}")
|
|
58
|
+
expect(JSON.parse(body)['partnerId']).to eq(partner_id)
|
|
59
59
|
end.and_return(signed_headers)
|
|
60
60
|
|
|
61
61
|
expect(HTTP).to receive(:post) do |uri, options|
|
|
62
62
|
expect(uri).to eq(URI("#{base_uri}/#{action}"))
|
|
63
|
-
expect(JSON.parse(options[:body])[
|
|
63
|
+
expect(JSON.parse(options[:body])['partnerId']).to eq(partner_id)
|
|
64
64
|
expect(options[:headers]).to eq(signed_headers)
|
|
65
65
|
end.and_return(double(body: params.to_json))
|
|
66
66
|
|
|
67
67
|
AGCOD::Request.new(httpable, action, params)
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
it
|
|
70
|
+
it 'sets response' do
|
|
71
71
|
expect(signature).to receive(:sign) { signed_headers }
|
|
72
72
|
expect(HTTP).to receive(:post) { (double(body: params.to_json)) }
|
|
73
73
|
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'aws_agcod/response'
|
|
3
3
|
|
|
4
4
|
describe AGCOD::Response do
|
|
5
|
-
let(:payload) { { foo:
|
|
5
|
+
let(:payload) { { foo: 'bar' }.to_json }
|
|
6
6
|
|
|
7
|
-
context
|
|
8
|
-
it
|
|
7
|
+
context '#new' do
|
|
8
|
+
it 'sets payload and status' do
|
|
9
9
|
response = AGCOD::Response.new(payload)
|
|
10
10
|
|
|
11
11
|
expect(response.payload).not_to be_nil
|
|
12
12
|
expect(response.status).not_to be_nil
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
context
|
|
16
|
-
it
|
|
17
|
-
expect(AGCOD::Response.new(payload).status).to eq(
|
|
15
|
+
context 'when no status in payload' do
|
|
16
|
+
it 'sets status to failure' do
|
|
17
|
+
expect(AGCOD::Response.new(payload).status).to eq('FAILURE')
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
context
|
|
22
|
-
let(:status) {
|
|
21
|
+
context 'when has status in payload' do
|
|
22
|
+
let(:status) { 'foo' }
|
|
23
23
|
let(:payload) { { status: status }.to_json }
|
|
24
24
|
|
|
25
|
-
it
|
|
25
|
+
it 'sets status as payload\'s status' do
|
|
26
26
|
expect(AGCOD::Response.new(payload).status).to eq(status)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
context
|
|
31
|
-
let(:status) {
|
|
30
|
+
context 'when has agcodResponse in payload' do
|
|
31
|
+
let(:status) { 'foo' }
|
|
32
32
|
let(:payload) { { agcodResponse: { status: status } }.to_json }
|
|
33
33
|
|
|
34
|
-
it
|
|
34
|
+
it 'sets status as agcodResponse\'s status' do
|
|
35
35
|
expect(AGCOD::Response.new(payload).status).to eq(status)
|
|
36
36
|
end
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
context
|
|
41
|
-
context
|
|
42
|
-
let(:payload) { { status:
|
|
40
|
+
context 'success?' do
|
|
41
|
+
context 'when status is SUCCESS' do
|
|
42
|
+
let(:payload) { { status: 'SUCCESS' }.to_json }
|
|
43
43
|
|
|
44
|
-
it
|
|
44
|
+
it 'returns true' do
|
|
45
45
|
expect(AGCOD::Response.new(payload).success?).to be_truthy
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
context
|
|
50
|
-
it
|
|
49
|
+
context 'when status is not SUCCESS' do
|
|
50
|
+
it 'returns false' do
|
|
51
51
|
expect(AGCOD::Response.new(payload).success?).to be_falsey
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
context
|
|
57
|
-
let(:error_code) {
|
|
58
|
-
let(:error_type) {
|
|
59
|
-
let(:error_message) {
|
|
56
|
+
context 'error_message' do
|
|
57
|
+
let(:error_code) { 'foo' }
|
|
58
|
+
let(:error_type) { 'bar' }
|
|
59
|
+
let(:error_message) { 'baz' }
|
|
60
60
|
let(:payload) { { errorCode: error_code, errorType: error_type, message: error_message }.to_json }
|
|
61
61
|
|
|
62
|
-
it
|
|
62
|
+
it 'composes error message by error code, type, and message from payload' do
|
|
63
63
|
expect(AGCOD::Response.new(payload).error_message).to eq("#{error_code} #{error_type} - #{error_message}")
|
|
64
64
|
end
|
|
65
65
|
end
|
data/spec/aws_agcod_spec.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'aws_agcod'
|
|
3
3
|
|
|
4
4
|
describe AGCOD do
|
|
5
|
-
context
|
|
6
|
-
it
|
|
5
|
+
context '.configure' do
|
|
6
|
+
it 'yields config' do
|
|
7
7
|
AGCOD.configure do |config|
|
|
8
8
|
expect(config).to be_an_instance_of(AGCOD::Config)
|
|
9
9
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
1
|
+
require 'pathname'
|
|
2
|
+
require 'http'
|
|
3
3
|
|
|
4
|
-
ROOT_PATH = Pathname.new(__FILE__).join(
|
|
5
|
-
$LOAD_PATH.unshift(ROOT_PATH.join(
|
|
4
|
+
ROOT_PATH = Pathname.new(__FILE__).join('../..').expand_path
|
|
5
|
+
$LOAD_PATH.unshift(ROOT_PATH.join('lib'))
|
|
6
6
|
|
|
7
7
|
RSpec.configure do |config|
|
|
8
8
|
# Run specs in random order to surface order dependencies. If you find an
|
|
9
9
|
# order dependency and want to debug it, you can fix the order by providing
|
|
10
10
|
# the seed, which is printed after each run.
|
|
11
11
|
# --seed 1234
|
|
12
|
-
config.order =
|
|
12
|
+
config.order = 'random'
|
|
13
13
|
|
|
14
14
|
# Disable the should syntax compeletely; we use the expect syntax only.
|
|
15
15
|
config.expect_with :rspec do |c|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: aws_agcod_2
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Xenor Chang
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2018-
|
|
12
|
+
date: 2018-04-11 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: http
|
|
@@ -67,11 +67,11 @@ dependencies:
|
|
|
67
67
|
- - "~>"
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
69
|
version: '3'
|
|
70
|
-
description:
|
|
71
|
-
Amazon
|
|
72
|
-
distribute Amazon gift cards (gift codes) instantly in any denomination
|
|
70
|
+
description: Amazon Gift Code On Demand (AGCOD) API v2 implementation for distributing
|
|
71
|
+
Amazon gift cards (gift codes) instantly in any denomination
|
|
73
72
|
email:
|
|
74
73
|
- xenor@listia.com
|
|
74
|
+
- compiledwrong+aws_agcod_2@gmail.com
|
|
75
75
|
executables: []
|
|
76
76
|
extensions: []
|
|
77
77
|
extra_rdoc_files: []
|