stbaldricks 4.6.1.alpha.2 → 4.6.1.alpha.3

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/stbaldricks/endpoints/fundraiser.rb +36 -0
  3. data/lib/stbaldricks/endpoints/kid.rb +7 -3
  4. data/lib/stbaldricks/endpoints/kid_institution.rb +17 -0
  5. data/lib/stbaldricks/endpoints/lib/entity.rb +42 -32
  6. data/lib/stbaldricks/endpoints/photo.rb +5 -12
  7. data/lib/stbaldricks/endpoints/user.rb +1 -1
  8. data/lib/stbaldricks/entities/campaign.rb +1 -0
  9. data/lib/stbaldricks/entities/concerns/entity_response_concern.rb +66 -0
  10. data/lib/stbaldricks/entities/concerns/event_year_concern.rb +2 -0
  11. data/lib/stbaldricks/entities/concerns/fundraising_page_concern.rb +2 -0
  12. data/lib/stbaldricks/entities/concerns/model_type_concern.rb +2 -0
  13. data/lib/stbaldricks/entities/concerns/type_concern.rb +2 -0
  14. data/lib/stbaldricks/entities/concerns/venue_concern.rb +2 -0
  15. data/lib/stbaldricks/entities/donation.rb +0 -1
  16. data/lib/stbaldricks/entities/donation/payment_type.rb +0 -1
  17. data/lib/stbaldricks/entities/event.rb +7 -1
  18. data/lib/stbaldricks/entities/event_application.rb +0 -2
  19. data/lib/stbaldricks/entities/fundraiser.rb +18 -1
  20. data/lib/stbaldricks/entities/grant.rb +0 -1
  21. data/lib/stbaldricks/entities/kid.rb +4 -3
  22. data/lib/stbaldricks/entities/kid_institution.rb +19 -0
  23. data/lib/stbaldricks/entities/lib/base.rb +37 -21
  24. data/lib/stbaldricks/entities/lib/collection.rb +38 -0
  25. data/lib/stbaldricks/entities/lib/error.rb +25 -0
  26. data/lib/stbaldricks/entities/lib/opt_out_settings.rb +1 -1
  27. data/lib/stbaldricks/entities/lib/payment.rb +5 -6
  28. data/lib/stbaldricks/entities/lib/third_party_media.rb +2 -0
  29. data/lib/stbaldricks/entities/lib/top_level.rb +15 -3
  30. data/lib/stbaldricks/entities/page.rb +33 -0
  31. data/lib/stbaldricks/entities/participant.rb +1 -1
  32. data/lib/stbaldricks/entities/photo.rb +2 -1
  33. data/lib/stbaldricks/entities/recurring_gift.rb +6 -4
  34. data/lib/stbaldricks/entities/response.rb +3 -4
  35. data/lib/stbaldricks/entities/search.rb +4 -0
  36. data/lib/stbaldricks/entities/team.rb +10 -1
  37. data/lib/stbaldricks/version.rb +1 -1
  38. metadata +14 -4
  39. data/lib/stbaldricks/endpoints/event_application.rb +0 -32
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 729dd2886644b077da55b584e8df252b0f87a2ee015f009a9821c8aba34fce29
4
- data.tar.gz: 758177a82556aca324dc57308e524f2be344d89ffa88180924e81ed61d545ecd
3
+ metadata.gz: b7ccd3a68b118457b042e75fd6d5c526399a6e0f35e9fcfd6cac082d95ed3063
4
+ data.tar.gz: 87d3031eb1d377ab100cccb502b0fc3dd2b29642d82589bc8b0fd12a46862c1d
5
5
  SHA512:
6
- metadata.gz: d78a667f4f08186b97a1e3f4025be5ac8658c7e241366478e0f1894bff871dfc2c41fb8283462a023ddc86831dbdb92b3c70f0da88b956890874043e08c6b4b5
7
- data.tar.gz: 64b682e791d38752e6d812820feeadff6155653930300a91156236f1cca123732b334757bd5531575dd9d6f887c62a86ca773a3b6c3d1367aac561f8f2176e6a
6
+ metadata.gz: 13cb348aa8bc10d14ca5bce929672d55f3ba5dcc25da7731d4141e6ce2f5672e625005c7172796071c095b084413cfa25112b1443c6adf70af3afe1799db2b7e
7
+ data.tar.gz: 023b058a3fdab154c491ad6a120ec7866ff04351b7205ccf6b3226e8264a950154af149ad959f5cb4913f06d552ba08c7bf40ff1b11aa9c26f2083f244b7445e
@@ -0,0 +1,36 @@
1
+ require 'stbaldricks/endpoints/lib/entity'
2
+
3
+ module SBF
4
+ module Client
5
+ class FundraiserEndpoint < EntityEndpoint
6
+ def join_team(fundraiser_id, new_team_id)
7
+ response = SBF::Client::Api::Request.post_request("#{base_uri}/move_to_different_team", id: fundraiser_id, new_team_id: new_team_id)
8
+
9
+ if ok?(response)
10
+ data = SBF::Client::FullFundraiser.new(JSON.parse(response.body).symbolize!)
11
+ else
12
+ error = SBF::Client::ErrorEntity.new(JSON.parse(response.body).symbolize!)
13
+ end
14
+
15
+ SBF::Client::Api::Response.new(http_code: response.code, data: data, error: error)
16
+ end
17
+
18
+ def leave_team(fundraiser_id)
19
+ join_team(fundraiser_id, 0)
20
+ end
21
+
22
+ def join_event(fundraiser_id, new_event_id)
23
+ response = SBF::Client::Api::Request.post_request("#{base_uri}/move_to_different_event",
24
+ id: fundraiser_id, new_event_id: new_event_id)
25
+
26
+ error = SBF::Client::ErrorEntity.new(JSON.parse(response.body).symbolize!) unless ok?(response)
27
+
28
+ SBF::Client::Api::Response.new(http_code: response.code, data: nil, error: error)
29
+ end
30
+
31
+ def leave_event(fundraiser_id)
32
+ join_event(fundraiser_id, 0)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,4 +1,5 @@
1
1
  require 'stbaldricks/endpoints/lib/entity'
2
+ require 'stbaldricks/entities/lib/collection'
2
3
 
3
4
  module SBF
4
5
  module Client
@@ -12,12 +13,15 @@ module SBF
12
13
 
13
14
  if ok?(response)
14
15
  parsed_response_body[:results].map! { |entity_data| target_class.new(entity_data) }
