ebanc 0.2.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/ebanc.rb +227 -0
  3. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ce3dca5e17e43b139b030a39ec2c644fad80aa80
4
+ data.tar.gz: eb7f023c7061a02acf02960b3ab6864d4c8d6b9a
5
+ SHA512:
6
+ metadata.gz: d5d89f7f2ef15c619ccd1626efb0e856edf6b7165896d24f2b2897b141d3b8520dd68f394790180a143ad1dbf0618f7b070bb62d865bea0fd74650c1e6e1b10d
7
+ data.tar.gz: 8c3fdf4825e92482a34c2f4af46b4303ba7b92be7022a960c34a914fe33ce975e4e799c410539004847c84cde64d71a0ea805e43971788248ae70d3483863b67
@@ -0,0 +1,227 @@
1
+ require 'uri'
2
+ require 'open-uri'
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'json'
6
+
7
+ class Ebanc
8
+ def initialize(api_key, gateway_id)
9
+ @api_key = api_key
10
+ @api_version = 2
11
+ @gateway_id = gateway_id
12
+ @server = 'https://' + gateway_id + '.ebanccorp.com'
13
+ @ebanc_url = @server + '/api/v' + @api_version.to_s
14
+ @use_ssl = true
15
+ @error_message = ''
16
+ end
17
+
18
+ # Class Getters and Setters
19
+
20
+ def server=(value)
21
+ @ebanc_url = value + '/api/v' + @api_version.to_s
22
+ @server = value
23
+ end
24
+
25
+ def server
26
+ @server
27
+ end
28
+
29
+ def use_ssl=(value)
30
+ @use_ssl = value
31
+ end
32
+
33
+ def use_ssl
34
+ @use_ssl
35
+ end
36
+
37
+ def api_version=(value)
38
+ @ebanc_url = @server + '/api/v' + value.to_s
39
+ @api_version = value
40
+ end
41
+
42
+ def api_version
43
+ @api_version
44
+ end
45
+
46
+ def error
47
+ @error_message
48
+ end
49
+
50
+ #--------------------------------
51
+ # API endpoints
52
+ #--------------------------------
53
+
54
+ # Customers
55
+ def customers
56
+ m_customers = query_api(@ebanc_url + '/customers')
57
+
58
+ if m_customers['customers'].length == 0
59
+ @error_message = 'No customers found'
60
+ end
61
+
62
+ m_customers['customers']
63
+ end
64
+
65
+ def create_customer(customer = {})
66
+ if customer[:first_name] && customer[:last_name] && customer[:routing_number] && customer[:account_number]
67
+ params = URI.encode_www_form([["first_name", customer[:first_name]], ["last_name", customer[:last_name]], ["routing_number", customer[:routing_number]], ["account_number", customer[:account_number]]])
68
+
69
+ customer = query_api(@ebanc_url + '/customers', 'post', params)
70
+
71
+ if customer['base']
72
+ @error_message = customer['base'].first
73
+ return false
74
+ else
75
+ return customer
76
+ end
77
+ else
78
+ @error_message = 'Not all needed fields were included'
79
+ return false
80
+ end
81
+ end
82
+
83
+ def update_customer(customer = {})
84
+ if customer[:uuid] && customer[:first_name] && customer[:last_name]
85
+ params = URI.encode_www_form([["first_name", customer[:first_name]], ["last_name", customer[:last_name]], ["routing_number", customer[:routing_number]], ["account_number", customer[:account_number]]])
86
+
87
+ if customer[:routing_number]
88
+ params = params + '&' + URI.encode_www_form([["routing_number", customer[:routing_number]]])
89
+ end
90
+
91
+ if customer[:account_number]
92
+ params = params + '&' + URI.encode_www_form([["account_number", customer[:account_number]]])
93
+ end
94
+
95
+ if customer(customer[:uuid])
96
+ customer = query_api(@ebanc_url + '/customers/' + customer[:uuid], 'patch', params)
97
+ return customer
98
+ else
99
+ return false
100
+ end
101
+ else
102
+ @error_message = 'Not all needed fields were included'
103
+ return false
104
+ end
105
+ end
106
+
107
+ def customer(uuid)
108
+ m_customer = query_api(@ebanc_url + '/customers/' + uuid)
109
+
110
+ if m_customer.length == 0
111
+ @error_message = 'Customer not found'
112
+ return false
113
+ else
114
+ return m_customer
115
+ end
116
+ end
117
+
118
+ # Transactions
119
+ def transactions
120
+ m_transactions = query_api(@ebanc_url + '/transactions')
121
+
122
+ if m_transactions['transactions'].length == 0
123
+ @error_message = 'No transactions found'
124
+ end
125
+
126
+ m_transactions['transactions']
127
+ end
128
+
129
+ def create_transaction(transaction = {})
130
+ #if we are creating this transaction by passing in the information
131
+ if transaction[:first_name] && transaction[:last_name] && transaction[:routing_number] && transaction[:account_number] && transaction[:amount]
132
+ params = URI.encode_www_form([["first_name", transaction[:first_name]], ["last_name", transaction[:last_name]], ["routing_number", transaction[:routing_number]], ["account_number", transaction[:account_number]], ["amount", transaction[:amount]]])
133
+
134
+ if transaction[:category]
135
+ params = params + '&' + URI.encode_www_form([["category", transaction[:category]]])
136
+ end
137
+
138
+ if transaction[:memo]
139
+ params = params + '&' + URI.encode_www_form([["memo", transaction[:memo]]])
140
+ end
141
+
142
+ m_transation = query_api(@ebanc_url + '/transactions', 'post', params)
143
+
144
+ if m_transation['base']
145
+ @error_message = m_transation['base'].first
146
+ return false
147
+ else
148
+ return m_transation
149
+ end
150
+ else
151
+ @error_message = 'Not all needed fields were included'
152
+ return false
153
+ end
154
+ end
155
+
156
+ def create_transaction_from_customer(transaction = {})
157
+ #if we are creating this transaction by passing in the information
158
+ if transaction[:customer_uuid] && transaction[:amount]
159
+ params = URI.encode_www_form([["customer_uuid", transaction[:customer_uuid]], ["amount", transaction[:amount]]])
160
+ params = 'customer_uuid=' + transaction[:customer_uuid] + '&amount=' + transaction[:amount]
161
+
162
+ if transaction[:category]
163
+ params = params + '&' + URI.encode_www_form([["category", transaction[:category]]])
164
+ end
165
+
166
+ if transaction[:memo]
167
+ params = params + '&' + URI.encode_www_form([["memo", transaction[:memo]]])
168
+ end
169
+
170
+ m_transation = query_api(@ebanc_url + '/transactions', 'post', params)
171
+
172
+ if m_transation['base']
173
+ @error_message = m_transation['base'].first
174
+ return false
175
+ else
176
+ return m_transation
177
+ end
178
+ else
179
+ @error_message = 'Not all needed fields were included'
180
+ return false
181
+ end
182
+ end
183
+
184
+ def transaction(uuid)
185
+ m_transaction = query_api(@ebanc_url + '/transactions/' + uuid)
186
+
187
+ if m_transaction.length == 0
188
+ @error_message = 'Transaction not found'
189
+ return false
190
+ else
191
+ return m_transaction
192
+ end
193
+ end
194
+
195
+ #--------------------------------
196
+ # Utility Methods
197
+ #--------------------------------
198
+ private
199
+
200
+ def query_api(url, req_type='get', fields=nil)
201
+ @error_message = '';
202
+
203
+ uri = URI.parse(url)
204
+ https = Net::HTTP.new(uri.host,uri.port)
205
+ https.use_ssl = @use_ssl
206
+ req = nil
207
+
208
+ if req_type == 'patch'
209
+ req = Net::HTTP::Patch.new(uri.path, initheader = {'Authorization' => "Token token=\"" + @api_key + "\""})
210
+ elsif req_type == 'post'
211
+ req = Net::HTTP::Post.new(uri.path, initheader = {'Authorization' => "Token token=\"" + @api_key + "\""})
212
+ else
213
+ req = Net::HTTP::Get.new(uri.path, initheader = {'Authorization' => "Token token=\"" + @api_key + "\""})
214
+ end
215
+
216
+ if fields
217
+ req.body = fields
218
+ end
219
+ res = https.request(req)
220
+
221
+ if res.code == 401
222
+ raise "eBanc API access denied"
223
+ end
224
+
225
+ JSON.parse res.body
226
+ end
227
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ebanc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Kaske
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: eBanc is the best way to send and recieve ACH transactions. See more
14
+ at http://ebanccorp.com/
15
+ email: kevinkaske@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/ebanc.rb
21
+ homepage: http://ebanccorp.com/api
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.2.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Ruby bindings for the eBanc API
45
+ test_files: []