nitro_pay 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/lib/generators/nitro_pay/install_generator.rb +16 -0
- data/lib/generators/templates/nitro_pay.rb +39 -0
- data/lib/nitro_pay.rb +91 -3
- data/lib/nitro_pay/array.rb +6 -0
- data/lib/nitro_pay/config/enums/brands.yml +45 -0
- data/lib/nitro_pay/config/enums/currencies.yml +35 -0
- data/lib/nitro_pay/config/enums/payment_methods.yml +20 -0
- data/lib/nitro_pay/config/enums/recurrence_periods.yml +18 -0
- data/lib/nitro_pay/config/enums/transaction_codes.yml +31 -0
- data/lib/nitro_pay/config/proxy.example.yml +4 -0
- data/lib/nitro_pay/connection.rb +173 -0
- data/lib/nitro_pay/currency.rb +76 -0
- data/lib/nitro_pay/hash.rb +55 -0
- data/lib/nitro_pay/status.rb +29 -0
- data/lib/nitro_pay/string.rb +17 -0
- data/lib/nitro_pay/transaction.rb +123 -0
- data/lib/nitro_pay/version.rb +5 -2
- data/modeling/API Routes.png +0 -0
- data/modeling/Sequence - APIClient.asta +0 -0
- data/modeling/Structure - ClassDiagram.asta +0 -0
- data/modeling/WorkFlow - LocalGEM.asta +0 -0
- data/modeling/WorkFlow - LocalGEM.png +0 -0
- data/modeling/useful_files/card_operators/cielo/test_cards.txt +11 -0
- data/modeling/useful_files/card_operators/cielo/test_keys.txt +3 -0
- data/spec/file_helper.rb +42 -0
- data/spec/helpers.rb +56 -0
- data/spec/nitro_pay/conversions_spec.rb +36 -0
- data/spec/nitro_pay/currency_spec.rb +154 -0
- data/spec/nitro_pay/status_spec.rb +15 -0
- data/spec/nitro_pay/transaction_spec.rb +584 -0
- data/spec/spec_helper.rb +20 -0
- metadata +39 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7599ad547e37aee9ee05248a4c2b0d0a3f4a2fcc
|
4
|
+
data.tar.gz: c37529e921e9491a13276368200b0e5edf39bfd0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0bde7dfa82a7fe059d23418390af5dc50eb16ad8c559910a8fcbea1038cd90b445d6bb19ab8b710f477eb5678df415fb493d8e8beeb5986402e7de8822efa58
|
7
|
+
data.tar.gz: eb1e0b6cbe9bc95d25f5cc1afeeb5fcfa6db939ade3e29de7f4c88393fc8ff6c272efb182a9783b887051786d2b787886e348c1ee8b7e8cfd975286a0d5f6ffe
|
data/.gitignore
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
module NitroPay
|
3
|
+
module Generators
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
5
|
+
source_root File.expand_path('../../templates', __FILE__)
|
6
|
+
|
7
|
+
desc 'It automatically create it initializer NitroPay rails app config'
|
8
|
+
|
9
|
+
def copy_initializer
|
10
|
+
template 'nitro_pay.rb', 'config/initializers/nitro_pay.rb'
|
11
|
+
puts 'Check your config/initializers/nitro_pay.rb & read it comments'.colorize(:light_yellow)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# TODO if using Rails 4 or greater use copy and paste on your secret.yml:
|
4
|
+
# nitro_pay:
|
5
|
+
# app_id: # TODO your app_id
|
6
|
+
# app_secret_key: # TODO your app_secret_key
|
7
|
+
# IMPORTANT: remember that test & development is not necessary if using test_env, but if you want your test app remember to use you test_app id & secret
|
8
|
+
|
9
|
+
# It automatic the NitroPay to it TestEnv & ProductionEnv
|
10
|
+
if Rails.env.development? || Rails.env.test?
|
11
|
+
# TODO if using Rails 3 or older & not using the TEST_ENV, put here your TEST app_id & your secret_key
|
12
|
+
NitroPay.app_id = ''
|
13
|
+
NitroPay.secret_key = ''
|
14
|
+
|
15
|
+
# TODO: Uncomment test_env if you want to test using NitroPay default & global app
|
16
|
+
# NitroPay.test_env = true
|
17
|
+
# TODO: Uncomment debugger if you have an NitroPay instance on your machine
|
18
|
+
# NitroPay.debug = true
|
19
|
+
elsif Rails.env.production?
|
20
|
+
# TODO if using Rails 3 or older, put here your PRODUCTION app_id & your secret_key
|
21
|
+
NitroPay.app_id = ''
|
22
|
+
NitroPay.secret_key = ''
|
23
|
+
|
24
|
+
# For production remember to keep it false or just remove it
|
25
|
+
NitroPay.debug = false
|
26
|
+
NitroPay.test_env = false
|
27
|
+
end
|
28
|
+
|
29
|
+
# Get your App config if your not using TEST_ENV nor DEBUGGER
|
30
|
+
if (NitroPay.test_env.nil? && NitroPay.debug.nil?) || (NitroPay.test_env == false && NitroPay.debug == false)
|
31
|
+
if Rails.version[0].to_i >= 4
|
32
|
+
begin
|
33
|
+
NitroPay.app_id = Rails.application.secrets.NitroPay['app_id']
|
34
|
+
NitroPay.secret_key = Rails.application.secrets.NitroPay['app_secret_key']
|
35
|
+
rescue
|
36
|
+
p 'Check your Secret.yml... Please add on it your Rent$ app_id & app_secret_key'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/nitro_pay.rb
CHANGED
@@ -1,5 +1,93 @@
|
|
1
|
-
|
1
|
+
# Libs/Gems or Ruby classes
|
2
|
+
require 'json'
|
3
|
+
require 'curl'
|
4
|
+
require 'yaml'
|
5
|
+
require 'rest_client'
|
6
|
+
require 'bigdecimal'
|
7
|
+
require 'bigdecimal/util'
|
8
|
+
|
9
|
+
# Overrides
|
10
|
+
require 'nitro_pay/hash'
|
11
|
+
require 'nitro_pay/array'
|
12
|
+
|
13
|
+
# Gem files
|
14
|
+
[:version, :connection, :status, :transaction, :currency, :string].each { |lib| require "nitro_pay/#{lib}" }
|
2
15
|
|
3
16
|
module NitroPay
|
4
|
-
#
|
5
|
-
|
17
|
+
# Module attr
|
18
|
+
@@enum = nil
|
19
|
+
|
20
|
+
# Production settings
|
21
|
+
@@app_id = nil
|
22
|
+
@@secret_key = nil
|
23
|
+
|
24
|
+
# Tests settings
|
25
|
+
@@proxy_yml = nil
|
26
|
+
@@test_env = nil
|
27
|
+
@@debug = nil
|
28
|
+
|
29
|
+
def self.proxy_yml
|
30
|
+
@@proxy_yml = NitroPay.get_proxy_from_yml if @@proxy_yml.nil?
|
31
|
+
@@proxy_yml
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.proxy
|
35
|
+
return nil if NitroPay.proxy_yml.nil? || NitroPay.proxy_yml.empty?
|
36
|
+
"http://#{NitroPay.proxy_yml[:login]}:#{NitroPay.proxy_yml[:password]}@#{NitroPay.proxy_yml[:host]}:#{NitroPay.proxy_yml[:port]}/"
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.app_id=(app_id)
|
40
|
+
@@app_id = app_id
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.app_id
|
44
|
+
@@app_id
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.secret_key=(secret_key)
|
48
|
+
@@secret_key = secret_key
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.secret_key
|
52
|
+
@@secret_key
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.test_env
|
56
|
+
@@test_env
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.test_env=(test_env)
|
60
|
+
@@test_env = test_env
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.debug
|
64
|
+
@@debug
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.debug=(debug)
|
68
|
+
@@debug = debug
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.get_proxy_from_yml
|
72
|
+
yml = YAML::load_file(File.join(File.dirname(File.expand_path(__FILE__)), 'nitro_pay/config/proxy.yml'))
|
73
|
+
!yml.nil? || yml.is_a?(Hash) ? yml.it_keys_to_sym : {} if yml
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.enum
|
77
|
+
enum = {}
|
78
|
+
return @@enum unless @@enum.nil?
|
79
|
+
|
80
|
+
enum = enum.merge load_yml('brands.yml')
|
81
|
+
enum = enum.merge load_yml('currencies.yml')
|
82
|
+
enum = enum.merge load_yml('payment_methods.yml')
|
83
|
+
enum = enum.merge load_yml('recurrence_periods.yml')
|
84
|
+
enum = enum.merge load_yml('transaction_codes.yml')
|
85
|
+
|
86
|
+
enum = enum.it_keys_to_sym
|
87
|
+
@@enum = enum
|
88
|
+
end
|
89
|
+
|
90
|
+
def self.load_yml(file_name)
|
91
|
+
YAML::load_file(File.join(File.dirname(File.expand_path(__FILE__)), 'nitro_pay/config/enums/' + file_name))
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
brands:
|
2
|
+
# SampleObj
|
3
|
+
- id: 0
|
4
|
+
name: Nil
|
5
|
+
username: nil
|
6
|
+
|
7
|
+
# VISA
|
8
|
+
- id: 1
|
9
|
+
name: VISA
|
10
|
+
username: visa
|
11
|
+
|
12
|
+
# MasterCard
|
13
|
+
- id: 2
|
14
|
+
name: MasterCard
|
15
|
+
username: mastercard
|
16
|
+
|
17
|
+
# Diners Club
|
18
|
+
- id: 3
|
19
|
+
name: Diners Club
|
20
|
+
username: diners
|
21
|
+
|
22
|
+
# Discover
|
23
|
+
- id: 4
|
24
|
+
name: Discover
|
25
|
+
username: discover
|
26
|
+
|
27
|
+
# Elo
|
28
|
+
- id: 5
|
29
|
+
name: Elo
|
30
|
+
username: elo
|
31
|
+
|
32
|
+
# American Express
|
33
|
+
- id: 6
|
34
|
+
name: American Express
|
35
|
+
username: amex
|
36
|
+
|
37
|
+
# JCB
|
38
|
+
- id: 7
|
39
|
+
name: JCB
|
40
|
+
username: jcb
|
41
|
+
|
42
|
+
# Aura
|
43
|
+
- id: 8
|
44
|
+
name: Aura
|
45
|
+
username: aura
|
@@ -0,0 +1,35 @@
|
|
1
|
+
currencies:
|
2
|
+
# SampleObj
|
3
|
+
- id: 0
|
4
|
+
name: Nil
|
5
|
+
acronym: nil$
|
6
|
+
iso_code: NIL
|
7
|
+
iso_number: 000
|
8
|
+
|
9
|
+
# Real
|
10
|
+
- id: 1
|
11
|
+
name: Real
|
12
|
+
acronym: R$
|
13
|
+
iso_code: BRL
|
14
|
+
iso_number: 986
|
15
|
+
|
16
|
+
# Euro
|
17
|
+
- id: 2
|
18
|
+
name: Euro
|
19
|
+
acronym: €
|
20
|
+
iso_code: EUR
|
21
|
+
iso_number: 978
|
22
|
+
|
23
|
+
# US Dollar
|
24
|
+
- id: 3
|
25
|
+
name: US Dollar
|
26
|
+
acronym: US$
|
27
|
+
iso_code: USD
|
28
|
+
iso_number: 840
|
29
|
+
|
30
|
+
# CAD Dollar
|
31
|
+
- id: 4
|
32
|
+
name: CAD Dollar
|
33
|
+
acronym: CAD$
|
34
|
+
iso_code: CAD
|
35
|
+
iso_number: 124
|
@@ -0,0 +1,20 @@
|
|
1
|
+
payment_methods:
|
2
|
+
# SampleObj
|
3
|
+
- id: 0
|
4
|
+
name: Nil
|
5
|
+
|
6
|
+
# Credit
|
7
|
+
- id: 1
|
8
|
+
name: Credit
|
9
|
+
|
10
|
+
# Debit
|
11
|
+
- id: 2
|
12
|
+
name: Debit
|
13
|
+
|
14
|
+
# Installments shop
|
15
|
+
- id: 3
|
16
|
+
name: Installments shop
|
17
|
+
|
18
|
+
# Installments administrator
|
19
|
+
- id: 4
|
20
|
+
name: Installments administrator
|
@@ -0,0 +1,31 @@
|
|
1
|
+
transaction_code:
|
2
|
+
0:
|
3
|
+
status: pending
|
4
|
+
msg: Transação Criada
|
5
|
+
1:
|
6
|
+
status: pending
|
7
|
+
msg: Transação em Andamento
|
8
|
+
2:
|
9
|
+
status: pending
|
10
|
+
msg: Transação Autenticada
|
11
|
+
3:
|
12
|
+
status: error
|
13
|
+
msg: Transação não Autenticada
|
14
|
+
4:
|
15
|
+
status: pending
|
16
|
+
msg: Transação Autorizada
|
17
|
+
5:
|
18
|
+
status: error
|
19
|
+
msg: Transação não Autorizada
|
20
|
+
6:
|
21
|
+
status: charged
|
22
|
+
msg: Transação Capturada
|
23
|
+
9:
|
24
|
+
status: error
|
25
|
+
msg: Transação Cancelada
|
26
|
+
10:
|
27
|
+
status: pending
|
28
|
+
msg: Transação em Autenticação
|
29
|
+
12:
|
30
|
+
status: pending
|
31
|
+
msg: Transação em Cancelamento
|
@@ -0,0 +1,173 @@
|
|
1
|
+
module NitroPay
|
2
|
+
class Connection
|
3
|
+
# Attrs
|
4
|
+
attr_accessor :auth
|
5
|
+
attr_accessor :path
|
6
|
+
attr_accessor :domain
|
7
|
+
attr_accessor :protocol
|
8
|
+
attr_accessor :end_point
|
9
|
+
attr_accessor :api_version
|
10
|
+
attr_accessor :recurrent_rid
|
11
|
+
attr_accessor :request_params
|
12
|
+
attr_accessor :end_point_versioned
|
13
|
+
|
14
|
+
# Constructor
|
15
|
+
def initialize(params = {})
|
16
|
+
# An work around added to prevent a lot of changes
|
17
|
+
params = params.merge({test_env:true}) if NitroPay.test_env
|
18
|
+
params = params.merge({debug:true}) if NitroPay.debug
|
19
|
+
|
20
|
+
# Static part
|
21
|
+
self.request_params = {transaction:params}
|
22
|
+
setup_config
|
23
|
+
self.domain = 'pay.nitrostart.me'
|
24
|
+
|
25
|
+
# If using test or Debug it is not production
|
26
|
+
if params[:debug] || params[:test]
|
27
|
+
self.protocol = 'http'
|
28
|
+
self.domain = 'pay.dev:4000'
|
29
|
+
else
|
30
|
+
# TODO when add SSL to Production replace http to https
|
31
|
+
self.protocol = 'http'
|
32
|
+
self.domain = 'pay.nitrostart.me'
|
33
|
+
end
|
34
|
+
|
35
|
+
self.api_version = 'v1'
|
36
|
+
self.end_point = "#{self.protocol}://#{self.domain}/api"
|
37
|
+
self.end_point_versioned = "#{self.protocol}://#{self.domain}/api/#{self.api_version}"
|
38
|
+
|
39
|
+
# Dynamic env
|
40
|
+
setup_default_app if params[:test_env]
|
41
|
+
setup_attrs(params)
|
42
|
+
self.recurrent_rid = params[:rid] unless params[:rid].nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
# Full URL for the last request
|
46
|
+
def url_requested
|
47
|
+
"#{self.end_point}/#{self.api_version}/#{self.path}"
|
48
|
+
end
|
49
|
+
|
50
|
+
# GET http
|
51
|
+
def get_request
|
52
|
+
RestClient.get self.url_requested
|
53
|
+
end
|
54
|
+
|
55
|
+
# GET json
|
56
|
+
def get_json_request
|
57
|
+
resp = RestClient.get(self.url_requested)
|
58
|
+
to_hash_with_symbols(resp).it_keys_to_sym
|
59
|
+
end
|
60
|
+
|
61
|
+
# POST http
|
62
|
+
def post_request
|
63
|
+
RestClient.post self.url_requested, self.request_params
|
64
|
+
end
|
65
|
+
|
66
|
+
# POST json
|
67
|
+
def post_json_request
|
68
|
+
resp = RestClient.post(self.url_requested, self.request_params)
|
69
|
+
to_hash_with_symbols(resp)
|
70
|
+
end
|
71
|
+
|
72
|
+
# PUT http
|
73
|
+
def put_request
|
74
|
+
RestClient.put self.url_requested, self.request_params
|
75
|
+
end
|
76
|
+
|
77
|
+
# PUT json
|
78
|
+
def put_json_request
|
79
|
+
resp = RestClient.put(self.url_requested, self.request_params)
|
80
|
+
to_hash_with_symbols(resp)
|
81
|
+
end
|
82
|
+
|
83
|
+
# DELETE http
|
84
|
+
def delete_request
|
85
|
+
auth = self.request_params[:auth]
|
86
|
+
RestClient.delete self.url_requested, app_id:auth[:app_id], secret_key:auth[:secret_key]
|
87
|
+
end
|
88
|
+
|
89
|
+
# DELETE json
|
90
|
+
def delete_json_request
|
91
|
+
auth = self.request_params[:auth]
|
92
|
+
resp = RestClient.delete self.url_requested, auth_app_id:auth[:app_id], auth_secret_key:auth[:secret_key]
|
93
|
+
to_hash_with_symbols(resp)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Callbacks
|
97
|
+
protected
|
98
|
+
# Config Attrs
|
99
|
+
def setup_config
|
100
|
+
self.auth = {app_id:NitroPay.app_id, secret_key:NitroPay.secret_key}
|
101
|
+
self.request_params.merge!(auth:self.auth)
|
102
|
+
end
|
103
|
+
|
104
|
+
# SetUp a default app
|
105
|
+
def setup_default_app
|
106
|
+
# setup test_app path
|
107
|
+
self.path = 'global_app'
|
108
|
+
|
109
|
+
# Get the App & setup config
|
110
|
+
app = get_json_request[:app]
|
111
|
+
NitroPay.app_id = app[:id]
|
112
|
+
NitroPay.secret_key = app[:secret]
|
113
|
+
|
114
|
+
# Get the GlobalRecurrent & setup/config
|
115
|
+
self.path = 'global_subscription'
|
116
|
+
recurrence = get_json_request
|
117
|
+
self.recurrent_rid = recurrence[:rid]
|
118
|
+
|
119
|
+
return puts 'Please run: rails g nitro_pay:install' if NitroPay.app_id.nil? || NitroPay.secret_key.nil?
|
120
|
+
self.auth = {app_id:NitroPay.app_id, secret_key:NitroPay.secret_key}
|
121
|
+
self.request_params.merge!(auth:self.auth)
|
122
|
+
end
|
123
|
+
|
124
|
+
# SetUp all attrs
|
125
|
+
def setup_attrs(params)
|
126
|
+
# Dynamic part
|
127
|
+
params.each do |key, value|
|
128
|
+
next unless key.to_s.index('[]').nil?
|
129
|
+
self.class.__send__(:attr_accessor, :"#{key}")
|
130
|
+
self.__send__("#{key}=", value)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# HTTP requests must have '[]' on it key name to send Array
|
135
|
+
def custom_http_params
|
136
|
+
setup_format_and_validators
|
137
|
+
|
138
|
+
return if self.sold_items.nil?
|
139
|
+
self.sold_items.each_with_index do |sold_item, i|
|
140
|
+
self.request_params[:transaction]["sold_items[#{i}]"] = sold_item
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# Validate params to prevent errors like BAD Request & format values like value to Operator format
|
145
|
+
def setup_format_and_validators
|
146
|
+
validate_operator_format
|
147
|
+
end
|
148
|
+
|
149
|
+
# if necessary convert amount to operator value
|
150
|
+
def validate_operator_format
|
151
|
+
# prevent fatal error
|
152
|
+
return if self.amount.nil?
|
153
|
+
|
154
|
+
# aux vars
|
155
|
+
amount_str = self.amount.to_s
|
156
|
+
format_regex = /[.,]/
|
157
|
+
|
158
|
+
# if nil (it is not formatted, so it is not necessary to convert it format)
|
159
|
+
unless amount_str.match(format_regex).nil?
|
160
|
+
return if self.request_params.nil? || self.request_params[:transaction].nil?
|
161
|
+
self.amount = NitroPay::Currency.to_operator_str(self.amount)
|
162
|
+
self.request_params[:transaction][:amount] = self.amount
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# Return the JSON in a Hash with it keys in symbols
|
167
|
+
def to_hash_with_symbols(json)
|
168
|
+
hashed = JSON.parse(json)
|
169
|
+
hashed.is_a?(Array) ? hashed.each_with_index { |hash, i| hashed[i] = hash.it_keys_to_sym } : hashed.it_keys_to_sym
|
170
|
+
hashed
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|