stash-rewards 0.0.1 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f96e7d5711dfd480c7d4c917c439821ccfc98632370f601c80712e9ae948145
4
- data.tar.gz: 0aa643206b87222bab9d3b0f5e8d81ab3a04657d6d2362801ac2a11a6ace6da0
3
+ metadata.gz: 9199a583c3f87bf7272ccb91775ca3b2a0b5b60a81eda7a6755a4276a1f1cf62
4
+ data.tar.gz: 2a3c01ff9ec57446512104d9763296b875b76c1cc68744e659292db2bb58df1d
5
5
  SHA512:
6
- metadata.gz: 6a8cd2a589d29dd7ad786fcadd9e882093ca45f6500031d9a716a09a6f24d4aeb4ff26cad93b7fb91fb1a235c207b7a234e783144c3b000b220dac6cd7972ecc
7
- data.tar.gz: c45d746c3bfce67883d2f37028be98b9ba036ddde183c8041189a6425e99233e41090127aaed5e4ad2c992279b41c455bcff028cd0ffdd20c0012f326e250409
6
+ metadata.gz: 36413dcca01e80f2d76af607e0e56eb9cc076b066ae829045d7d5d5cda71aeba97e8e06f36c270cbbbef73fcd0a97c8312649462a89540a05f9ef4b15a29aeda
7
+ data.tar.gz: 121a8399229adc947f8f2d95da679a2d6379f25fc1b337b33a65a14945a109476c67d55f2b1733abebb7abecb3821e4c5f7ae5daf59a7a9d4530d1c9d0260a7f
@@ -0,0 +1,30 @@
1
+ name: CI
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ rspec:
7
+ runs-on: ubuntu-latest
8
+ container:
9
+ image: ruby:2.6.5
10
+
11
+ steps:
12
+ - uses: actions/checkout@v1
13
+
14
+ - name: Gem cache
15
+ id: cache-bundle
16
+ uses: actions/cache@v1
17
+ with:
18
+ path: vendor/bundle
19
+ key: bundle-${{ hashFiles('**/Gemfile.lock') }}
20
+
21
+ - name: Bundle install
22
+ env:
23
+ RAILS_ENV: test
24
+ run: |
25
+ gem install bundler
26
+ bundle install --jobs 4 --retry 3 --path vendor/bundle
27
+
28
+ - name: Run tests
29
+ run: |
30
+ bundle exec rspec
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- stash-rewards (0.0.1)
4
+ stash-rewards (0.0.4)
5
5
  faraday (~> 1)
6
+ typhoeus (~> 1)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
@@ -12,6 +13,8 @@ GEM
12
13
  crack (0.4.5)
13
14
  rexml
14
15
  diff-lcs (1.5.0)
16
+ ethon (0.15.0)
17
+ ffi (>= 1.15.0)
15
18
  faraday (1.10.0)
16
19
  faraday-em_http (~> 1.0)
17
20
  faraday-em_synchrony (~> 1.0)
@@ -35,6 +38,7 @@ GEM
35
38
  faraday-patron (1.0.0)
36
39
  faraday-rack (1.0.0)
37
40
  faraday-retry (1.0.3)
41
+ ffi (1.15.5)
38
42
  hashdiff (1.0.1)
39
43
  multipart-post (2.2.3)
40
44
  public_suffix (4.0.7)
@@ -56,6 +60,8 @@ GEM
56
60
  rspec-support (~> 3.11.0)
57
61
  rspec-support (3.11.0)
58
62
  ruby2_keywords (0.0.5)
63
+ typhoeus (1.4.0)
64
+ ethon (>= 0.9.0)
59
65
  webmock (3.14.0)
60
66
  addressable (>= 2.8.0)
61
67
  crack (>= 0.3.2)
data/README.md CHANGED
@@ -18,7 +18,7 @@ And then execute:
18
18
 
19
19
  Or install it yourself as:
20
20
 
21
- $ gem install stash-rewards --pre
21
+ $ gem install stash-rewards
22
22
 
23
23
  ## Usage
24
24
 
@@ -6,14 +6,14 @@ module Stash
6
6
  module Rewards
7
7
  class CreateUser < ApiWrapper
8
8
  def call(user_identifier:)
9
- response = api_wrapper.post('users') do |req|
9
+ api_response = api_wrapper.post('users') do |req|
10
10
  req.body = user_payload(user_identifier)
11
11
  end
12
- parsed_response = JSON.parse(response.body)
13
12
 
14
- raise Stash::Rewards::Error, parsed_response['message'] unless response.success?
13
+ response = Stash::Rewards::Response.new(api_response)
14
+ raise Stash::Rewards::Error, response.error_message if response.error?
15
15
 
16
- parsed_response
16
+ response
17
17
  rescue Faraday::Error => e
18
18
  raise Stash::Rewards::Error, e.message
19
19
  end
@@ -6,14 +6,14 @@ module Stash
6
6
  module Rewards
7
7
  class EnrolUserInCampaign < ApiWrapper
8
8
  def call(campaign_id:, user_identifier:)
