stbaldricks 1.5.1.pre

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 (117) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/lib/stbaldricks.rb +2 -0
  4. data/lib/stbaldricks/api.rb +7 -0
  5. data/lib/stbaldricks/api_connector.rb +47 -0
  6. data/lib/stbaldricks/client.rb +7 -0
  7. data/lib/stbaldricks/configuration.rb +47 -0
  8. data/lib/stbaldricks/default_logger.rb +24 -0
  9. data/lib/stbaldricks/endpoints/communicate.rb +67 -0
  10. data/lib/stbaldricks/endpoints/config.rb +18 -0
  11. data/lib/stbaldricks/endpoints/contact.rb +12 -0
  12. data/lib/stbaldricks/endpoints/event.rb +39 -0
  13. data/lib/stbaldricks/endpoints/event_application.rb +32 -0
  14. data/lib/stbaldricks/endpoints/fund.rb +24 -0
  15. data/lib/stbaldricks/endpoints/kid.rb +24 -0
  16. data/lib/stbaldricks/endpoints/kid_honor.rb +17 -0
  17. data/lib/stbaldricks/endpoints/lib/entity.rb +247 -0
  18. data/lib/stbaldricks/endpoints/message.rb +27 -0
  19. data/lib/stbaldricks/endpoints/newsletter_recipient.rb +41 -0
  20. data/lib/stbaldricks/endpoints/participant.rb +66 -0
  21. data/lib/stbaldricks/endpoints/photo.rb +51 -0
  22. data/lib/stbaldricks/endpoints/recurring_gift.rb +18 -0
  23. data/lib/stbaldricks/endpoints/search.rb +63 -0
  24. data/lib/stbaldricks/endpoints/shave_schedule.rb +28 -0
  25. data/lib/stbaldricks/endpoints/user.rb +106 -0
  26. data/lib/stbaldricks/entities/batch.rb +29 -0
  27. data/lib/stbaldricks/entities/campaign.rb +37 -0
  28. data/lib/stbaldricks/entities/communicate.rb +20 -0
  29. data/lib/stbaldricks/entities/config.rb +41 -0
  30. data/lib/stbaldricks/entities/contact.rb +40 -0
  31. data/lib/stbaldricks/entities/contact_group.rb +29 -0
  32. data/lib/stbaldricks/entities/document_library.rb +19 -0
  33. data/lib/stbaldricks/entities/document_library_category.rb +14 -0
  34. data/lib/stbaldricks/entities/donation.rb +372 -0
  35. data/lib/stbaldricks/entities/donation/donor_type.rb +13 -0
  36. data/lib/stbaldricks/entities/donation/how_created.rb +22 -0
  37. data/lib/stbaldricks/entities/donation/payment_type.rb +17 -0
  38. data/lib/stbaldricks/entities/donation/promo_code.rb +22 -0
  39. data/lib/stbaldricks/entities/donation/recipient_type.rb +17 -0
  40. data/lib/stbaldricks/entities/donation/special_donation_type.rb +78 -0
  41. data/lib/stbaldricks/entities/donation/status.rb +12 -0
  42. data/lib/stbaldricks/entities/donation/submitter_type.rb +13 -0
  43. data/lib/stbaldricks/entities/donor.rb +15 -0
  44. data/lib/stbaldricks/entities/event.rb +173 -0
  45. data/lib/stbaldricks/entities/event/fund_relationship_type.rb +15 -0
  46. data/lib/stbaldricks/entities/event/how_created.rb +14 -0
  47. data/lib/stbaldricks/entities/event/promo_code.rb +11 -0
  48. data/lib/stbaldricks/entities/event/status.rb +13 -0
  49. data/lib/stbaldricks/entities/event/sub_type.rb +16 -0
  50. data/lib/stbaldricks/entities/event/type.rb +12 -0
  51. data/lib/stbaldricks/entities/event_application.rb +135 -0
  52. data/lib/stbaldricks/entities/event_application/model_type.rb +15 -0
  53. data/lib/stbaldricks/entities/event_application/status.rb +23 -0
  54. data/lib/stbaldricks/entities/event_donation_summary.rb +18 -0
  55. data/lib/stbaldricks/entities/event_participant_summary.rb +17 -0
  56. data/lib/stbaldricks/entities/event_supporter.rb +24 -0
  57. data/lib/stbaldricks/entities/fund.rb +98 -0
  58. data/lib/stbaldricks/entities/fundraiser.rb +124 -0
  59. data/lib/stbaldricks/entities/international_partner.rb +58 -0
  60. data/lib/stbaldricks/entities/kid.rb +190 -0
  61. data/lib/stbaldricks/entities/kid_honor.rb +123 -0
  62. data/lib/stbaldricks/entities/lib/address.rb +25 -0
  63. data/lib/stbaldricks/entities/lib/base.rb +505 -0
  64. data/lib/stbaldricks/entities/lib/cacheable.rb +43 -0
  65. data/lib/stbaldricks/entities/lib/default_cacheable.rb +17 -0
  66. data/lib/stbaldricks/entities/lib/email_address.rb +15 -0
  67. data/lib/stbaldricks/entities/lib/error.rb +38 -0
  68. data/lib/stbaldricks/entities/lib/fundraising_page.rb +20 -0
  69. data/lib/stbaldricks/entities/lib/geo_location.rb +9 -0
  70. data/lib/stbaldricks/entities/lib/location.rb +27 -0
  71. data/lib/stbaldricks/entities/lib/name.rb +17 -0
  72. data/lib/stbaldricks/entities/lib/not_implemented_object.rb +32 -0
  73. data/lib/stbaldricks/entities/lib/opt_out_settings.rb +21 -0
  74. data/lib/stbaldricks/entities/lib/payment.rb +86 -0
  75. data/lib/stbaldricks/entities/lib/permissions.rb +33 -0
  76. data/lib/stbaldricks/entities/lib/phone.rb +29 -0
  77. data/lib/stbaldricks/entities/lib/third_party_media.rb +20 -0
  78. data/lib/stbaldricks/entities/lib/top_level.rb +99 -0
  79. data/lib/stbaldricks/entities/lib/venue.rb +18 -0
  80. data/lib/stbaldricks/entities/memorial.rb +61 -0
  81. data/lib/stbaldricks/entities/message.rb +65 -0
  82. data/lib/stbaldricks/entities/newsletter_recipient.rb +17 -0
  83. data/lib/stbaldricks/entities/organization.rb +90 -0
  84. data/lib/stbaldricks/entities/page.rb +49 -0
  85. data/lib/stbaldricks/entities/participant.rb +216 -0
  86. data/lib/stbaldricks/entities/person.rb +403 -0
  87. data/lib/stbaldricks/entities/photo.rb +260 -0
  88. data/lib/stbaldricks/entities/recurring_gift.rb +215 -0
  89. data/lib/stbaldricks/entities/response.rb +37 -0
  90. data/lib/stbaldricks/entities/search.rb +223 -0
  91. data/lib/stbaldricks/entities/section.rb +15 -0
  92. data/lib/stbaldricks/entities/shave_schedule.rb +69 -0
  93. data/lib/stbaldricks/entities/summary.rb +32 -0
  94. data/lib/stbaldricks/entities/team.rb +95 -0
  95. data/lib/stbaldricks/entities/user.rb +76 -0
  96. data/lib/stbaldricks/enums/country.rb +223 -0
  97. data/lib/stbaldricks/enums/feature.rb +29 -0
  98. data/lib/stbaldricks/enums/league_status.rb +16 -0
  99. data/lib/stbaldricks/enums/model_type.rb +39 -0
  100. data/lib/stbaldricks/enums/permission.rb +223 -0
  101. data/lib/stbaldricks/enums/permission_model_type.rb +21 -0
  102. data/lib/stbaldricks/enums/province.rb +39 -0
  103. data/lib/stbaldricks/enums/state.rb +137 -0
  104. data/lib/stbaldricks/enums/top_level_category_type.rb +25 -0
  105. data/lib/stbaldricks/errors.rb +18 -0
  106. data/lib/stbaldricks/log.rb +16 -0
  107. data/lib/stbaldricks/patches/array.rb +6 -0
  108. data/lib/stbaldricks/patches/boolean.rb +25 -0
  109. data/lib/stbaldricks/patches/class.rb +13 -0
  110. data/lib/stbaldricks/patches/float.rb +9 -0
  111. data/lib/stbaldricks/patches/hash.rb +16 -0
  112. data/lib/stbaldricks/patches/integer.rb +9 -0
  113. data/lib/stbaldricks/patches/nil.rb +25 -0
  114. data/lib/stbaldricks/patches/string.rb +54 -0
  115. data/lib/stbaldricks/request.rb +146 -0
  116. data/lib/stbaldricks/version.rb +5 -0
  117. metadata +215 -0
