kentaa-api 0.3.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +23 -0
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +21 -5
  5. data/Gemfile +4 -2
  6. data/Gemfile.lock +45 -32
  7. data/README.md +364 -67
  8. data/kentaa-api.gemspec +3 -3
  9. data/lib/kentaa/api.rb +9 -20
  10. data/lib/kentaa/api/client.rb +30 -18
  11. data/lib/kentaa/api/config.rb +10 -3
  12. data/lib/kentaa/api/exception.rb +9 -2
  13. data/lib/kentaa/api/request.rb +49 -5
  14. data/lib/kentaa/api/resources/action.rb +39 -15
  15. data/lib/kentaa/api/resources/activity.rb +11 -1
  16. data/lib/kentaa/api/resources/address.rb +7 -1
  17. data/lib/kentaa/api/resources/banner.rb +21 -1
  18. data/lib/kentaa/api/resources/base.rb +19 -6
  19. data/lib/kentaa/api/resources/consent.rb +7 -1
  20. data/lib/kentaa/api/resources/contact.rb +83 -0
  21. data/lib/kentaa/api/resources/donation.rb +30 -12
  22. data/lib/kentaa/api/resources/donation_form.rb +104 -0
  23. data/lib/kentaa/api/resources/error.rb +23 -0
  24. data/lib/kentaa/api/resources/list.rb +77 -2
  25. data/lib/kentaa/api/resources/location.rb +7 -1
  26. data/lib/kentaa/api/resources/manual_donation.rb +122 -0
  27. data/lib/kentaa/api/resources/newsletter_subscription.rb +16 -6
  28. data/lib/kentaa/api/resources/performance.rb +62 -0
  29. data/lib/kentaa/api/resources/photo.rb +21 -1
  30. data/lib/kentaa/api/resources/project.rb +37 -9
  31. data/lib/kentaa/api/resources/question.rb +19 -1
  32. data/lib/kentaa/api/resources/recurring_donor.rb +110 -0
  33. data/lib/kentaa/api/resources/registration_fee.rb +1 -1
  34. data/lib/kentaa/api/resources/resource.rb +43 -5
  35. data/lib/kentaa/api/resources/reward.rb +11 -1
  36. data/lib/kentaa/api/resources/segment.rb +35 -3
  37. data/lib/kentaa/api/resources/site.rb +15 -3
  38. data/lib/kentaa/api/{clients → resources}/sites.rb +2 -2
  39. data/lib/kentaa/api/resources/team.rb +22 -10
  40. data/lib/kentaa/api/resources/user.rb +16 -4
  41. data/lib/kentaa/api/resources/users.rb +5 -24
  42. data/lib/kentaa/api/resources/video.rb +21 -1
  43. data/lib/kentaa/api/response.rb +20 -2
  44. data/lib/kentaa/api/util.rb +13 -0
  45. data/lib/kentaa/api/version.rb +1 -1
  46. metadata +21 -30
  47. data/.travis.yml +0 -11
  48. data/lib/kentaa/api/clients/actions.rb +0 -21
  49. data/lib/kentaa/api/clients/all.rb +0 -26
  50. data/lib/kentaa/api/clients/base.rb +0 -15
  51. data/lib/kentaa/api/clients/donations.rb +0 -21
  52. data/lib/kentaa/api/clients/newsletter_subscriptions.rb +0 -21
  53. data/lib/kentaa/api/clients/projects.rb +0 -21
  54. data/lib/kentaa/api/clients/segments.rb +0 -21
  55. data/lib/kentaa/api/clients/teams.rb +0 -21
  56. data/lib/kentaa/api/clients/users.rb +0 -21
  57. data/lib/kentaa/api/finder.rb +0 -44
  58. data/lib/kentaa/api/resources/actions.rb +0 -37
  59. data/lib/kentaa/api/resources/donations.rb +0 -37
  60. data/lib/kentaa/api/resources/newsletter_subscriptions.rb +0 -37
  61. data/lib/kentaa/api/resources/projects.rb +0 -37
  62. data/lib/kentaa/api/resources/segments.rb +0 -37
  63. data/lib/kentaa/api/resources/teams.rb +0 -37
@@ -1,9 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'time'
4
+
3
5
  module Kentaa
4
6
  module Api
5
7
  module Resources
6
- class Banner < Resource
8
+ class Banner
9
+ attr_reader :data
10
+
11
+ def initialize(data)
12
+ @data = data
13
+ end
14
+
15
+ def id
16
+ data[:id]
17
+ end
18
+
19
+ def created_at
20
+ Time.parse(data[:created_at]) if data[:created_at]
21
+ end
22
+
23
+ def updated_at
24
+ Time.parse(data[:updated_at]) if data[:updated_at]
25
+ end
26
+
7
27
  def url
