voucherify 0.8.2 → 1.0.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.
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
- RSpec::Core::RakeTask.new(:spec)
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.rspec_opts = '--format documentation'
6
+ end
5
7
 
6
- task :default => :spec
8
+ task :default => :spec
@@ -0,0 +1,32 @@
1
+ require 'voucherify'
2
+
3
+ voucherify = Voucherify::Client.new({
4
+ :applicationId => 'c70a6f00-cf91-4756-9df5-47628850002b',
5
+ :clientSecretKey => '3266b9f8-e246-4f79-bdf0-833929b1380c'
6
+ })
7
+
8
+ new_customer = voucherify.customers.create({
9
+ name: 'John Doe',
10
+ email: 'john@email.com',
11
+ description: 'Sample description about customer',
12
+ metadata: {
13
+ lang: 'en'
14
+ }
15
+ })
16
+
17
+ puts 'Created Customer:'
18
+ puts new_customer
19
+
20
+ customer = voucherify.customers.get new_customer['id']
21
+
22
+ puts 'Retrieved Customer:'
23
+ puts customer
24
+
25
+ customer[:description] = 'Sample description of customer with updates'
26
+
27
+ updated_customer = voucherify.customers.update customer
28
+
29
+ puts 'Updated Customer:'
30
+ puts updated_customer
31
+
32
+ voucherify.customers.delete updated_customer['id']
data/examples/utils.rb CHANGED
@@ -1,24 +1,22 @@
1
- require '../lib/voucherify/utils'
2
-
3
- include Utils
1
+ require 'voucherify/utils'
4
2
 
5
3
  base_price = 20.00
6
4
 
7
- puts "base price: " + base_price.to_s
5
+ puts 'base price: ' + base_price.to_s
8
6
 
9
- puts "===== amount discount ====="
7
+ puts '===== amount discount ====='
10
8
  amount_voucher = {
11
9
  discount: {
12
10
  amount_off: 1000, # 10.0
13
11
  type: 'AMOUNT'
14
12
  }
15
13
  }
16
- puts "discount: " + Utils.calculate_discount(base_price, amount_voucher).to_s
17
- puts "price after discount: " + Utils.calculate_price(base_price, amount_voucher).to_s
14
+ puts 'discount: ' + Voucherify::Utils.calculate_discount(base_price, amount_voucher).to_s
15
+ puts 'price after discount: ' + Voucherify::Utils.calculate_price(base_price, amount_voucher).to_s
18
16
  puts
19
17
 
20
18
 
21
- puts "===== percent discount ===="
19
+ puts '===== percent discount ===='
22
20
 
