rave_ruby 0.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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +1743 -0
  9. data/Rakefile +2 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/lib/rave_ruby/error.rb +48 -0
  13. data/lib/rave_ruby/rave_modules/base_endpoints.rb +21 -0
  14. data/lib/rave_ruby/rave_modules/util.rb +46 -0
  15. data/lib/rave_ruby/rave_objects/account.rb +68 -0
  16. data/lib/rave_ruby/rave_objects/base/base.rb +106 -0
  17. data/lib/rave_ruby/rave_objects/base/charge_base.rb +154 -0
  18. data/lib/rave_ruby/rave_objects/base/mobile_money_base.rb +44 -0
  19. data/lib/rave_ruby/rave_objects/base/mpesa_base.rb +41 -0
  20. data/lib/rave_ruby/rave_objects/base/payment_plan_base.rb +86 -0
  21. data/lib/rave_ruby/rave_objects/base/preauth_base.rb +84 -0
  22. data/lib/rave_ruby/rave_objects/base/sub_account_base.rb +34 -0
  23. data/lib/rave_ruby/rave_objects/base/subscription_base.rb +78 -0
  24. data/lib/rave_ruby/rave_objects/base/transfer_base.rb +80 -0
  25. data/lib/rave_ruby/rave_objects/base/ussd_base.rb +60 -0
  26. data/lib/rave_ruby/rave_objects/card.rb +91 -0
  27. data/lib/rave_ruby/rave_objects/list_banks.rb +18 -0
  28. data/lib/rave_ruby/rave_objects/mobile_money.rb +58 -0
  29. data/lib/rave_ruby/rave_objects/mpesa.rb +59 -0
  30. data/lib/rave_ruby/rave_objects/payment_plan.rb +61 -0
  31. data/lib/rave_ruby/rave_objects/preauth.rb +111 -0
  32. data/lib/rave_ruby/rave_objects/sub_account.rb +55 -0
  33. data/lib/rave_ruby/rave_objects/subscription.rb +51 -0
  34. data/lib/rave_ruby/rave_objects/transactions.rb +24 -0
  35. data/lib/rave_ruby/rave_objects/transfer.rb +79 -0
  36. data/lib/rave_ruby/rave_objects/uganda_mobile_money.rb +58 -0
  37. data/lib/rave_ruby/rave_objects/ussd.rb +59 -0
  38. data/lib/rave_ruby/version.rb +3 -0
  39. data/lib/rave_ruby.rb +74 -0
  40. data/rave_ruby.gemspec +46 -0
  41. metadata +144 -0
