faithteams-api 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/CODEOWNERS +1 -0
- data/.github/CONTRIBUTING.md +35 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +8 -0
- data/.github/workflows/jeweler.yml +11 -0
- data/.github/workflows/puller.yml +17 -0
- data/.gitignore +16 -0
- data/.rspec +2 -0
- data/.rubocop.yml +227 -0
- data/.tool-versions +1 -0
- data/CHANGELOG.md +70 -0
- data/CODE_OF_CONDUCT.md +128 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +171 -0
- data/Guardfile +50 -0
- data/LICENSE +21 -0
- data/README.md +85 -0
- data/Rakefile +8 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/faithteams-api.gemspec +47 -0
- data/guides/api_client_interface.md +18 -0
- data/guides/release-process.md +11 -0
- data/lib/faithteams/api/v2/connection.rb +142 -0
- data/lib/faithteams/api/v2/entity/base.rb +36 -0
- data/lib/faithteams/api/v2/entity/batch.rb +68 -0
- data/lib/faithteams/api/v2/entity/contribution.rb +19 -0
- data/lib/faithteams/api/v2/entity/contribution_record.rb +137 -0
- data/lib/faithteams/api/v2/entity/contribution_type.rb +37 -0
- data/lib/faithteams/api/v2/entity/fund.rb +52 -0
- data/lib/faithteams/api/v2/entity/person.rb +77 -0
- data/lib/faithteams/api/v2/entity.rb +17 -0
- data/lib/faithteams/api/v2/error/no_search_parameter_provided.rb +12 -0
- data/lib/faithteams/api/v2/error/request.rb +46 -0
- data/lib/faithteams/api/v2/error.rb +13 -0
- data/lib/faithteams/api/v2/gateway.rb +51 -0
- data/lib/faithteams/api/v2/gateway_base.rb +25 -0
- data/lib/faithteams/api/v2/resource/base.rb +46 -0
- data/lib/faithteams/api/v2/resource/batch.rb +58 -0
- data/lib/faithteams/api/v2/resource/contribution.rb +39 -0
- data/lib/faithteams/api/v2/resource/contribution_type.rb +38 -0
- data/lib/faithteams/api/v2/resource/fund.rb +22 -0
- data/lib/faithteams/api/v2/resource/person.rb +48 -0
- data/lib/faithteams/api/v2/resource/user.rb +40 -0
- data/lib/faithteams/api/v2/resource.rb +18 -0
- data/lib/faithteams/api/v2.rb +15 -0
- data/lib/faithteams/api.rb +8 -0
- data/lib/faithteams/version.rb +6 -0
- data/lib/faithteams.rb +7 -0
- data/thunder-tests/.gitignore +2 -0
- data/thunder-tests/collections/tc_col_faithteams.json +2390 -0
- data/thunder-tests/environments/tc_env_faithteams.json +59 -0
- data/thunder-tests/faithteams.env.template +5 -0
- metadata +283 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Entity
|
7
|
+
# Wraps a faithteams contribution object.
|
8
|
+
class Contribution < Base
|
9
|
+
# @return [Array<ContributionRecord>] the contribution records
|
10
|
+
def records
|
11
|
+
attributes.map do |record|
|
12
|
+
FaithTeams::API::V2::Entity::ContributionRecord.new(attributes: record)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Entity
|
7
|
+
# Wraps a faithteams contribution_record object.
|
8
|
+
class ContributionRecord < Base
|
9
|
+
# @return [Float, nil]
|
10
|
+
def amount
|
11
|
+
read_attribute(:amount)
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Integer, nil]
|
15
|
+
def batch_id
|
16
|
+
read_attribute(:batchId)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String, nil]
|
20
|
+
def check_number
|
21
|
+
read_attribute(:checkNumber).presence
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Integer, nil]
|
25
|
+
def contribution_id
|
26
|
+
read_attribute(:contributionId)
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Integer, nil]
|
30
|
+
def contribution_type_id
|
31
|
+
read_attribute(:contributionTypeId)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [String, nil]
|
35
|
+
def contribution_type_name
|
36
|
+
read_attribute(:contributionTypeName).presence
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [String, nil]
|
40
|
+
def created_datetime
|
41
|
+
read_attribute(:createdDtm).presence
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Integer, nil]
|
45
|
+
def created_user_id
|
46
|
+
read_attribute(:createdUser)
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [Float, nil]
|
50
|
+
def fee
|
51
|
+
read_attribute(:fee)
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [Integer, nil]
|
55
|
+
def fund_id
|
56
|
+
read_attribute(:fundId)
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [String, nil]
|
60
|
+
def fund_name
|
61
|
+
read_attribute(:fundName).presence
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [String, nil]
|
65
|
+
def give_datetime
|
66
|
+
read_attribute(:giveDtm).presence
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [Float, nil]
|
70
|
+
def net_amount
|
71
|
+
read_attribute(:netAmount)
|
72
|
+
end
|
73
|
+
|
74
|
+
# @return [String, nil]
|
75
|
+
def note
|
76
|
+
read_attribute(:note).presence
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [Integer, nil]
|
80
|
+
def org_id
|
81
|
+
read_attribute(:orgId)
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [Integer, nil]
|
85
|
+
def parent_id
|
86
|
+
read_attribute(:parentId)
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [Integer, nil]
|
90
|
+
def person_id
|
91
|
+
read_attribute(:personId)
|
92
|
+
end
|
93
|
+
|
94
|
+
# @return [Integer, nil]
|
95
|
+
def person_id_2
|
96
|
+
read_attribute(:personId2)
|
97
|
+
end
|
98
|
+
|
99
|
+
# @return [String, nil] "H" for header, "D" for detail
|
100
|
+
def record_type
|
101
|
+
read_attribute(:recordType).presence
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [String, nil] "A" for active?
|
105
|
+
def status
|
106
|
+
read_attribute(:status).presence
|
107
|
+
end
|
108
|
+
|
109
|
+
# @return [Float, nil]
|
110
|
+
def total_amount
|
111
|
+
read_attribute(:totalAmount)
|
112
|
+
end
|
113
|
+
|
114
|
+
# @return [String, nil]
|
115
|
+
def updated_datetime
|
116
|
+
read_attribute(:updatedDtm).presence
|
117
|
+
end
|
118
|
+
|
119
|
+
# @return [Integer, nil]
|
120
|
+
def updated_user_id
|
121
|
+
read_attribute(:updatedUser)
|
122
|
+
end
|
123
|
+
|
124
|
+
# @return [Boolean]
|
125
|
+
def header?
|
126
|
+
record_type&.upcase == "H"
|
127
|
+
end
|
128
|
+
|
129
|
+
# @return [Boolean]
|
130
|
+
def detail?
|
131
|
+
record_type&.upcase == "D"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Entity
|
7
|
+
# Wraps a faithteams contribution type object.
|
8
|
+
class ContributionType < Base
|
9
|
+
# @return [Integer, nil]
|
10
|
+
def id
|
11
|
+
read_attribute(:contributionTypeId)
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [String, nil]
|
15
|
+
def name
|
16
|
+
read_attribute(:name).presence
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String, nil] "A" for active, "I" for inactive
|
20
|
+
def status
|
21
|
+
read_attribute(:status).presence
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Boolean]
|
25
|
+
def tithely?
|
26
|
+
(name || "").strip.downcase == "tithely"
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Boolean]
|
30
|
+
def active?
|
31
|
+
(status || "I").strip.upcase == "A"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Entity
|
7
|
+
# Wraps a faithteams fund object.
|
8
|
+
class Fund < Base
|
9
|
+
# @return [String, nil] "N" for no, "Y" for yes
|
10
|
+
def default
|
11
|
+
read_attribute(:isDefault).presence
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [String, nil]
|
15
|
+
def description
|
16
|
+
read_attribute(:description).presence
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Integer, nil]
|
20
|
+
def fund_id
|
21
|
+
read_attribute(:fundId)
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [String, nil]
|
25
|
+
def name
|
26
|
+
read_attribute(:name).presence
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String, nil] "A" for active, "I" for inactive
|
30
|
+
def online_status
|
31
|
+
read_attribute(:onlineStatus).presence
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [Integer, nil]
|
35
|
+
def org_id
|
36
|
+
read_attribute(:orgId)
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [String, nil] "A" for active, "I" for inactive
|
40
|
+
def status
|
41
|
+
read_attribute(:status).presence
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [String, nil] "T" for true?, "Y" for yes?
|
45
|
+
def tax_deductible
|
46
|
+
read_attribute(:taxDeductible).presence
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Entity
|
7
|
+
# Wraps an faithteams person object
|
8
|
+
class Person < Base
|
9
|
+
# @return [String, nil]
|
10
|
+
def email
|
11
|
+
read_attribute(:homeEmail).presence
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [String, nil]
|
15
|
+
def first_name
|
16
|
+
read_attribute(:firstName).presence
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String, nil]
|
20
|
+
def home_address_city
|
21
|
+
read_attribute(:homeAddressCity).presence
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [String, nil]
|
25
|
+
def home_address_country
|
26
|
+
read_attribute(:homeAddressCountry).presence
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String, nil]
|
30
|
+
def home_address_state
|
31
|
+
read_attribute(:homeAddressState).presence
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [String, nil]
|
35
|
+
def home_address_street_line1
|
36
|
+
read_attribute(:homeAddressStreetLine1).presence
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [String, nil]
|
40
|
+
def home_address_street_line2
|
41
|
+
read_attribute(:homeAddressStreetLine2).presence
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [String, nil]
|
45
|
+
def home_address_zip
|
46
|
+
read_attribute(:homeAddressZip).presence
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [String, nil]
|
50
|
+
def home_phone_number
|
51
|
+
read_attribute(:homePhoneNumber).presence
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [Integer, nil]
|
55
|
+
def id
|
56
|
+
read_attribute(:personId)
|
57
|
+
end
|
58
|
+
|
59
|
+
# @return [String, nil]
|
60
|
+
def last_name
|
61
|
+
read_attribute(:lastName).presence
|
62
|
+
end
|
63
|
+
|
64
|
+
# @return [Integer, nil]
|
65
|
+
def org_id
|
66
|
+
read_attribute(:orgId)
|
67
|
+
end
|
68
|
+
|
69
|
+
# @return [String, nil] "A" for active, "I" for inactive
|
70
|
+
def status
|
71
|
+
read_attribute(:status).presence
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "entity/base"
|
4
|
+
require_relative "entity/batch"
|
5
|
+
require_relative "entity/contribution"
|
6
|
+
require_relative "entity/contribution_record"
|
7
|
+
require_relative "entity/contribution_type"
|
8
|
+
require_relative "entity/fund"
|
9
|
+
require_relative "entity/person"
|
10
|
+
|
11
|
+
module FaithTeams
|
12
|
+
module API
|
13
|
+
module V2
|
14
|
+
module Entity; end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Error
|
7
|
+
# A request failed to complete successfully.
|
8
|
+
class Request < StandardError
|
9
|
+
attr_reader :response
|
10
|
+
|
11
|
+
# Custom faithteams error about invalid API key
|
12
|
+
UNAUTHORIZED_ERROR_MESSAGE = "Unauthorized"
|
13
|
+
|
14
|
+
# Custom faithteams error when a resource is not found
|
15
|
+
NOT_FOUND_ERROR_MESSAGE = "Not Found"
|
16
|
+
|
17
|
+
# @param response [HTTP::Response]
|
18
|
+
# @param message [String]
|
19
|
+
def initialize(response:, message: "Request failed", skip_failure_message: false)
|
20
|
+
@response = response
|
21
|
+
message += ": #{failure_message}" unless failure_message.blank? || skip_failure_message
|
22
|
+
super(message)
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [String]
|
26
|
+
def failure_message
|
27
|
+
@failure_message ||= response.parse(:json).dig("message") rescue ""
|
28
|
+
rescue JSON::ParserError => e
|
29
|
+
e.capture
|
30
|
+
response.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Boolean]
|
34
|
+
def unauthorized?
|
35
|
+
failure_message == UNAUTHORIZED_ERROR_MESSAGE
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Boolean]
|
39
|
+
def not_found?
|
40
|
+
failure_message == NOT_FOUND_ERROR_MESSAGE
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "gateway_base"
|
4
|
+
|
5
|
+
module FaithTeams
|
6
|
+
module API
|
7
|
+
module V2
|
8
|
+
# Central gateway for all API resources
|
9
|
+
class Gateway < GatewayBase
|
10
|
+
# @param connection [FaithTeams::API::V2::Connection]
|
11
|
+
def initialize(connection:)
|
12
|
+
@connection = connection
|
13
|
+
end
|
14
|
+
|
15
|
+
# @return [Resource::Batch]
|
16
|
+
def batch
|
17
|
+
@batch ||= Resource::Batch.new(connection: connection)
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [Resource::Fund]
|
21
|
+
def fund
|
22
|
+
@fund ||= Resource::Fund.new(connection: connection)
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Resource::Person]
|
26
|
+
def person
|
27
|
+
@person ||= Resource::Person.new(connection: connection)
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [Resource::Contribution]
|
31
|
+
def contribution
|
32
|
+
@contribution ||= Resource::Contribution.new(connection: connection)
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [Resource::User]
|
36
|
+
def user
|
37
|
+
@user ||= Resource::User.new(connection: connection)
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Resource::ContributionType]
|
41
|
+
def contribution_type
|
42
|
+
@contribution_type ||= Resource::ContributionType.new(connection: connection)
|
43
|
+
end
|
44
|
+
|
45
|
+
def valid_connection?
|
46
|
+
connection.valid?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
# A base class for all FaithTeam API versions
|
7
|
+
class GatewayBase
|
8
|
+
# @param connection [Integrations::API::Connection]
|
9
|
+
def initialize(connection:)
|
10
|
+
@connection = connection
|
11
|
+
end
|
12
|
+
|
13
|
+
# Required by integrations-gem
|
14
|
+
# @return [Boolean]
|
15
|
+
def valid_connection?
|
16
|
+
connection.valid?
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
attr_reader :connection
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/core_ext/hash/keys"
|
4
|
+
require "active_support/core_ext/object/blank"
|
5
|
+
|
6
|
+
module FaithTeams
|
7
|
+
module API
|
8
|
+
module V2
|
9
|
+
module Resource
|
10
|
+
# Common Resource functionality
|
11
|
+
# Additional methods can be added but the following methods should not be missing
|
12
|
+
class Base < GatewayBase
|
13
|
+
# @param id [Integer] The contribution payment_id.
|
14
|
+
# @return [Entity::Base, nil]
|
15
|
+
def find(id:)
|
16
|
+
raise NotImplementedError
|
17
|
+
end
|
18
|
+
|
19
|
+
# @param args [Hash] Key values to search with
|
20
|
+
# @return [Array<Entity::Base>]
|
21
|
+
def search(**args)
|
22
|
+
raise NotImplementedError
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param entity [Entity::Base]
|
26
|
+
# @return [Entity::Base, false]
|
27
|
+
def create(entity:)
|
28
|
+
raise NotImplementedError
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param entity [Entity::Base]
|
32
|
+
# @return [Entity::Base, false]
|
33
|
+
def update(entity:)
|
34
|
+
raise NotImplementedError
|
35
|
+
end
|
36
|
+
|
37
|
+
# @param id [#to_s] ID of the entity to delete
|
38
|
+
# @return [Boolean]
|
39
|
+
def delete(id:)
|
40
|
+
raise NotImplementedError
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Resource
|
7
|
+
# Batch resource
|
8
|
+
class Batch < Base
|
9
|
+
# @param args [Hash] Keyword args
|
10
|
+
# @return [Array<Entity::Batch>]
|
11
|
+
def search(**args)
|
12
|
+
found = connection.get(path: "/batches", params: args)["data"]
|
13
|
+
return [] unless found.present?
|
14
|
+
|
15
|
+
found.map { |b| Entity::Batch.new(attributes: b) }
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param id [Integer]
|
19
|
+
# @return [Entity::Batch, nil] containing all batch details
|
20
|
+
# @raise [Error::Request]
|
21
|
+
def find(id:)
|
22
|
+
raise FaithTeams::API::V2::Error::NoSearchParameterProvided if id.nil?
|
23
|
+
|
24
|
+
data = connection.get(path: "/batches/#{id}")["data"]
|
25
|
+
return nil unless data
|
26
|
+
|
27
|
+
Entity::Batch.new(attributes: data)
|
28
|
+
rescue Error::Request => e
|
29
|
+
return nil if e.response.code == 404
|
30
|
+
raise
|
31
|
+
end
|
32
|
+
|
33
|
+
# Searches for a batch by `dtm` and `title`
|
34
|
+
# @note The batches endpoint does not actually filter by title so we do the filtering here.
|
35
|
+
# @param batch [Entity::Batch]
|
36
|
+
# @return [Entity::Batch, nil]
|
37
|
+
def find_by_batch(batch:)
|
38
|
+
found = search(sort: "dtm", sortDirection: "desc", dtm: batch.created_datetime)
|
39
|
+
found.find { |b| !b.deleted? && b.title == batch.title }
|
40
|
+
end
|
41
|
+
|
42
|
+
# The response sends back the created batch in the `data` object.
|
43
|
+
# @param entity [Entity::Batch]
|
44
|
+
# @return [Entity::Batch]
|
45
|
+
# @raise [Error::Request]
|
46
|
+
def create(entity:)
|
47
|
+
data = connection.post(path: "/batches", body: entity.to_h)["data"]
|
48
|
+
|
49
|
+
Entity::Batch.new(attributes: data)
|
50
|
+
rescue Error::Request => e
|
51
|
+
raise Error::Request.new(response: e.response, message: "Request Unsuccessful: The batch #{entity.inspect} could not be created. FaithTeams API failure message: #{e.message}}") if e.response.status.success?
|
52
|
+
raise
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Resource
|
7
|
+
# A transaction in faithteams
|
8
|
+
class Contribution < Base
|
9
|
+
# @param entity [Entity::Contribution]
|
10
|
+
# @return [Entity::Contribution]
|
11
|
+
# @raise [Error::Request]
|
12
|
+
def create(entity:)
|
13
|
+
data = connection.post(path: "/contributions", body: entity.to_h)["data"]
|
14
|
+
|
15
|
+
Entity::Contribution.new(attributes: data)
|
16
|
+
rescue Error::Request => e
|
17
|
+
raise Error::Request.new(response: e.response, message: "Request Unsuccessful: The contribution #{entity.inspect} could not be created. FaithTeams API failure message: #{e.message}}") if e.response.status.success?
|
18
|
+
raise
|
19
|
+
end
|
20
|
+
|
21
|
+
# @param id [Integer] The contributions `parent_id`
|
22
|
+
# @return [Entity::Contribution, nil]
|
23
|
+
# @raise [Error::Request]
|
24
|
+
def find(id:)
|
25
|
+
raise FaithTeams::API::V2::Error::NoSearchParameterProvided if id.nil?
|
26
|
+
|
27
|
+
data = connection.get(path: "/contributions/#{id}")["data"]
|
28
|
+
return nil unless data.present?
|
29
|
+
|
30
|
+
Entity::Contribution.new(attributes: data)
|
31
|
+
rescue Error::Request => e
|
32
|
+
raise Error::Request.new(response: e.response, message: "Request Unsuccessful: The contribution with parent_id #{id} could not be found. FaithTeams API failure message: #{e.message}}") if e.response.status.success?
|
33
|
+
raise
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FaithTeams
|
4
|
+
module API
|
5
|
+
module V2
|
6
|
+
module Resource
|
7
|
+
# The contribution type resource
|
8
|
+
class ContributionType < Base
|
9
|
+
# @param args [Hash] These are ignored as no filters are available for this endpoint
|
10
|
+
# @return [Entity::ContributionType]
|
11
|
+
def search(**args)
|
12
|
+
data = connection.get(path: "/contributiontypes", params: {}).fetch("data")
|
13
|
+
|
14
|
+
return nil unless data.present?
|
15
|
+
|
16
|
+
data.map do |record|
|
17
|
+
Entity::ContributionType.new(attributes: record)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# @param id [Integer]
|
22
|
+
# @return [Entity::ContributionType]
|
23
|
+
def find(id:)
|
24
|
+
return nil if id.blank?
|
25
|
+
|
26
|
+
data = connection.get(path: "/contributiontypes/#{id}", params: {}).fetch("data")
|
27
|
+
|
28
|
+
return nil unless data.present?
|
29
|
+
|
30
|
+
Entity::ContributionType.new(attributes: data)
|
31
|
+
rescue Error::Request => e
|
32
|
+
e.response.code == 404 ? nil : raise
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|