23
21
  percent_discount_voucher = {
24
22
  discount: {
@@ -27,12 +25,12 @@ percent_discount_voucher = {
27
25
  }
28
26
  }
29
27
 
30
- puts "discount: " + Utils.calculate_discount(base_price, percent_discount_voucher).to_s
31
- puts "price after discount: " + Utils.calculate_price(base_price, percent_discount_voucher).to_s
28
+ puts 'discount: ' + Voucherify::Utils.calculate_discount(base_price, percent_discount_voucher).to_s
29
+ puts 'price after discount: ' + Voucherify::Utils.calculate_price(base_price, percent_discount_voucher).to_s
32
30
  puts
33
31
 
34
32
 
35
- puts "===== unit discount ======="
33
+ puts '===== unit discount ======='
36
34
 
37
35
  unit_discount_voucher = {
38
36
  discount: {
@@ -41,12 +39,12 @@ unit_discount_voucher = {
41
39
  }
42
40
  }
43
41
 
44
- puts "discount: " + Utils.calculate_discount(base_price, unit_discount_voucher, 5).to_s
45
- puts "price after discount: " + Utils.calculate_price(base_price, unit_discount_voucher, 5).to_s
42
+ puts 'discount: ' + Voucherify::Utils.calculate_discount(base_price, unit_discount_voucher, 5).to_s
43
+ puts 'price after discount: ' + Voucherify::Utils.calculate_price(base_price, unit_discount_voucher, 5).to_s
46
44
  puts
47
45
 
48
46
 
49
- puts "===== gift voucher ========"
47
+ puts '===== gift voucher ========'
50
48
 
51
49
  gift_voucher = {
52
50
  gift: {
@@ -55,11 +53,11 @@ gift_voucher = {
55
53
  }
56
54
  }
57
55
 
58
- puts "discount: " + Utils.calculate_discount(base_price, gift_voucher).to_s
59
- puts "price after discount: " + Utils.calculate_price(base_price, gift_voucher).to_s
56
+ puts 'discount: ' + Voucherify::Utils.calculate_discount(base_price, gift_voucher).to_s
57
+ puts 'price after discount: ' + Voucherify::Utils.calculate_price(base_price, gift_voucher).to_s
60
58
  puts
61
59
 
62
- puts "===== gift voucher 2 ======"
60
+ puts '===== gift voucher 2 ======'
63
61
 
64
62
  gift_voucher2 = {
65
63
  gift: {
@@ -68,6 +66,6 @@ gift_voucher2 = {
68
66
  }
69
67
  }
70
68
 
71
- puts "discount: " + Utils.calculate_discount(base_price, gift_voucher2).to_s
72
- puts "price after discount: " + Utils.calculate_price(base_price, gift_voucher2).to_s
69
+ puts 'discount: ' + Voucherify::Utils.calculate_discount(base_price, gift_voucher2).to_s
70
+ puts 'price after discount: ' + Voucherify::Utils.calculate_price(base_price, gift_voucher2).to_s
73
71
  puts
@@ -0,0 +1,20 @@
1
+ require 'voucherify'
2
+
3
+ voucherify = Voucherify::Client.new({
4
+ :applicationId => 'c70a6f00-cf91-4756-9df5-47628850002b',
5
+ :clientSecretKey => '3266b9f8-e246-4f79-bdf0-833929b1380c'
6
+ })
7
+
8
+ puts voucherify.vouchers.validate('91Ft4U', {
9
+ tracking_id: 'john@lemon.com',
10
+ order: {
11
+ amount: 1000
12
+ }
13
+ })
14
+
15
+ query = {limit: 10, skip: 20, category: 'API Test'}
16
+ puts voucherify.vouchers.list(query)
17
+
18
+ puts voucherify.vouchers.enable '91Ft4U'
19
+
20
+ puts voucherify.vouchers.disable '91Ft4U'
@@ -0,0 +1,69 @@
1
+ require 'uri'
2
+ require 'rest-client'
3
+ require 'json'
4
+
5
+ module Voucherify
6
+
7
+ class Client
8
+ def initialize (options)
9
+ @options = options
10
+ @backend_url = 'https://api.voucherify.io/v1'
11
+ @headers = {
12
+ 'X-App-Id' => @options[:applicationId],
13
+ 'X-App-Token' => @options[:clientSecretKey],
14
+ 'X-Voucherify-Channel' => 'Ruby-SDK',
15
+ :accept => :json
16
+ }
17
+ end
18
+
19
+ def vouchers
20
+ Voucherify::Service::Vouchers.new(self)
21
+ end
22
+
23
+ def distributions
24
+ Voucherify::Service::Distributions.new(self)
25
+ end
26
+
27
+ def validations
28
+ Voucherify::Service::Validations.new(self)
29
+ end
30
+
31
+ def redemptions
32
+ Voucherify::Service::Redemptions.new(self)
33
+ end
34
+
35
+ def customers
36
+ Voucherify::Service::Customers.new(self)
37
+ end
38
+
39
+ def get(path, params = {})
40
+ url = @backend_url + path
41
+ response = RestClient.get(url, @headers.merge({:params => params}))
42
+ JSON.parse(response.body)
43
+ end
44
+
45
+ def put(path, body, params = {})
46
+ url = @backend_url + path
47
+ response = RestClient.put(url, body, @headers.merge({:params => params, :content_type => :json}))
48
+ JSON.parse(response.body)
49
+ end
50
+
51
+ def post(path, body, params = {})
52
+ url = @backend_url + path
53
+ response = RestClient.post(url, body, @headers.merge({:params => params, :content_type => :json}))
54
+ if !response.body.empty?
55
+ JSON.parse(response.body)
56
+ else
57
+ nil
58
+ end
59
+
60
+ end
61
+
62
+ def delete(path, params = {})
63
+ url = @backend_url + path
64
+ RestClient.delete(url, @headers.merge({:params => params}))
65
+ nil
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,29 @@
1
+ require 'uri'
2
+
3
+ module Voucherify
4
+ module Service
5
+ class Customers
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def create(customer)
13
+ @client.post('/customers/', customer.to_json)
14
+ end
15
+
16
+ def get(customer_id)
17
+ @client.get('/customers/' + customer_id)
18
+ end
19
+
20
+ def update(customer)
21
+ @client.put('/customers/' + (customer['id'] || customer[:id]), customer.to_json)
22
+ end
23
+
24
+ def delete(customer_id)
25
+ @client.delete('/customers/' + customer_id)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,26 @@
1
+ require 'uri'
2
+
3
+ module Voucherify
4
+ module Service
5
+ class Distributions
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def publish(campaign_name)
13
+ url = '/vouchers/publish'
14
+ payload = {}
15
+
16
+ if campaign_name.is_a? String
17
+ url += '?campaign=' + URI.encode(campaign_name)
18
+ elsif campaign_name.is_a? Hash
19
+ payload = campaign_name
20
+ end
21
+
22
+ @client.post(url, payload.to_json)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,36 @@
1
+ require 'uri'
2
+
3
+ module Voucherify
4
+ module Service
5
+ class Redemptions
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def redeem(code, params = {})
13
+ url = '/vouchers/' + URI.encode(code) + '/redemption'
14
+ @client.post(url, params.to_json)
15
+ end
16
+
17
+ def list(query = {})
18
+ @client.get('/redemptions/', query)
19
+ end
20
+
21
+ def get_for_voucher(code)
22
+ @client.get('/vouchers/' + URI.encode(code) + '/redemption')
23
+ end
24
+
25
+ def rollback(redemption_id, params = {})
26
+ reason = params['reason'] || params[:reason]
27
+ url = '/redemptions/'+ URI.encode(redemption_id) + '/rollback'
28
+ url += '?reason=' + URI.encode(reason) if reason
29
+ params.delete 'reason'
30
+ params.delete :reason
31
+ @client.post(url, params.to_json)
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,17 @@
1
+ require 'uri'
2
+
3
+ module Voucherify
4
+ module Service
5
+ class Validations
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def validate_voucher(code, context = {})
13
+ @client.post('/vouchers/' + URI.encode(code) + '/validate', context.to_json)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,52 @@
1
+ require 'uri'
2
+
3
+ module Voucherify
4
+ module Service
5
+ class Vouchers
6
+ attr_reader :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def create(code, options = {})
13
+ url = '/vouchers/'
14
+ url += URI.encode(code) if code
15
+ @client.post(url, options.to_json)
16
+ end
17
+
18
+ def get(code)
19
+ @client.get('/vouchers/' + URI.encode(code))
20
+ end
21
+
22
+ def update(voucher_update)
23
+ url = '/vouchers/' + URI.encode(voucher_update['code'])
24
+ @client.put(url, voucher_update.to_json)
25
+ end
26
+
27
+ def list(query)
28
+ @client.get('/vouchers/', query)
29
+ end
30
+
31
+ def enable(code)
32
+ url = '/vouchers/' + URI.encode(code) + '/enable'
33
+ @client.post(url, nil)
34
+ nil
35
+ end
36
+
37
+ def disable(code)
38
+ url = '/vouchers/' + URI.encode(code) + '/disable'
39
+ @client.post(url, nil)
40
+ nil
41
+ end
42
+
43
+ def delete(code, params = {})
44
+ force = params['force'] || params[:force]
45
+ url = '/vouchers/' + URI.encode(code)
46
+ url += '?force=' + (!!force).to_s
47
+ @client.delete(url, nil)
48
+ nil
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,99 +1,101 @@
1
- module Utils
2
- def round_money(value)
3
- value.round(2)
1
+ module Voucherify
2
+ module Utils
3
+ def self.round_money(value)
4
+ value.round(2)
4
5
  end
5
6
 
6
- def validate_percent_discount(discount)
7
- if !(discount.is_a? Numeric) || !discount.between?(0, 100)
8
- raise "Invalid voucher, percent discount should be between 0-100."
9
- end
7
+ def self.validate_percent_discount(discount)
8
+ if !(discount.is_a? Numeric) || !discount.between?(0, 100)
9
+ raise 'Invalid voucher, percent discount should be between 0-100.'
10
+ end
10
11
  end
11
12
 
12
- def validate_amount_discount(discount)
13
- if !(discount.is_a? Numeric) || discount < 0
14
- raise "Invalid voucher, amount discount must be bigger than zero."
15
- end
13
+ def self.validate_amount_discount(discount)
14
+ if !(discount.is_a? Numeric) || discount < 0
15
+ raise 'Invalid voucher, amount discount must be bigger than zero.'
16
+ end
16
17
  end
17
18
 
18
- def validate_unit_discount(discount)
19
- if !(discount.is_a? Numeric) || discount < 0
20
- raise "Invalid voucher, unit discount must be bigger than zero."
21
- end
19
+ def self.validate_unit_discount(discount)
20
+ if !(discount.is_a? Numeric) || discount < 0
21
+ raise 'Invalid voucher, unit discount must be bigger than zero.'
22
+ end
22
23
  end
23
24
 
24
- def calculate_price(base_price, voucher, unit_price = nil)
25
- e = 100.0
26
-
27
- if voucher[:gift]
28
- discount = [voucher[:gift][:balance] / e, base_price].min
29
- return round_money(base_price - discount)
30
- end
31
-
32
- if !voucher[:discount]
33
- raise "Unsupported voucher type."
34
- end
25
+ def self.calculate_price(base_price, voucher, unit_price = nil)
26
+ e = 100.0
27
+
28
+ if voucher[:gift]
29
+ discount = [voucher[:gift][:balance] / e, base_price].min
30
+ return round_money(base_price - discount)
31
+ end
32
+
33
+ if !voucher[:discount]
34
+ raise 'Unsupported voucher type.'
35
+ end
36
+
37
+ if voucher[:discount][:type] === 'PERCENT'
38
+ discount = voucher[:discount][:percent_off]
39
+ validate_percent_discount(discount);
40
+ price_discount = base_price * (discount / 100.0)
41
+ return round_money(base_price - price_discount)
42
+
43
+ elsif voucher[:discount][:type] === 'AMOUNT'
44
+ discount = voucher[:discount][:amount_off] / e
45
+ validate_amount_discount(discount)
46
+ new_price = base_price - discount
47
+ return round_money(new_price > 0 ? (new_price) : 0)
35
48
 
36
- if voucher[:discount][:type] === 'PERCENT'
37
- discount = voucher[:discount][:percent_off]
38
- validate_percent_discount(discount);
39
- price_discount = base_price * (discount / 100.0)
40
- return round_money(base_price - price_discount)
41
-
42
- elsif voucher[:discount][:type] === 'AMOUNT'
43
- discount = voucher[:discount][:amount_off] / e
44
- validate_amount_discount(discount)
45
- new_price = base_price - discount
46
- return round_money(new_price > 0 ? (new_price) : 0)
47
-
48
- elsif voucher[:discount][:type] === 'UNIT'
49
- if !unit_price
50
- raise "Missing unit_price argument."
51
- end
52
- discount = voucher[:discount][:unit_off]
53
- validate_unit_discount(discount)
54
- new_price = base_price - unit_price * discount
55
- return round_money(new_price > 0 ? (new_price) : 0)
56
-
57
- else
58
- raise "Unsupported discount type"
49
+ elsif voucher[:discount][:type] === 'UNIT'
50
+ if !unit_price
51
+ raise 'Missing unit_price argument.'
59
52
  end
53
+ discount = voucher[:discount][:unit_off]
54
+ validate_unit_discount(discount)
55
+ new_price = base_price - unit_price * discount
56
+ return round_money(new_price > 0 ? (new_price) : 0)
57
+
58
+ else
59
+ raise 'Unsupported discount type'
60
+ end
60
61
  end
61
62
 
62
- def calculate_discount(base_price, voucher, unit_price = nil)
63
- e = 100.0
64
-
65
- if voucher[:gift]
66
- discount = [voucher[:gift][:balance] / e, base_price].min
67
- return round_money(discount)
68
- end
69
-
70
- if !voucher[:discount]
71
- raise "Unsupported voucher type."
72
- end
63
+ def self.calculate_discount(base_price, voucher, unit_price = nil)
64
+ e = 100.0
65
+
66
+ if voucher[:gift]
67
+ discount = [voucher[:gift][:balance] / e, base_price].min
68
+ return round_money(discount)
69
+ end
73
70
 
74
- if voucher[:discount][:type] === 'PERCENT'
75
- discount = voucher[:discount][:percent_off]
76
- validate_percent_discount(discount);
77
- price_discount = base_price * (discount / 100.0)
78
- return round_money(price_discount)
79
-
80
- elsif voucher[:discount][:type] === 'AMOUNT'
81
- discount = voucher[:discount][:amount_off] / e
82
- validate_amount_discount(discount)
83
- new_price = base_price - discount
84
- return round_money(new_price > 0 ? (discount) : (base_price))
85
-
86
- elsif voucher[:discount][:type] === 'UNIT'
87
- if !unit_price
88
- raise "Missing unit_price argument."
89
- end
90
- discount = voucher[:discount][:unit_off]
91
- validate_unit_discount(discount)
92
- price_discount = unit_price * discount
93
- return round_money(price_discount > base_price ? (base_price) : (price_discount))
94
-
95
- else
96
- raise "Unsupported discount type"
71
+ if !voucher[:discount]
72
+ raise 'Unsupported voucher type.'
73
+ end
74
+
75
+ if voucher[:discount][:type] === 'PERCENT'
76
+ discount = voucher[:discount][:percent_off]
77
+ validate_percent_discount(discount);
78
+ price_discount = base_price * (discount / 100.0)
79
+ return round_money(price_discount)
80
+
81
+ elsif voucher[:discount][:type] === 'AMOUNT'
82
+ discount = voucher[:discount][:amount_off] / e
83
+ validate_amount_discount(discount)
84
+ new_price = base_price - discount
85
+ return round_money(new_price > 0 ? (discount) : (base_price))
86
+
87
+ elsif voucher[:discount][:type] === 'UNIT'
88
+ if !unit_price
89
+ raise 'Missing unit_price argument.'
97
90
  end
91
+ discount = voucher[:discount][:unit_off]
92
+ validate_unit_discount(discount)
93
+ price_discount = unit_price * discount
94
+ return round_money(price_discount > base_price ? (base_price) : (price_discount))
95
+
96
+ else
97
+ raise 'Unsupported discount type'
98
+ end
98
99
  end
100
+ end
99
101
  end
@@ -1,3 +1,3 @@
1
- class Voucherify
2
- VERSION = "0.8.2"
1
+ module Voucherify
2
+ VERSION = '1.0.0'
3
3
  end