8
28
  data[:url]
9
29
  end
@@ -4,15 +4,29 @@ module Kentaa
4
4
  module Api
5
5
  module Resources
6
6
  class Base
7
- attr_reader :config, :options
7
+ attr_reader :config, :options, :resource_class, :endpoint_path
8
8
 
9
9
  def initialize(config, options = {})
10
10
  @config = config
11
11
  @options = options
12
+ @resource_class = options.delete(:resource_class) || self.class
13
+ @endpoint_path = options.delete(:endpoint_path)
14
+ end
15
+
16
+ class << self
17
+ def attribute_key
18
+ class_name = name.split('::').last
19
+ class_name.gsub(/([^\^])([A-Z])/, '\1_\2').downcase
20
+ end
12
21
  end
13
22
 
14
23
  def load
15
- @response ||= load_resource(options)
24
+ @response ||=
25
+ if block_given?
26
+ yield
27
+ else
28
+ load_resource
29
+ end
16
30
 
17
31
  self
18
32
  end
@@ -24,11 +38,10 @@ module Kentaa
24
38
  private
25
39
 
26
40
  def attribute_key
27
- class_name = self.class.name.split('::').last
28
- class_name.gsub(/([^\^])([A-Z])/, '\1_\2').downcase.to_sym
41
+ self.class.attribute_key
29
42
  end
30
43
 
31
- def load_resource(_options)
44
+ def load_resource
32
45
  raise NotImplementedError
33
46
  end
34
47
 
@@ -36,7 +49,7 @@ module Kentaa
36
49
  @data ||= begin
37
50
  load unless loaded?
38
51
 
39
- @response.body[attribute_key] || {}
52
+ @response.body[attribute_key.to_sym] || {}
40
53
  end
41
54
  end
42
55
 
@@ -3,7 +3,13 @@
3
3
  module Kentaa
4
4
  module Api
5
5
  module Resources
6
- class Consent < Resource
6
+ class Consent
7
+ attr_reader :data
8
+
9
+ def initialize(data)
10
+ @data = data
11
+ end
12
+
7
13
  def url
8
14
  data[:url]
9
15
  end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kentaa
4
+ module Api
5
+ module Resources
6
+ class Contact
7
+ attr_reader :data
8
+
9
+ def initialize(data)
10
+ @data = data
11
+ end
12
+
13
+ def first_name
14
+ data[:first_name]
15
+ end
16
+
17
+ def infix
18
+ data[:infix]
19
+ end
20
+
21
+ def last_name
22
+ data[:last_name]
23
+ end
24
+
25
+ def name
26
+ [first_name, infix, last_name].reject { |s| s.to_s.empty? }.join(" ")
27
+ end
28
+
29
+ def email
30
+ data[:email]
31
+ end
32
+
33
+ def avatar_url
34
+ data[:avatar_url]
35
+ end
36
+
37
+ def address
38
+ data[:address]
39
+ end
40
+
41
+ def address2
42
+ data[:address2]
43
+ end
44
+
45
+ def street
46
+ data[:street]
47
+ end
48
+
49
+ def house_number
50
+ data[:house_number]
51
+ end
52
+
53
+ def house_number_addition
54
+ data[:house_number_addition]
55
+ end
56
+
57
+ def zipcode
58
+ data[:zipcode]
59
+ end
60
+
61
+ def city
62
+ data[:city]
63
+ end
64
+
65
+ def country
66
+ data[:country]
67
+ end
68
+
69
+ def phone
70
+ data[:phone]
71
+ end
72
+
73
+ def birthday
74
+ Date.parse(data[:birthday]) if data[:birthday]
75
+ end
76
+
77
+ def gender
78
+ data[:gender]
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -13,22 +13,32 @@ module Kentaa
13
13
 
14
14
  def entity
15
15
  if action_id
16
- Kentaa::Api::Resources::Action.new(config, id: action_id)
16
+ Kentaa::Api::Resources::Action.new(config, id: action_id, options: options)
17
17
  elsif team_id
18
- Kentaa::Api::Resources::Team.new(config, id: team_id)
18
+ Kentaa::Api::Resources::Team.new(config, id: team_id, options: options)
19
19
  elsif project_id
20
- Kentaa::Api::Resources::Project.new(config, id: project_id)
20
+ Kentaa::Api::Resources::Project.new(config, id: project_id, options: options)
21
21
  elsif segment_id
22
- Kentaa::Api::Resources::Segment.new(config, id: segment_id)
22
+ Kentaa::Api::Resources::Segment.new(config, id: segment_id, options: options)
23
+ elsif donation_form_id
24
+ Kentaa::Api::Resources::DonationForm.new(config, id: donation_form_id, options: options)
23
25
  else