9
- response = api_wrapper.post("campaigns/#{campaign_id}/users") do |req|
9
+ api_response = api_wrapper.post("campaigns/#{campaign_id}/users") do |req|
10
10
  req.body = user_payload(user_identifier)
11
11
  end
12
- parsed_response = JSON.parse(response.body)
13
12
 
14
- raise Stash::Rewards::Error, parsed_response['message'] unless response.success?
13
+ response = Stash::Rewards::Response.new(api_response)
14
+ raise Stash::Rewards::Error, response.error_message if response.error?
15
15
 
16
- parsed_response
16
+ response
17
17
  rescue Faraday::Error => e
18
18
  raise Stash::Rewards::Error, e.message
19
19
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'api_wrapper'
4
+
5
+ module Stash
6
+ module Rewards
7
+ class GetReward < ApiWrapper
8
+ def call(campaign_id:, reward_id:)
9
+ api_response = api_wrapper.get("campaigns/#{campaign_id}/rewards/#{reward_id}")
10
+ response = Stash::Rewards::Response.new(api_response)
11
+ raise Stash::Rewards::Error, response.error_message if response.error?
12
+
13
+ response
14
+ rescue Faraday::Error => e
15
+ raise Stash::Rewards::Error, e.message
16
+ end
17
+ end
18
+ end
19
+ end
@@ -6,14 +6,13 @@ module Stash
6
6
  module Rewards
7
7
  class GetRewards < ApiWrapper
8
8
  def call(campaign_id:, page_no: 0, page_size: 500)
9
- response = api_wrapper.get("campaigns/#{campaign_id}/rewards") do |req|
9
+ api_response = api_wrapper.get("campaigns/#{campaign_id}/rewards") do |req|
10
10
  req.params = query_params(page_no, page_size)
11
11
  end
12
- parsed_response = JSON.parse(response.body)
12
+ response = Stash::Rewards::Response.new(api_response)
13
+ raise Stash::Rewards::Error, response.error_message if response.error?
13
14
 
14
- raise Stash::Rewards::Error, parsed_response['message'] unless response.success?
15
-
16
- parsed_response
15
+ response
17
16
  rescue Faraday::Error => e
18
17
  raise Stash::Rewards::Error, e.message
19
18
  end
@@ -5,28 +5,39 @@ require_relative 'api_wrapper'
5
5
  module Stash
6
6
  module Rewards
7
7
  class IssueVoucher < ApiWrapper
8
- def call(campaign_id:, user_identifier:, reward_id:)
9
- response = api_wrapper.post("campaigns/#{campaign_id}/users/refId_#{user_identifier}/rewards/order") do |req|
10
- req.body = order_payload(reward_id)
8
+ def call(campaign_id:, user_identifier:, reward_id:, quantity: 1)
9
+ price = reward_price(reward_id, campaign_id)
10
+
11
+ api_response = api_wrapper.post("campaigns/#{campaign_id}/users/refId_#{user_identifier}/rewards/order") do |req|
12
+ req.body = order_payload(reward_id, quantity, price)
11
13
  end
12
- parsed_response = JSON.parse(response.body)
13
- raise Stash::Rewards::Error, parsed_response['message'] unless response.success?
14
+ response = Stash::Rewards::Response.new(api_response)
15
+ raise Stash::Rewards::Error, response.error_message if response.error?
14
16
 
15
- parsed_response
17
+ response
16
18
  rescue Faraday::Error => e
17
19
  raise Stash::Rewards::Error, e.message
18
20
  end
19
21
 
20
22
  private
21
23
 
22
- def order_payload(reward_id)
24
+ def reward_price(reward_id, campaign_id)
25
+ get_reward_api = ::Stash::Rewards::GetReward.new(@config)
26
+ response = get_reward_api.call(reward_id: reward_id, campaign_id: campaign_id)
27
+ raise Stash::Rewards::Error, response.error_message if response.error?
28
+
29
+ reward = Stash::Rewards::StashReward.new(response.payload)
30
+ reward.prices[0]['price'] || 0
31
+ end
32
+
33
+ def order_payload(reward_id, quantity, price)
23
34
  {
24
35
  "userInformation": {},
25
36
  "products": [
26
37
  {
27
38
  "rewardId": reward_id,
28
- "price": 0,
29
- "quantity": 0
39
+ "price": price,
40
+ "quantity": quantity
30
41
  }
31
42
  ]
32
43
  }.to_json
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stash
4
+ module Rewards
5
+ class Response
6
+ def initialize(faraday_response)
7
+ @response = faraday_response
8
+ end
9
+
10
+ def error?
11
+ !@response.success? || (error_code != 0)
12
+ end
13
+
14
+ def payload
15
+ @payload ||= JSON.parse(body)
16
+ end
17
+
18
+ def status
19
+ @status ||= @response.status
20
+ end
21
+
22
+ def body
23
+ @body ||= @response.body
24
+ end
25
+
26
+ def error_code
27
+ @error_code ||= payload.dig('error', 'code').to_i
28
+ end
29
+
30
+ def error_message
31
+ api_error_message || error_payload
32
+ end
33
+
34
+ private
35
+
36
+ def error_payload
37
+ error_data = payload.dig('error', 'data')
38
+ return nil if error_data.nil? || error_data.empty?
39
+
40
+ error_data.map { |error| error['message'] }.join(', ')
41
+ end
42
+
43
+ def api_error_message
44
+ payload['message']
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Stash
4
+ module Rewards
5
+ class StashReward
6
+ attr_reader :reward_name, :reward_id, :description, :prices
7
+
8
+ def initialize(reward_payload)
9
+ @reward_name = reward_payload['rewardName']
10
+ @reward_id = reward_payload['rewardId']
11
+ @description = reward_payload['description']
12
+ @prices = reward_payload['denominations'] || []
13
+ end
14
+ end
15
+ end
16
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Stash
4
4
  module Rewards