15
- data = parsed_response_body
16
+ SBF::Client::EntityCollection.new(parsed_response_body[:results], parsed_response_body[:total_count])
16
17
  else
18
+ parsed_response_body = JSON.parse(response.body).symbolize!
17
19
  error = SBF::Client::ErrorEntity.new(parsed_response_body)
20
+ collection = SBF::Client::EntityCollection.new
21
+ collection.add_errors(error)
22
+ collection.errors_http_code = response.code
23
+ collection
18
24
  end
19
-
20
- SBF::Client::Api::Response.new(http_code: response.code, data: data, error: error)
21
25
  end
22
26
  end
23
27
  end
@@ -0,0 +1,17 @@
1
+ require 'stbaldricks/endpoints/lib/entity'
2
+
3
+ module SBF
4
+ module Client
5
+ class KidInstitutionEndpoint < EntityEndpoint
6
+ def delete(params)
7
+ response = SBF::Client::Api::Request.post_request("#{base_uri}/delete", params)
8
+
9
+ unless ok?(response)
10
+ error = SBF::Client::ErrorEntity.new(JSON.parse(response.body).symbolize!)
11
+ end
12
+
13
+ SBF::Client::Api::Response.new(http_code: response.code, data: nil, error: error)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,6 @@
1
1
  require 'stbaldricks/version'
2
2
  require 'stbaldricks/api'
3
+ require 'stbaldricks/entities/lib/collection'
3
4
  require 'stbaldricks/entities/lib/error'
4
5
  require 'stbaldricks/entities/response'
5
6
  require 'stbaldricks/patches/hash'
@@ -20,7 +21,7 @@ module SBF
20
21
  def save(entity_or_hash, with = {})
21
22
  if entity_or_hash.is_a?(SBF::Client::BaseEntity)
22
23
  return create(entity_or_hash, with) if entity_or_hash.id.nil?
23
- return update(entity_or_hash.id, entity_or_hash.dirty_data, with)
24
+ return update(entity_or_hash.id, entity_or_hash, with)
24
25
  else
25
26
  return create(entity_or_hash, with) if entity_or_hash[:id].nil?
26
27
  return update(entity_or_hash[:id], entity_or_hash, with)
@@ -30,7 +31,8 @@ module SBF
30
31
  # Calls the create route for the entity. Uses the class name to generate the uri
31
32
  # @param with [Hash] The optional entity fields to include in the response
32
33
  # @return entity [SBF::Client::BaseEntity]
33
- def create(entity, with = {})
34
+ def create(entity_or_hash, with = {})
35
+ entity = entity_or_hash.is_a?(Hash) ? target_class.new(entity_or_hash) : entity_or_hash
34
36
  raise SBF::Client::Error, 'Invalid Entity' unless entity.is_a?(SBF::Client::BaseEntity)
35
37
 
36
38
  with = normalize_with(with, entity)
@@ -39,9 +41,7 @@ module SBF
39
41
 
40
42
  response = SBF::Client::Api::Request.post_request("#{base_uri}/create", create_data)
41
43
 
42
- entity, error = hydrate_entity(response, create_data, entity)
43
-
44
- SBF::Client::Api::Response.new(http_code: response.code, data: entity, error: error)
44
+ hydrated_entity(response, create_data, entity)
45
45
  end
46
46
 
47
47
  # Calls the update route for the entity. Uses the class name to generate the uri
@@ -50,7 +50,7 @@ module SBF
50
50
  def update(id = nil, entity_or_hash = nil, with = {})
51
51
  if entity_or_hash.is_a?(SBF::Client::BaseEntity)
52
52
  # If someone has passed in an entity, just convert it to a hash
53
- data = entity_or_hash.to_hash
53
+ data = entity_or_hash.dirty_data
54
54
  elsif entity_or_hash.is_a?(Hash)
55
55
  # If someone has passed in a hash, make sure all of it's values match fields in the entity class
56
56
  data = sanitize(entity_or_hash)
@@ -64,9 +64,7 @@ module SBF
64
64
  uri = id ? "#{base_uri}/update/#{id}" : "#{base_uri}/update"
65
65
  response = SBF::Client::Api::Request.post_request(uri, data)
66
66
 
67
- data, error = hydrate_entity(response, data, entity_or_hash)
68
-
69
- SBF::Client::Api::Response.new(http_code: response.code, data: data, error: error)
67
+ hydrated_entity(response, data, entity_or_hash)
70
68
  end
71
69
 
72
70
  # Calls the get route for the entity. Uses the class name to generate the uri.
@@ -77,9 +75,15 @@ module SBF
77
75
 
78
76
  response = SBF::Client::Api::Request.get_request("#{base_uri}/get/#{id}", with: with)
79
77
 
80
- data, error = hydrate_entity(response, {}, nil)
81
-
82
- SBF::Client::Api::Response.new(http_code: response.code, data: data, error: error)
78
+ if ok?(response)
79
+ hydrated_entity(response, {}, nil)
80
+ elsif (response.code == 404)
81
+ nil
82
+ else
83
+ parsed_response_body = JSON.parse(response.body).symbolize!
84
+ error = SBF::Client::ErrorEntity.new(parsed_response_body)
85
+ SBF::Client::Api::Response.new(http_code: response.code, data: parsed_response_body[:data], error: error)
86
+ end
83
87
  end
84
88
 
85
89
  # Calls the find route for the entity.
@@ -92,20 +96,27 @@ module SBF
92
96
  parsed_response_body = JSON.parse(response.body).symbolize!
93
97
 
94
98
  if ok?(response)
95
- parsed_response_body[:results].map! { |entity_data| target_class.new(entity_data) }
96
- data = parsed_response_body
99
+ parsed_response_body[:results].map! { |entity_data| target_class.new(entity_data, true) }
100
+ SBF::Client::EntityCollection.new(parsed_response_body[:results], parsed_response_body[:total_count])
97
101
  else
102
+ parsed_response_body = JSON.parse(response.body).symbolize!
98
103
  error = SBF::Client::ErrorEntity.new(parsed_response_body)
104
+ SBF::Client::Api::Response.new(http_code: response.code, data: parsed_response_body[:data], error: error)
105
+ collection = SBF::Client::EntityCollection.new
106
+ collection.add_errors(error)
107
+ collection.errors_http_code = response.code
108
+ collection
99
109
  end
100
-
101
- SBF::Client::Api::Response.new(http_code: response.code, data: data, error: error)
102
110
  end
103
111
 
104
112
  # Calls the find route for the entity.
