afterbanks-api-ruby 0.2.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 19bc05050d36cdf980cc1d2ab883c6b82f4ed4622fa959cebaa80099b5a40716
4
+ data.tar.gz: a5ffd80b0e31ee743d903564909ba692839c34a390eab12bcec6948719b56b6b
5
+ SHA512:
6
+ metadata.gz: 89335c1312001084d537c486f800d3d46fc252b80a634d970b68120210888cbc2e9ba66ee80f331da86cd813c8362081c25f4c91da8501bf6e0157970a4aea51
7
+ data.tar.gz: e97843bdfd06e003e5ba6136e8e237084e5b0d43c0ad347c221f42586936772c099bf2a2cf59ec57a8363db0b6b600304e21ad0f36d629f83fba70de44f5719c
@@ -0,0 +1,40 @@
1
+ version: 2.1
2
+
3
+ executors:
4
+ gem-executor:
5
+ working_directory: ~/tmp/gem
6
+ docker:
7
+ - image: circleci/ruby:2.4.1
8
+ environment:
9
+ TZ: "Europe/Madrid"
10
+
11
+ jobs:
12
+ build-test-gem:
13
+ executor: gem-executor
14
+ steps:
15
+ - checkout
16
+
17
+ - run:
18
+ name: Update bundler
19
+ command: gem install bundler -v 1.17.3
20
+
21
+ - restore_cache:
22
+ keys:
23
+ - afterbanks-api-ruby-bundle-v2-{{ checksum "Gemfile.lock" }}
24
+ - afterbanks-api-ruby-bundle-v2-
25
+
26
+ - run: bundle install
27
+
28
+ - save_cache:
29
+ key: afterbanks-api-ruby-bundle-v2-{{ checksum "Gemfile.lock" }}
30
+ paths:
31
+ - vendor/bundle
32
+
33
+ - run:
34
+ name: Run rspec
35
+ command: bundle exec rspec spec/
36
+
37
+ workflows:
38
+ build-test-gem:
39
+ jobs:
40
+ - build-test-gem
@@ -0,0 +1 @@
1
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in afterbanks.gemspec
4
+ gemspec
@@ -0,0 +1,65 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ afterbanks-api-ruby (0.2.1)
5
+ rest-client (~> 2.0.2)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ addressable (2.7.0)
11
+ public_suffix (>= 2.0.2, < 5.0)
12
+ crack (0.4.3)
13
+ safe_yaml (~> 1.0.0)
14
+ diff-lcs (1.3)
15
+ domain_name (0.5.20190701)
16
+ unf (>= 0.0.5, < 1.0.0)
17
+ hashdiff (1.0.0)
18
+ http-cookie (1.0.3)
19
+ domain_name (~> 0.5)
20
+ mime-types (3.3.1)
21
+ mime-types-data (~> 3.2015)
22
+ mime-types-data (3.2019.1009)
23
+ netrc (0.11.0)
24
+ public_suffix (4.0.1)
25
+ rake (13.0.1)
26
+ rest-client (2.0.2)
27
+ http-cookie (>= 1.0.2, < 2.0)
28
+ mime-types (>= 1.16, < 4.0)
29
+ netrc (~> 0.8)
30
+ rspec (3.9.0)
31
+ rspec-core (~> 3.9.0)
32
+ rspec-expectations (~> 3.9.0)
33
+ rspec-mocks (~> 3.9.0)
34
+ rspec-core (3.9.0)
35
+ rspec-support (~> 3.9.0)
36
+ rspec-expectations (3.9.0)
37
+ diff-lcs (>= 1.2.0, < 2.0)
38
+ rspec-support (~> 3.9.0)
39
+ rspec-mocks (3.9.0)
40
+ diff-lcs (>= 1.2.0, < 2.0)
41
+ rspec-support (~> 3.9.0)
42
+ rspec-support (3.9.0)
43
+ safe_yaml (1.0.5)
44
+ timecop (0.9.1)
45
+ unf (0.1.4)
46
+ unf_ext
47
+ unf_ext (0.0.7.6)
48
+ webmock (3.7.6)
49
+ addressable (>= 2.3.6)
50
+ crack (>= 0.3.2)
51
+ hashdiff (>= 0.4.0, < 2.0.0)
52
+
53
+ PLATFORMS
54
+ ruby
55
+
56
+ DEPENDENCIES
57
+ afterbanks-api-ruby!
58
+ bundler
59
+ rake
60
+ rspec
61
+ timecop
62
+ webmock
63
+
64
+ BUNDLED WITH
65
+ 1.17.3
@@ -0,0 +1,51 @@
1
+ # Ruby client for Afterbanks API
2
+
3
+ [![CircleCI](https://circleci.com/gh/quipuapp/afterbanks-api-ruby.svg?style=shield)](https://circleci.com/gh/quipuapp/afterbanks-api-ruby)
4
+
5
+ This is a Ruby client for the Afterbanks' API
6
+
7
+ Installation
8
+ ---------
9
+
10
+ Install the gem (`gem install afterbanks-api-ruby`) or include it in your Gemfile and `bundle`.
11
+
12
+ Configuration
13
+ ---------
14
+
15
+ Just set the service key by doing this:
16
+
17
+ ```ruby
18
+ Afterbanks.servicekey = 'yourservicekey'
19
+ ```
20
+
21
+ Or, if you use it in a Rails application, create an initializer with this content:
22
+
23
+ ```ruby
24
+ require 'afterbanks'
25
+
26
+ Afterbanks.configure do |config|
27
+ config.servicekey = 'yourservicekey'
28
+ end
29
+ ```
30
+
31
+ You can set a `logger` as well.
32
+
33
+ Changelog
34
+ ---------
35
+
36
+ * v.0.2.1 Better naming for banks
37
+ * v.0.2.0 Allow adding an (opt-in) random parameter to Afterbanks::Account.list to avoid caching
38
+ * v.0.1.1 Fix rake security issue and remove specific Ruby version dependency.
39
+ * v.0.1.0 First vull version, including resource wrapping (for banks, accounts, transactions and the user) and separate exceptions for each different code.
40
+
41
+ TODO
42
+ ----
43
+
44
+ * Full usage for each resource
45
+ * Proper explanation of the `Afterbanks:Error` and its subclasses
46
+
47
+ About Afterbanks
48
+ ------------
49
+
50
+ * [Public site](https://www.afterbanks.com)
51
+ * [Documentation](https://app.swaggerhub.com/apis/Afterbanks/afterbanks-api-extendida)
@@ -0,0 +1,8 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core'
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'afterbanks/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "afterbanks-api-ruby"
8
+ spec.version = Afterbanks::VERSION
9
+ spec.authors = ["Albert Bellonch"]
10
+ spec.email = ["albert@getquipu.com"]
11
+
12
+ spec.summary = "Ruby client for the Afterbanks' API"
13
+ spec.homepage = "https://getquipu.com"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
16
+ f.match(%r{^(test|spec|features)/})
17
+ end
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "rest-client", "~> 2.0.2"
23
+
24
+ spec.add_development_dependency "bundler"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec"
27
+ spec.add_development_dependency "timecop"
28
+ spec.add_development_dependency "webmock"
29
+ end
@@ -0,0 +1,12 @@
1
+ require 'afterbanks/version'
2
+ require 'afterbanks/configuration'
3
+ require 'afterbanks/base'
4
+ require 'afterbanks/error'
5
+ require 'afterbanks/resource'
6
+ require 'afterbanks/response'
7
+ require 'afterbanks/collection'
8
+
9
+ require 'afterbanks/resources/user'
10
+ require 'afterbanks/resources/bank'
11
+ require 'afterbanks/resources/account'
12
+ require 'afterbanks/resources/transaction'
@@ -0,0 +1,128 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ module Afterbanks
5
+ class << self
6
+ attr_accessor :configuration
7
+
8
+ def configuration
9
+ @configuration ||= Configuration.new
10
+ end
11
+
12
+ def configure
13
+ yield(configuration)
14
+ end
15
+
16
+ def api_call(method:, path:, params: {})
17
+ url = 'https://api.afterbanks.com' + path
18
+
19
+ request_params = { method: method, url: url }
20
+
21
+ if method == :post
22
+ request_params.merge!(payload: params)
23
+ else
24
+ request_params.merge!(headers: { params: params })
25
+ end
26
+
27
+ response = begin
28
+ RestClient::Request.execute(request_params)
29
+ rescue RestClient::BadRequest, RestClient::ExpectationFailed => bad_request
30
+ bad_request.response
31
+ end
32
+
33
+ debug_id = response.headers[:debug_id]
34
+
35
+ log_request(
36
+ method: method,
37
+ url: url,
38
+ params: params,
39
+ debug_id: debug_id
40
+ )
41
+
42
+ response_body = JSON.parse(response.body)
43
+
44
+ treat_errors_if_any(
45
+ response_body: response_body,
46
+ debug_id: debug_id
47
+ )
48
+
49
+ [response_body, debug_id]
50
+ end
51
+
52
+ def log_request(method:, url:, params: {}, debug_id: nil)
53
+ now = Time.now
54
+
55
+ log_message(message: "")
56
+ log_message(message: "=> #{method.upcase} #{url}")
57
+
58
+ log_message(message: "* Time: #{now}")
59
+ log_message(message: "* Timestamp: #{now.to_i}")
60
+ log_message(message: "* Debug ID: #{debug_id || 'none'}")
61
+
62
+ if params.any?
63
+ log_message(message: "* Params")
64
+ params.each do |key, value|
65
+ safe_value = if %w{servicekey user pass pass2}.include?(key.to_s)
66
+ "<masked>"
67
+ else
68
+ value
69
+ end
70
+
71
+ log_message(message: "#{key}: #{safe_value}")
72
+ end
73
+ else
74
+ log_message(message: "* No params")
75
+ end
76
+ end
77
+
78
+ def log_message(message: nil)
79
+ return if message.nil?
80
+
81
+ logger = Afterbanks.configuration.logger
82
+ return if logger.nil?
83
+
84
+ logger.info(message)
85
+ end
86
+
87
+ private
88
+
89
+ def treat_errors_if_any(response_body:, debug_id:)
90
+ return unless response_body.is_a?(Hash)
91
+
92
+ code = response_body['code']
93
+ message = response_body['message']
94
+ additional_info = response_body['additional_info']
95
+
96
+ error_info = { message: message, debug_id: debug_id }
97
+
98
+ case code
99
+ when 1
100
+ raise GenericError.new(error_info)
101
+ when 2
102
+ raise ServiceUnavailableTemporarilyError.new(error_info)
103
+ when 3
104
+ raise ConnectionDataError.new(error_info)
105
+ when 4
106
+ raise AccountIdDoesNotExistError.new(error_info)
107
+ when 5
108
+ raise CutConnectionError.new(error_info)
109
+ when 6
110
+ raise HumanActionNeededError.new(error_info)
111
+ when 50
112
+ unless additional_info
113
+ raise MissingParameterError.new(error_info)
114
+ end
115
+
116
+ error_info.merge!(additional_info: additional_info)
117
+
118
+ if additional_info['session_id']
119
+ raise TwoStepAuthenticationError.new(error_info)
120
+ else
121
+ raise AccountIdNeededError.new(error_info)
122
+ end
123
+ end
124
+
125
+ nil
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,9 @@
1
+ module Afterbanks
2
+ class Collection < Array
3
+ def initialize(response, item_klass)
4
+ response.each do |item|
5
+ self << item_klass.new(item)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ module Afterbanks
2
+ class Configuration
3
+ attr_accessor :servicekey, :logger
4
+ end
5
+ end
@@ -0,0 +1,69 @@
1
+ module Afterbanks
2
+ class Error < ::StandardError
3
+ attr_reader :message, :debug_id, :additional_info
4
+
5
+ def initialize(message:, debug_id:, additional_info: nil)
6
+ @message = message
7
+ @debug_id = debug_id
8
+ @additional_info = additional_info
9
+ end
10
+
11
+ def code
12
+ raise 'Not implemented'
13
+ end
14
+ end
15
+
16
+ class GenericError < Error
17
+ def code
18
+ 1
19
+ end
20
+ end
21
+
22
+ class ServiceUnavailableTemporarilyError < Error
23
+ def code
24
+ 2
25
+ end
26
+ end
27
+
28
+ class ConnectionDataError < Error
29
+ def code
30
+ 3
31
+ end
32
+ end
33
+
34
+ class AccountIdDoesNotExistError < Error
35
+ def code
36
+ 4
37
+ end
38
+ end
39
+
40
+ class CutConnectionError < Error
41
+ def code
42
+ 5
43
+ end
44
+ end
45
+
46
+ class HumanActionNeededError < Error
47
+ def code
48
+ 6
49
+ end
50
+ end
51
+
52
+ class AccountIdNeededError < Error
53
+ def code
54
+ 50
55
+ end
56
+ end
57
+
58
+ class TwoStepAuthenticationError < Error
59
+ def code
60
+ 50
61
+ end
62
+ end
63
+
64
+ class MissingParameterError < Error
65
+ def code
66
+ 50
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,77 @@
1
+ module Afterbanks
2
+ class Resource
3
+ def initialize(data)
4
+ generate_attr_readers
5
+ set_data(data)
6
+ end
7
+
8
+ def fields_information
9
+ self.class.fields_information
10
+ end
11
+
12
+ private
13
+
14
+ def generate_attr_readers
15
+ fields_information.each do |field, _|
16
+ define_singleton_method(field) do
17
+ instance_variable_get("@#{field}")
18
+ end
19
+ end
20
+ end
21
+
22
+ def set_data(data)
23
+ fields_information.each do |field, type|
24
+ next unless data.key?(field.to_s) || data[field.to_sym]
25
+
26
+ raw_value = data[field.to_s] || data[field.to_sym]
27
+ value = value_for(raw_value, type)
28
+ instance_variable_set("@#{field}", value)
29
+ end
30
+ end
31
+
32
+ def value_for(raw_value, type)
33
+ case type
34
+ when :boolean
35
+ [true, "1", 1].include?(raw_value)
36
+ when :date
37
+ if raw_value.is_a?(Date)
38
+ raw_value
39
+ else
40
+ Date.parse(raw_value)
41
+ end
42
+ else
43
+ raw_value
44
+ end
45
+ end
46
+
47
+ def marshal_dump
48
+ dump = {}
49
+
50
+ fields_information.each do |field, _|
51
+ dump[field] = send(field)
52
+ end
53
+
54
+ dump
55
+ end
56
+
57
+ def marshal_load(serialized_resource)
58
+ keys = serialized_resource.keys
59
+
60
+ keys.each do |key|
61
+ serialized_resource[key.to_s] = serialized_resource.delete(key)
62
+ end
63
+
64
+ initialize(serialized_resource)
65
+ end
66
+
67
+ class << self
68
+ def fields_information
69
+ @fields_information
70
+ end
71
+
72
+ def has_fields(fields_information)
73
+ @fields_information = fields_information
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,64 @@
1
+ module Afterbanks
2
+ class Account < Resource
3
+ has_fields service: :string,
4
+ product: :string,
5
+ type: :string,
6
+ balance: :decimal,
7
+ currency: :string,
8
+ description: :string,
9
+ iban: :string,
10
+ is_owner: :boolean,
11
+ holders: :hash
12
+
13
+ def self.list(service:, username:, password:, password2: nil,
14
+ document_type: nil, session_id: nil, otp: nil, counter_id: nil,
15
+ avoid_caching: false)
16
+
17
+ params = {
18
+ servicekey: Afterbanks.configuration.servicekey,
19
+ service: service,
20
+ user: username,
21
+ pass: password,
22
+ products: 'GLOBAL'
23
+ }
24
+
25
+ params.merge!(pass2: password2) unless password2.nil?
26
+ params.merge!(documentType: document_type) unless document_type.nil?
27
+ params.merge!(session_id: session_id) unless session_id.nil?
28
+ params.merge!(OTP: otp) unless otp.nil?
29
+ params.merge!(counterId: counter_id) unless counter_id.nil?
30
+
31
+ params.merge!(randomizer: Time.now.to_i) if avoid_caching
32
+
33
+ response, debug_id = Afterbanks.api_call(
34
+ method: :post,
35
+ path: '/V3/',
36
+ params: params
37
+ )
38
+
39
+ Response.new(
40
+ result: Collection.new(
41
+ accounts_information_for(
42
+ response: response,
43
+ service: service
44
+ ),
45
+ self
46
+ ),
47
+ debug_id: debug_id
48
+ )
49
+ end
50
+
51
+ private
52
+
53
+ def self.accounts_information_for(response:, service:)
54
+ accounts_information = []
55
+
56
+ response.each do |account_information|
57
+ account_information['service'] = service
58
+ accounts_information << account_information
59
+ end
60
+
61
+ accounts_information
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,91 @@
1
+ module Afterbanks
2
+ class Bank < Resource
3
+ has_fields country_code: :string,
4
+ service: :string,
5
+ swift: :string,
6
+ fullname: :string,
7
+ business: :boolean,
8
+ documenttype: :string,
9
+ user: :string,
10
+ pass: :string,
11
+ pass2: :string,
12
+ userdesc: :string,
13
+ passdesc: :string,
14
+ pass2desc: :string,
15
+ usertype: :string,
16
+ passtype: :string,
17
+ pass2type: :string,
18
+ image: :string,
19
+ color: :string
20
+
21
+ def self.list(ordered: false)
22
+ response, debug_id = Afterbanks.api_call(
23
+ method: :get,
24
+ path: '/forms/'
25
+ )
26
+
27
+ Response.new(
28
+ result: Collection.new(
29
+ banks_information_for(
30
+ response: response,
31
+ ordered: ordered
32
+ ),
33
+ self
34
+ ),
35
+ debug_id: debug_id
36
+ )
37
+ end
38
+
39
+ private
40
+
41
+ def self.banks_information_for(response:, ordered:)
42
+ banks_information = []
43
+
44
+ services_number_by_bank_id = {}
45
+ response.each { |bank_information|
46
+ bank_id = bank_id_for(bank_information: bank_information)
47
+ services_number_by_bank_id[bank_id] ||= 0
48
+ services_number_by_bank_id[bank_id] += 1
49
+ }
50
+
51
+ response.each do |bank_information|
52
+ bank_information['fullname'] = bank_name_for(
53
+ bank_information: bank_information,
54
+ services_number_by_bank_id: services_number_by_bank_id
55
+ )
56
+
57
+ banks_information << bank_information
58
+ end
59
+
60
+ if ordered
61
+ banks_information.sort! do |bank_information1, bank_information2|
62
+ bank_information1['fullname'].downcase <=> bank_information2['fullname'].downcase
63
+ end
64
+ end
65
+
66
+ banks_information
67
+ end
68
+
69
+ def self.bank_name_for(bank_information:, services_number_by_bank_id:)
70
+ if bank_information['service'] == 'cajaingenieros'
71
+ return "Caixa d'Enginyers"
72
+ end
73
+
74
+ fullname = bank_information['fullname']
75
+ if bank_information['business'] == "1"
76
+ return "#{fullname} Empresas"
77
+ end
78
+
79
+ bank_id = bank_id_for(bank_information: bank_information)
80
+ if services_number_by_bank_id[bank_id] > 1
81
+ return "#{fullname} Particulares"
82
+ end
83
+
84
+ fullname
85
+ end
86
+
87
+ def self.bank_id_for(bank_information:)
88
+ bank_information['service'].split("_").first
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,76 @@
1
+ module Afterbanks
2
+ class Transaction < Resource
3
+ has_fields service: :string,
4
+ product: :string,
5
+ date: :date,
6
+ date2: :date,
7
+ amount: :decimal,
8
+ description: :string,
9
+ balance: :decimal,
10
+ transactionId: :string,
11
+ categoryId: :integer
12
+
13
+ def self.list(service:, username:, password:, password2: nil,
14
+ document_type: nil, products:, startdate:,
15
+ session_id: nil, otp: nil, counter_id: nil)
16
+
17
+ params = {
18
+ servicekey: Afterbanks.configuration.servicekey,
19
+ service: service,
20
+ user: username,
21
+ pass: password,
22
+ products: products,
23
+ startdate: startdate.strftime("%d-%m-%Y")
24
+ }
25
+
26
+ params.merge!(pass2: password2) unless password2.nil?
27
+ params.merge!(documentType: document_type) unless document_type.nil?
28
+ params.merge!(session_id: session_id) unless session_id.nil?
29
+ params.merge!(OTP: otp) unless otp.nil?
30
+ params.merge!(counterId: counter_id) unless counter_id.nil?
31
+
32
+ response, debug_id = Afterbanks.api_call(
33
+ method: :post,
34
+ path: '/V3/',
35
+ params: params
36
+ )
37
+
38
+ Response.new(
39
+ result: Collection.new(
40
+ transactions_information_for(
41
+ service: service,
42
+ response: response,
43
+ products: products
44
+ ),
45
+ self
46
+ ),
47
+ debug_id: debug_id
48
+ )
49
+ end
50
+
51
+ private
52
+
53
+ def self.transactions_information_for(response:, service:, products:)
54
+ transactions_information = []
55
+ products_array = products.split(",")
56
+
57
+ response.each do |account_information|
58
+ product = account_information['product']
59
+
60
+ if products_array.include?(product)
61
+ transactions = account_information['transactions']
62
+ next if transactions.nil?
63
+
64
+ transactions.each do |transaction|
65
+ transaction['service'] = service
66
+ transaction['product'] = product
67
+ end
68
+
69
+ transactions_information += transactions
70
+ end
71
+ end
72
+
73
+ transactions_information
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,24 @@
1
+ module Afterbanks
2
+ class User < Resource
3
+ has_fields limit: :integer,
4
+ counter: :integer,
5
+ remaining_calls: :integer,
6
+ date_renewal: :date,
7
+ detail: :string
8
+
9
+ def self.get
10
+ response, debug_id = Afterbanks.api_call(
11
+ method: :post,
12
+ path: '/me/',
13
+ params: {
14
+ servicekey: Afterbanks.configuration.servicekey
15
+ }
16
+ )
17
+
18
+ Response.new(
19
+ result: new(response),
20
+ debug_id: debug_id
21
+ )
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ module Afterbanks
2
+ class Response
3
+ attr_accessor :result, :debug_id
4
+
5
+ def initialize(result:, debug_id:)
6
+ @result = result
7
+ @debug_id = debug_id
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module Afterbanks
2
+ VERSION = "0.2.1"
3
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: afterbanks-api-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Albert Bellonch
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: timecop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description:
98
+ email:
99
+ - albert@getquipu.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".circleci/config.yml"
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - Gemfile
108
+ - Gemfile.lock
109
+ - README.md
110
+ - Rakefile
111
+ - afterbanks.gemspec
112
+ - lib/afterbanks.rb
113
+ - lib/afterbanks/base.rb
114
+ - lib/afterbanks/collection.rb
115
+ - lib/afterbanks/configuration.rb
116
+ - lib/afterbanks/error.rb
117
+ - lib/afterbanks/resource.rb
118
+ - lib/afterbanks/resources/account.rb
119
+ - lib/afterbanks/resources/bank.rb
120
+ - lib/afterbanks/resources/transaction.rb
121
+ - lib/afterbanks/resources/user.rb
122
+ - lib/afterbanks/response.rb
123
+ - lib/afterbanks/version.rb
124
+ homepage: https://getquipu.com
125
+ licenses: []
126
+ metadata: {}
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 2.7.6.2
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: Ruby client for the Afterbanks' API
147
+ test_files: []