5
- VERSION = '0.0.1'
5
+ VERSION = '0.0.4'
6
6
  end
7
7
  end
data/lib/stash/rewards.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  require_relative 'rewards/version'
2
2
  require_relative 'rewards/api_wrapper'
3
+ require_relative 'rewards/response'
3
4
  require_relative 'rewards/config'
4
5
  require_relative 'rewards/create_user'
5
6
  require_relative 'rewards/enrol_user_in_campaign'
6
7
  require_relative 'rewards/get_rewards'
8
+ require_relative 'rewards/get_reward'
7
9
  require_relative 'rewards/issue_voucher'
10
+ require_relative 'rewards/stash_reward'
8
11
 
9
12
  module Stash
10
13
  module Rewards
@@ -3,8 +3,8 @@ require_relative 'lib/stash/rewards/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'stash-rewards'
5
5
  spec.version = Stash::Rewards::VERSION
6
- spec.authors = ['Rui Baltazar']
7
- spec.email = ['rui.p.baltazar@gmail.com']
6
+ spec.authors = ['Rui Baltazar', 'Aayush Jain']
7
+ spec.email = ['rui.p.baltazar@gmail.com', 'aayush@perxtech.com']
8
8
 
9
9
  spec.summary = 'Gem with API wrapper for Stash Rewards'
10
10
  spec.description = 'Helper Library to make api calls to stash rewards'
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ['lib']
27
27
 
28
28
  spec.add_runtime_dependency 'faraday', '~> 1'
29
+ spec.add_runtime_dependency 'typhoeus', '~> 1'
29
30
 
30
31
  spec.add_development_dependency 'rspec', '~> 3'
31
32
  spec.add_development_dependency 'rspec-file_fixtures', '~> 0'
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stash-rewards
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rui Baltazar
8
- autorequire:
8
+ - Aayush Jain
9
+ autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2022-06-24 00:00:00.000000000 Z
12
+ date: 2022-06-30 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: faraday
@@ -24,6 +25,20 @@ dependencies:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
27
  version: '1'
28
+ - !ruby/object:Gem::Dependency
29
+ name: typhoeus
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1'
27
42
  - !ruby/object:Gem::Dependency
28
43
  name: rspec
29
44
  requirement: !ruby/object:Gem::Requirement
@@ -69,10 +84,12 @@ dependencies:
69
84
  description: Helper Library to make api calls to stash rewards
70
85
  email:
71
86
  - rui.p.baltazar@gmail.com
87
+ - aayush@perxtech.com
72
88
  executables: []
73
89
  extensions: []
74
90
  extra_rdoc_files: []
75
91
  files:
92
+ - ".github/workflows/test.yml"
76
93
  - ".gitignore"
77
94
  - ".travis.yml"
78
95
  - CODE_OF_CONDUCT.md
@@ -89,8 +106,11 @@ files:
89
106
  - lib/stash/rewards/config.rb
90
107
  - lib/stash/rewards/create_user.rb
91
108
  - lib/stash/rewards/enrol_user_in_campaign.rb
109
+ - lib/stash/rewards/get_reward.rb
92
110
  - lib/stash/rewards/get_rewards.rb
93
111
  - lib/stash/rewards/issue_voucher.rb
112
+ - lib/stash/rewards/response.rb
113
+ - lib/stash/rewards/stash_reward.rb
94
114
  - lib/stash/rewards/version.rb
95
115
  - stash-rewards.gemspec
96
116
  homepage: https://github.com/PerxTech/stash-rewards
@@ -100,7 +120,7 @@ metadata:
100
120
  homepage_uri: https://github.com/PerxTech/stash-rewards
101
121
  source_code_uri: https://github.com/PerxTech/stash-rewards
102
122
  changelog_uri: https://github.com/PerxTech/stash-rewards/blob/main/README.md
103
- post_install_message:
123
+ post_install_message:
104
124
  rdoc_options: []
105
125
  require_paths:
106
126
  - lib
@@ -115,8 +135,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
135
  - !ruby/object:Gem::Version
116
136
  version: '0'
117
137
  requirements: []
118
- rubygems_version: 3.1.6
119
- signing_key:
138
+ rubygems_version: 3.0.9
139
+ signing_key:
120
140
  specification_version: 4
121
141
  summary: Gem with API wrapper for Stash Rewards
122
142
  test_files: []