@@ -0,0 +1,20 @@
1
+ require 'stbaldricks/endpoints/communicate'
2
+ require 'stbaldricks/entities/lib/base'
3
+ require 'stbaldricks/entities/message'
4
+ require 'stbaldricks/entities/contact'
5
+
6
+ module SBF
7
+ module Client
8
+ class Communicate < SBF::Client::Message
9
+ endpoint SBF::Client::CommunicateEndpoint
10
+
11
+ action :categories
12
+ action :years
13
+ action :groups
14
+ instance_action :compose
15
+ action :contacts
16
+
17
+ entity_collection_attr_accessor :to, 'SBF::Client::Contact'
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,41 @@
1
+ require 'singleton'
2
+ require 'stbaldricks/endpoints/config'
3
+ require 'stbaldricks/entities/lib/top_level'
4
+
5
+ module SBF
6
+ module Client
7
+ class Config < SBF::Client::TopLevelEntity
8
+ include Singleton
9
+ endpoint SBF::Client::ConfigEndpoint
10
+
11
+ action :get
12
+ instance_action :reload
13
+
14
+ attr_reader :open_registration_years
15
+ attr_reader :default_year
16
+ attr_reader :years_for_squire
17
+ attr_reader :years_for_knight
18
+ attr_reader :years_for_knight_commander
19
+ attr_reader :years_for_crusader
20
+ attr_reader :braintree_client_encryption_key
21
+ attr_reader :website_url
22
+ #NOTE: If you add another attribute, be sure to mock it out in `configure :test` of app.rb
23
+
24
+ # Attempts to call the method on the cached configuration object
25
+ def self.method_missing(method_name, *arguments, &block)
26
+ # The first time a missing method is called, call reload to make sure the instance has been populated
27
+ unless @_loaded
28
+ @_loaded = true
29
+ reload
30
+ end
31
+
32
+ # If the method being called exists on the instance, call it. Otherwise forward the request on to 'super'.
33
+ if instance.respond_to?(method_name)
34
+ return instance.send(method_name)
35
+ else
36
+ super(method_name, *arguments, &block)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,40 @@
1
+ require 'stbaldricks/endpoints/contact'
2
+ require 'stbaldricks/entities/lib/top_level'
3
+ require 'stbaldricks/entities/person'
4
+ require 'stbaldricks/entities/contact_group'
5
+ require 'htmlentities'
6
+
7
+ module SBF
8
+ module Client
9
+ class Contact < SBF::Client::TopLevelEntity
10
+ endpoint SBF::Client::ContactEndpoint
11
+
12
+ actions DEFAULT_CRUD_ACTIONS
13
+
14
+ module Type
15
+ WEBSITE = 'website'
16
+ end
17
+
18
+ attr_reader :id
19
+ entity_attr_accessor :owner, 'SBF::Client::FullPerson', 'SBF::Client::PartialPerson'
20
+ entity_attr_accessor :person, 'SBF::Client::FullPerson', 'SBF::Client::PartialPerson'
21
+ attr_accessor :type
22
+ attr_reader :display_name
23
+ attr_reader :email
24
+ attr_reader :created_at, :modified_at
25
+ entity_collection_attr_reader :contact_groups, 'SBF::Client::ContactGroup'
26
+
27
+ def display_name
28
+ HTMLEntities.new.decode(@display_name)
29
+ end
30
+ end
31
+
32
+ class CustomContact < SBF::Client::Contact
33
+ endpoint SBF::Client::ContactEndpoint
34
+
35
+ attr_accessor :id
36
+ attr_accessor :display_name
37
+ attr_accessor :email
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ require 'stbaldricks/entities/lib/top_level'
2
+ require 'stbaldricks/entities/person'
3
+ require 'stbaldricks/entities/contact'
4
+ require 'htmlentities'
5
+
6
+ module SBF
7
+ module Client
8
+ class ContactGroup < SBF::Client::TopLevelEntity
9
+ actions DEFAULT_CRUD_ACTIONS
10
+
11
+ attr_accessor :id
12
+ attr_accessor :display_name
13
+ entity_attr_accessor :owner, 'SBF::Client::FullPerson'
14
+ attr_accessor :contacts
15
+ multitype_collection_attr_accessor(
16
+ :contacts,
17
+ [
18
+ [->(v) { v.key?(:person) && !v[:person].empty? }, 'SBF::Client::Contact'],
19
+ [ELSE, 'SBF::Client::CustomContact']
20
+ ]
21
+ )
22
+ attr_reader :created_at, :modified_at
23
+
24
+ def display_name
25
+ HTMLEntities.new.decode(@display_name)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ require 'stbaldricks/entities/lib/top_level'
2
+ require 'stbaldricks/entities/document_library_category'
3
+
4
+ module SBF
5
+ module Client
6
+ class DocumentLibrary < SBF::Client::TopLevelEntity
7
+ actions DEFAULT_CRUD_ACTIONS
8
+
9
+ attr_accessor :id
10
+ attr_accessor :type
11
+ attr_accessor :title
12
+ attr_accessor :description
13
+ attr_accessor :url
14
+ attr_accessor :media_storage_id
15
+ attr_accessor :sort_order
16
+ entity_attr_reader :category, 'SBF::Client::DocumentLibraryCategory', nil, true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ require 'stbaldricks/entities/lib/top_level'
2
+
3
+ module SBF
4
+ module Client
5
+ class DocumentLibraryCategory < SBF::Client::TopLevelEntity
6
+ actions DEFAULT_CRUD_ACTIONS
7
+
8
+ attr_accessor :id
9
+ attr_accessor :top_level_category
10
+ attr_accessor :name
11
+ attr_accessor :sort_order
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,372 @@
1
+ require 'stbaldricks/entities/fund'
2
+ require 'stbaldricks/entities/event'
3
+ require 'stbaldricks/entities/team'
4
+ require 'stbaldricks/entities/participant'
5
+ require 'stbaldricks/entities/fundraiser'
6
+ require 'stbaldricks/entities/person'
7
+ require 'stbaldricks/entities/organization'
8
+ require 'stbaldricks/entities/memorial'
9
+ require 'stbaldricks/entities/lib/address'
10
+ require 'stbaldricks/entities/lib/top_level'
11
+ require 'stbaldricks/entities/lib/name'
12
+ require 'stbaldricks/entities/lib/payment'
13
+ require 'stbaldricks/entities/lib/default_cacheable'
14
+
15
+ module SBF
16
+ module Client
17
+ class Donation < SBF::Client::TopLevelEntity
18
+ include Entities::DefaultCacheable
19
+ actions DEFAULT_CRUD_ACTIONS
20
+
21
+ disallow_instantiation
22
+
23
+ class EmployerMatching < SBF::Client::BaseEntity
24
+ attr_accessor :is_match, :employer, :matched_donation_id
25
+
26
+ def matched_donation_id=(value)
27
+ @matched_donation_id = value.to_i
28
+ end
29
+ end
30
+
31
+ class Tribute < SBF::Client::BaseEntity
32
+ attr_accessor :type
33
+ attr_reader :name
34
+ entity_attr_accessor :name_pieces, 'SBF::Client::NamePieces'
35
+
36
+ module Type
37
+ HONOR = 'honor'
38
+ TRIBUTE = 'tribute'
39
+ end
40
+ end
41
+
42
+ class FullParticipant < SBF::Client::FullParticipant
43
+ attr_reader :model_type
44
+
45
+ def model_type
46
+ SBF::Client::Donation::RecipientType::PARTICIPANT
47
+ end
48
+ end
49
+
50
+ class PartialParticipant < SBF::Client::PartialParticipant
51
+ attr_reader :model_type
52
+
53
+ def model_type
54
+ SBF::Client::Donation::RecipientType::PARTICIPANT
55
+ end
56
+ end
57
+
58
+ class FullFundraiser < SBF::Client::FullFundraiser
59
+ attr_reader :model_type
60
+
61
+ def model_type
62
+ SBF::Client::Donation::RecipientType::FUNDRAISER
63
+ end
64
+ end
65
+
66
+ class PartialFundraiser < SBF::Client::PartialFundraiser
67
+ attr_reader :model_type
68
+
69
+ def model_type
70
+ SBF::Client::Donation::RecipientType::FUNDRAISER
71
+ end
72
+ end
73
+
74
+ class FullTeam < SBF::Client::FullTeam
75
+ attr_reader :model_type
76
+
77
+ def model_type
78
+ SBF::Client::Donation::RecipientType::TEAM
79
+ end
80
+ end
81
+
82
+ class PartialTeam < SBF::Client::PartialTeam
83
+ attr_reader :model_type
84
+
85
+ def model_type
86
+ SBF::Client::Donation::RecipientType::TEAM
87
+ end
88
+ end
89
+
90
+ class FullEvent < SBF::Client::FullEvent
91
+ attr_reader :model_type
92
+
93
+ def model_type
94
+ SBF::Client::Donation::RecipientType::EVENT
95
+ end
96
+ end
97
+
98
+ class PartialEvent < SBF::Client::PartialEvent
99
+ attr_reader :model_type
100
+
101
+ def model_type
102
+ SBF::Client::Donation::RecipientType::EVENT
103
+ end
104
+ end
105
+
106
+ class FullFund < SBF::Client::FullFund
107
+ attr_reader :model_type
108
+
109
+ def model_type
110
+ SBF::Client::Donation::RecipientType::FUND
111
+ end
112
+ end
113
+
114
+ class PartialFund < SBF::Client::PartialFund
115
+ attr_reader :model_type
116
+
117
+ def model_type
118
+ SBF::Client::Donation::RecipientType::FUND
119
+ end
120
+ end
121
+
122
+ class FullMemorial < SBF::Client::FullMemorial
123
+ attr_reader :model_type
124
+
125
+ def model_type
126
+ SBF::Client::Donation::RecipientType::MEMORIAL
127
+ end
128
+ end
129
+
130
+ class PartialMemorial < SBF::Client::PartialMemorial
131
+ attr_reader :model_type
132
+
133
+ def model_type
134
+ SBF::Client::Donation::RecipientType::MEMORIAL
135
+ end
136
+ end
137
+
138
+ class SBFGeneralFund < SBF::Client::BaseEntity
139
+ attr_reader :model_type
140
+
141
+ def id
142
+ nil
143
+ end
144
+
145
+ def model_type
146
+ SBF::Client::Donation::RecipientType::SBF_GENERAL_FUND
147
+ end
148
+ end
149
+
150
+ class RecognitionCard < SBF::Client::BaseEntity
151
+ class Recipient < SBF::Client::BaseEntity
152
+ attr_reader :name
153
+ entity_attr_accessor :name_pieces, SBF::Client::NamePieces
154
+ entity_attr_accessor :address, SBF::Client::Address
155
+ end
156
+
157
+ entity_attr_accessor :recipient, SBF::Client::Donation::RecognitionCard::Recipient
158
+ attr_accessor :salutation, :message, :signature
159
+ end
160
+
161
+ def self.generate_special_donation_type(entity)
162
+ return if entity.nil?
163
+
164
+ # Calculate the country and state
165
+ country, state = get_country_and_state_for_special_donation_type(entity)
166
+
167
+ # state only applicable for United States, others only use international value
168
+ unless country.empty?
169
+ if country.to_sym == SBF::Client::Country.list[SBF::Client::Country::UNITED_STATES]
170
+ state_value = state.to_s.upcase.to_sym
171
+ if !state_value.empty? && SBF::Client::Donation::SpecialDonationType.const_defined?(state_value)
172
+ return SBF::Client::Donation::SpecialDonationType.const_get(state_value)
173
+
174
+ else
175
+ return SBF::Client::Donation::SpecialDonationType::NO_STATE
176
+ end
177
+
178
+ else
179
+ international_value = "INT_#{country}".upcase.to_sym
180
+ if SBF::Client::Donation::SpecialDonationType.const_defined?(international_value)
181
+ return SBF::Client::Donation::SpecialDonationType.const_get(international_value)
182
+
183
+ else
184
+ return SBF::Client::Donation::SpecialDonationType::INTERNATIONAL
185
+
186
+ end
187
+ end
188
+ end
189
+
190
+ SBF::Client::Donation::SpecialDonationType::GENERAL_EVENT
191
+ end
192
+
193
+ def self.get_country_and_state_for_special_donation_type(entity)
194
+ case entity
195
+ when SBF::Client::Search::Participant, SBF::Client::Search::Fundraiser, SBF::Client::Search::Team, SBF::Client::Search::Event
196
+ if entity.event_id == 1
197
+ # Look up the person since it is a Search::Participant and doesn't have sub-objects
198
+ response = SBF::Client::Person.get(entity.profile_id)
199
+ person = response.data
200
+ raise SBF::Client::Error, 'Invalid Entity' if response.error? || person.nil?
201
+
202
+ # Get country and state from the person
203
+ country = person.addresses.primary.country
204
+ state = (country.to_sym == SBF::Client::Country.list[SBF::Client::Country::UNITED_STATES] ? person.addresses.primary.state : '')
205
+
206
+ else
207
+ country = (defined?(entity.country).nil? ? nil : entity.country)
208
+ state = (defined?(entity.state).nil? ? nil : entity.state)
209
+
210
+ end
211
+
212
+ return [country, state]
213
+
214
+ when SBF::Client::Participant
215
+ return get_event_country_and_state_for_special_donation_type(entity.event, entity.person)
216
+
217
+ when SBF::Client::Fundraiser
218
+ return [entity.venue.location.address.country, entity.venue.location.address.state]
219
+
220
+ when SBF::Client::Team
221
+ return get_event_country_and_state_for_special_donation_type(entity.event)
222
+
223
+ when SBF::Client::Event
224
+ return get_event_country_and_state_for_special_donation_type(entity)
225
+
226
+ end
227
+ end
228
+ private_class_method :get_country_and_state_for_special_donation_type
229
+
230
+ def self.get_event_country_and_state_for_special_donation_type(event, person = nil)
231
+ if event.virtual?
232
+ raise SBF::Client::Error, 'Invalid Entity' if person.nil?
233
+
234
+ # Get country and state from the person
235
+ country = person.addresses.primary.country
236
+ state = (country.to_sym == SBF::Client::Country.list[SBF::Client::Country::UNITED_STATES] ? person.addresses.primary.state : '')
237
+
238
+ else
239
+ country = (defined?(event.venue.location.address.country).nil? ? nil : event.venue.location.address.country)
240
+ state = (defined?(event.venue.location.address.state).nil? ? nil : event.venue.location.address.state)
241
+
242
+ end
243
+
244
+ [country, state]
245
+ end
246
+ private_class_method :get_event_country_and_state_for_special_donation_type
247
+ end
248
+
249
+ class PartialDonation < SBF::Client::Donation
250
+ attr_accessor :id
251
+ end
252
+
253
+ class FullDonation < SBF::Client::Donation
254
+ attr_accessor :id
255
+ attr_accessor :status
256
+ attr_accessor :amount
257
+ attr_accessor :display_name
258
+ multitype_attr_accessor(
259
+ :recipient,
260
+ [
261
+ [
262
+ ->(v) { v[:model_type] == SBF::Client::Donation::RecipientType::PARTICIPANT },
263
+ 'SBF::Client::Donation::FullParticipant',
264
+ 'SBF::Client::Donation::PartialParticipant'
265
+ ],
266
+ [
267
+ ->(v) { v[:model_type] == SBF::Client::Donation::RecipientType::FUNDRAISER },
268
+ 'SBF::Client::Donation::FullFundraiser',
269
+ 'SBF::Client::Donation::PartialFundraiser'
270
+ ],
271
+ [
272
+ ->(v) { v[:model_type] == SBF::Client::Donation::RecipientType::TEAM },
273
+ 'SBF::Client::Donation::FullTeam',
274
+ 'SBF::Client::Donation::PartialTeam'
275
+ ],
276
+ [
277
+ ->(v) { v[:model_type] == SBF::Client::Donation::RecipientType::EVENT },
278
+ 'SBF::Client::Donation::FullEvent',
279
+ 'SBF::Client::Donation::PartialEvent'
280
+ ],
281
+ [
282
+ ->(v) { v[:model_type] == SBF::Client::Donation::RecipientType::FUND },
283
+ 'SBF::Client::Donation::FullFund',
284
+ 'SBF::Client::Donation::PartialFund'
285
+ ],
286
+ [
287
+ ->(v) { v[:model_type] == SBF::Client::Donation::RecipientType::MEMORIAL },
288
+ 'SBF::Client::Donation::FullMemorial',
289
+ 'SBF::Client::Donation::PartialMemorial'
290
+ ],
291
+ [
292
+ ->(v) { v[:model_type] == SBF::Client::Donation::RecipientType::SBF_GENERAL_FUND },
293
+ 'SBF::Client::Donation::SBFGeneralFund'
294
+ ]
295
+ ],
296
+ optional: true
297
+ )
298
+
299
+ attr_accessor :is_unrecognized, :special_donation_type
300
+ multitype_attr_accessor(
301
+ :donor,
302
+ [
303
+ [
304
+ ->(v) { v[:type] == SBF::Client::Donation::DonorType::INDIVIDUAL },
305
+ 'SBF::Client::FullPerson',
306
+ 'SBF::Client::PartialPerson'
307
+ ],
308
+ [
309
+ ->(v) { v[:type] == SBF::Client::Donation::DonorType::BUSINESS },
310
+ 'SBF::Client::FullOrganization',
311
+ 'SBF::Client::PartialOrganization'
312
+ ],
313
+ [
314
+ ->(v) { v[:type] == SBF::Client::Donation::DonorType::ORGANIZATION_FOUNDATION },
315
+ 'SBF::Client::FullOrganization',
316
+ 'SBF::Client::PartialOrganization'
317
+ ]
318
+ ],
319
+ optional: true
320
+ )
321
+
322
+ multitype_attr_accessor(
323
+ :submitter,
324
+ [
325
+ [
326
+ ->(v) { v[:type] == SBF::Client::Donation::DonorType::INDIVIDUAL },
327
+ 'SBF::Client::FullPerson',
328
+ 'SBF::Client::PartialPerson'
329
+ ],
330
+ [
331
+ ->(v) { v[:type] == SBF::Client::Donation::DonorType::BUSINESS },
332
+ 'SBF::Client::FullOrganization',
333
+ 'SBF::Client::PartialOrganization'
334
+ ],
335
+ [
336
+ ->(v) { v[:type] == SBF::Client::Donation::DonorType::ORGANIZATION_FOUNDATION },
337
+ 'SBF::Client::FullOrganization',
338
+ 'SBF::Client::PartialOrganization'
339
+ ]
340
+ ],
341
+ optional: true
342
+ )
343
+
344
+ entity_attr_accessor :employer_matching, 'SBF::Client::Donation::EmployerMatching'
345
+ attr_accessor :foreign_beneficiary_country
346
+ attr_accessor :promotional_code
347
+ entity_attr_accessor :recurring_gift, 'SBF::Client::FullRecurringGift'
348
+ multitype_attr_accessor(
349
+ :payment_details,
350
+ [
351
+ [->(v) { v[:type] == SBF::Client::Payment::Type::CREDIT_CARD }, 'SBF::Client::Payment::CreditCardDetails'],
352
+ [->(v) { v[:type] == SBF::Client::Payment::Type::CASH }, 'SBF::Client::Payment::CashDetails'],
353
+ [->(v) { v[:type] == SBF::Client::Payment::Type::CHECK }, 'SBF::Client::Payment::CheckDetails'],
354
+ [->(v) { v[:type] == SBF::Client::Payment::Type::MONEY_ORDER }, 'SBF::Client::Payment::MoneyOrderDetails'],
355
+ [->(v) { v[:type] == SBF::Client::Payment::Type::NONCE }, 'SBF::Client::Payment::NonceDetails'],
356
+ [->(v) { v[:type] == SBF::Client::Payment::Type::WIRE_TRANSFER }, 'SBF::Client::Payment::WireTransferDetails'],
357
+ [->(v) { v[:type] == SBF::Client::Payment::Type::RECURRING_GIFTS }, 'SBF::Client::Payment::BraintreeSubscriptionDetails'],
358
+ [->(v) { v[:type] == SBF::Client::Payment::Type::UNKNOWN }, 'SBF::Client::Payment::UnknownDetails']
359
+ ]
360
+ )
361
+ entity_attr_accessor :tribute, 'SBF::Client::Donation::Tribute'
362
+ entity_attr_accessor :recognition_card, 'SBF::Client::Donation::RecognitionCard'
363
+ attr_accessor :collected_at
364
+ attr_accessor :created_at, :modified_at, :modified_by, :how_created
365
+ attr_accessor :is_thanked
366
+
367
+ def amount=(value)
368
+ @amount = value.to_s.gsub(/[^0-9\.]/, '').to_f
369
+ end
370
+ end
371
+ end
372
+ end