voucherify 0.8.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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