105
113
  def find_first(filter = [], order = {}, with = {})
106
- api_response = find(filter, order, 1, 0, with)
107
- api_response.data = api_response.data[:results].first unless api_response.error?
108
- api_response
114
+ response = find(filter, order, 1, 0, with)
115
+ if response.is_a?(SBF::Client::EntityCollection)
116
+ response.empty? ? nil : response.first
117
+ else
118
+ response
119
+ end
109
120
  end
110
121
 
111
122
  # Calls the aggregate route for the entity.
@@ -211,7 +222,7 @@ module SBF
211
222
  end
212
223
  private :normalize_with
213
224
 
214
- def hydrate_entity(response, data, entity_or_hash)
225
+ def hydrated_entity(response, data, entity_or_hash)
215
226
  parsed_response_body = JSON.parse(response.body).symbolize!
216
227
 
217
228
  entity_or_hash.errors.clear if entity_or_hash.is_a?(SBF::Client::BaseEntity)
@@ -222,29 +233,28 @@ module SBF
222
233
 
223
234
  new_data = parsed_response_body
224
235
  new_data = data.merge(parsed_response_body) if data.is_a?(Hash)
225
- data = target_class.new(new_data)
226
236
 
227
237
  if entity_or_hash.is_a?(SBF::Client::BaseEntity)
228
238
  entity_or_hash.send(:initialize_attributes, new_data)
229
- data = entity_or_hash
239
+ entity = entity_or_hash
240
+ else
241
+ entity = target_class.new(new_data)
230
242
  end
231
243
 
232
244
  # Reload entity and its sub-entities so that no fields have a 'changed' state
233
- data.reload_recursive
245
+ entity.reload_recursive
234
246
 
235
- return [data, nil]
247
+ entity
236
248
  else
237
- data = entity_or_hash if entity_or_hash.is_a?(SBF::Client::BaseEntity)
238
- data = nil if data == {}
239
- data = target_class.new(entity_or_hash) if entity_or_hash.is_a?(Hash)
240
-
241
- error = SBF::Client::ErrorEntity.new(parsed_response_body)
242
- data.add_errors(error) if data.is_a?(SBF::Client::BaseEntity)
249
+ error = SBF::Client::ApiErrorEntity.new(parsed_response_body.merge(http_code: response.code))
250
+ entity = entity_or_hash.is_a?(SBF::Client::BaseEntity) ? entity_or_hash : target_class.new(entity_or_hash)
251
+ entity.add_errors(error)
252
+ entity.errors_http_code = response.code
243
253
 
244
- [data, error]
254
+ entity
245
255
  end
246
256
  end
247
- private :hydrate_entity
257
+ private :hydrated_entity
248
258
  end
249
259
  end
250
260
  end
@@ -3,7 +3,8 @@ require 'stbaldricks/endpoints/lib/entity'
3
3
  module SBF
4
4
  module Client
5
5
  class PhotoEndpoint < SBF::Client::EntityEndpoint
6
- def create(entity, with = {})
6
+ def create(entity_or_hash, with = {})
7
+ entity = entity_or_hash.is_a?(Hash) ? target_class.new(entity_or_hash) : entity_or_hash
7
8
  raise SBF::Client::Error, 'Invalid Entity' unless entity.is_a?(SBF::Client::BaseEntity)
8
9
 
9
10
  with = normalize_with(with)
@@ -15,9 +16,7 @@ module SBF
15
16
 
16
17
  response = SBF::Client::Api::Request.file_post_request(path: "#{base_uri}/create", params: create_data, file: file, filename: filename)
17
18
 
18
- entity, error = hydrate_entity(response, create_data, entity)
19
-
20
- SBF::Client::Api::Response.new(http_code: response.code, data: entity, error: error)
19
+ hydrated_entity(response, create_data, entity)
21
20
  end
22
21
 
23
22
  def update(id = nil, entity_or_hash = nil, with = {})
@@ -44,9 +43,7 @@ module SBF
44
43
  SBF::Client::Api::Request.post_request("#{base_uri}/update", data)
45
44
  end
46
45
 
47
- data, error = hydrate_entity(response, data, entity_or_hash)
48
-
49
- SBF::Client::Api::Response.new(http_code: response.code, data: data, error: error)
46
+ hydrated_entity(response, data, entity_or_hash)
50
47
  end
51
48
 
52
49
  def upload(image_data_url, data = {}, with = {})
@@ -60,11 +57,7 @@ module SBF
60
57
  file.seek(0)
61
58
 
62
59
  photo = photo_for_upload(file, data)
63
- if photo.id.nil?
64
- create(photo, with)
65
- else
66
- update(photo.id, photo, with)
67
- end
60
+ photo.id.nil? ? create(photo, with) : update(photo.id, photo, with)
68
61
  end
69
62
  end
70
63
 
@@ -36,7 +36,7 @@ module SBF
36
36
  def list_entities_user_has_permission(permission_id, event_years)
37
37
  raise SBF::Client::Error, 'User not logged in' if SBF::Client::Configuration.user_token.nil?
38
38
 
39
- event_years = [event_years] if event_years.is_a? Fixnum
39
+ event_years = [event_years] if event_years.is_a? Integer
40
40
 
