stash-rewards 0.0.1 → 0.0.4

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 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: []