fidor_api 0.0.2 → 0.1.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 +4 -4
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.travis.yml +5 -3
- data/CHANGELOG.md +114 -0
- data/Gemfile +3 -2
- data/README.md +12 -10
- data/lib/fidor_api/account.rb +7 -10
- data/lib/fidor_api/amount_attributes.rb +23 -20
- data/lib/fidor_api/approval_required.rb +9 -0
- data/lib/fidor_api/auth.rb +1 -1
- data/lib/fidor_api/beneficiary/ach.rb +39 -0
- data/lib/fidor_api/beneficiary/base.rb +118 -0
- data/lib/fidor_api/beneficiary/generic.rb +24 -0
- data/lib/fidor_api/beneficiary/p2p_account_number.rb +14 -0
- data/lib/fidor_api/beneficiary/p2p_phone.rb +14 -0
- data/lib/fidor_api/beneficiary/p2p_username.rb +14 -0
- data/lib/fidor_api/beneficiary/swift.rb +35 -0
- data/lib/fidor_api/beneficiary/unknown.rb +16 -0
- data/lib/fidor_api/beneficiary/utility.rb +35 -0
- data/lib/fidor_api/beneficiary.rb +27 -0
- data/lib/fidor_api/card.rb +31 -48
- data/lib/fidor_api/card_limit_attribute.rb +52 -0
- data/lib/fidor_api/card_limits.rb +6 -34
- data/lib/fidor_api/client.rb +8 -2
- data/lib/fidor_api/collection.rb +15 -6
- data/lib/fidor_api/confirmable_action.rb +45 -0
- data/lib/fidor_api/connectivity/connection.rb +113 -0
- data/lib/fidor_api/connectivity/endpoint.rb +82 -0
- data/lib/fidor_api/connectivity/resource.rb +76 -0
- data/lib/fidor_api/connectivity.rb +17 -0
- data/lib/fidor_api/constants.rb +3 -0
- data/lib/fidor_api/customer.rb +41 -23
- data/lib/fidor_api/customers/confirmations.rb +19 -0
- data/lib/fidor_api/errors.rb +14 -3
- data/lib/fidor_api/message.rb +17 -18
- data/lib/fidor_api/msisdn.rb +1 -1
- data/lib/fidor_api/password.rb +30 -0
- data/lib/fidor_api/preauth.rb +5 -12
- data/lib/fidor_api/session_token.rb +20 -0
- data/lib/fidor_api/transaction.rb +5 -12
- data/lib/fidor_api/transfer/ach.rb +46 -0
- data/lib/fidor_api/transfer/bank_internal.rb +37 -0
- data/lib/fidor_api/transfer/base.rb +36 -0
- data/lib/fidor_api/transfer/fps.rb +56 -0
- data/lib/fidor_api/transfer/generic.rb +134 -0
- data/lib/fidor_api/transfer/internal.rb +53 -0
- data/lib/fidor_api/transfer/p2p_account_number.rb +45 -0
- data/lib/fidor_api/transfer/p2p_phone.rb +45 -0
- data/lib/fidor_api/transfer/p2p_username.rb +45 -0
- data/lib/fidor_api/transfer/sepa.rb +56 -0
- data/lib/fidor_api/transfer/swift.rb +49 -0
- data/lib/fidor_api/transfer/utility.rb +50 -0
- data/lib/fidor_api/transfer.rb +13 -186
- data/lib/fidor_api/user.rb +12 -11
- data/lib/fidor_api/version.rb +1 -1
- data/lib/fidor_api.rb +39 -22
- metadata +37 -4
- data/lib/fidor_api/resource.rb +0 -84
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e901a140ae4373b030fc1acd73b528139ef6661f
|
4
|
+
data.tar.gz: a0cc6f973f426c1c28da0d44c2b845f79a33cf05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a303081e9be0a99ba14e063609a3047ca4dd2db7e9765bc8aeea4cbf4142d9dd2d5f71d5d3b8527131ece88c268105c510d46af0689144d5e5d436268cf7d869
|
7
|
+
data.tar.gz: 5ef3b95906b997d771ac9e44687ce3a3d5101585d33f90b2d5282226da026b47c2cbf7c3611a5ce7d47ad4dbd11a79cbfe18a9069fa740690bd0030c17e24287
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.4.0
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## v0.1.0
|
4
|
+
|
5
|
+
With this release this gem will start following the semantic versioning approach.
|
6
|
+
|
7
|
+
**Note**: This version contains two major changes which will break existing applications:
|
8
|
+
|
9
|
+
### How to initiate the client:
|
10
|
+
|
11
|
+
Before:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
client = FidorApi::Client.new(token: FidorApi::Token.new(access_token: "f859032a6ca0a4abb2be0583b8347937"))
|
15
|
+
```
|
16
|
+
|
17
|
+
After:
|
18
|
+
|
19
|
+
```
|
20
|
+
FidorApi::Connectivity.access_token = "f859032a6ca0a4abb2be0583b8347937"
|
21
|
+
```
|
22
|
+
|
23
|
+
### How to create resources:
|
24
|
+
|
25
|
+
Before:
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
transfer = client.build_internal_transfer(
|
29
|
+
account_id: 875,
|
30
|
+
receiver: "kycfull@fidor.de",
|
31
|
+
external_uid: "4279762F5",
|
32
|
+
subject: "Money for you",
|
33
|
+
amount: 1000
|
34
|
+
)
|
35
|
+
transfer.save
|
36
|
+
```
|
37
|
+
|
38
|
+
After:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
transfer = FidorApi::Transfer::Internal.new(
|
42
|
+
account_id: 875,
|
43
|
+
receiver: "kycfull@fidor.de",
|
44
|
+
external_uid: "4279762F5",
|
45
|
+
subject: "Money for you",
|
46
|
+
amount: 1000
|
47
|
+
)
|
48
|
+
transfer.save
|
49
|
+
```
|
50
|
+
|
51
|
+
* Also map errors returned on the `:base` field
|
52
|
+
* Support for `/transfers` and `/beneficiaries` endpoints` with routing types: (*Note*: Not supported in fidor.de & fidorbank.uk APIs)
|
53
|
+
* `ACH`
|
54
|
+
* `BANK_INTERNAL`
|
55
|
+
* `FOS_P2P_ACCOUNT_NUMBER`
|
56
|
+
* `FOS_P2P_PHONE`
|
57
|
+
* `FOS_P2P_USERNAME`
|
58
|
+
* `SWIFT`
|
59
|
+
* `UTILITY`
|
60
|
+
* Improve logger setup
|
61
|
+
* Add new `logger` config option to pass existing logger
|
62
|
+
* Add support for `faraday-detailed_logger` gem without adding additional dependency
|
63
|
+
* Support for `/confirmable/actions` endpoint
|
64
|
+
* New option `verify_ssl` (needed when testing against e.g. mock-services or fidor-internal test installations)
|
65
|
+
* Logging for `FidorApi::ClientError` cases
|
66
|
+
* New fields for contact- & bank-details in `/transfers` endpoint
|
67
|
+
* Support for `/session_tokens` endpoint
|
68
|
+
* Support for `/beneficiaries` endpoint
|
69
|
+
* Provide `total_entries` attribute in collections
|
70
|
+
* Support for `/messages/:id/content` endpoint
|
71
|
+
* Support for updating customer records
|
72
|
+
* New fields for customer endpoint
|
73
|
+
* Support Address attribute in cards endpoint
|
74
|
+
* Handle HTTP 303 with exception indicating the need to use confirmable-action
|
75
|
+
* Add unique_name attribute to beneficiaries
|
76
|
+
* Add support to activate and cancel cards
|
77
|
+
* Better mapping of error keys to support usage of i18n
|
78
|
+
* Suport for endpoints to reset & change password
|
79
|
+
* New way to build ressources (using `FidorApi::Transfers::ACH.new` instead of `client.build_ach_transfer`)
|
80
|
+
* Allow to update customers
|
81
|
+
* Improved Ruby 2.4 compatibility
|
82
|
+
|
83
|
+
## v0.0.2
|
84
|
+
|
85
|
+
All commits: https://github.com/klausmeyer/fidor_api/compare/v0.0.1...v0.0.2
|
86
|
+
|
87
|
+
* Gem can now be used in rails 5 projects
|
88
|
+
* `FidorApi::Client` added to improve token-management
|
89
|
+
* `remote_bic` field optional in `Transfer::SEPA`
|
90
|
+
* Amounts are now `BigDecimal` type
|
91
|
+
* `Resource#model_name` returns `Resource` instead of `FidorApi::Resource` now
|
92
|
+
* Collection implements `Enumerable`
|
93
|
+
* `Resource#persisted?` added to improve `ActiveRecord` style behaviour
|
94
|
+
* `Customer#gender` now returns `FidorApi::Customer::Gender`
|
95
|
+
* Basic support for signup (`Msisdn`, `Customer#save`)
|
96
|
+
* Support new endpoints
|
97
|
+
* `/cards`
|
98
|
+
* `/card_limits`
|
99
|
+
* `/messages`
|
100
|
+
* `/fps_payments` (:gb: specific)
|
101
|
+
* Provide validation errors returned in API in `Resource#errors`
|
102
|
+
|
103
|
+
## v0.0.1
|
104
|
+
|
105
|
+
* First release on rubygems.org
|
106
|
+
* oAuth support
|
107
|
+
* Basic support for the following endpoints:
|
108
|
+
* `/accounts`
|
109
|
+
* `/customers`
|
110
|
+
* `/preauths`
|
111
|
+
* `/transactions`
|
112
|
+
* `/internal_transfers`
|
113
|
+
* `/sepa_credit_transfers`
|
114
|
+
* `/users/current`
|
data/Gemfile
CHANGED
@@ -8,7 +8,8 @@ group :development, :test do
|
|
8
8
|
gem "rake", "~> 10.0"
|
9
9
|
gem "rspec", "~> 3.3"
|
10
10
|
gem "shoulda-matchers", "~> 2.8"
|
11
|
-
gem "vcr", "~>
|
12
|
-
gem "
|
11
|
+
gem "vcr", "~> 3.0"
|
12
|
+
gem "webmock"
|
13
|
+
gem "simplecov", github: "colszowka/simplecov"
|
13
14
|
gem "codeclimate-test-reporter", group: :test, require: nil
|
14
15
|
end
|
data/README.md
CHANGED
@@ -69,13 +69,12 @@ end
|
|
69
69
|
### 2. Fetching data
|
70
70
|
|
71
71
|
```ruby
|
72
|
-
|
72
|
+
FidorApi::Connectivity.access_token = "f859032a6ca0a4abb2be0583b8347937"
|
73
73
|
|
74
|
-
|
75
|
-
user = client.current_user
|
74
|
+
user = FidorApi::User.current
|
76
75
|
# => FidorApi::User
|
77
76
|
|
78
|
-
transactions =
|
77
|
+
transactions = FidorApi::Transaction.all
|
79
78
|
# => FidorApi::Collection
|
80
79
|
|
81
80
|
transaction = transactions.first
|
@@ -85,11 +84,9 @@ transaction = transactions.first
|
|
85
84
|
### 3. Creating transfers
|
86
85
|
|
87
86
|
```ruby
|
88
|
-
|
87
|
+
FidorApi::Connectivity.access_token = "f859032a6ca0a4abb2be0583b8347937"
|
89
88
|
|
90
|
-
|
91
|
-
|
92
|
-
transfer = client.build_internal_transfer(
|
89
|
+
transfer = FidorApi::Transfer::Internal.new(
|
93
90
|
account_id: 875,
|
94
91
|
receiver: "kycfull@fidor.de",
|
95
92
|
external_uid: "4279762F5",
|
@@ -99,7 +96,9 @@ transfer = client.build_internal_transfer(
|
|
99
96
|
# => FidorApi::Transfer::Internal
|
100
97
|
|
101
98
|
transfer.save
|
102
|
-
# => true
|
99
|
+
# => true
|
100
|
+
# or
|
101
|
+
# => false and `transfer.errors` containing details
|
103
102
|
```
|
104
103
|
|
105
104
|
## Development
|
@@ -112,7 +111,10 @@ To install this gem onto your local machine, run `bundle exec rake install`.
|
|
112
111
|
|
113
112
|
Bug reports and pull requests are welcome on GitHub at https://github.com/klausmeyer/fidor_api.
|
114
113
|
|
114
|
+
## Changelog
|
115
|
+
|
116
|
+
Have a look at the [CHANGELOG](CHANGELOG.md) for details.
|
117
|
+
|
115
118
|
## License
|
116
119
|
|
117
120
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
118
|
-
|
data/lib/fidor_api/account.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module FidorApi
|
2
|
-
|
3
|
-
class Account < Resource
|
2
|
+
class Account < Connectivity::Resource
|
4
3
|
extend ModelAttribute
|
5
4
|
extend AmountAttributes
|
6
5
|
|
6
|
+
self.endpoint = Connectivity::Endpoint.new('/accounts', :collection)
|
7
|
+
|
7
8
|
attribute :id, :integer
|
8
9
|
attribute :account_number, :string
|
9
10
|
attribute :iban, :string
|
@@ -22,12 +23,8 @@ module FidorApi
|
|
22
23
|
amount_attribute :cash_flow_per_year
|
23
24
|
amount_attribute :overdraft
|
24
25
|
|
25
|
-
def self.
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.first(access_token)
|
30
|
-
all(access_token, page: 1, per_page: 1).first
|
26
|
+
def self.first
|
27
|
+
all(page: 1, per_page: 1).first
|
31
28
|
end
|
32
29
|
|
33
30
|
def customers=(array)
|
@@ -36,11 +33,11 @@ module FidorApi
|
|
36
33
|
|
37
34
|
module ClientSupport
|
38
35
|
def accounts(options = {})
|
39
|
-
Account.all(
|
36
|
+
Account.all(options)
|
40
37
|
end
|
41
38
|
|
42
39
|
def first_account
|
43
|
-
Account.first
|
40
|
+
Account.first
|
44
41
|
end
|
45
42
|
end
|
46
43
|
end
|
@@ -1,27 +1,30 @@
|
|
1
|
-
module
|
2
|
-
|
3
|
-
base.instance_variable_set('@amount_attributes', [])
|
4
|
-
end
|
5
|
-
|
6
|
-
def amount_attribute(name)
|
7
|
-
@amount_attributes << name
|
1
|
+
module FidorApi
|
2
|
+
module AmountAttributes
|
8
3
|
|
9
|
-
|
10
|
-
|
4
|
+
def self.extended(base)
|
5
|
+
base.instance_variable_set('@amount_attributes', [])
|
11
6
|
end
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
8
|
+
def amount_attribute(name)
|
9
|
+
@amount_attributes << name
|
10
|
+
|
11
|
+
define_method name do
|
12
|
+
BigDecimal.new((instance_variable_get("@#{name}") / 100.00).to_s) if instance_variable_get("@#{name}").present?
|
13
|
+
end
|
14
|
+
|
15
|
+
define_method "#{name}=" do |value|
|
16
|
+
if value.instance_of?(BigDecimal)
|
17
|
+
instance_variable_set("@#{name}", (value * 100.00).to_i)
|
18
|
+
elsif value.class.name.in?(INTEGER_CLASSES) || value.instance_of?(NilClass)
|
19
|
+
instance_variable_set("@#{name}", value)
|
20
|
+
else
|
21
|
+
raise ArgumentError, "Must be either Fixnum (1234) or BigDecimal (12.34)."
|
22
|
+
end
|
20
23
|
end
|
21
24
|
end
|
22
|
-
end
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
+
def attributes
|
27
|
+
super + @amount_attributes
|
28
|
+
end
|
26
29
|
end
|
27
|
-
end
|
30
|
+
end
|
data/lib/fidor_api/auth.rb
CHANGED
@@ -28,7 +28,7 @@ module FidorApi
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def connection
|
31
|
-
Faraday.new(url: FidorApi.configuration.oauth_url) do |config|
|
31
|
+
Faraday.new(url: FidorApi.configuration.oauth_url, ssl: { verify: FidorApi.configuration.verify_ssl }) do |config|
|
32
32
|
config.use Faraday::Request::BasicAuthentication, FidorApi.configuration.client_id, FidorApi.configuration.client_secret
|
33
33
|
config.request :url_encoded
|
34
34
|
config.response :logger if FidorApi.configuration.logging
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class ACH < Base
|
4
|
+
include Generic
|
5
|
+
|
6
|
+
attribute :account_number, :string
|
7
|
+
attribute :routing_code, :string
|
8
|
+
|
9
|
+
validates :contact_name, presence: true
|
10
|
+
validates :account_number, presence: true
|
11
|
+
validates :routing_code, presence: true
|
12
|
+
|
13
|
+
def set_attributes(attrs = {})
|
14
|
+
self.account_number = attrs.fetch("routing_info", {})["account_number"]
|
15
|
+
self.routing_code = attrs.fetch("routing_info", {})["routing_code"]
|
16
|
+
super(attrs.except("routing_type", "routing_info"))
|
17
|
+
end
|
18
|
+
|
19
|
+
def as_json_routing_type
|
20
|
+
"ACH"
|
21
|
+
end
|
22
|
+
|
23
|
+
def as_json_routing_info
|
24
|
+
{
|
25
|
+
account_number: account_number,
|
26
|
+
routing_code: routing_code
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
module ClientSupport
|
33
|
+
def build_ach_beneficiary(attributes = {})
|
34
|
+
Beneficiary::ACH.new(attributes)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class Base < Connectivity::Resource
|
4
|
+
ROUTING_INFO_ERROR_PREFIX = "routing_info.".freeze
|
5
|
+
|
6
|
+
self.endpoint = Connectivity::Endpoint.new('/beneficiaries', :collection)
|
7
|
+
|
8
|
+
attr_accessor :confirmable_action
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def new(hash={})
|
12
|
+
if self == Base
|
13
|
+
class_for_response_hash(hash).new hash
|
14
|
+
else
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def delete(id)
|
20
|
+
endpoint.for(new(id: id)).delete
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def class_for_response_hash(hash)
|
27
|
+
{
|
28
|
+
"FOS_P2P_ACCOUNT_NUMBER" => FidorApi::Beneficiary::P2pAccountNumber,
|
29
|
+
"FOS_P2P_PHONE" => FidorApi::Beneficiary::P2pPhone,
|
30
|
+
"FOS_P2P_USERNAME" => FidorApi::Beneficiary::P2pUsername,
|
31
|
+
"SWIFT" => FidorApi::Beneficiary::Swift,
|
32
|
+
"UTILITY" => FidorApi::Beneficiary::Utility
|
33
|
+
}.fetch(hash["routing_type"], FidorApi::Beneficiary::Unknown)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_attributes(attrs = {})
|
38
|
+
self.contact_name = attrs.fetch("contact", {})["name"]
|
39
|
+
self.contact_address_line_1 = attrs.fetch("contact", {})["address_line_1"]
|
40
|
+
self.contact_address_line_2 = attrs.fetch("contact", {})["address_line_2"]
|
41
|
+
self.contact_city = attrs.fetch("contact", {})["city"]
|
42
|
+
self.contact_country = attrs.fetch("contact", {})["country"]
|
43
|
+
|
44
|
+
self.bank_name = attrs.fetch("bank", {})["name"]
|
45
|
+
self.bank_address_line_1 = attrs.fetch("bank", {})["address_line_1"]
|
46
|
+
self.bank_address_line_2 = attrs.fetch("bank", {})["address_line_2"]
|
47
|
+
self.bank_city = attrs.fetch("bank", {})["city"]
|
48
|
+
self.bank_country = attrs.fetch("bank", {})["country"]
|
49
|
+
|
50
|
+
super(attrs.except("contact", "bank", "routing_type", "routing_info"))
|
51
|
+
end
|
52
|
+
|
53
|
+
def save
|
54
|
+
fail InvalidRecordError unless valid?
|
55
|
+
super
|
56
|
+
end
|
57
|
+
|
58
|
+
def as_json
|
59
|
+
{
|
60
|
+
account_id: account_id,
|
61
|
+
unique_name: unique_name,
|
62
|
+
contact: {
|
63
|
+
name: contact_name,
|
64
|
+
address_line_1: contact_address_line_1,
|
65
|
+
address_line_2: contact_address_line_2,
|
66
|
+
city: contact_city,
|
67
|
+
country: contact_country
|
68
|
+
}.compact,
|
69
|
+
bank: {
|
70
|
+
name: bank_name,
|
71
|
+
address_line_1: bank_address_line_1,
|
72
|
+
address_line_2: bank_address_line_2,
|
73
|
+
city: bank_city,
|
74
|
+
country: bank_country
|
75
|
+
}.compact,
|
76
|
+
routing_type: as_json_routing_type,
|
77
|
+
routing_info: as_json_routing_info
|
78
|
+
}.compact
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def remote_create
|
84
|
+
response = super
|
85
|
+
if path = response.headers["X-Fidor-Confirmation-Path"]
|
86
|
+
self.confirmable_action = ConfirmableAction.new(id: path.split("/").last)
|
87
|
+
end
|
88
|
+
response
|
89
|
+
end
|
90
|
+
|
91
|
+
def remote_update(*attributes)
|
92
|
+
response = super
|
93
|
+
if path = response.headers["X-Fidor-Confirmation-Path"]
|
94
|
+
self.confirmable_action = ConfirmableAction.new(id: path.split("/").last)
|
95
|
+
end
|
96
|
+
response
|
97
|
+
end
|
98
|
+
|
99
|
+
def map_errors(fields)
|
100
|
+
fields.each do |hash|
|
101
|
+
field = hash["field"].to_sym
|
102
|
+
key = hash["key"].try :to_sym
|
103
|
+
|
104
|
+
if field == :base || respond_to?(field)
|
105
|
+
if key
|
106
|
+
errors.add(field, key, message: hash["message"])
|
107
|
+
else
|
108
|
+
errors.add(field, hash["message"])
|
109
|
+
end
|
110
|
+
elsif hash["field"].start_with?(ROUTING_INFO_ERROR_PREFIX)
|
111
|
+
invalid_field = hash["field"][ROUTING_INFO_ERROR_PREFIX.size..-1]
|
112
|
+
errors.add(invalid_field, hash["key"].to_sym, message: hash["message"])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
module Generic
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ModelAttribute
|
6
|
+
|
7
|
+
base.attribute :id, :string
|
8
|
+
base.attribute :account_id, :string
|
9
|
+
base.attribute :unique_name, :string
|
10
|
+
base.attribute :contact_name, :string
|
11
|
+
base.attribute :contact_address_line_1, :string
|
12
|
+
base.attribute :contact_address_line_2, :string
|
13
|
+
base.attribute :contact_city, :string
|
14
|
+
base.attribute :contact_country, :string
|
15
|
+
base.attribute :bank_name, :string
|
16
|
+
base.attribute :bank_address_line_1, :string
|
17
|
+
base.attribute :bank_address_line_2, :string
|
18
|
+
base.attribute :bank_city, :string
|
19
|
+
base.attribute :bank_country, :string
|
20
|
+
base.attribute :verified, :boolean
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class P2pAccountNumber < Base
|
4
|
+
include Generic
|
5
|
+
|
6
|
+
attribute :account_number, :string
|
7
|
+
|
8
|
+
def set_attributes(attrs = {})
|
9
|
+
self.account_number = attrs.fetch("routing_info", {})["account_number"]
|
10
|
+
super(attrs.except("routing_type", "routing_info"))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class P2pPhone < Base
|
4
|
+
include Generic
|
5
|
+
|
6
|
+
attribute :mobile_phone_number, :string
|
7
|
+
|
8
|
+
def set_attributes(attrs = {})
|
9
|
+
self.mobile_phone_number = attrs.fetch("routing_info", {})["mobile_phone_number"]
|
10
|
+
super(attrs.except("routing_type", "routing_info"))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class P2pUsername < Base
|
4
|
+
include Generic
|
5
|
+
|
6
|
+
attribute :username, :string
|
7
|
+
|
8
|
+
def set_attributes(attrs = {})
|
9
|
+
self.username = attrs.fetch("routing_info", {})["username"]
|
10
|
+
super(attrs.except("routing_type", "routing_info"))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class Swift < Base
|
4
|
+
include Generic
|
5
|
+
|
6
|
+
attribute :account_number, :string
|
7
|
+
attribute :swift_code, :string
|
8
|
+
attribute :account_currency, :string
|
9
|
+
|
10
|
+
validates :account_number, presence: true
|
11
|
+
validates :swift_code, presence: true
|
12
|
+
validates :contact_name, presence: true
|
13
|
+
validates :account_currency, presence: true
|
14
|
+
|
15
|
+
def set_attributes(attrs = {})
|
16
|
+
self.account_number = attrs.fetch("routing_info", {})["account_number"]
|
17
|
+
self.swift_code = attrs.fetch("routing_info", {})["swift_code"]
|
18
|
+
self.account_currency = attrs.fetch("routing_info", {})["account_currency"]
|
19
|
+
super(attrs.except("routing_type", "routing_info"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def as_json_routing_type
|
23
|
+
"SWIFT"
|
24
|
+
end
|
25
|
+
|
26
|
+
def as_json_routing_info
|
27
|
+
{
|
28
|
+
account_number: account_number,
|
29
|
+
swift_code: swift_code,
|
30
|
+
account_currency: account_currency
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class Unknown < Base
|
4
|
+
include Generic
|
5
|
+
|
6
|
+
attribute :routing_type, :string
|
7
|
+
attribute :routing_info, :json
|
8
|
+
|
9
|
+
def set_attributes(attrs = {})
|
10
|
+
self.routing_type = attrs["routing_type"]
|
11
|
+
self.routing_info = attrs["routing_info"]
|
12
|
+
super(attrs.except("routing_type", "routing_info"))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
class Utility < Base
|
4
|
+
include Generic
|
5
|
+
|
6
|
+
attribute :utility_provider, :string
|
7
|
+
attribute :utility_service, :string
|
8
|
+
attribute :utility_service_number, :string
|
9
|
+
|
10
|
+
validates :utility_provider, presence: true
|
11
|
+
validates :utility_service, presence: true
|
12
|
+
validates :utility_service_number, presence: true
|
13
|
+
validates :unique_name, presence: true
|
14
|
+
|
15
|
+
def set_attributes(attrs = {})
|
16
|
+
self.utility_provider = attrs.fetch("routing_info", {})["utility_provider"]
|
17
|
+
self.utility_service = attrs.fetch("routing_info", {})["utility_service"]
|
18
|
+
self.utility_service_number = attrs.fetch("routing_info", {})["utility_service_number"]
|
19
|
+
super(attrs.except("routing_type", "routing_info"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def as_json_routing_type
|
23
|
+
"UTILITY"
|
24
|
+
end
|
25
|
+
|
26
|
+
def as_json_routing_info
|
27
|
+
{
|
28
|
+
utility_provider: utility_provider,
|
29
|
+
utility_service: utility_service,
|
30
|
+
utility_service_number: utility_service_number
|
31
|
+
}
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module FidorApi
|
2
|
+
module Beneficiary
|
3
|
+
autoload :Base, 'fidor_api/beneficiary/base'
|
4
|
+
autoload :Generic, 'fidor_api/beneficiary/generic'
|
5
|
+
autoload :ACH, 'fidor_api/beneficiary/ach'
|
6
|
+
autoload :P2pAccountNumber, 'fidor_api/beneficiary/p2p_account_number'
|
7
|
+
autoload :P2pPhone, 'fidor_api/beneficiary/p2p_phone'
|
8
|
+
autoload :P2pUsername, 'fidor_api/beneficiary/p2p_username'
|
9
|
+
autoload :Swift, 'fidor_api/beneficiary/swift'
|
10
|
+
autoload :Unknown, 'fidor_api/beneficiary/unknown'
|
11
|
+
autoload :Utility, 'fidor_api/beneficiary/utility'
|
12
|
+
|
13
|
+
module ClientSupport
|
14
|
+
def beneficiaries(options = {})
|
15
|
+
Beneficiary::Base.all(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def beneficiary(id)
|
19
|
+
Beneficiary::Base.find(id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete_beneficiary(id)
|
23
|
+
Beneficiary::Base.delete(id)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|