41
41
  response = SBF::Client::Api::Request.post_request(
42
42
  "/#{SBF::Client::Api::VERSION}/security/list_entities_user_has_permission",
@@ -7,6 +7,7 @@ module SBF
7
7
  class Campaign < SBF::Client::TopLevelEntity
8
8
  action :get
9
9
  action :find
10
+ action :find_first
10
11
 
11
12
  disallow_instantiation
12
13
 
@@ -0,0 +1,66 @@
1
+ require 'active_support/concern'
2
+ require 'stbaldricks/entities/lib/error'
3
+
4
+ module EntityResponseConcern
5
+ extend ActiveSupport::Concern
6
+
7
+ def add_errors(error)
8
+ errors.clear
9
+ unless error.fields.nil?
10
+ count = error.fields.length
11
+ error.fields.each do |field|
12
+ field = field.gsub('_id', '') # Hacky, since API returns DB field that errored instead of View Field
13
+ errors.add(field, error.details) if respond_to?(field.to_sym)
14
+ errors.add(:base, "#{field}: #{error.details}") unless respond_to?(field.to_sym)
15
+ end
16
+ end
17
+ errors.instance_variable_set(:@code, error.code)
18
+ errors.instance_variable_set(:@type, error.type)
19
+ errors.add(:base, "#{error.type}: #{error.details}") if count == 0
20
+ end
21
+
22
+ def errors_http_code=(http_code)
23
+ errors.instance_variable_set(:@http_code, http_code)
24
+ end
25
+
26
+ def error?
27
+ !success?
28
+ end
29
+
30
+ def success?
31
+ !errors?
32
+ end
33
+
34
+ def errors?
35
+ errors.count > 0
36
+ end
37
+
38
+ ############ Deprecated Methods ############
39
+
40
+ def http_code
41
+ log_deprecated('http_code', caller)
42
+ errors.http_code
43
+ end
44
+
45
+ def data
46
+ log_deprecated('data', caller)
47
+ self
48
+ end
49
+
50
+ private
51
+
52
+ def single_active_model_error
53
+ return if errors.empty?
54
+ return [:base, errors[:base].first] if errors[:base].any?
55
+ errors.first
56
+ end
57
+
58
+ def log_deprecated(method_name, method_caller = nil)
59
+ SBF::Client::Configuration.logger.warn do
60
+ caller_message = method_caller.nil? ? '' : " Called from #{method_caller.first}"
61
+
62
+ "[DEPRECATION] Use of the SBF::Client::Api::Response Interface (including the `#{method_name}` method) is deprecated"\
63
+ " for #{self.class}. Please update your code to use the #{self.class} interface accordingly. #{caller_message}"
64
+ end
65
+ end
66
+ end
@@ -1,3 +1,5 @@
1
+ require 'active_support/concern'
2
+
1
3
  module EventYearConcern
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'active_support/concern'
2
+
1
3
  module FundraisingPageConcern
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'active_support/concern'
2
+
1
3
  module ModelTypeConcern
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'active_support/concern'
2
+
1
3
  module TypeConcern
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -1,3 +1,5 @@
1
+ require 'active_support/concern'
2
+
1
3
  module VenueConcern
2
4
  extend ActiveSupport::Concern
3
5
 
@@ -398,7 +398,6 @@ module SBF
398
398
  [->(v) { v[:type] == SBF::Client::Payment::Type::MONEY_ORDER }, 'SBF::Client::Payment::MoneyOrderDetails'],
399
399
  [->(v) { v[:type] == SBF::Client::Payment::Type::NONCE }, 'SBF::Client::Payment::NonceDetails'],
400
400
  [->(v) { v[:type] == SBF::Client::Payment::Type::WIRE_TRANSFER }, 'SBF::Client::Payment::WireTransferDetails'],
401
- [->(v) { v[:type] == SBF::Client::Payment::Type::RECURRING_GIFTS }, 'SBF::Client::Payment::BraintreeSubscriptionDetails'],
402
401
  [->(v) { v[:type] == SBF::Client::Payment::Type::UNKNOWN }, 'SBF::Client::Payment::UnknownDetails'],
403
402
  [->(v) { v[:type] == SBF::Client::Payment::Type::PAYPAL }, 'SBF::Client::Payment::PaypalDetails']
404
403
  ]
@@ -10,7 +10,6 @@ module SBF
10
10
  CASH = 'cash'
11
11
  MONEY_ORDER = 'money_order'
12
12
  WIRE_TRANSFER = 'wire_transfer'
13
- RECURRING_GIFTS = 'recurring'
14
13
  PAYPAL = 'paypal'
15
14
  end
16
15
  end
@@ -43,7 +43,7 @@ module SBF
43
43
  end
44
44
 
45
45
  class Photos < SBF::Client::BaseEntity
46
- attr_reader :avatar, :default
46
+ attr_reader :avatar, :default, :icon
47
47
  end
48
48
 
49
49
  class Contacts < SBF::Client::BaseEntity
@@ -203,6 +203,12 @@ module SBF
203
203
  def open_for_fast_registration?
204
204
  is_open_for_fast_registration
205
205
  end
206
+
207
+ def past?
208
+ Date.today > Date.parse(date)
209
+ rescue
210
+ nil
211
+ end
206
212
  end
207
213
  end
208
214
  end
@@ -1,4 +1,3 @@
1
- require 'stbaldricks/endpoints/event_application'
2
1
  require 'stbaldricks/entities/fund'
3
2
  require 'stbaldricks/entities/campaign'
4
3
  require 'stbaldricks/entities/event'
@@ -14,7 +13,6 @@ require 'stbaldricks/entities/concerns/model_type_concern'
14
13
  module SBF
15
14
  module Client
16
15
  class EventApplication < SBF::Client::TopLevelEntity
17
- endpoint SBF::Client::EventApplicationEndpoint
18
16
  actions DEFAULT_CRUD_ACTIONS
19
17
  blacklist_action :delete
20
18
 
@@ -1,4 +1,5 @@
1
1
  require 'stbaldricks/entities/lib/top_level'
2
+ require 'stbaldricks/endpoints/fundraiser'
2
3
  require 'stbaldricks/entities/person'
3
4
  require 'stbaldricks/entities/fund'
4
5
  require 'stbaldricks/entities/event'
@@ -18,7 +19,12 @@ module SBF
18
19
  include EventYearConcern
19
20
  include FundraisingPageConcern
20
21
  include VenueConcern
22
+ endpoint SBF::Client::FundraiserEndpoint
21
23
  actions DEFAULT_CRUD_ACTIONS
24
+ action :join_team
25
+ action :leave_team
26
+ action :join_event
27
+ action :leave_event
22
28
 
23
29
  disallow_instantiation
24
30
 
@@ -55,7 +61,7 @@ module SBF
55
61
  end
56
62
 
57
63
  class Photos < SBF::Client::BaseEntity
58
- attr_reader :avatar, :default
64
+ attr_reader :avatar, :default, :icon
59
65
  end
60
66
 
61
67
  class Policies < SBF::Client::BaseEntity
@@ -134,6 +140,17 @@ module SBF
134
140
  def active?
135
141
  status == SBF::Client::Fundraiser::Status::ACTIVE
136
142
  end
143
+
144
+ def past?
145
+ return Date.today > Date.parse(end_date) if end_date
146
+ Date.today > Date.parse(start_date) if start_date
147
+ rescue
148
+ nil
149
+ end
150
+
151
+ def event?
152
+ event && !event.id.nil?
153
+ end
137
154
  end
138
155
  end
139
156
  end
@@ -62,7 +62,6 @@ module SBF
62
62
  attr_accessor :web_message
63
63
  attr_accessor :article_url
64
64
  attr_accessor :amount