@@ -0,0 +1,111 @@
1
+ require_relative "base/preauth_base.rb"
2
+ require 'json'
3
+
4
+ class Preauth < PreauthBase
5
+
6
+ # method to initiate preauth transaction
7
+ def initiate_charge(data)
8
+
9
+ base_url = rave_object.base_url
10
+ secret_key = rave_object.secret_key.dup
11
+ hashed_secret_key = get_hashed_key
12
+ public_key = rave_object.public_key
13
+
14
+ required_parameters = ["country", "amount", "currency", "email"]
15
+ check_passed_parameters(required_parameters, data)
16
+
17
+
18
+ # only update the payload with the transaction reference if it isn't already added to the payload
19
+ if !data.key?("txRef")
20
+ data.merge!({"txRef" => Util.transaction_reference_generator})
21
+ end
22
+
23
+ data.merge!({"PBFPubKey" => public_key, "charge_type" => "preauth"})
24
+
25
+ # only update the payload with the transaction reference if it isn't already added to the payload
26
+ if data.key?("token")
27
+ data.merge!({"SECKEY" => secret_key})
28
+ payload = data.to_json
29
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::PREAUTH_CHARGE_ENDPOINT}", payload)
30
+ return handle_charge_response(response)
31
+ else
32
+ encrypt_data = Util.encrypt(hashed_secret_key, data)
33
+
34
+ payload = {
35
+ "PBFPubKey" => public_key,
36
+ "client" => encrypt_data,
37
+ "alg" => "3DES-24"
38
+ }
39
+
40
+ payload = payload.to_json
41
+
42
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::CHARGE_ENDPOINT}", payload)
43
+
44
+ return handle_charge_response(response)
45
+ end
46
+ end
47
+
48
+ # method to capture transaction
49
+ def capture(flwRef, amount=nil)
50
+ base_url = rave_object.base_url
51
+
52
+ payload = {
53
+ "flwRef" => flwRef,
54
+ "SECKEY" => rave_object.secret_key.dup,
55
+ "amount" => amount
56
+ }
57
+
58
+ payload = payload.to_json
59
+
60
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::CAPTURE_ENDPOINT}", payload)
61
+ return handle_capture_response(response)
62
+ end
63
+
64
+ # method to refund a transaction
65
+ def refund(flwRef)
66
+ base_url = rave_object.base_url
67
+
68
+ payload = {
69
+ "ref" => flwRef,
70
+ "action" => "refund",
71
+ "SECKEY" => rave_object.secret_key.dup,
72
+ }
73
+
74
+ payload = payload.to_json
75
+
76
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::REFUND_VOID_ENDPOINT}", payload)
77
+ return handle_refund_void_response(response)
78
+ end
79
+
80
+ # method to void a transaction
81
+ def void(flwRef)
82
+ base_url = rave_object.base_url
83
+
84
+ payload = {
85
+ "ref" => flwRef,
86
+ "action" => "void",
87
+ "SECKEY" => rave_object.secret_key.dup,
88
+ }
89
+
90
+ payload = payload.to_json
91
+
92
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::REFUND_VOID_ENDPOINT}", payload)
93
+ return handle_refund_void_response(response)
94
+ end
95
+
96
+ # method to verify preauth transaction
97
+ def verify_preauth(txRef)
98
+ base_url = rave_object.base_url
99
+
100
+ payload = {
101
+ "txref" => txRef,
102
+ "SECKEY" => rave_object.secret_key.dup,
103
+ }
104
+
105
+ payload = payload.to_json
106
+
107
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::VERIFY_ENDPOINT}", payload)
108
+ return handle_verify_response(response)
109
+ end
110
+
111
+ end
@@ -0,0 +1,55 @@
1
+ require_relative "base/sub_account_base.rb"
2
+ require 'json'
3
+
4
+ class SubAccount < SubAccountBase
5
+
6
+ # method to create subaccount
7
+ def create_subaccount(data)
8
+ base_url = rave_object.base_url
9
+
10
+ data.merge!({"seckey" => rave_object.secret_key.dup})
11
+
12
+ required_parameters = ["account_bank", "account_number", "business_name", "business_email", "business_contact", "business_contact_mobile", "business_mobile", "split_type", "split_value"]
13
+ check_passed_parameters(required_parameters, data)
14
+
15
+ payload = data.to_json
16
+
17
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::SUBACCOUNT_ENDPOINT}/create", payload)
18
+
19
+ return handle_create_response(response)
20
+ end
21
+
22
+ # method to list all subaccounts
23
+ def list_subaccounts
24
+ base_url = rave_object.base_url
25
+
26
+ response = get_request("#{base_url}#{BASE_ENDPOINTS::SUBACCOUNT_ENDPOINT}", {"seckey" => rave_object.secret_key.dup})
27
+
28
+ return handle_subaccount_response(response)
29
+ end
30
+
31
+ # method to fetch a subaccount
32
+ def fetch_subaccount(subaccount_id)
33
+ base_url = rave_object.base_url
34
+
35
+ response = get_request("#{base_url}#{BASE_ENDPOINTS::SUBACCOUNT_ENDPOINT}/get/#{subaccount_id}", {"seckey" => rave_object.secret_key.dup})
36
+
37
+ return handle_subaccount_response(response)
38
+ end
39
+
40
+
41
+ # method to delete a subaccount
42
+ def delete_subaccount(subaccount_id)
43
+ base_url = rave_object.base_url
44
+
45
+ payload = {
46
+ "seckey" => rave_object.secret_key.dup,
47
+ "id" => subaccount_id
48
+ }
49
+
50
+ payload = payload.to_json
51
+
52
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::SUBACCOUNT_ENDPOINT}/delete", payload)
53
+ return handle_subaccount_response(response)
54
+ end
55
+ end
@@ -0,0 +1,51 @@
1
+ require_relative "base/subscription_base.rb"
2
+ require 'json'
3
+
4
+ class Subscription < SubscriptionBase
5
+
6
+ #method to list subscriptions
7
+
8
+ def list_all_subscription
9
+ base_url = rave_object.base_url
10
+ response = get_request("#{base_url}#{BASE_ENDPOINTS::SUBSCRIPTIONS_ENDPOINT}/query",{"seckey" => rave_object.secret_key.dup})
11
+ return handle_list_all_subscription(response)
12
+ end
13
+
14
+ #method to fetch a subscription
15
+
16
+ def fetch_subscription(id, email)
17
+ base_url = rave_object.base_url
18
+ secret_key = rave_object.secret_key.dup
19
+
20
+ response = get_request("#{base_url}#{BASE_ENDPOINTS::SUBSCRIPTIONS_ENDPOINT}/query",{"seckey" => rave_object.secret_key.dup, "id" => id, "email": email})
21
+ return handle_fetch_subscription_response(response)
22
+ end
23
+
24
+ def cancel_subscription(id)
25
+ base_url = rave_object.base_url
26
+ secret_key = rave_object.secret_key.dup
27
+
28
+ payload = {
29
+ "seckey" => secret_key,
30
+ }
31
+
32
+ payload = payload.to_json
33
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::SUBSCRIPTIONS_ENDPOINT}/#{id}/cancel",payload)
34
+ return handle_cancel_response(response)
35
+ end
36
+
37
+ def activate_subscription(id)
38
+
39
+ base_url = rave_object.base_url
40
+ secret_key = rave_object.secret_key.dup
41
+
42
+ # data.merge!({"seckey" => secret_key.dup})
43
+
44
+ payload = {
45
+ "seckey" => secret_key,
46
+ }
47
+ payload = payload.to_json
48
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::SUBSCRIPTIONS_ENDPOINT}/#{id}/activate",payload)
49
+ return handle_activate_subscription_response(response)
50
+ end
51
+ end
@@ -0,0 +1,24 @@
1
+ require './rave_ruby/objects/base'
2
+
3
+ class RaveTransactions < RaveBaseObject
4
+
5
+ #encrpt the data
6
+
7
+ def encrypt(key, data)
8
+ key = key
9
+ data = data
10
+ client_data = encrypt(key, data)
11
+ end
12
+
13
+ #Card payment
14
+ def chargeCards(client_data )
15
+ payload = {
16
+ "PBFPubKey" => self.PBFPubKey,
17
+ "client" => client_data,
18
+ "alg" => "3DES-24"
19
+ }
20
+ perform_post("#{BASE::CHARGE_ENDPOINT}/charge", payload)
21
+ end
22
+
23
+
24
+ end
@@ -0,0 +1,79 @@
1
+ require_relative "base/transfer_base.rb"
2
+ require 'json'
3
+
4
+ class Transfer < TransferBase
5
+
6
+ # method to initiate single transfer
7
+ def initiate_transfer(data)
8
+ base_url = rave_object.base_url
9
+
10
+ # only update the payload with the transaction reference if it isn't already added to the payload
11
+ if !data.key?("reference")
12
+ data.merge!({"reference" => Util.transaction_reference_generator})
13
+ end
14
+
15
+ data.merge!({"seckey" => rave_object.secret_key.dup})
16
+
17
+ required_parameters = ["amount", "currency"]
18
+ check_passed_parameters(required_parameters, data)
19
+
20
+ payload = data.to_json
21
+
22
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::TRANSFER_ENDPOINT}/create", payload)
23
+
24
+ return handle_initiate_response(response)
25
+ end
26
+
27
+ # method to perform bulk transfer request
28
+ def bulk_transfer(data)
29
+ base_url = rave_object.base_url
30
+
31
+ data.merge!({"seckey" => rave_object.secret_key.dup})
32
+
33
+ required_parameters = ["title", "bulk_data"]
34
+ check_passed_parameters(required_parameters, data)
35
+
36
+ payload = data.to_json
37
+
38
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::TRANSFER_ENDPOINT}/create_bulk", payload)
39
+
40
+ return handle_bulk_response(response)
41
+ end
42
+
43
+ # method to perform get fee request
44
+ def get_fee(currency)
45
+ base_url = rave_object.base_url
46
+ response = get_request("#{base_url}#{BASE_ENDPOINTS::GET_FEE_ENDPOINT}", {"seckey" => rave_object.secret_key.dup, "currency" => currency})
47
+ return handle_transfer_status(response)
48
+ end
49
+
50
+ # method to perform get balance request
51
+ def get_balance(currency)
52
+ base_url = rave_object.base_url
53
+
54
+ payload = {
55
+ "seckey" => rave_object.secret_key.dup,
56
+ "currency" => currency
57
+ }
58
+
59
+ payload = payload.to_json
60
+
61
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::GET_BALANCE_ENDPOINT}", payload)
62
+ return handle_balance_status(response)
63
+ end
64
+
65
+
66
+ # method to fetch a single transfer
67
+ def fetch(reference)
68
+ base_url = rave_object.base_url
69
+ response = get_request("#{base_url}#{BASE_ENDPOINTS::FETCH_ENDPOINT}", {"seckey" => rave_object.secret_key.dup, "reference" => reference})
70
+ return handle_fetch_status(response)
71
+ end
72
+
73
+ # method to fetch all transfers
74
+ def fetch_all_transfers
75
+ base_url = rave_object.base_url
76
+ response = get_request("#{base_url}#{BASE_ENDPOINTS::FETCH_ENDPOINT}", {"seckey" => rave_object.secret_key.dup})
77
+ return handle_fetch_status(response)
78
+ end
79
+ end
@@ -0,0 +1,58 @@
1
+ require_relative "base/mobile_money_base.rb"
2
+ require 'json'
3
+
4
+ class UgandaMobileMoney < MobileMoneyBase
5
+ # method to initiate uganda mobile money transaction
6
+ def initiate_charge(data)
7
+
8
+ base_url = rave_object.base_url
9
+ hashed_secret_key = get_hashed_key
10
+ public_key = rave_object.public_key
11
+
12
+
13
+ # only update the payload with the transaction reference if it isn't already added to the payload
14
+ if !data.key?("txRef")
15
+ data.merge!({"txRef" => Util.transaction_reference_generator})
16
+ end
17
+
18
+ # only update the payload with the order reference if it isn't already added to the payload
19
+ if !data.key?("orderRef")
20
+ data.merge!({"orderRef" => Util.transaction_reference_generator})
21
+ end
22
+
23
+ data.merge!({"PBFPubKey" => public_key, "payment_type" => "mobilemoneyuganda", "country" => "NG", "is_mobile_money_ug"=> 1, "currency" => "UGX"})
24
+
25
+ required_parameters = ["amount", "email", "phonenumber", "network", "IP"]
26
+ check_passed_parameters(required_parameters, data)
27
+
28
+ encrypt_data = Util.encrypt(hashed_secret_key, data)
29
+
30
+ payload = {
31
+ "PBFPubKey" => public_key,
32
+ "client" => encrypt_data,
33
+ "alg" => "3DES-24"
34
+ }
35
+
36
+ payload = payload.to_json
37
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::CHARGE_ENDPOINT}", payload)
38
+
39
+ return handle_charge_response(response)
40
+
41
+ end
42
+
43
+ # method to verify uganda mobile money transaction
44
+ def verify_charge(txref)
45
+ base_url = rave_object.base_url
46
+
47
+ payload = {
48
+ "txref" => txref,
49
+ "SECKEY" => rave_object.secret_key.dup,
50
+ }
51
+
52
+ payload = payload.to_json
53
+
54
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::VERIFY_ENDPOINT}", payload)
55
+ return handle_verify_response(response)
56
+ end
57
+
58
+ end
@@ -0,0 +1,59 @@
1
+ require_relative "base/ussd_base.rb"
2
+ require 'json'
3
+
4
+ class Ussd < UssdBase
5
+
6
+ # method to initiate ussd transaction
7
+ def initiate_charge(data)
8
+
9
+ base_url = rave_object.base_url
10
+ hashed_secret_key = get_hashed_key
11
+ public_key = rave_object.public_key
12
+
13
+
14
+ # only update the payload with the transaction reference if it isn't already added to the payload
15
+ if !data.key?("txRef")
16
+ data.merge!({"txRef" => Util.transaction_reference_generator})
17
+ end
18
+
19
+ # only update the payload with the order reference if it isn't already added to the payload
20
+ if !data.key?("orderRef")
21
+ data.merge!({"orderRef" => Util.transaction_reference_generator})
22
+ end
23
+
24
+ data.merge!({"PBFPubKey" => public_key, "is_ussd" => "1", "payment_type" => "ussd"})
25
+
26
+ required_parameters = ["accountbank", "accountnumber", "amount", "email", "phonenumber", "IP"]
27
+ check_passed_parameters(required_parameters, data)
28
+
29
+ encrypt_data = Util.encrypt(hashed_secret_key, data)
30
+
31
+ payload = {
32
+ "PBFPubKey" => public_key,
33
+ "client" => encrypt_data,
34
+ "alg" => "3DES-24"
35
+ }
36
+
37
+ payload = payload.to_json
38
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::CHARGE_ENDPOINT}", payload)
39
+
40
+ return handle_charge_response(response, data)
41
+
42
+ end
43
+
44
+ # method to verify ussd transaction
45
+ def verify_charge(txref)
46
+ base_url = rave_object.base_url
47
+
48
+ payload = {
49
+ "txref" => txref,
50
+ "SECKEY" => rave_object.secret_key.dup,
51
+ }
52
+
53
+ payload = payload.to_json
54
+
55
+ response = post_request("#{base_url}#{BASE_ENDPOINTS::VERIFY_ENDPOINT}", payload)
56
+ return handle_verify_response(response)
57
+ end
58
+
59
+ end
@@ -0,0 +1,3 @@
1
+ module RaveRuby
2
+ VERSION = "0.1.1"
3
+ end
data/lib/rave_ruby.rb ADDED
@@ -0,0 +1,74 @@
1
+ require_relative "rave_ruby/rave_modules/base_endpoints"
2
+ require_relative "rave_ruby/rave_objects/base/base"
3
+ require_relative "rave_ruby/rave_modules/util"
4
+ require_relative "rave_ruby/rave_objects/list_banks"
5
+ require_relative "rave_ruby/rave_objects/card"
6
+ require_relative "rave_ruby/rave_objects/account"
7
+ require_relative "rave_ruby/rave_objects/transfer"
8
+ require_relative "rave_ruby/rave_objects/mpesa"
9
+ require_relative "rave_ruby/rave_objects/mobile_money"
10
+ require_relative "rave_ruby/rave_objects/uganda_mobile_money"
11
+ require_relative "rave_ruby/rave_objects/payment_plan"
12
+ require_relative "rave_ruby/rave_objects/subscription"
13
+ require_relative "rave_ruby/rave_objects/ussd"
14
+ require_relative "rave_ruby/rave_objects/preauth"
15
+ require_relative "rave_ruby/rave_objects/sub_account"
16
+ require_relative 'rave_ruby/error'
17
+
18
+
19
+ class RaveRuby
20
+
21
+ attr_accessor :public_key, :secret_key, :production, :url
22
+
23
+ # method to initialize rave object
24
+
25
+ def initialize(public_key=nil, secret_key=nil, production=false)
26
+
27
+ @public_key = public_key
28
+ @secret_key = secret_key
29
+ @production = production
30
+ rave_sandbox_url = BASE_ENDPOINTS::RAVE_SANDBOX_URL
31
+ rave_live_url = BASE_ENDPOINTS::RAVE_LIVE_URL
32
+
33
+ # set rave url to sandbox or live if we are in production or development
34
+ if production == false
35
+ @url = rave_sandbox_url
36
+ else
37
+ @url = rave_live_url
38
+ end
39
+
40
+
41
+ # check if we set our public and secret keys to the environment variable
42
+ if (public_key.nil? && secret_key.nil?)
43
+ @public_key = ENV['RAVE_PUBLIC_KEY']
44
+ @secret_key = ENV['RAVE_SECRET_KEY']
45
+ else
46
+ @public_key = public_key
47
+ @secret_key = secret_key
48
+ warn "Warning: To ensure your rave account api keys are safe, It is best to always set your keys in the environment variable"
49
+ end
50
+
51
+ # raise this error if no public key is passed
52
+ unless !@public_key.nil?
53
+ raise RaveBadKeyError, "No public key supplied and couldn't find any in environment variables. Make sure to set public key as an environment variable RAVE_PUBLIC_KEY"
54
+ end
55
+ # raise this error if invalid public key is passed
56
+ unless @public_key[0..7] == 'FLWPUBK-'
57
+ raise RaveBadKeyError, "Invalid public key #{@public_key}"
58
+ end
59
+
60
+ # raise this error if no secret key is passed
61
+ unless !@secret_key.nil?
62
+ raise RaveBadKeyError, "No secret key supplied and couldn't find any in environment variables. Make sure to set secret key as an environment variable RAVE_SECRET_KEY"
63
+ end
64
+ # raise this error if invalid secret key is passed
65
+ unless @secret_key[0..7] == 'FLWSECK-'
66
+ raise RaveBadKeyError, "Invalid secret key #{@secret_key}"
67
+ end
68
+ end
69
+
70
+ # method to return the base url
71
+ def base_url
72
+ return url
73
+ end
74
+ end
data/rave_ruby.gemspec ADDED
@@ -0,0 +1,46 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "rave_ruby/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rave_ruby"
8
+ spec.version = RaveRuby::VERSION
9
+ spec.authors = ["MaestroJolly"]
10
+ spec.email = ["jolaosoyusuf@gmail.com"]
11
+ spec.date = '2019-01-19'
12
+ spec.summary = %q{Ruby Gem For Rave Payments By Flutterwave.}
13
+ spec.description = %q{This is the official Ruby Gem For Rave Payments which includes Card, Account, Transfer, Subaccount, Subscription, Mpesa, Ghana Mobile Money, Ussd, Payment Plans, and Transfer payment methods.}
14
+ spec.homepage = "https://github.com/MaestroJolly/rave-ruby"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
21
+
22
+ spec.metadata["homepage_uri"] = spec.homepage
23
+ spec.metadata["source_code_uri"] = spec.homepage
24
+ spec.metadata["changelog_uri"] = spec.homepage
25
+ else
26
+ raise "RubyGems 2.0 or newer is required to protect against " \
27
+ "public gem pushes."
28
+ end
29
+
30
+ # Specify which files should be added to the gem when it is released.
31
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
+ end
35
+ spec.bindir = "exe"
36
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
+ spec.require_paths = ["lib"]
38
+
39
+ spec.add_development_dependency "bundler", "~> 1.17"
40
+ spec.add_development_dependency "rake", "~> 10.0"
41
+ spec.add_development_dependency "rspec", "~> 3.2"
42
+
43
+ # Dependencies
44
+ spec.required_ruby_version = ">= 2.5.3"
45
+ spec.add_runtime_dependency 'httparty', '~> 0.16.3'
46
+ end