24
- Kentaa::Api::Resources::Site.new(config, id: site_id)
26
+ Kentaa::Api::Resources::Site.new(config, id: site_id, options: options)
25
27
  end
26
28
  end
27
29
 
30
+ def site
31
+ Kentaa::Api::Resources::Site.new(config, id: site_id, options: options)
32
+ end
33
+
28
34
  def site_id
29
35
  data[:site_id]
30
36
  end
31
37
 
38
+ def donation_form_id
39
+ data[:donation_form_id]
40
+ end
41
+
32
42
  def segment_id
33
43
  data[:segment_id]
34
44
  end
@@ -101,6 +111,10 @@ module Kentaa
101
111
  BigDecimal(data[:transaction_costs]) if data[:transaction_costs]
102
112
  end
103
113
 
114
+ def start_donation?
115
+ data[:start_donation]
116
+ end
117
+
104
118
  def registration_fee?
105
119
  data[:registration_fee]
106
120
  end
@@ -113,6 +127,10 @@ module Kentaa
113
127
  BigDecimal(data[:total_amount])
114
128
  end
115
129
 
130
+ def receivable_amount
131
+ BigDecimal(data[:receivable_amount])
132
+ end
133
+
116
134
  def countable?
117
135
  data[:countable]
118
136
  end
@@ -167,7 +185,7 @@ module Kentaa
167
185
 
168
186
  if data[:questions]
169
187
  data[:questions].each do |question|
170
- questions << Kentaa::Api::Resources::Question.new(config, data: question)
188
+ questions << Kentaa::Api::Resources::Question.new(question)
171
189
  end
172
190
  end
173
191
 
@@ -176,15 +194,15 @@ module Kentaa
176
194
  end
177
195
 
178
196
  def reward
179
- @reward ||= Kentaa::Api::Resources::Reward.new(config, data: data[:reward]) if data[:reward]
197
+ @reward ||= Kentaa::Api::Resources::Reward.new(data[:reward]) if data[:reward]
180
198
  end
181
199
 
182
200
  def address
183
- @address ||= Kentaa::Api::Resources::Address.new(config, data: data[:address]) if data[:address]
201
+ @address ||= Kentaa::Api::Resources::Address.new(data[:address]) if data[:address]
184
202
  end
185
203
 
186
204
  def birthday
187
- Time.parse(data[:birthday]) if data[:birthday]
205
+ Date.parse(data[:birthday]) if data[:birthday]
188
206
  end
189
207
 
190
208
  def gender
@@ -196,12 +214,12 @@ module Kentaa
196
214
  end
197
215
 
198
216
  def consent
199
- @consent ||= Kentaa::Api::Resources::Consent.new(config, data: data[:consent]) if data[:consent]
217
+ @consent ||= Kentaa::Api::Resources::Consent.new(data[:consent]) if data[:consent]
200
218
  end
201
219
 
202
- protected
220
+ private
203
221
 
204
- def load_resource(options)
222
+ def load_resource
205
223
  request.get("/donations/#{id}", options)
206
224
  end
207
225
  end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bigdecimal'