65
- attr_accessor :description
66
65
  entity_attr_accessor :researcher, 'SBF::Client::Grant::FullResearcher', 'SBF::Client::Grant::PartialResearcher', true
67
66
  entity_attr_accessor :institution, 'SBF::Client::Grant::FullInstitution', 'SBF::Client::Grant::PartialInstitution', true
68
67
  entity_attr_accessor :funding_type, 'SBF::Client::Grant::FullFundingType', 'SBF::Client::Grant::PartialFundingType', true
@@ -91,8 +91,6 @@ module SBF
91
91
  attr_reader :avatar, :default
92
92
  end
93
93
 
94
- class KidInstitution < SBF::Client::FullInstitution; end
95
-
96
94
  class Kid < SBF::Client::TopLevelEntity
97
95
  include Entities::DefaultCacheable
98
96
  endpoint SBF::Client::KidEndpoint
@@ -144,6 +142,8 @@ module SBF
144
142
  attr_accessor :is_submitter
145
143
  entity_attr_accessor :permissions, 'SBF::Client::Kid::Relationship::Permissions'
146
144
  end
145
+
146
+ class CustomInstitution < SBF::Client::FullInstitution; end
147
147
  end
148
148
 
149
149
  class PartialKid < SBF::Client::Kid
@@ -170,7 +170,8 @@ module SBF
170
170
  entity_attr_accessor :guardian, 'SBF::Client::Guardian'
171
171
  entity_collection_attr_accessor :relationships, 'SBF::Client::Kid::Relationship'
172
172
  entity_collection_attr_accessor :urls, 'SBF::Client::KidURL'
173
- entity_collection_attr_reader :institutions, 'SBF::Client::KidInstitution'
173
+ entity_collection_attr_reader :custom_institutions, 'SBF::Client::Kid::CustomInstitution', nil, true
174
+ entity_attr_accessor :third_party_media, 'SBF::Client::ThirdPartyMedia', nil, true
174
175
 
175
176
  attr_accessor :created_at
176
177
  attr_accessor :modified_at
@@ -0,0 +1,19 @@
1
+ require 'stbaldricks/endpoints/kid_institution'
2
+ require 'stbaldricks/entities/kid'
3
+ require 'stbaldricks/entities/institution'
4
+ require 'stbaldricks/entities/lib/top_level'
5
+
6
+ module SBF
7
+ module Client
8
+ class KidInstitution < SBF::Client::TopLevelEntity
9
+ endpoint SBF::Client::KidInstitutionEndpoint
10
+ actions DEFAULT_CRUD_ACTIONS
11
+ blacklist_action :get
12
+ blacklist_action :update
13
+ blacklist_action :aggregate
14
+
15
+ entity_attr_accessor :kid, 'SBF::Client::FullKid', 'SBF::Client::PartialKid'
16
+ entity_attr_accessor :institution, 'SBF::Client::FullInstitution', 'SBF::Client::PartialInstitution'
17
+ end
18
+ end
19
+ end
@@ -4,7 +4,7 @@ Dir["#{patch_dir}/*.rb"].each { |file| require file }
4
4
 
5
5
  require 'set'
6
6
  require 'stbaldricks/client'
7
- require 'stbaldricks/entities/lib/error'
7
+ require 'stbaldricks/entities/concerns/entity_response_concern'
8
8
  require 'active_model'
9
9
  require 'securerandom'
10
10
 
@@ -16,6 +16,7 @@ module SBF
16
16
  extend ActiveModel::Naming
17
17
  extend ActiveModel::Translation
18
18
  include ActiveModel::Conversion
19
+ include EntityResponseConcern
19
20
 
20
21
  attr_reader :errors
21
22
 
@@ -28,14 +29,15 @@ module SBF
28
29
  @not_provided_attributes = nil
29
30
  @disallow_instantiation = nil
30
31
 
31
- def initialize(data = {})
32
+ def initialize(data = {}, clear_changes = false)
32
33
  # If disallow instantiation has been set, raise an error if someone is trying to call initilaize
33
34
  raise SBF::Client::Error, 'Initialize is not valid on a base object. Use the full or partial version' unless self.class.allow_instantiation?
34
35
 
35
36
  super()
36
37
 
37
- @errors = ActiveModel::Errors.new(self)
38
+ @errors = SBF::Client::Entity::Errors.new(self)
38
39
  initialize_attributes(data)
40
+ reload_recursive if clear_changes
39
41
  end
40
42
 
41
43
  # Overridden from ActiveModel::Naming to remove namespace and Full/Partial
@@ -65,6 +67,10 @@ module SBF
65
67
  restore_attributes
66
68
  end
67
69
 
70
+ def destroyed?
71
+ @destroyed
72
+ end
73
+
68
74
  ## Returns a hash of changed data for the entity and its sub-entities
69
75
  # @param with_keys [Boolean] when true, include the keys of the current entity. (sub-entity keys will always be included if they are present)
70
76
  # @return [Hash] the changed data
@@ -83,11 +89,8 @@ module SBF
83
89
  data.merge!(attribute_symbol => attribute.dirty_data(true))
84
90
  end
85
91
  elsif attribute.is_a?(Array)
86
- entities = attribute.all? { |e| e.is_a?(BaseEntity) } ? attribute : false
87
- next unless entities
88
- dirty_data_hashes = entities.map { |e| e.dirty_data(true) }.reject(&:empty?)
89
- next if dirty_data_hashes.empty?
90
- data.merge!(attribute_symbol => dirty_data_hashes)
92
+ next unless attribute.all? { |e| e.is_a?(BaseEntity) } && attribute.any? { |e| !e.dirty_data(true).empty? }
93
+ data.merge!(attribute_symbol => attribute)
91
94
  end
92
95
  end
93
96
 
@@ -112,28 +115,24 @@ module SBF
112
115
  send(setter, value)
113
116
 
114
117
  else
115
- instance_variable_set("@#{key}".to_sym, value)
116
-
118
+ if respond_to?(key.to_sym)
119
+ instance_variable_set("@#{key}".to_sym, value)
120
+ attribute_will_change!(key.to_sym)
121
+ end
117
122
  end
118
123
  end
119
124
 
120
125
  # For each attribute that may be optional, call mark_attribute_not_provided
121
126
  # if the data set does not contain a key with the optional attribute's name
122
127
  self.class.optional_attributes.each { |name| mark_attribute_not_provided(name) unless data.key?(name) }
