finix 0.12 → 1.0.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.
- checksums.yaml +5 -13
- data/.circleci/config.yml +22 -0
- data/.gitignore +8 -1
- data/.rspec +2 -0
- data/.ruby-version +1 -1
- data/Gemfile +3 -4
- data/README.md +34 -1
- data/Rakefile +2 -6
- data/finix.gemspec +3 -12
- data/lib/finix.rb +30 -21
- data/lib/finix/client.rb +2 -2
- data/lib/finix/errors.rb +47 -0
- data/lib/finix/hal_resource.rb +37 -9
- data/lib/finix/indifferent_hash.rb +25 -0
- data/lib/finix/pagination.rb +154 -31
- data/lib/finix/resources.rb +5 -1
- data/lib/finix/resources/application.rb +1 -0
- data/lib/finix/resources/authorization.rb +3 -0
- data/lib/finix/resources/error.rb +12 -0
- data/lib/finix/resources/fee_profile.rb +8 -0
- data/lib/finix/resources/hypermedia.rb +2 -2
- data/lib/finix/resources/merchant_profile.rb +8 -0
- data/lib/finix/resources/payment_instrument.rb +2 -4
- data/lib/finix/resources/resource.rb +46 -19
- data/lib/finix/resources/risk_profile.rb +8 -0
- data/lib/finix/resources/transfer.rb +4 -3
- data/lib/finix/resources/user.rb +3 -0
- data/lib/finix/response/finix_error_middleware.rb +3 -5
- data/lib/finix/utils.rb +8 -3
- data/lib/finix/version.rb +1 -1
- metadata +25 -61
- data/circle.yml +0 -32
- data/lib/finix/error.rb +0 -42
checksums.yaml
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
5
|
-
data.tar.gz: !binary |-
|
|
6
|
-
NTMyNmFlZGMwZGMwOTYzY2E3YTM1MjQ3NzI0ODc1NTRlODQxZWI4Nw==
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: b2113c64b98a0f7729b214378351c869b439939316fb7434e68ae6fce4e37615
|
|
4
|
+
data.tar.gz: 4455191f1ff93fa1c75113b2a5f8bd06ef6398d29f38fd651244c744d63fb47d
|
|
7
5
|
SHA512:
|
|
8
|
-
metadata.gz:
|
|
9
|
-
|
|
10
|
-
YzU0Y2ExNTBkZDE3YWViYzgzMGQ1M2ZjZDMwOWVmY2M0YjcwMmM1MGZmYmNh
|
|
11
|
-
NjA3ZDE1YzhmYTVlZjY1ODRjNDRiNjk0MjNkMDk4MDlhMzg3YWE=
|
|
12
|
-
data.tar.gz: !binary |-
|
|
13
|
-
ZGU3MDhmMDgxODJkYjgyOGM0NjJjZTJiZDI3ZjYzNjYzZjY3MWNiYjQxZTg4
|
|
14
|
-
M2VkMThiYTk3ZTZlOTI5NjkzYmY4NDJjYWExZTAxODVlMjZhZTZjYjAxNTlk
|
|
15
|
-
NTE3M2UzNmI0ZjZlNWMyNzVkMWNhMWRiNDk2ODZmYmIzZDZmOTE=
|
|
6
|
+
metadata.gz: d7cafefb9e31ce6e4d1df5dd354b1460f7516db83d1eccc0694fcc0eb963cc903112b0ef0b5d149bd30531b7a3764ae8271cb7af6dafb2a01aec9eb86124619c
|
|
7
|
+
data.tar.gz: 26c164b5dad922de5a1cf3c2d8dff27af487e54de2a34b9e4a13c14689f042e876bb2812a1bf26077c1d5fde3dd0b09fec38a7faca7ee7e5385718072f6d3733
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
jobs:
|
|
3
|
+
rspec_tests:
|
|
4
|
+
working_directory: ~/workspace
|
|
5
|
+
docker:
|
|
6
|
+
- image: circleci/ruby:2.7
|
|
7
|
+
steps:
|
|
8
|
+
- checkout
|
|
9
|
+
- restore_cache:
|
|
10
|
+
keys:
|
|
11
|
+
- v1-dep-{{checksum "Gemfile.lock"}}
|
|
12
|
+
- run: 'bundle check --path=vendor/bundle || bundle install --path=vendor/bundle --jobs=4 --retry=3'
|
|
13
|
+
- save_cache:
|
|
14
|
+
key: v1-dep-{{checksum "Gemfile.lock"}}
|
|
15
|
+
paths:
|
|
16
|
+
- vendor/bundle
|
|
17
|
+
- ~/.bundle
|
|
18
|
+
- run: bundle exec rspec --format documentation
|
|
19
|
+
workflows:
|
|
20
|
+
test:
|
|
21
|
+
jobs:
|
|
22
|
+
- rspec_tests
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
ruby-
|
|
1
|
+
ruby-2.7
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -3,4 +3,37 @@
|
|
|
3
3
|
[](https://circleci.com/gh/finix-payments/processing-ruby)
|
|
4
4
|
|
|
5
5
|
## Getting Started
|
|
6
|
-
|
|
6
|
+
Add this line to your application's Gemfile:
|
|
7
|
+
|
|
8
|
+
gem 'finix'
|
|
9
|
+
|
|
10
|
+
Then execute:
|
|
11
|
+
|
|
12
|
+
$ bundle
|
|
13
|
+
|
|
14
|
+
Or install it yourself as:
|
|
15
|
+
|
|
16
|
+
$ gem install finix
|
|
17
|
+
|
|
18
|
+
## Contributing
|
|
19
|
+
|
|
20
|
+
1. Fork it
|
|
21
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
22
|
+
3. Write your code **and unit tests**
|
|
23
|
+
4. Ensure all tests still pass (`bundle exec rspec`)
|
|
24
|
+
5. Commit your changes (`git commit -am 'Add some feature'`)
|
|
25
|
+
6. Push to the branch (`git push origin my-new-feature`)
|
|
26
|
+
7. Create new pull request
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Tests
|
|
30
|
+
|
|
31
|
+
To run all tests:
|
|
32
|
+
|
|
33
|
+
$ bundle exec rspec
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
To run a specific test:
|
|
37
|
+
|
|
38
|
+
$ bundle exec rspec ./spec/finix/resources/application_spec.rb
|
|
39
|
+
|
data/Rakefile
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
require 'rake'
|
|
2
2
|
require 'bundler/gem_tasks'
|
|
3
3
|
require 'rake/testtask'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Rake::TestTask.new do |t|
|
|
7
|
-
# t.test_files = FileList['test/**/test_*.rb']
|
|
8
|
-
t.pattern ='test/**/test_*.rb'
|
|
9
|
-
end
|
|
4
|
+
require 'rspec/core/rake_task'
|
|
5
|
+
require 'logger'
|
data/finix.gemspec
CHANGED
|
@@ -5,7 +5,7 @@ require 'finix/version'
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = 'finix'
|
|
8
|
-
spec.required_ruby_version = '>=
|
|
8
|
+
spec.required_ruby_version = '>= 2.0'
|
|
9
9
|
spec.version = Finix::VERSION
|
|
10
10
|
spec.authors = ['finix-payments']
|
|
11
11
|
spec.email = ['support@finixpayments.com']
|
|
@@ -22,15 +22,6 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
23
23
|
spec.require_paths = ['lib']
|
|
24
24
|
|
|
25
|
-
spec.add_dependency('faraday', '~> 0.
|
|
26
|
-
spec.add_dependency('faraday_middleware', '~> 0.
|
|
27
|
-
|
|
28
|
-
if RUBY_VERSION >= '2.0'
|
|
29
|
-
spec.add_dependency('json', '~> 2.0.2')
|
|
30
|
-
spec.add_dependency('addressable', '~> 2.5.0')
|
|
31
|
-
else
|
|
32
|
-
spec.add_dependency('public_suffix', '~> 1.4.6')
|
|
33
|
-
spec.add_dependency('json', '~> 1.8')
|
|
34
|
-
spec.add_dependency('addressable', '~> 2.3')
|
|
35
|
-
end
|
|
25
|
+
spec.add_dependency('faraday', '~> 1.0.1')
|
|
26
|
+
spec.add_dependency('faraday_middleware', '~> 1.0.0')
|
|
36
27
|
end
|
data/lib/finix.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
require_relative 'finix/version' unless defined? Finix::VERSION
|
|
2
|
+
require_relative 'finix/client'
|
|
3
|
+
require_relative 'finix/errors'
|
|
4
4
|
|
|
5
5
|
module Finix
|
|
6
6
|
|
|
@@ -8,14 +8,15 @@ module Finix
|
|
|
8
8
|
@config = {:root_url => 'https://localhost/processing'}
|
|
9
9
|
@hypermedia_registry = {}
|
|
10
10
|
@errors_registry = {
|
|
11
|
-
:unknown =>
|
|
12
|
-
400 =>
|
|
13
|
-
401 =>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
:unknown => Errors,
|
|
12
|
+
400 => BadRequest,
|
|
13
|
+
401 => Unauthorized,
|
|
14
|
+
402 => PaymentRequired,
|
|
15
|
+
403 => Forbidden,
|
|
16
|
+
404 => NotFound,
|
|
17
|
+
405 => MethodNotAllowed,
|
|
18
|
+
422 => UnprocessableEntity,
|
|
19
|
+
500 => InternalServerError
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
class << self
|
|
@@ -34,7 +35,7 @@ module Finix
|
|
|
34
35
|
@config[:user] = @config[:user].strip unless @config[:user].nil?
|
|
35
36
|
@config[:password] = @config[:password].strip unless @config[:password].nil?
|
|
36
37
|
|
|
37
|
-
@client =
|
|
38
|
+
@client = Client.new @config
|
|
38
39
|
end
|
|
39
40
|
|
|
40
41
|
def split_the_href(href)
|
|
@@ -42,12 +43,14 @@ module Finix
|
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
def get_href(cls)
|
|
45
|
-
href =
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
href = (not cls.nil? and not cls.hypermedia_types.nil?) ? cls.hypermedia_types.last : hypermedia_registry.key(cls)
|
|
47
|
+
|
|
48
|
+
sps = cls
|
|
49
|
+
while href.nil?
|
|
50
|
+
sps = sps.superclass
|
|
51
|
+
break if sps.nil?
|
|
52
|
+
clss = Finix::Utils.eval_class cls, sps
|
|
53
|
+
href = hypermedia_registry.key(clss)
|
|
51
54
|
end
|
|
52
55
|
href
|
|
53
56
|
end
|
|
@@ -55,11 +58,17 @@ module Finix
|
|
|
55
58
|
def from_hypermedia_registry(href, attributes={})
|
|
56
59
|
split_uri = split_the_href(href)
|
|
57
60
|
split_uri.reverse!.each do |resource|
|
|
58
|
-
cls =
|
|
59
|
-
cls = cls.send :hypermedia_subtype, attributes if not cls.nil? and cls.respond_to?(:hypermedia_subtype)
|
|
61
|
+
cls = find_resource_cls(resource, attributes)
|
|
60
62
|
return cls unless cls.nil?
|
|
61
63
|
end
|
|
62
|
-
Finix::Utils.eval_class self,
|
|
64
|
+
Finix::Utils.eval_class self, UnknownResource
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def find_resource_cls(resource, attributes={})
|
|
68
|
+
cls = hypermedia_registry[resource]
|
|
69
|
+
# cls = hypermedia_registry["__stub__#{resource}"] if cls.nil?
|
|
70
|
+
cls = cls.send :hypermedia_subtype, attributes if not cls.nil? and cls.respond_to?(:hypermedia_subtype)
|
|
71
|
+
cls
|
|
63
72
|
end
|
|
64
73
|
|
|
65
74
|
def get(*args, &block)
|
data/lib/finix/client.rb
CHANGED
|
@@ -8,7 +8,7 @@ require 'finix/response/finix_error_middleware'
|
|
|
8
8
|
module Finix
|
|
9
9
|
class Client
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
DEFAULT_CONFIG = {
|
|
12
12
|
:logging_level => 'WARN',
|
|
13
13
|
:connection_timeout => 60,
|
|
14
14
|
:read_timeout => 60,
|
|
@@ -21,7 +21,7 @@ module Finix
|
|
|
21
21
|
attr_accessor :config
|
|
22
22
|
|
|
23
23
|
def initialize(options={})
|
|
24
|
-
@config =
|
|
24
|
+
@config = DEFAULT_CONFIG.merge options
|
|
25
25
|
build_conn
|
|
26
26
|
end
|
|
27
27
|
|
data/lib/finix/errors.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require_relative 'hal_resource'
|
|
2
|
+
module Finix
|
|
3
|
+
|
|
4
|
+
class Errors < ::StandardError
|
|
5
|
+
include Finix::HalResource
|
|
6
|
+
attr_reader :code
|
|
7
|
+
attr_reader :total
|
|
8
|
+
|
|
9
|
+
def initialize(response=nil)
|
|
10
|
+
@code = response[:status].to_i
|
|
11
|
+
@total = response[:body]['total'].to_i
|
|
12
|
+
|
|
13
|
+
load_page_from_response! response
|
|
14
|
+
@attributes['errors'] = @attributes.delete 'items'
|
|
15
|
+
@attributes.delete 'page'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def to_s
|
|
19
|
+
"#{@errors}"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class BadRequest < Errors
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class Unauthorized < Errors
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class PaymentRequired < Errors
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Forbidden < Errors
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class NotFound < Errors
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class MethodNotAllowed < Errors
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class UnprocessableEntity < Errors
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
class InternalServerError < Errors
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/finix/hal_resource.rb
CHANGED
|
@@ -5,21 +5,49 @@ module Finix
|
|
|
5
5
|
attr_accessor :attributes
|
|
6
6
|
|
|
7
7
|
def method_missing(method, *args, &block)
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
attributes = [@attributes]
|
|
9
|
+
attributes << @attributes['page'] unless @attributes['page'].nil?
|
|
10
|
+
attributes.each do |attrs|
|
|
11
|
+
if attrs.has_key?(method.to_s)
|
|
12
|
+
return attrs[method.to_s]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if @attributes.empty? or (@attributes.has_key?('page') and not @attributes.has_key?('items'))
|
|
17
|
+
self.refresh if self.respond_to? :refresh
|
|
18
|
+
return self.send :method_missing, method, *args, &block
|
|
10
19
|
end
|
|
11
20
|
|
|
12
21
|
case method.to_s
|
|
13
|
-
when /(.+)=$/
|
|
22
|
+
when /(.+)=$/ # support setting
|
|
14
23
|
attr = method.to_s.chop
|
|
15
|
-
@attributes[attr] = args
|
|
24
|
+
@attributes[attr] = args.slice(0)
|
|
16
25
|
else
|
|
17
|
-
|
|
18
|
-
value = @hyperlinks["#{method}"]
|
|
19
|
-
result = value.call
|
|
20
|
-
return result
|
|
21
|
-
end
|
|
26
|
+
@hyperlinks.send :method_missing, method, *args, &block
|
|
22
27
|
end
|
|
23
28
|
end
|
|
29
|
+
|
|
30
|
+
def load_page_from_response!(response)
|
|
31
|
+
body = Finix::Utils.indifferent_read_access response.body
|
|
32
|
+
|
|
33
|
+
hash_class = Finix::Utils.eval_class(self, IndifferentHash)
|
|
34
|
+
@hyperlinks = hash_class.new
|
|
35
|
+
links = body.delete('_links')
|
|
36
|
+
links.each { |key, link| @hyperlinks[key.to_sym] = link[:href] } unless links.nil?
|
|
37
|
+
|
|
38
|
+
page = body.delete('page')
|
|
39
|
+
@attributes = {'items' => [], 'page' => hash_class.new(page)} # clear attributes
|
|
40
|
+
if body.has_key? '_embedded'
|
|
41
|
+
resource_name, resources = body.delete('_embedded').first
|
|
42
|
+
@resource_class = Finix.from_hypermedia_registry resource_name
|
|
43
|
+
@attributes['items'] = resources.map do |attrs|
|
|
44
|
+
cls = Finix.from_hypermedia_registry resource_name, attrs
|
|
45
|
+
cls.construct_from_response attrs
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
@attributes.merge! body
|
|
50
|
+
end
|
|
24
51
|
end
|
|
25
52
|
end
|
|
53
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Finix
|
|
2
|
+
class IndifferentHash < ::Hash
|
|
3
|
+
|
|
4
|
+
def initialize(*args)
|
|
5
|
+
original_hash = args.slice!(0) || {}
|
|
6
|
+
self.merge!(original_hash)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def method_missing(method, *args, &block)
|
|
10
|
+
if self.has_key? "#{method}"
|
|
11
|
+
value = self["#{method}"]
|
|
12
|
+
return value.call(*args) if value.respond_to? :call
|
|
13
|
+
return value
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def count(*args)
|
|
18
|
+
if self.has_key? 'count'
|
|
19
|
+
raise Exception.new 'Unsupported block_given exception' if block_given?
|
|
20
|
+
return self.send :method_missing, :count, *args
|
|
21
|
+
end
|
|
22
|
+
super(*args)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/lib/finix/pagination.rb
CHANGED
|
@@ -1,80 +1,203 @@
|
|
|
1
1
|
require 'cgi'
|
|
2
|
+
require 'ostruct'
|
|
2
3
|
require_relative 'hal_resource'
|
|
4
|
+
require_relative 'indifferent_hash'
|
|
3
5
|
|
|
4
6
|
module Finix
|
|
5
7
|
class Pagination
|
|
6
8
|
|
|
7
|
-
include Enumerable
|
|
9
|
+
include ::Enumerable
|
|
8
10
|
include HalResource
|
|
9
11
|
|
|
10
12
|
attr_accessor :resource_class
|
|
13
|
+
attr_reader :attributes
|
|
14
|
+
attr_reader :hyperlinks
|
|
11
15
|
|
|
12
|
-
def initialize(
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
def initialize(*args)
|
|
17
|
+
opts = args.slice!(0) || {}
|
|
18
|
+
href = opts.delete(:href)
|
|
15
19
|
|
|
20
|
+
@hyperlinks = Finix::Utils.eval_class(self, IndifferentHash).new
|
|
16
21
|
@hyperlinks[:self] = href
|
|
22
|
+
@attributes = {}
|
|
17
23
|
@resource_class = nil
|
|
24
|
+
extract_opts opts
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def init!(*args)
|
|
28
|
+
opts = args.slice(0) || {}
|
|
29
|
+
extract_opts opts
|
|
30
|
+
self
|
|
18
31
|
end
|
|
19
32
|
|
|
20
33
|
def each
|
|
21
34
|
return enum_for :each unless block_given?
|
|
22
|
-
|
|
35
|
+
fetch :first
|
|
23
36
|
loop do
|
|
24
37
|
items.each { |item| yield item }
|
|
25
38
|
fetch :next
|
|
26
39
|
end
|
|
27
40
|
end
|
|
28
41
|
|
|
29
|
-
def
|
|
30
|
-
refresh
|
|
31
|
-
|
|
42
|
+
def count(*args)
|
|
43
|
+
refresh # always refresh to get last items
|
|
44
|
+
|
|
45
|
+
cnt = (block_given?) ? super(*args) : self.send(:method_missing, :count, args)
|
|
46
|
+
cnt = 0 if cnt.nil?
|
|
47
|
+
cnt
|
|
32
48
|
end
|
|
33
49
|
|
|
34
|
-
def fetch(scope) # :next, :last, :first, :prev, :self
|
|
35
|
-
|
|
36
|
-
if
|
|
37
|
-
|
|
50
|
+
def fetch(scope = nil) # :next, :last, :first, :prev, :self
|
|
51
|
+
opts = {}
|
|
52
|
+
if scope.is_a? Hash
|
|
53
|
+
opts = Finix::Utils.indifferent_read_access scope
|
|
54
|
+
scope = nil
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
scope = :self if scope.nil?
|
|
58
|
+
scope = scope.to_s.to_sym unless scope.nil?
|
|
59
|
+
|
|
60
|
+
href = @hyperlinks[scope]
|
|
61
|
+
unless href
|
|
62
|
+
if scope == :first
|
|
63
|
+
@attributes['page']['offset'] = 0 unless @attributes['page']['offset'].nil?
|
|
64
|
+
href = @hyperlinks[:self]
|
|
65
|
+
href = href[/[^\?]+/]
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if href
|
|
70
|
+
load_from href, opts
|
|
38
71
|
return self.items
|
|
39
72
|
end
|
|
40
73
|
|
|
41
74
|
raise StopIteration
|
|
42
75
|
end
|
|
43
76
|
|
|
77
|
+
alias retrieve fetch
|
|
78
|
+
|
|
44
79
|
def refresh
|
|
45
|
-
fetch
|
|
80
|
+
fetch
|
|
81
|
+
self
|
|
46
82
|
end
|
|
47
83
|
|
|
84
|
+
alias load! refresh
|
|
85
|
+
alias retrieve refresh
|
|
86
|
+
|
|
48
87
|
def create(attrs={})
|
|
49
|
-
attrs = attrs.attributes if attrs.is_a?(
|
|
88
|
+
attrs = attrs.attributes if attrs.is_a?(Resource)
|
|
50
89
|
attrs = Finix::Utils.indifferent_read_access attrs
|
|
90
|
+
|
|
51
91
|
href = @hyperlinks[:self]
|
|
52
92
|
@resource_class = Finix.from_hypermedia_registry href, attrs
|
|
53
|
-
|
|
93
|
+
|
|
94
|
+
attrs[:href] = href
|
|
95
|
+
@resource_class.new(attrs).save
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def next_page
|
|
99
|
+
fetch :next
|
|
100
|
+
self
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def previous_page
|
|
104
|
+
fetch :prev
|
|
105
|
+
self
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def last_page
|
|
109
|
+
fetch :last
|
|
110
|
+
self
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def first_page
|
|
114
|
+
fetch :first
|
|
115
|
+
self
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def total
|
|
119
|
+
# refresh unless loaded
|
|
120
|
+
self.page.count
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def num_pages
|
|
124
|
+
num = total / limit
|
|
125
|
+
num += 1 if total % limit > 0
|
|
126
|
+
num
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def loaded
|
|
130
|
+
not self.items.nil?
|
|
54
131
|
end
|
|
55
132
|
|
|
56
133
|
private
|
|
57
134
|
|
|
58
|
-
def
|
|
59
|
-
|
|
135
|
+
# def current_page
|
|
136
|
+
# (offset / limit) + 1
|
|
137
|
+
# end
|
|
138
|
+
|
|
139
|
+
def extract_opts(opts={})
|
|
140
|
+
opts = Finix::Utils.indifferent_read_access opts
|
|
141
|
+
limit = opts.delete('limit')
|
|
142
|
+
offset = opts.delete('offset')
|
|
143
|
+
@attributes['page'] = @attributes['page'] || {}
|
|
144
|
+
@attributes['page']['limit'] = limit unless limit.nil?
|
|
145
|
+
@attributes['page']['offset'] = offset unless offset.nil?
|
|
146
|
+
@attributes.merge! opts unless opts.empty?
|
|
147
|
+
|
|
148
|
+
if not limit.nil? or not offset.nil? # reset @hyperlinks
|
|
149
|
+
@hyperlinks.reject! {|k, v| k.to_s != 'self'}
|
|
150
|
+
parsed_url = URI.parse(@hyperlinks[:self])
|
|
151
|
+
parsed_url.query = nil
|
|
152
|
+
@hyperlinks[:self] = parsed_url.to_s
|
|
153
|
+
end
|
|
154
|
+
end
|
|
60
155
|
|
|
61
|
-
|
|
62
|
-
|
|
156
|
+
def load_from(url, opts = {})
|
|
157
|
+
parsed_url = URI.parse(url)
|
|
63
158
|
|
|
64
|
-
|
|
65
|
-
|
|
159
|
+
params = {}
|
|
160
|
+
params.merge! @attributes['page'] if @attributes.has_key? 'page'
|
|
161
|
+
params.merge! parse_query(parsed_url.query)
|
|
162
|
+
parsed_url.query = nil # remove query
|
|
66
163
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
cls.construct_from_response attrs
|
|
74
|
-
end
|
|
75
|
-
@attributes['page'] = body.delete('page')
|
|
164
|
+
# params page
|
|
165
|
+
opts ||= {}
|
|
166
|
+
page = opts.delete('page')
|
|
167
|
+
unless page.nil?
|
|
168
|
+
page = Finix::Utils.indifferent_read_access page
|
|
169
|
+
params.merge! page unless page.nil?
|
|
76
170
|
end
|
|
171
|
+
|
|
172
|
+
params.merge! opts unless opts.empty?
|
|
173
|
+
params.delete('count') # remove count from previous query
|
|
174
|
+
|
|
175
|
+
response = Finix.get parsed_url.to_s, params
|
|
176
|
+
load_page_from_response! response
|
|
77
177
|
end
|
|
78
178
|
|
|
179
|
+
# Stolen from Mongrel, with some small modifications:
|
|
180
|
+
# Parses a query string by breaking it up at the '&'
|
|
181
|
+
# and ';' characters. You can also use this to parse
|
|
182
|
+
# cookies by changing the characters used in the second
|
|
183
|
+
# parameter (which defaults to '&;').
|
|
184
|
+
def parse_query(qs, d = nil)
|
|
185
|
+
params = {}
|
|
186
|
+
(qs || '').split(d ? /[#{d}] */n : /[&;] */n).each do |p|
|
|
187
|
+
k, v = p.split('=', 2).map { |x| CGI::unescape(x) }
|
|
188
|
+
if (cur = params[k])
|
|
189
|
+
if cur.class == Array
|
|
190
|
+
params[k] << v
|
|
191
|
+
else
|
|
192
|
+
params[k] = [cur, v]
|
|
193
|
+
end
|
|
194
|
+
else
|
|
195
|
+
params[k] = v
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
params
|
|
200
|
+
end
|
|
79
201
|
end
|
|
80
|
-
end
|
|
202
|
+
end
|
|
203
|
+
|
data/lib/finix/resources.rb
CHANGED
|
@@ -8,6 +8,9 @@ require 'finix/resources/identity'
|
|
|
8
8
|
require 'finix/resources/processor'
|
|
9
9
|
require 'finix/resources/token'
|
|
10
10
|
require 'finix/resources/merchant'
|
|
11
|
+
require 'finix/resources/merchant_profile'
|
|
12
|
+
require 'finix/resources/risk_profile'
|
|
13
|
+
require 'finix/resources/fee_profile'
|
|
11
14
|
require 'finix/resources/payment_instrument'
|
|
12
15
|
require 'finix/resources/payment_card'
|
|
13
16
|
require 'finix/resources/bank_account'
|
|
@@ -18,4 +21,5 @@ require 'finix/resources/verification'
|
|
|
18
21
|
require 'finix/resources/dispute'
|
|
19
22
|
require 'finix/resources/evidence'
|
|
20
23
|
require 'finix/resources/refund'
|
|
21
|
-
require 'finix/resources/settlement'
|
|
24
|
+
require 'finix/resources/settlement'
|
|
25
|
+
require 'finix/resources/error'
|
|
@@ -11,7 +11,7 @@ module Finix
|
|
|
11
11
|
def define_hypermedia_types(types)
|
|
12
12
|
@hypermedia_types = types.map! do |t|
|
|
13
13
|
t.to_s
|
|
14
|
-
end.sort
|
|
14
|
+
end.sort!
|
|
15
15
|
|
|
16
16
|
@hypermedia_types.each do |type|
|
|
17
17
|
Finix.hypermedia_registry[type] = self
|
|
@@ -23,4 +23,4 @@ module Finix
|
|
|
23
23
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
end
|
|
26
|
+
end
|
|
@@ -10,13 +10,11 @@ module Finix
|
|
|
10
10
|
def hypermedia_subtype(response)
|
|
11
11
|
unless response.nil?
|
|
12
12
|
type = response['instrument_type'] || response['type']
|
|
13
|
-
name = self.name.sub! 'PaymentInstrument', 'PaymentCard'
|
|
14
13
|
if type == 'PAYMENT_CARD'
|
|
15
|
-
name = self.name.sub
|
|
14
|
+
name = self.name.sub 'PaymentInstrument', 'PaymentCard'
|
|
16
15
|
elsif type == 'BANK_ACCOUNT'
|
|
17
|
-
name = self.name.sub
|
|
16
|
+
name = self.name.sub 'PaymentInstrument', 'BankAccount'
|
|
18
17
|
end
|
|
19
|
-
|
|
20
18
|
return self.instance_eval name unless name.nil?
|
|
21
19
|
end
|
|
22
20
|
self
|
|
@@ -1,29 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
require_relative '../utils'
|
|
2
|
+
require_relative '../hal_resource'
|
|
3
|
+
require_relative '../pagination'
|
|
4
|
+
require_relative '../indifferent_hash'
|
|
5
5
|
|
|
6
6
|
module Finix
|
|
7
|
-
|
|
8
7
|
module Resource
|
|
9
|
-
|
|
10
8
|
include HalResource
|
|
11
9
|
|
|
12
|
-
def initialize(
|
|
13
|
-
|
|
10
|
+
def initialize(*args)
|
|
11
|
+
opts = args.slice!(0) || {}
|
|
12
|
+
href = opts.delete(:href)
|
|
13
|
+
@attributes = Finix::Utils.indifferent_read_access opts
|
|
14
14
|
|
|
15
|
-
@hyperlinks =
|
|
15
|
+
@hyperlinks = Finix::Utils.eval_class(self, IndifferentHash).new
|
|
16
16
|
@hyperlinks[:self] = href if href =~ URI::regexp
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
alias links hyperlinks
|
|
20
|
+
|
|
19
21
|
def hydrate(links)
|
|
20
22
|
links.each do |key, link|
|
|
21
23
|
property = key.sub(/.*?\./, '')
|
|
22
24
|
|
|
25
|
+
href = link[:href]
|
|
23
26
|
if property == 'self'
|
|
24
|
-
@hyperlinks[:self] =
|
|
27
|
+
@hyperlinks[:self] = href
|
|
25
28
|
else
|
|
26
|
-
|
|
29
|
+
split_uri = Finix.split_the_href(href).reverse!
|
|
30
|
+
cls = Finix.find_resource_cls split_uri[0]
|
|
31
|
+
cls = cls.nil? ? Finix.from_hypermedia_registry(href) : Finix::Utils.eval_class(self, Pagination)
|
|
32
|
+
@hyperlinks[property] = Finix::Utils.callable(cls.new :href => href)
|
|
27
33
|
end
|
|
28
34
|
end
|
|
29
35
|
end
|
|
@@ -96,9 +102,9 @@ module Finix
|
|
|
96
102
|
|
|
97
103
|
module ClassMethods
|
|
98
104
|
|
|
105
|
+
# this is class method, not callable from instance
|
|
99
106
|
def construct_from_response(payload)
|
|
100
107
|
payload = Finix::Utils.indifferent_read_access payload
|
|
101
|
-
|
|
102
108
|
links = payload.delete('_links') || {}
|
|
103
109
|
instance = self.new payload
|
|
104
110
|
instance.hydrate(links)
|
|
@@ -107,17 +113,22 @@ module Finix
|
|
|
107
113
|
|
|
108
114
|
def fetch(*arguments)
|
|
109
115
|
if arguments.nil? or arguments.empty? or arguments[0].nil? or arguments[0].to_s.empty?
|
|
110
|
-
href = Finix.
|
|
111
|
-
|
|
116
|
+
href = Finix.get_href self
|
|
117
|
+
# href = Finix.hypermedia_registry.key(self)
|
|
118
|
+
return Finix::Utils.eval_class(self, Pagination).new :href => href
|
|
112
119
|
end
|
|
113
120
|
|
|
114
121
|
options = arguments.slice!(0) or {}
|
|
115
122
|
if options.is_a? String and options =~ URI::regexp
|
|
116
123
|
href = options
|
|
117
124
|
else
|
|
118
|
-
href = Finix.
|
|
119
|
-
|
|
120
|
-
|
|
125
|
+
href = Finix.get_href(self) or Finix.get_href(self.class)
|
|
126
|
+
if options.is_a? Hash
|
|
127
|
+
options = Finix::Utils.indifferent_read_access options
|
|
128
|
+
id = options.delete('id')
|
|
129
|
+
elsif options.is_a? String
|
|
130
|
+
id = options
|
|
131
|
+
end
|
|
121
132
|
href = "#{href}/#{id}" unless id.nil?
|
|
122
133
|
end
|
|
123
134
|
|
|
@@ -125,9 +136,25 @@ module Finix
|
|
|
125
136
|
construct_from_response response.body
|
|
126
137
|
end
|
|
127
138
|
|
|
139
|
+
def pagination(*args)
|
|
140
|
+
href = Finix.get_href self
|
|
141
|
+
# href = Finix.hypermedia_registry.key(self)
|
|
142
|
+
opts = args.slice!(0) || {}
|
|
143
|
+
opts[:href] = href
|
|
144
|
+
Finix::Utils.eval_class(self, Pagination).new opts
|
|
145
|
+
end
|
|
146
|
+
|
|
128
147
|
alias find fetch
|
|
129
|
-
alias retrieve fetch
|
|
130
|
-
end
|
|
131
148
|
|
|
149
|
+
def retrieve(*args)
|
|
150
|
+
pager_or_resource = fetch *args
|
|
151
|
+
|
|
152
|
+
if pager_or_resource.is_a? Pagination
|
|
153
|
+
pager_or_resource.load! unless pager_or_resource.loaded
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
pager_or_resource
|
|
157
|
+
end
|
|
158
|
+
end
|
|
132
159
|
end
|
|
133
160
|
end
|
|
@@ -3,10 +3,11 @@ module Finix
|
|
|
3
3
|
include Finix::Resource
|
|
4
4
|
include Finix::HypermediaRegistry
|
|
5
5
|
|
|
6
|
-
define_hypermedia_types [:transfers]
|
|
6
|
+
define_hypermedia_types [:transfers, :funding_transfers, :fees]
|
|
7
7
|
|
|
8
|
-
def reverse(
|
|
9
|
-
|
|
8
|
+
def reverse(args=0)
|
|
9
|
+
atts = args.is_a?(Hash) ? {}.merge(args) : {:refund_amount => args}
|
|
10
|
+
self.reversals.create atts
|
|
10
11
|
end
|
|
11
12
|
end
|
|
12
13
|
end
|
data/lib/finix/resources/user.rb
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
require 'faraday'
|
|
2
|
-
|
|
2
|
+
require_relative '../errors'
|
|
3
3
|
|
|
4
4
|
module Faraday
|
|
5
5
|
|
|
6
6
|
class Response::RaiseApiError < Response::Middleware
|
|
7
|
-
|
|
8
7
|
def on_complete(response)
|
|
9
8
|
status_code = response[:status].to_i
|
|
10
9
|
error_class = Finix.errors_registry[status_code]
|
|
11
|
-
raise Finix.errors_registry[:unknown].new
|
|
12
|
-
raise error_class.new
|
|
10
|
+
raise Finix.errors_registry[:unknown].new response if error_class.nil? and status_code >= 400
|
|
11
|
+
raise error_class.new response if error_class
|
|
13
12
|
end
|
|
14
|
-
|
|
15
13
|
end
|
|
16
14
|
|
|
17
15
|
end
|
data/lib/finix/utils.rb
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
module Finix
|
|
2
2
|
module Utils
|
|
3
|
-
def eval_class(slf,
|
|
4
|
-
mod = slf.class.name.
|
|
5
|
-
mod = slf.name.
|
|
3
|
+
def eval_class(slf, cls)
|
|
4
|
+
mod = slf.class.name.sub(/::.*/, '') unless slf.kind_of? Class or slf.kind_of? Module
|
|
5
|
+
mod = slf.name.sub(/::.*/, '') if mod.nil?
|
|
6
|
+
name = demodulize cls.name
|
|
6
7
|
self.instance_eval "#{mod}::#{name}"
|
|
7
8
|
end
|
|
8
9
|
|
|
@@ -39,6 +40,10 @@ module Finix
|
|
|
39
40
|
indifferent
|
|
40
41
|
end
|
|
41
42
|
|
|
43
|
+
def demodulize(class_name_in_module)
|
|
44
|
+
class_name_in_module.to_s.sub(/^.*::/, '')
|
|
45
|
+
end
|
|
46
|
+
|
|
42
47
|
extend self
|
|
43
48
|
end
|
|
44
49
|
end
|
data/lib/finix/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,85 +1,43 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: finix
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- finix-payments
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-10-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 1.0.1
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 1.0.1
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: faraday_middleware
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.
|
|
33
|
+
version: 1.0.0
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: public_suffix
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ~>
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.4.6
|
|
48
|
-
type: :runtime
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ~>
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.4.6
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: json
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ~>
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '1.8'
|
|
62
|
-
type: :runtime
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ~>
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '1.8'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: addressable
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ~>
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '2.3'
|
|
76
|
-
type: :runtime
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ~>
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '2.3'
|
|
40
|
+
version: 1.0.0
|
|
83
41
|
description: Finix Ruby Client
|
|
84
42
|
email:
|
|
85
43
|
- support@finixpayments.com
|
|
@@ -87,34 +45,40 @@ executables: []
|
|
|
87
45
|
extensions: []
|
|
88
46
|
extra_rdoc_files: []
|
|
89
47
|
files:
|
|
90
|
-
- .
|
|
91
|
-
- .
|
|
92
|
-
- .
|
|
48
|
+
- ".circleci/config.yml"
|
|
49
|
+
- ".gitignore"
|
|
50
|
+
- ".rspec"
|
|
51
|
+
- ".ruby-gemset"
|
|
52
|
+
- ".ruby-version"
|
|
93
53
|
- Gemfile
|
|
94
54
|
- LICENSE.txt
|
|
95
55
|
- README.md
|
|
96
56
|
- Rakefile
|
|
97
|
-
- circle.yml
|
|
98
57
|
- finix.gemspec
|
|
99
58
|
- lib/finix.rb
|
|
100
59
|
- lib/finix/client.rb
|
|
101
|
-
- lib/finix/
|
|
60
|
+
- lib/finix/errors.rb
|
|
102
61
|
- lib/finix/hal_resource.rb
|
|
62
|
+
- lib/finix/indifferent_hash.rb
|
|
103
63
|
- lib/finix/pagination.rb
|
|
104
64
|
- lib/finix/resources.rb
|
|
105
65
|
- lib/finix/resources/application.rb
|
|
106
66
|
- lib/finix/resources/authorization.rb
|
|
107
67
|
- lib/finix/resources/bank_account.rb
|
|
108
68
|
- lib/finix/resources/dispute.rb
|
|
69
|
+
- lib/finix/resources/error.rb
|
|
109
70
|
- lib/finix/resources/evidence.rb
|
|
71
|
+
- lib/finix/resources/fee_profile.rb
|
|
110
72
|
- lib/finix/resources/hypermedia.rb
|
|
111
73
|
- lib/finix/resources/identity.rb
|
|
112
74
|
- lib/finix/resources/merchant.rb
|
|
75
|
+
- lib/finix/resources/merchant_profile.rb
|
|
113
76
|
- lib/finix/resources/payment_card.rb
|
|
114
77
|
- lib/finix/resources/payment_instrument.rb
|
|
115
78
|
- lib/finix/resources/processor.rb
|
|
116
79
|
- lib/finix/resources/refund.rb
|
|
117
80
|
- lib/finix/resources/resource.rb
|
|
81
|
+
- lib/finix/resources/risk_profile.rb
|
|
118
82
|
- lib/finix/resources/settlement.rb
|
|
119
83
|
- lib/finix/resources/token.rb
|
|
120
84
|
- lib/finix/resources/transfer.rb
|
|
@@ -136,17 +100,17 @@ require_paths:
|
|
|
136
100
|
- lib
|
|
137
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
102
|
requirements:
|
|
139
|
-
- -
|
|
103
|
+
- - ">="
|
|
140
104
|
- !ruby/object:Gem::Version
|
|
141
|
-
version: '
|
|
105
|
+
version: '2.0'
|
|
142
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
107
|
requirements:
|
|
144
|
-
- -
|
|
108
|
+
- - ">="
|
|
145
109
|
- !ruby/object:Gem::Version
|
|
146
110
|
version: '0'
|
|
147
111
|
requirements: []
|
|
148
112
|
rubyforge_project:
|
|
149
|
-
rubygems_version: 2.
|
|
113
|
+
rubygems_version: 2.7.10
|
|
150
114
|
signing_key:
|
|
151
115
|
specification_version: 4
|
|
152
116
|
summary: Finix Ruby Client
|
data/circle.yml
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
machine:
|
|
2
|
-
ruby:
|
|
3
|
-
version: 1.9.3
|
|
4
|
-
|
|
5
|
-
environment:
|
|
6
|
-
RUBY_VERSIONS: 1.9.3,2.0.0,2.1.10,2.2.5,2.2.6,2.3.1,2.3.3,2.4.0-preview3
|
|
7
|
-
PROCESSING_URL: https://api-staging.finix.io/
|
|
8
|
-
|
|
9
|
-
dependencies:
|
|
10
|
-
override:
|
|
11
|
-
- rvm get head
|
|
12
|
-
- rvm install $RUBY_VERSIONS
|
|
13
|
-
- rvm $RUBY_VERSIONS --verbose do gem install bundler
|
|
14
|
-
- rvm $RUBY_VERSIONS --verbose do bundle install
|
|
15
|
-
|
|
16
|
-
test:
|
|
17
|
-
override:
|
|
18
|
-
- rvm $RUBY_VERSIONS --verbose do bundle exec rake test
|
|
19
|
-
|
|
20
|
-
post:
|
|
21
|
-
- cp -Rf .report/ $CIRCLE_ARTIFACTS
|
|
22
|
-
|
|
23
|
-
deployment:
|
|
24
|
-
release:
|
|
25
|
-
tag: /v[0-9]+(\.[0-9]+)*/
|
|
26
|
-
owner: finix-payments
|
|
27
|
-
commands:
|
|
28
|
-
- |
|
|
29
|
-
curl -u ${rubygems_user}:${rubygems_password} https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
|
|
30
|
-
- chmod 0600 ~/.gem/credentials
|
|
31
|
-
- gem build *.gemspec
|
|
32
|
-
- gem push *.gem
|
data/lib/finix/error.rb
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
module Finix
|
|
2
|
-
|
|
3
|
-
class ResourceErrors < ::StandardError
|
|
4
|
-
attr_reader :response
|
|
5
|
-
attr_reader :errors
|
|
6
|
-
|
|
7
|
-
def initialize(response=nil)
|
|
8
|
-
@response = response
|
|
9
|
-
@errors = []
|
|
10
|
-
@response[:body]['_embedded']['errors'].each { |error| @errors.push Finix::ResourceError.new error}
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def to_s
|
|
14
|
-
"#{@errors}"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def inspect
|
|
18
|
-
to_s
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class ResourceError < ::StandardError
|
|
23
|
-
attr_reader :attributes
|
|
24
|
-
|
|
25
|
-
def initialize(error = {})
|
|
26
|
-
@attributes = {}
|
|
27
|
-
@attributes = @attributes.merge error
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def to_s
|
|
31
|
-
"#{self.class.name.split('::').last || ''} #{@attributes}"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class BadRequest < ResourceErrors; end
|
|
36
|
-
class Unauthorized < ResourceErrors; end
|
|
37
|
-
class Forbidden < ResourceErrors; end
|
|
38
|
-
class NotFound < ResourceErrors; end
|
|
39
|
-
class MethodNotAllowed < ResourceErrors; end
|
|
40
|
-
class UnprocessableEntity < ResourceErrors; end
|
|
41
|
-
class ServerError < ResourceErrors; end
|
|
42
|
-
end
|