4
+ require 'time'
5
+
6
+ module Kentaa
7
+ module Api
8
+ module Resources
9
+ class DonationForm < Resource
10
+ def object_key
11
+ "DonationForm_#{id}"
12
+ end
13
+
14
+ def parent
15
+ site
16
+ end
17
+
18
+ def site
19
+ Kentaa::Api::Resources::Site.new(config, id: site_id, options: options)
20
+ end
21
+
22
+ def slug
23
+ data[:slug]
24
+ end
25
+
26
+ def site_id
27
+ data[:site_id]
28
+ end
29
+
30
+ def owner
31
+ @owner ||= Kentaa::Api::Resources::User.new(config, data: data[:owner], options: options)
32
+ end
33
+
34
+ def title
35
+ data[:title]
36
+ end
37
+
38
+ def description
39
+ data[:description]
40
+ end
41
+
42
+ def total_amount
43
+ BigDecimal(data[:total_amount])
44
+ end
45
+
46
+ def total_donations
47
+ data[:total_donations]
48
+ end
49
+
50
+ def published?
51
+ data[:published]
52
+ end
53
+
54
+ def visible?
55
+ data[:visible]
56
+ end
57
+
58
+ def external_reference
59
+ data[:external_reference]
60
+ end
61
+
62
+ def url
63
+ data[:url]
64
+ end
65
+
66
+ def banners
67
+ @banners ||= begin
68
+ banners = []
69
+
70
+ if data[:banners]
71
+ data[:banners].each do |banner|
72
+ banners << Kentaa::Api::Resources::Banner.new(banner)
73
+ end
74
+ end
75
+
76
+ banners
77
+ end
78
+ end
79
+
80
+ def donations
81
+ @donations ||= Kentaa::Api::Resources::List.new(config, resource_class: Kentaa::Api::Resources::Donation, endpoint_path: "/donation-forms/#{id}/donations")
82
+ end
83
+
84
+ def manual_donations
85
+ @manual_donations ||= Kentaa::Api::Resources::List.new(config, resource_class: Kentaa::Api::Resources::ManualDonation, endpoint_path: "/donation-forms/#{id}/manual-donations")
86
+ end
87
+
88
+ def newsletter_subscriptions
89
+ @newsletter_subscriptions ||= Kentaa::Api::Resources::List.new(config, resource_class: Kentaa::Api::Resources::NewsletterSubscription, endpoint_path: "/donation-forms/#{id}/newsletter-subscriptions")
90
+ end
91
+
92
+ def recurring_donors
93
+ @recurring_donors ||= Kentaa::Api::Resources::List.new(config, resource_class: Kentaa::Api::Resources::RecurringDonor, endpoint_path: "/donation-forms/#{id}/recurring-donors")
94
+ end
95
+
96
+ private
97
+
98
+ def load_resource
99
+ request.get("/donation-forms/#{id}", options)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kentaa
4
+ module Api
5
+ module Resources
6
+ class Error
7
+ attr_reader :data
8
+
9
+ def initialize(data)
10
+ @data = data
11
+ end
12
+
13
+ def field
14
+ data[:field]
15
+ end
16
+
17
+ def error
18
+ data[:error]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -4,6 +4,20 @@ module Kentaa
4
4
  module Api
5
5
  module Resources
6
6
  class List < Base
7
+ include Enumerable
8
+
9
+ def [](index)
10
+ resources[index]
11
+ end
12
+
13
+ def size
14
+ resources.size
15
+ end
16
+
17
+ def each(&block)
18
+ resources.each(&block)
19
+ end
20
+
7
21
  def links
8
22
  body[:links]
9
23
  end
@@ -45,11 +59,72 @@ module Kentaa
45
59
  end
46
60
 
47
61
  def next
48
- self.class.new(config, options.merge(page: next_page)) if next_page?
62
+ self.class.new(config, options.merge(resource_class: resource_class, endpoint_path: endpoint_path, page: next_page)) if next_page?
49
63
  end
50
64
 
51
65
  def previous
52
- self.class.new(config, options.merge(page: previous_page)) if previous_page?
66
+ self.class.new(config, options.merge(resource_class: resource_class, endpoint_path: endpoint_path, page: previous_page)) if previous_page?
67
+ end
68
+
69
+ def all
70
+ enumerator = Enumerator.new do |yielder|
71
+ page = 1
72
+
73
+ loop do
74
+ response = self.class.new(config, options.merge(resource_class: resource_class, endpoint_path: endpoint_path, page: page))
75
+ response.each { |item| yielder.yield item }
76
+
77
+ raise StopIteration unless response.next_page?
78
+
79
+ page = response.next_page
80
+ end
81
+ end
82
+
83
+ enumerator.lazy
84
+ end
85
+
86
+ def get(id, options = {})
87
+ resource = resource_class.new(config, id: id, options: options.merge(endpoint_path: endpoint_path))
88
+ resource.load
89
+ end
90
+
91
+ def create(attributes, options = {})
92
+ resource = resource_class.new(config, options: options.merge(endpoint_path: endpoint_path))
93
+ resource.save(attributes)
94
+ end
95
+
96
+ def update(id, attributes, options = {})
97
+ resource = resource_class.new(config, id: id, options: options.merge(endpoint_path: endpoint_path))
98
+ resource.save(attributes)
99
+ end
100
+
101
+ def delete(id, options = {})
102
+ resource = resource_class.new(config, id: id, options: options.merge(endpoint_path: endpoint_path))
103
+ resource.delete
104
+ end
105
+
106
+ private
107
+
108
+ def resources
109
+ @resources ||= begin
110
+ resources = []
111
+
112
+ if data
113
+ data.each do |resource|
114
+ resources << resource_class.new(config, data: resource, options: options)
115
+ end
116
+ end
117
+
118
+ resources
119
+ end
120
+ end
121
+
122
+ def attribute_key
123
+ Util.pluralize(resource_class.attribute_key)
124
+ end
125
+
126
+ def load_resource
127
+ request.get(endpoint_path, options)
53
128
  end
54
129
  end
55
130
  end