128
+ @attributes ||= Set.new
129
+ @optional_attributes ||= Set.new
130
+ @not_provided_attributes ||= Set.new
131
+ @entity_attributes ||= Set.new
132
+ @collection_attributes ||= Set.new
123
133
  end
124
134
  private :initialize_attributes
125
135
 
126
- def add_errors(error)
127
- errors.clear
128
- count = error.fields.length
129
- error.fields.each do |field|
130
- field = field.gsub('_id', '') # Hacky, since API returns DB field that errored instead of View Field
131
- errors.add(field, error.details) if count > 1
132
- errors.add(:base, "#{field}: #{error.details}") if count == 1
133
- end
134
- errors.add(:base, "#{error.type}: #{error.details}") if count == 0
135
- end
136
-
137
136
  def mark_attribute_not_provided(name)
138
137
  return if not_provided_attributes.include?(name)
139
138
 
@@ -584,6 +583,23 @@ module SBF
584
583
  base.optional_attributes.merge(optional_attributes) unless optional_attributes.empty?
585
584
  base.entity_attributes.merge(entity_attributes) unless entity_attributes.empty?
586
585
  end
586
+
587
+ ############ Deprecated Methods ############
588
+
589
+ # Attempt to return an ErrorEntity similar to or exactly like the original
590
+ def error
591
+ log_deprecated('error', caller)
592
+ return nil if single_active_model_error.nil?
593
+ details = single_active_model_error.find { |x| x.is_a?(String) } if single_active_model_error.is_a?(Array)
594
+ details ||= single_active_model_error.is_a?(String) ? single_active_model_error : nil
595
+ field = single_active_model_error.is_a?(Array) ? single_active_model_error.find { |x| x.is_a?(Symbol) && x != :base } : nil
596
+
597
+ fields = errors.keys.reject { |k| k == :base }.empty? ? nil : errors.keys.reject { |k| k == :base }.map(&:to_s)
598
+ details = details["#{errors.type}: ".length..(details.length - 1)] if details.start_with?("#{errors.type}: ")
599
+ details = details["#{field}: ".length..(details.length - 1)] if details.start_with?("#{field}: ")
600
+
601
+ SBF::Client::ErrorEntity.new(code: errors.code, type: errors.type, details: details, errors: fields)
602
+ end
587
603
  end
588
604
  end
589
605
  end
@@ -0,0 +1,38 @@
1
+ require 'stbaldricks/entities/concerns/entity_response_concern'
2
+
3
+ module SBF
4
+ module Client
5
+ class EntityCollection < Array
6
+ include EntityResponseConcern
7
+ attr_reader :total_count
8
+ attr_reader :errors
9
+
10
+ def initialize(entities = [], total_count = 0, errors = nil)
11
+ concat(entities)
12
+ @total_count = total_count
13
+ @errors = errors || SBF::Client::Entity::Errors.new(self)
14
+ end
15
+
16
+ ############ Deprecated Methods ############
17
+
18
+ # Attempt to return an ErrorEntity similar to or exactly like the original
19
+ def error
20
+ log_deprecated('error', caller)
21
+ return nil if single_active_model_error.nil?
22
+ details = single_active_model_error.find { |x| x.is_a?(String) } if single_active_model_error.is_a?(Array)
23
+ details ||= single_active_model_error.is_a?(String) ? single_active_model_error : ''
24
+ details = details["#{errors.type}: ".length..(details.length - 1)] if details.start_with?("#{errors.type}: ")
25
+
26
+ SBF::Client::ErrorEntity.new(code: errors.code, type: errors.type, details: details)
27
+ end
28
+
29
+ def [](*args)
30
+ log_deprecated('[]', caller) if args == [:results] || args == [:total_count]
31
+ return self if args == [:results]
32
+ return @total_count if args == [:total_count]
33
+ result = super
34
+ result.is_a?(Array) ? self.class.new(result, total_count) : result
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,4 +1,5 @@
1
1
  require 'stbaldricks/errors'
2
+ require 'active_model'
2
3
 
3
4
  module SBF
4
5
  module Client
@@ -20,6 +21,10 @@ module SBF
20
21
  @fields = Set.new(data[:errors].empty? ? [] : data[:errors]).freeze
21
22
  end
22
23
 
24
+ def empty?
25
+ [@code, @type, @details].all?(&:nil?) && @fields.empty?
26
+ end
27
+
23
28
  def to_hash
24
29
  {code: @code, type: @type, details: @details, fields: @fields.to_a}
25
30
  end
@@ -34,5 +39,25 @@ module SBF
34
39
  error_message
35
40
  end
36
41
  end
42
+
43
+ class ApiErrorEntity < ErrorEntity
44
+ attr_reader :http_code
45
+
46
+ def initialize(data)
47
+ super(data)
48
+ @http_code = data[:http_code].freeze
49
+ end
50
+ end
51
+
52
+ module Entity
53
+ class Errors < ActiveModel::Errors
54
+ attr_reader :http_code, :code, :type
55
+
56
+ def initialize(obj, http_code = nil)
57
+ super(obj)
58
+ @http_code = http_code
59
+ end
60
+ end
61
+ end
37
62
  end
38
63
  end
@@ -3,7 +3,7 @@ require 'stbaldricks/entities/lib/base'
3
3
  module SBF
4
4
  module Client
5
5
  class OptOutSettings < SBF::Client::BaseEntity
6
- attr_reader :email_activity, :email_members_communication, :email_mass_online, :email_mass_print, :email_reply, :email_contact_us
6
+ attr_accessor :email_activity, :email_members_communication, :email_mass_online, :email_mass_print, :email_reply, :email_contact_us
7
7
 
8
8
  # Setting Types
9
9
  NOTIFICATION_TYPE = 1
@@ -12,7 +12,6 @@ module SBF
12
12
  MONEY_ORDER = 'money_order'
13
13
  NONCE = 'nonce'
14
14
  WIRE_TRANSFER = 'wire_transfer'
15
- RECURRING_GIFTS = 'recurring'
16
15
  PAYPAL = 'paypal'
17
16
  end
18
17
 
@@ -32,19 +31,19 @@ module SBF
32
31
  end
33
32
  end
34
33
 
35
- class CreditCardDetails < SBF::Client::Payment::Details
36
- attr_accessor :gateway, :authorization_id, :cardholder_name, :card_type, :expiration_date, :card_number
34
+ class SubscriptionCreditCardDetails < SBF::Client::Payment::Details
35
+ attr_accessor :cardholder_name, :card_type, :expiration_date, :card_number
37
36
 
38
37
  def type
39
38
  SBF::Client::Payment::Type::CREDIT_CARD
40
39
  end
41
40
  end
42
41
 
43
- class BraintreeSubscriptionDetails < SBF::Client::Payment::Details
44
- attr_accessor :gateway, :subscription_id, :customer_id, :cardholder_name, :card_type, :expiration_date, :card_number
42
+ class CreditCardDetails < SBF::Client::Payment::Details
43
+ attr_accessor :gateway, :authorization_id, :cardholder_name, :card_type, :expiration_date, :card_number
45
44
 
46
45
  def type
47
- SBF::Client::Payment::Type::RECURRING_GIFTS
46
+ SBF::Client::Payment::Type::CREDIT_CARD
48
47
  end
49
48
  end
50
49
 
@@ -15,6 +15,8 @@ module SBF
15
15
  attr_accessor :id
16
16
  attr_accessor :type
17
17
  attr_accessor :identifier
18
+ attr_accessor :title
19
+ attr_accessor :caption
18
20
  end
19
21
  end
20
22
  end
@@ -42,7 +42,9 @@ module SBF
42
42
 
43
43
  def instance_action(name)
44
44
  define_method(name) do |*args|
45
- endpoint.send(name, self, *args)
45
+ result = endpoint.send(name, self, *args)
46
+ result unless result.is_a?(SBF::Client::TopLevelEntity)
47
+ [:save, :create].include?(name) && result.errors? ? false : result
46
48
  end
47
49
  end
48
50
 
@@ -59,13 +61,23 @@ module SBF
59
61
 
60
62
  if name == :update
61
63
  define_method(name) do |*args|
62
- endpoint.update(id, self, *args)
64
+ result = endpoint.update(id, self, *args)
65
+ result unless result.is_a?(SBF::Client::TopLevelEntity)
66
+ result.errors? ? false : result
63
67
  end
64
68
  end
65
69
 
66
70
  if name == :delete
67
71
  define_method(:delete) do |*_args|
68
- endpoint.delete(id)
72
+ response = endpoint.delete(id)
73
+ if response.error?
74
+ add_errors(response.error)
75
+ errors.instance_variable_set(:@http_code, response.http_code)
76
+ false
77
+ else
78
+ @destroyed = true
79
+ freeze
80
+ end
69
81
  end
70
82
  end
71
83
 
@@ -44,6 +44,39 @@ module SBF
44
44
  def draft_content
45
45
  content.select { |x| x.is_draft == true }
46
46
  end
47
+
48
+ def editor_content
49
+ published_content.map do |published|
50
+ draft_content.find { |d| published.id == d.id } || published
51
+ end
52
+ end
53
+
54
+ def lock_expired?(ttl = 300)
55
+ locked_at.nil? || Time.now >= Time.parse(locked_at) + ttl
56
+ end
57
+
58
+ def add_draft_sections(sections)
59
+ sections.each do |cid, data|
60
+ #convert symbol to integer
61
+ cid = cid.to_s.to_i
62
+
63
+ content = published_content.find { |c| c.id == cid }
64
+ update_draft_content_section(content, data, cid) unless content.nil?
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ def update_draft_content_section(content, data, cid)
71
+ # update or create draft version of content
72
+ draft = draft_content.find { |d| d.id == cid }
73
+ if draft.nil?
74
+ self.content << SBF::Client::Page::Content.new(content.to_hash.merge(is_draft: true, title: data[:title], text: data[:text]))
75
+ else
76
+ draft.title = data[:title]
77
+ draft.text = data[:text]
78
+ end
79
+ end
47
80
  end
48
81
  end
49
82
  end
@@ -70,7 +70,7 @@ module SBF
70
70
  end
71
71
 
72
72
  class Photos < SBF::Client::BaseEntity
73
- attr_reader :before, :after, :avatar, :default
73
+ attr_reader :before, :after, :avatar, :default, :icon
74
74
  end
75
75
 
76
76
  class Policies < SBF::Client::BaseEntity
@@ -18,7 +18,8 @@ module SBF
18
18
  actions DEFAULT_CRUD_ACTIONS
19
19
 
20
20
  def upload(image_data_url, with = {})
21
- endpoint.upload(image_data_url, self, with)
21
+ photo = endpoint.upload(image_data_url, self, with)
22
+ photo.errors? ? false : photo
22
23
  end
23
24
 
24
25
  def self.upload(*args)
@@ -157,19 +157,21 @@ module SBF
157
157
  attr_accessor :is_unrecognized
158
158
  attr_accessor :promotional_code
159
159
  attr_accessor :funding_type
160
+ attr_accessor :customer_id
161
+ attr_accessor :subscription_id
160
162
  entity_collection_attr_accessor :donations, 'SBF::Client::FullDonation', 'SBF::Client::PartialDonation'
161
163
  attr_accessor :created_at, :modified_at, :modified_by, :how_created, :past_due_at
162
164
 
163
165
  multitype_attr_accessor(
164
166
  :payment_details,
165
167
  [
166
- [
167
- ->(v) { v[:type] == SBF::Client::Payment::Type::RECURRING_GIFTS },
168
- 'SBF::Client::Payment::BraintreeSubscriptionDetails'
169
- ],
170
168
  [
171
169
  ->(v) { v[:type] == SBF::Client::Payment::Type::NONCE },
172
170
  'SBF::Client::Payment::NonceDetails'
171
+ ],
172
+ [
173
+ ->(v) { v[:type] == SBF::Client::Payment::Type::CREDIT_CARD },
174
+ 'SBF::Client::Payment::SubscriptionCreditCardDetails'
173
175
  ]
174
176
  ]
175
177
  )
@@ -10,16 +10,15 @@ module SBF
10
10
  @http_code = http_code
11
11
  @data = data
12
12
  @error = error || SBF::Client::ErrorEntity.new(nil)
13
+ @errors = SBF::Client::Entity::Errors.new(self, http_code)
14
+ add_errors(@error) unless @error.nil? || @error.empty?
15
+ @errors.instance_variable_set(:@http_code, http_code)
13
16
  end
14
17
 
15
18
  def success?
16
19
  http_code.to_s.start_with?('2')
17
20
  end
18
21
 
19
- def error?
20
- !success?
21
- end
22
-
23
22
  def to_json
24
23
  to_hash.to_json
25
24
  end
@@ -69,6 +69,7 @@ module SBF
69
69
  attr_reader :website_url
70
70
  attr_reader :total_donations
71
71
  attr_reader :total_participants
72
+ attr_reader :icon
72
73
  end
73
74
 
74
75
  class Team < SBF::Client::BaseEntity
@@ -91,6 +92,7 @@ module SBF
91
92
  attr_reader :status_id
92
93
  attr_reader :total_donations
93
94
  attr_reader :total_participants
95
+ attr_reader :icon
94
96
  end
95
97
 
96
98
  class Participant < SBF::Client::BaseEntity
@@ -120,6 +122,7 @@ module SBF
120
122
  attr_reader :team_id
121
123
  attr_reader :virtual_participation_date
122
124
  attr_reader :total_donations
125
+ attr_reader :icon
123
126
  end
124
127
 
125
128
  class Fundraiser < SBF::Client::BaseEntity
@@ -150,6 +153,7 @@ module SBF
150
153
  attr_reader :country
151
154
  attr_reader :country_full
152
155
  attr_reader :total_donations
156
+ attr_reader :icon
153
157
  end
154
158
 
155
159
  class Kid < SBF::Client::BaseEntity
@@ -23,6 +23,7 @@ module SBF
23
23
  module Status
24
24
  ACTIVE = 'active'
25
25
  PENDING = 'pending'
26
+ SUSPENDED = 'suspended'
26
27
  end
27
28
 
28
29
  module HowCreated
@@ -43,7 +44,7 @@ module SBF
43
44
  end
44
45
 
45
46
  class Photos < SBF::Client::BaseEntity
46
- attr_reader :avatar, :default
47
+ attr_reader :avatar, :default, :icon
47
48
  end
48
49
 
49
50
  class Totals < SBF::Client::BaseEntity
@@ -90,6 +91,14 @@ module SBF
90
91
  def active?
91
92
  status == SBF::Client::Team::Status::ACTIVE
92
93
  end
94
+
95
+ def pending?
96
+ status == SBF::Client::Team::Status::PENDING
97
+ end
98
+
99
+ def suspended?
100
+ status == SBF::Client::Team::Status::SUSPENDED
101
+ end
93
102
  end
94
103
  end
95
104
  end
@@ -1,5 +1,5 @@
1
1
  module SBF
2
2
  module Client
3
- VERSION = '4.6.1.alpha.2'
3
+ VERSION = '4.6.1.alpha.3'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stbaldricks
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.1.alpha.2
4
+ version: 4.6.1.alpha.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Firespring
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-22 00:00:00.000000000 Z
11
+ date: 2018-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 5.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.2'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: 5.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.2'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: httparty
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -84,11 +90,12 @@ files:
84
90
  - lib/stbaldricks/endpoints/config.rb
85
91
  - lib/stbaldricks/endpoints/contact.rb
86
92
  - lib/stbaldricks/endpoints/event.rb
87
- - lib/stbaldricks/endpoints/event_application.rb
88
93
  - lib/stbaldricks/endpoints/facebook/user.rb
89
94
  - lib/stbaldricks/endpoints/fund.rb
95
+ - lib/stbaldricks/endpoints/fundraiser.rb
90
96
  - lib/stbaldricks/endpoints/kid.rb
91
97
  - lib/stbaldricks/endpoints/kid_honor.rb
98
+ - lib/stbaldricks/endpoints/kid_institution.rb
92
99
  - lib/stbaldricks/endpoints/lib/entity.rb
93
100
  - lib/stbaldricks/endpoints/matching_gift_company.rb
94
101
  - lib/stbaldricks/endpoints/message.rb
@@ -105,6 +112,7 @@ files:
105
112
  - lib/stbaldricks/entities/challenger.rb
106
113
  - lib/stbaldricks/entities/challenger/model_type.rb
107
114
  - lib/stbaldricks/entities/communicate.rb
115
+ - lib/stbaldricks/entities/concerns/entity_response_concern.rb
108
116
  - lib/stbaldricks/entities/concerns/event_year_concern.rb
109
117
  - lib/stbaldricks/entities/concerns/fundraising_page_concern.rb
110
118
  - lib/stbaldricks/entities/concerns/model_type_concern.rb
@@ -148,9 +156,11 @@ files:
148
156
  - lib/stbaldricks/entities/international_partner.rb
149
157
  - lib/stbaldricks/entities/kid.rb
150
158
  - lib/stbaldricks/entities/kid_honor.rb
159
+ - lib/stbaldricks/entities/kid_institution.rb
151
160
  - lib/stbaldricks/entities/lib/address.rb
152
161
  - lib/stbaldricks/entities/lib/base.rb
153
162
  - lib/stbaldricks/entities/lib/cacheable.rb
163
+ - lib/stbaldricks/entities/lib/collection.rb
154
164
  - lib/stbaldricks/entities/lib/default_cacheable.rb
155
165
  - lib/stbaldricks/entities/lib/email_address.rb
156
166
  - lib/stbaldricks/entities/lib/error.rb
@@ -224,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
234
  version: 1.3.1
225
235
  requirements: []
226
236
  rubyforge_project:
227
- rubygems_version: 2.7.3
237
+ rubygems_version: 2.7.7
228
238
  signing_key:
229
239
  specification_version: 4
230
240
  summary: St. Baldrick's Foundation Ruby Client Library
@@ -1,32 +0,0 @@
1
- require 'stbaldricks/endpoints/lib/entity'
2
-
3
- module SBF
4
- module Client
5
- class EventApplicationEndpoint < SBF::Client::EntityEndpoint
6
- def create(entity, with = {})
7
- raise SBF::Client::Error, 'Invalid Entity' unless entity.is_a?(SBF::Client::BaseEntity)
8
-
9
- with = normalize_with(with)
10
-
11
- create_data = entity.to_hash
12
- create_data.store(:with, with)
13
-
14
- entity.errors.clear
15
-
16
- response = SBF::Client::Api::Request.post_request("#{base_uri}/create", create_data)
17
- parsed_response_body = JSON.parse(response.body).symbolize!
18
-
19
- if ok?(response)
20
- # Re-initialize the entity using the existing data as a base and overwriting with all data returned from the response
21
- # This will populate fields that have been auto-populated (e.g. id) into the original object
22
- entity.send(:initialize_attributes, create_data.merge(parsed_response_body))
23
- else
24
- error = SBF::Client::ErrorEntity.new(parsed_response_body)
25
- entity.add_errors(error)
26
- end
27
-
28
- SBF::Client::Api::Response.new(http_code: response.code, data: entity, error: error)
29
- end
30
- end
31
- end
32
- end