usps-imis-api 0.13.9 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. checksums.yaml +4 -4
  2. data/lib/usps/imis/api.rb +9 -6
  3. data/lib/usps/imis/base_data.rb +0 -3
  4. data/lib/usps/imis/blank_object.rb +0 -4
  5. data/lib/usps/imis/business_object.rb +17 -10
  6. data/lib/usps/imis/command_line/formatters.rb +5 -3
  7. data/lib/usps/imis/command_line/interface.rb +2 -0
  8. data/lib/usps/imis/command_line/options.yml +3 -3
  9. data/lib/usps/imis/command_line.rb +2 -3
  10. data/lib/usps/imis/config.rb +12 -6
  11. data/lib/usps/imis/data.rb +0 -5
  12. data/lib/usps/imis/dependencies.rb +33 -0
  13. data/lib/usps/imis/error.rb +10 -17
  14. data/lib/usps/imis/errors/embedded_model_find_error.rb +20 -0
  15. data/lib/usps/imis/errors/empty_payload_error.rb +23 -0
  16. data/lib/usps/imis/errors/missing_party_field_error.rb +24 -0
  17. data/lib/usps/imis/errors/pattern_matching_error.rb +0 -2
  18. data/lib/usps/imis/logger.rb +0 -3
  19. data/lib/usps/imis/models/associations/individual_demog.rb +11 -0
  20. data/lib/usps/imis/models/base/finders.rb +80 -0
  21. data/lib/usps/imis/models/base/persistence.rb +110 -0
  22. data/lib/usps/imis/models/base.rb +279 -0
  23. data/lib/usps/imis/models/education.rb +25 -0
  24. data/lib/usps/imis/models/generated/abc_cs_contact.rb +91 -0
  25. data/lib/usps/imis/models/generated/abc_fed990.rb +17 -0
  26. data/lib/usps/imis/models/generated/abc_ps_volunteer_skills.rb +16 -0
  27. data/lib/usps/imis/models/generated/access_area.rb +22 -0
  28. data/lib/usps/imis/models/generated/access_item.rb +18 -0
  29. data/lib/usps/imis/models/generated/access_main.rb +18 -0
  30. data/lib/usps/imis/models/generated/action_plan.rb +21 -0
  31. data/lib/usps/imis/models/generated/activity.rb +57 -0
  32. data/lib/usps/imis/models/generated/activity_ldao.rb +58 -0
  33. data/lib/usps/imis/models/generated/activity_ldcdr.rb +57 -0
  34. data/lib/usps/imis/models/generated/activity_ldxo.rb +57 -0
  35. data/lib/usps/imis/models/generated/add_family.rb +13 -0
  36. data/lib/usps/imis/models/generated/advanced_email_twelve_months_delivered_by_date.rb +16 -0
  37. data/lib/usps/imis/models/generated/advanced_email_twelve_months_totals.rb +16 -0
  38. data/lib/usps/imis/models/generated/aec_chapter_events.rb +28 -0
  39. data/lib/usps/imis/models/generated/aec_chapter_link_all_events.rb +18 -0
  40. data/lib/usps/imis/models/generated/aec_district_administrators.rb +19 -0
  41. data/lib/usps/imis/models/generated/aec_district_squadron_admins.rb +14 -0
  42. data/lib/usps/imis/models/generated/aec_district_squadron_events.rb +15 -0
  43. data/lib/usps/imis/models/generated/aec_si_r_charge_fee_percentages.rb +14 -0
  44. data/lib/usps/imis/models/generated/aec_si_r_charge_params.rb +16 -0
  45. data/lib/usps/imis/models/generated/appeal.rb +39 -0
  46. data/lib/usps/imis/models/generated/appeal_status_ref.rb +15 -0
  47. data/lib/usps/imis/models/generated/asc_ps_abc_squadron_price.rb +25 -0
  48. data/lib/usps/imis/models/generated/atom_panel_purpose.rb +15 -0
  49. data/lib/usps/imis/models/generated/auto_pay_instruction_detail.rb +22 -0
  50. data/lib/usps/imis/models/generated/auto_pay_invoices.rb +24 -0
  51. data/lib/usps/imis/models/generated/auto_pay_invoices_dues.rb +29 -0
  52. data/lib/usps/imis/models/generated/auto_pay_member_instruction_detail.rb +22 -0
  53. data/lib/usps/imis/models/generated/auto_pay_membership_invoices_base.rb +28 -0
  54. data/lib/usps/imis/models/generated/bad_address_reason_ref.rb +18 -0
  55. data/lib/usps/imis/models/generated/batch_line_status_ref.rb +14 -0
  56. data/lib/usps/imis/models/generated/billing_cycles.rb +50 -0
  57. data/lib/usps/imis/models/generated/billing_fees.rb +61 -0
  58. data/lib/usps/imis/models/generated/billing_fees_by_bill_to_party.rb +20 -0
  59. data/lib/usps/imis/models/generated/billing_issue_notification_by_bill_run.rb +20 -0
  60. data/lib/usps/imis/models/generated/billing_issue_notification_by_party.rb +30 -0
  61. data/lib/usps/imis/models/generated/billing_log_by_bill_cycle_data.rb +28 -0
  62. data/lib/usps/imis/models/generated/billing_log_by_party.rb +29 -0
  63. data/lib/usps/imis/models/generated/billing_product.rb +30 -0
  64. data/lib/usps/imis/models/generated/bo_district_dues.rb +26 -0
  65. data/lib/usps/imis/models/generated/bo_dues_fees.rb +21 -0
  66. data/lib/usps/imis/models/generated/bo_dues_pricing.rb +18 -0
  67. data/lib/usps/imis/models/generated/bo_national_dues.rb +84 -0
  68. data/lib/usps/imis/models/generated/bo_no_natl_dist_dues.rb +135 -0
  69. data/lib/usps/imis/models/generated/bo_squadron_dues.rb +26 -0
  70. data/lib/usps/imis/models/generated/bo_total.rb +17 -0
  71. data/lib/usps/imis/models/generated/campaign.rb +42 -0
  72. data/lib/usps/imis/models/generated/campaign_status_ref.rb +15 -0
  73. data/lib/usps/imis/models/generated/campaign_type_ref.rb +15 -0
  74. data/lib/usps/imis/models/generated/certification_module_status.rb +14 -0
  75. data/lib/usps/imis/models/generated/change_log_report.rb +25 -0
  76. data/lib/usps/imis/models/generated/change_property.rb +18 -0
  77. data/lib/usps/imis/models/generated/chapt_subscriptions.rb +14 -0
  78. data/lib/usps/imis/models/generated/chapter.rb +15 -0
  79. data/lib/usps/imis/models/generated/chapter_events.rb +30 -0
  80. data/lib/usps/imis/models/generated/commerce_product.rb +47 -0
  81. data/lib/usps/imis/models/generated/commission_rate_type_ref.rb +14 -0
  82. data/lib/usps/imis/models/generated/committee.rb +16 -0
  83. data/lib/usps/imis/models/generated/committee_districts_org_id.rb +16 -0
  84. data/lib/usps/imis/models/generated/committee_i_ds_temp.rb +13 -0
  85. data/lib/usps/imis/models/generated/committee_squadrons_org_id.rb +16 -0
  86. data/lib/usps/imis/models/generated/communication_log_summary_for_charts.rb +15 -0
  87. data/lib/usps/imis/models/generated/communication_message_type_ref.rb +14 -0
  88. data/lib/usps/imis/models/generated/communication_reason_ref.rb +22 -0
  89. data/lib/usps/imis/models/generated/community_items.rb +25 -0
  90. data/lib/usps/imis/models/generated/community_subscriptions.rb +25 -0
  91. data/lib/usps/imis/models/generated/comparison_ref.rb +14 -0
  92. data/lib/usps/imis/models/generated/component_registry.rb +28 -0
  93. data/lib/usps/imis/models/generated/contact.rb +32 -0
  94. data/lib/usps/imis/models/generated/contact_birthday_info.rb +20 -0
  95. data/lib/usps/imis/models/generated/contact_communication_reason_preferences.rb +25 -0
  96. data/lib/usps/imis/models/generated/contact_detail_report.rb +49 -0
  97. data/lib/usps/imis/models/generated/contact_offering_ref.rb +14 -0
  98. data/lib/usps/imis/models/generated/contact_profile_image.rb +22 -0
  99. data/lib/usps/imis/models/generated/contact_report.rb +23 -0
  100. data/lib/usps/imis/models/generated/contact_salutation.rb +18 -0
  101. data/lib/usps/imis/models/generated/contact_skill_ref.rb +14 -0
  102. data/lib/usps/imis/models/generated/contact_social_network.rb +19 -0
  103. data/lib/usps/imis/models/generated/contact_status_ref.rb +15 -0
  104. data/lib/usps/imis/models/generated/contact_type_ref.rb +16 -0
  105. data/lib/usps/imis/models/generated/content_filter.rb +18 -0
  106. data/lib/usps/imis/models/generated/content_manager_authority_group.rb +14 -0
  107. data/lib/usps/imis/models/generated/cost_method_ref.rb +15 -0
  108. data/lib/usps/imis/models/generated/country_ref.rb +27 -0
  109. data/lib/usps/imis/models/generated/credit_type_ref.rb +14 -0
  110. data/lib/usps/imis/models/generated/cs_activity.rb +50 -0
  111. data/lib/usps/imis/models/generated/cs_activity_basic.rb +51 -0
  112. data/lib/usps/imis/models/generated/cs_activity_forms.rb +38 -0
  113. data/lib/usps/imis/models/generated/cs_activity_types.rb +16 -0
  114. data/lib/usps/imis/models/generated/cs_address.rb +40 -0
  115. data/lib/usps/imis/models/generated/cs_address_formats.rb +15 -0
  116. data/lib/usps/imis/models/generated/cs_appeal.rb +23 -0
  117. data/lib/usps/imis/models/generated/cs_calls.rb +20 -0
  118. data/lib/usps/imis/models/generated/cs_campaign.rb +20 -0
  119. data/lib/usps/imis/models/generated/cs_committee.rb +23 -0
  120. data/lib/usps/imis/models/generated/cs_committee_code.rb +20 -0
  121. data/lib/usps/imis/models/generated/cs_committee_member.rb +38 -0
  122. data/lib/usps/imis/models/generated/cs_committee_member_group.rb +15 -0
  123. data/lib/usps/imis/models/generated/cs_committee_position.rb +16 -0
  124. data/lib/usps/imis/models/generated/cs_contact.rb +91 -0
  125. data/lib/usps/imis/models/generated/cs_contact_basic.rb +79 -0
  126. data/lib/usps/imis/models/generated/cs_country_names.rb +19 -0
  127. data/lib/usps/imis/models/generated/cs_donations.rb +31 -0
  128. data/lib/usps/imis/models/generated/cs_donations_detail.rb +33 -0
  129. data/lib/usps/imis/models/generated/cs_donor_data.rb +21 -0
  130. data/lib/usps/imis/models/generated/cs_dues_history.rb +22 -0
  131. data/lib/usps/imis/models/generated/cs_event.rb +92 -0
  132. data/lib/usps/imis/models/generated/cs_event_history.rb +20 -0
  133. data/lib/usps/imis/models/generated/cs_exchange_rate.rb +14 -0
  134. data/lib/usps/imis/models/generated/cs_freight_dollar.rb +14 -0
  135. data/lib/usps/imis/models/generated/cs_function.rb +57 -0
  136. data/lib/usps/imis/models/generated/cs_function_fees.rb +20 -0
  137. data/lib/usps/imis/models/generated/cs_gen_tables_union.rb +15 -0
  138. data/lib/usps/imis/models/generated/cs_general_lookup_tables.rb +17 -0
  139. data/lib/usps/imis/models/generated/cs_inventory.rb +37 -0
  140. data/lib/usps/imis/models/generated/cs_invoice.rb +51 -0
  141. data/lib/usps/imis/models/generated/cs_iso_currency_codes.rb +14 -0
  142. data/lib/usps/imis/models/generated/cs_member_type.rb +18 -0
  143. data/lib/usps/imis/models/generated/cs_name_fin.rb +27 -0
  144. data/lib/usps/imis/models/generated/cs_name_fr.rb +27 -0
  145. data/lib/usps/imis/models/generated/cs_name_log.rb +17 -0
  146. data/lib/usps/imis/models/generated/cs_name_note.rb +18 -0
  147. data/lib/usps/imis/models/generated/cs_name_picture.rb +19 -0
  148. data/lib/usps/imis/models/generated/cs_name_user.rb +18 -0
  149. data/lib/usps/imis/models/generated/cs_order_history.rb +22 -0
  150. data/lib/usps/imis/models/generated/cs_order_lines.rb +54 -0
  151. data/lib/usps/imis/models/generated/cs_order_type.rb +15 -0
  152. data/lib/usps/imis/models/generated/cs_orders.rb +85 -0
  153. data/lib/usps/imis/models/generated/cs_org_control.rb +47 -0
  154. data/lib/usps/imis/models/generated/cs_product.rb +49 -0
  155. data/lib/usps/imis/models/generated/cs_product_category.rb +18 -0
  156. data/lib/usps/imis/models/generated/cs_product_fundraising.rb +22 -0
  157. data/lib/usps/imis/models/generated/cs_product_location.rb +14 -0
  158. data/lib/usps/imis/models/generated/cs_product_type.rb +14 -0
  159. data/lib/usps/imis/models/generated/cs_reg_functions.rb +36 -0
  160. data/lib/usps/imis/models/generated/cs_registrant_classes.rb +15 -0
  161. data/lib/usps/imis/models/generated/cs_registration.rb +39 -0
  162. data/lib/usps/imis/models/generated/cs_relationship.rb +25 -0
  163. data/lib/usps/imis/models/generated/cs_relationship_types.rb +17 -0
  164. data/lib/usps/imis/models/generated/cs_salutations.rb +14 -0
  165. data/lib/usps/imis/models/generated/cs_staff_user.rb +34 -0
  166. data/lib/usps/imis/models/generated/cs_state_province_codes.rb +15 -0
  167. data/lib/usps/imis/models/generated/cs_subscriptions.rb +58 -0
  168. data/lib/usps/imis/models/generated/cs_subscriptions_chapters.rb +15 -0
  169. data/lib/usps/imis/models/generated/cs_system_params.rb +15 -0
  170. data/lib/usps/imis/models/generated/cs_terms.rb +17 -0
  171. data/lib/usps/imis/models/generated/cs_trans_notify.rb +16 -0
  172. data/lib/usps/imis/models/generated/cs_web_security_group.rb +14 -0
  173. data/lib/usps/imis/models/generated/cs_web_user.rb +18 -0
  174. data/lib/usps/imis/models/generated/culture_ref.rb +14 -0
  175. data/lib/usps/imis/models/generated/customer_experience_status.rb +14 -0
  176. data/lib/usps/imis/models/generated/data_type.rb +16 -0
  177. data/lib/usps/imis/models/generated/data_vault_attempt_settlement_status_ref.rb +15 -0
  178. data/lib/usps/imis/models/generated/data_vault_attempt_status_ref.rb +14 -0
  179. data/lib/usps/imis/models/generated/data_vault_attempt_summary.rb +39 -0
  180. data/lib/usps/imis/models/generated/data_vault_batch_summary.rb +21 -0
  181. data/lib/usps/imis/models/generated/data_vault_log_attempt.rb +25 -0
  182. data/lib/usps/imis/models/generated/data_vault_status_ref.rb +14 -0
  183. data/lib/usps/imis/models/generated/data_vault_status_summary.rb +15 -0
  184. data/lib/usps/imis/models/generated/data_vault_status_summary_detail.rb +19 -0
  185. data/lib/usps/imis/models/generated/date_dimension.rb +24 -0
  186. data/lib/usps/imis/models/generated/day_of_the_week_ref.rb +14 -0
  187. data/lib/usps/imis/models/generated/discountable_item.rb +20 -0
  188. data/lib/usps/imis/models/generated/discountable_item_class.rb +15 -0
  189. data/lib/usps/imis/models/generated/distinct_user_defined_multi_select_properties.rb +17 -0
  190. data/lib/usps/imis/models/generated/districts_and_primary_members.rb +15 -0
  191. data/lib/usps/imis/models/generated/document_path.rb +14 -0
  192. data/lib/usps/imis/models/generated/document_storage.rb +23 -0
  193. data/lib/usps/imis/models/generated/document_system_size_info.rb +36 -0
  194. data/lib/usps/imis/models/generated/document_system_size_info_by_type.rb +37 -0
  195. data/lib/usps/imis/models/generated/document_system_status_count_info.rb +14 -0
  196. data/lib/usps/imis/models/generated/document_system_status_size_info.rb +15 -0
  197. data/lib/usps/imis/models/generated/document_system_type_count_info.rb +14 -0
  198. data/lib/usps/imis/models/generated/document_system_type_size_info.rb +15 -0
  199. data/lib/usps/imis/models/generated/document_type.rb +34 -0
  200. data/lib/usps/imis/models/generated/document_type_status_path_info.rb +28 -0
  201. data/lib/usps/imis/models/generated/donation.rb +31 -0
  202. data/lib/usps/imis/models/generated/donation_performance.rb +19 -0
  203. data/lib/usps/imis/models/generated/donation_summary.rb +36 -0
  204. data/lib/usps/imis/models/generated/dynamic_group.rb +18 -0
  205. data/lib/usps/imis/models/generated/educ_abc.rb +21 -0
  206. data/lib/usps/imis/models/generated/educ_boc.rb +21 -0
  207. data/lib/usps/imis/models/generated/educ_crs.rb +21 -0
  208. data/lib/usps/imis/models/generated/educ_id.rb +21 -0
  209. data/lib/usps/imis/models/generated/educ_ot.rb +21 -0
  210. data/lib/usps/imis/models/generated/educ_sem.rb +21 -0
  211. data/lib/usps/imis/models/generated/education_in_progress.rb +16 -0
  212. data/lib/usps/imis/models/generated/education_level_ref.rb +15 -0
  213. data/lib/usps/imis/models/generated/effective_contact_communication_preferences_data.rb +23 -0
  214. data/lib/usps/imis/models/generated/effective_fundraising_preferences_data.rb +18 -0
  215. data/lib/usps/imis/models/generated/engagement_category.rb +23 -0
  216. data/lib/usps/imis/models/generated/engagement_measure.rb +24 -0
  217. data/lib/usps/imis/models/generated/engagement_score_current_data.rb +21 -0
  218. data/lib/usps/imis/models/generated/engagement_score_formula.rb +19 -0
  219. data/lib/usps/imis/models/generated/engagement_score_monthly_data.rb +22 -0
  220. data/lib/usps/imis/models/generated/engagement_score_result.rb +21 -0
  221. data/lib/usps/imis/models/generated/engagement_score_yearly_data.rb +21 -0
  222. data/lib/usps/imis/models/generated/event_category_list.rb +16 -0
  223. data/lib/usps/imis/models/generated/event_function_resource_data.rb +22 -0
  224. data/lib/usps/imis/models/generated/event_question.rb +24 -0
  225. data/lib/usps/imis/models/generated/event_question_response.rb +25 -0
  226. data/lib/usps/imis/models/generated/event_registrants_report.rb +45 -0
  227. data/lib/usps/imis/models/generated/execution_mode_ref.rb +15 -0
  228. data/lib/usps/imis/models/generated/experience_definition_status.rb +14 -0
  229. data/lib/usps/imis/models/generated/expired_member_update_detail_log.rb +19 -0
  230. data/lib/usps/imis/models/generated/family_add_contact.rb +91 -0
  231. data/lib/usps/imis/models/generated/family_member_count.rb +37 -0
  232. data/lib/usps/imis/models/generated/file_type_ref.rb +16 -0
  233. data/lib/usps/imis/models/generated/first_notify_contact_per_gift.rb +14 -0
  234. data/lib/usps/imis/models/generated/first_payment_date_type_ref.rb +15 -0
  235. data/lib/usps/imis/models/generated/form_definition_field_data.rb +19 -0
  236. data/lib/usps/imis/models/generated/form_field_response_data.rb +22 -0
  237. data/lib/usps/imis/models/generated/fundraising_preference_ref.rb +15 -0
  238. data/lib/usps/imis/models/generated/fundraising_profile_donor_data.rb +18 -0
  239. data/lib/usps/imis/models/generated/gateway_result_ref.rb +14 -0
  240. data/lib/usps/imis/models/generated/gateway_transaction_data.rb +35 -0
  241. data/lib/usps/imis/models/generated/gateway_transaction_ref.rb +15 -0
  242. data/lib/usps/imis/models/generated/gateway_type_ref.rb +17 -0
  243. data/lib/usps/imis/models/generated/gift.rb +41 -0
  244. data/lib/usps/imis/models/generated/gift_adjustment_log_summary.rb +25 -0
  245. data/lib/usps/imis/models/generated/gift_aid_claim_status_ref.rb +14 -0
  246. data/lib/usps/imis/models/generated/gift_array.rb +16 -0
  247. data/lib/usps/imis/models/generated/gift_detail.rb +29 -0
  248. data/lib/usps/imis/models/generated/gift_history.rb +45 -0
  249. data/lib/usps/imis/models/generated/gift_history_summary.rb +33 -0
  250. data/lib/usps/imis/models/generated/gift_history_summary_basic.rb +33 -0
  251. data/lib/usps/imis/models/generated/gift_summary.rb +16 -0
  252. data/lib/usps/imis/models/generated/gift_totals_by_date.rb +15 -0
  253. data/lib/usps/imis/models/generated/gift_transaction.rb +43 -0
  254. data/lib/usps/imis/models/generated/gifts_received.rb +32 -0
  255. data/lib/usps/imis/models/generated/gifts_received_for_receipting.rb +44 -0
  256. data/lib/usps/imis/models/generated/gifts_received_summary.rb +33 -0
  257. data/lib/usps/imis/models/generated/gifts_with_void_and_replaced_receipts.rb +43 -0
  258. data/lib/usps/imis/models/generated/gl_batch_transaction_data.rb +30 -0
  259. data/lib/usps/imis/models/generated/gl_daily_transaction_data.rb +30 -0
  260. data/lib/usps/imis/models/generated/gl_detail_due_to_due_from_transaction_data.rb +17 -0
  261. data/lib/usps/imis/models/generated/gl_detail_transaction_data.rb +36 -0
  262. data/lib/usps/imis/models/generated/gl_detail_transaction_data_full.rb +36 -0
  263. data/lib/usps/imis/models/generated/gl_due_to_due_from_transaction_data.rb +18 -0
  264. data/lib/usps/imis/models/generated/gl_entry_type_ref.rb +14 -0
  265. data/lib/usps/imis/models/generated/gl_export_format_type_ref.rb +14 -0
  266. data/lib/usps/imis/models/generated/gl_export_log_detail.rb +15 -0
  267. data/lib/usps/imis/models/generated/gl_export_log_summary.rb +26 -0
  268. data/lib/usps/imis/models/generated/gl_export_multiple.rb +15 -0
  269. data/lib/usps/imis/models/generated/gl_export_summary_level_ref.rb +15 -0
  270. data/lib/usps/imis/models/generated/gl_monthly_due_to_due_from_transaction_data.rb +18 -0
  271. data/lib/usps/imis/models/generated/gl_monthly_transaction_data.rb +29 -0
  272. data/lib/usps/imis/models/generated/gl_source_item_type_ref.rb +14 -0
  273. data/lib/usps/imis/models/generated/gl_transaction_data.rb +41 -0
  274. data/lib/usps/imis/models/generated/grade.rb +14 -0
  275. data/lib/usps/imis/models/generated/group_info.rb +28 -0
  276. data/lib/usps/imis/models/generated/group_member_administrator_type_ref.rb +15 -0
  277. data/lib/usps/imis/models/generated/group_member_detail.rb +29 -0
  278. data/lib/usps/imis/models/generated/group_member_status_ref.rb +15 -0
  279. data/lib/usps/imis/models/generated/group_perspective.rb +16 -0
  280. data/lib/usps/imis/models/generated/group_price_sheet.rb +17 -0
  281. data/lib/usps/imis/models/generated/group_role_ref.rb +17 -0
  282. data/lib/usps/imis/models/generated/group_status_ref.rb +16 -0
  283. data/lib/usps/imis/models/generated/group_type_member_status.rb +17 -0
  284. data/lib/usps/imis/models/generated/group_type_ref.rb +33 -0
  285. data/lib/usps/imis/models/generated/group_type_role.rb +22 -0
  286. data/lib/usps/imis/models/generated/handling_price_ref.rb +15 -0
  287. data/lib/usps/imis/models/generated/hierarchy.rb +21 -0
  288. data/lib/usps/imis/models/generated/hierarchy_root.rb +22 -0
  289. data/lib/usps/imis/models/generated/i_series_data.rb +15 -0
  290. data/lib/usps/imis/models/generated/individual_demog.rb +34 -0
  291. data/lib/usps/imis/models/generated/institute_type_code_ref.rb +16 -0
  292. data/lib/usps/imis/models/generated/interaction_log.rb +35 -0
  293. data/lib/usps/imis/models/generated/interaction_log_event.rb +24 -0
  294. data/lib/usps/imis/models/generated/interaction_log_event_summary.rb +30 -0
  295. data/lib/usps/imis/models/generated/interval_type_ref.rb +15 -0
  296. data/lib/usps/imis/models/generated/invoice_line_data.rb +39 -0
  297. data/lib/usps/imis/models/generated/invoice_lines.rb +42 -0
  298. data/lib/usps/imis/models/generated/invoice_number.rb +16 -0
  299. data/lib/usps/imis/models/generated/invoice_payment_summary.rb +14 -0
  300. data/lib/usps/imis/models/generated/invoice_purpose.rb +15 -0
  301. data/lib/usps/imis/models/generated/invoice_source_system_ref.rb +13 -0
  302. data/lib/usps/imis/models/generated/invoice_type_ref.rb +14 -0
  303. data/lib/usps/imis/models/generated/journal_entry_type_ref.rb +14 -0
  304. data/lib/usps/imis/models/generated/license_ref.rb +15 -0
  305. data/lib/usps/imis/models/generated/line_pricing_ref.rb +15 -0
  306. data/lib/usps/imis/models/generated/list_entity.rb +14 -0
  307. data/lib/usps/imis/models/generated/locale_ref.rb +14 -0
  308. data/lib/usps/imis/models/generated/location_status.rb +14 -0
  309. data/lib/usps/imis/models/generated/mail_code_ref.rb +16 -0
  310. data/lib/usps/imis/models/generated/matching_gift_plan_type_ref.rb +15 -0
  311. data/lib/usps/imis/models/generated/matching_mode_ref.rb +15 -0
  312. data/lib/usps/imis/models/generated/matching_period_ref.rb +15 -0
  313. data/lib/usps/imis/models/generated/memorial_tribute_type_ref.rb +14 -0
  314. data/lib/usps/imis/models/generated/method_set_type_ref.rb +14 -0
  315. data/lib/usps/imis/models/generated/month_ref.rb +18 -0
  316. data/lib/usps/imis/models/generated/name_prefixes.rb +15 -0
  317. data/lib/usps/imis/models/generated/name_suffixes.rb +13 -0
  318. data/lib/usps/imis/models/generated/navigation_pane.rb +18 -0
  319. data/lib/usps/imis/models/generated/net_contact.rb +99 -0
  320. data/lib/usps/imis/models/generated/net_contact_basic.rb +88 -0
  321. data/lib/usps/imis/models/generated/net_contact_data.rb +88 -0
  322. data/lib/usps/imis/models/generated/note_purpose_ref.rb +14 -0
  323. data/lib/usps/imis/models/generated/offering_status.rb +14 -0
  324. data/lib/usps/imis/models/generated/opportunity_class_ref.rb +15 -0
  325. data/lib/usps/imis/models/generated/opportunity_default_status_ref.rb +15 -0
  326. data/lib/usps/imis/models/generated/opportunity_status_ref.rb +15 -0
  327. data/lib/usps/imis/models/generated/opportunity_task_user.rb +20 -0
  328. data/lib/usps/imis/models/generated/opportunity_type.rb +29 -0
  329. data/lib/usps/imis/models/generated/order_category.rb +14 -0
  330. data/lib/usps/imis/models/generated/order_fulfillment_status_ref.rb +14 -0
  331. data/lib/usps/imis/models/generated/order_invoice.rb +14 -0
  332. data/lib/usps/imis/models/generated/order_state_ref.rb +14 -0
  333. data/lib/usps/imis/models/generated/order_type_detail.rb +17 -0
  334. data/lib/usps/imis/models/generated/org_demog.rb +28 -0
  335. data/lib/usps/imis/models/generated/organization_demo.rb +18 -0
  336. data/lib/usps/imis/models/generated/organization_hierarchy.rb +19 -0
  337. data/lib/usps/imis/models/generated/package.rb +25 -0
  338. data/lib/usps/imis/models/generated/package_item.rb +19 -0
  339. data/lib/usps/imis/models/generated/package_status_ref.rb +14 -0
  340. data/lib/usps/imis/models/generated/payment_application.rb +31 -0
  341. data/lib/usps/imis/models/generated/payment_application_detail.rb +35 -0
  342. data/lib/usps/imis/models/generated/payment_application_restriction_ref.rb +14 -0
  343. data/lib/usps/imis/models/generated/payment_application_summary.rb +18 -0
  344. data/lib/usps/imis/models/generated/payment_application_type.rb +14 -0
  345. data/lib/usps/imis/models/generated/payment_category_ref.rb +14 -0
  346. data/lib/usps/imis/models/generated/payment_detail_status_ref.rb +15 -0
  347. data/lib/usps/imis/models/generated/payment_method_data.rb +20 -0
  348. data/lib/usps/imis/models/generated/payment_reconciliation.rb +26 -0
  349. data/lib/usps/imis/models/generated/payment_status_ref.rb +14 -0
  350. data/lib/usps/imis/models/generated/percentile_ranking.rb +20 -0
  351. data/lib/usps/imis/models/generated/picture_purpose_ref.rb +14 -0
  352. data/lib/usps/imis/models/generated/pin_update.rb +13 -0
  353. data/lib/usps/imis/models/generated/pipeline.rb +15 -0
  354. data/lib/usps/imis/models/generated/pipeline_stage.rb +17 -0
  355. data/lib/usps/imis/models/generated/postal_code_ref.rb +26 -0
  356. data/lib/usps/imis/models/generated/prefix_ref.rb +17 -0
  357. data/lib/usps/imis/models/generated/price_basis_ref.rb +15 -0
  358. data/lib/usps/imis/models/generated/pricing_type_ref.rb +15 -0
  359. data/lib/usps/imis/models/generated/primary_fam_members.rb +14 -0
  360. data/lib/usps/imis/models/generated/process_type_default_owner_all_users.rb +15 -0
  361. data/lib/usps/imis/models/generated/product_price_sheet.rb +20 -0
  362. data/lib/usps/imis/models/generated/product_status_ref.rb +15 -0
  363. data/lib/usps/imis/models/generated/product_trans.rb +31 -0
  364. data/lib/usps/imis/models/generated/product_trans_detail.rb +17 -0
  365. data/lib/usps/imis/models/generated/profile_documents.rb +15 -0
  366. data/lib/usps/imis/models/generated/profile_page.rb +36 -0
  367. data/lib/usps/imis/models/generated/program_group_status.rb +14 -0
  368. data/lib/usps/imis/models/generated/program_status.rb +14 -0
  369. data/lib/usps/imis/models/generated/promotion_rule_ref.rb +15 -0
  370. data/lib/usps/imis/models/generated/property_definition.rb +33 -0
  371. data/lib/usps/imis/models/generated/prospect.rb +38 -0
  372. data/lib/usps/imis/models/generated/publish_priority.rb +14 -0
  373. data/lib/usps/imis/models/generated/publish_request.rb +18 -0
  374. data/lib/usps/imis/models/generated/publish_request_detail.rb +22 -0
  375. data/lib/usps/imis/models/generated/publish_request_status.rb +15 -0
  376. data/lib/usps/imis/models/generated/publish_server.rb +29 -0
  377. data/lib/usps/imis/models/generated/quality_ref.rb +15 -0
  378. data/lib/usps/imis/models/generated/rank.rb +21 -0
  379. data/lib/usps/imis/models/generated/receipt_report.rb +24 -0
  380. data/lib/usps/imis/models/generated/receipt_status_ref.rb +15 -0
  381. data/lib/usps/imis/models/generated/recurring_donation_expected_payment_set.rb +19 -0
  382. data/lib/usps/imis/models/generated/recurring_donation_expected_payment_set_list.rb +20 -0
  383. data/lib/usps/imis/models/generated/recurring_donation_expected_payment_set_status.rb +15 -0
  384. data/lib/usps/imis/models/generated/recurring_donation_expected_payment_status.rb +15 -0
  385. data/lib/usps/imis/models/generated/recurring_donation_frequency_ref.rb +15 -0
  386. data/lib/usps/imis/models/generated/reference_date.rb +13 -0
  387. data/lib/usps/imis/models/generated/registered_component.rb +27 -0
  388. data/lib/usps/imis/models/generated/registration_status.rb +14 -0
  389. data/lib/usps/imis/models/generated/relationship.rb +18 -0
  390. data/lib/usps/imis/models/generated/relationship_category.rb +17 -0
  391. data/lib/usps/imis/models/generated/relationship_type_category.rb +17 -0
  392. data/lib/usps/imis/models/generated/relationship_type_ref.rb +16 -0
  393. data/lib/usps/imis/models/generated/relationship_update.rb +16 -0
  394. data/lib/usps/imis/models/generated/relationship_update_contact_panel.rb +16 -0
  395. data/lib/usps/imis/models/generated/remove_district_org_committee_terms.rb +28 -0
  396. data/lib/usps/imis/models/generated/remove_squadron_org_committee_terms.rb +28 -0
  397. data/lib/usps/imis/models/generated/reporting_group_user.rb +14 -0
  398. data/lib/usps/imis/models/generated/response_media_ref.rb +14 -0
  399. data/lib/usps/imis/models/generated/response_type_ref.rb +15 -0
  400. data/lib/usps/imis/models/generated/restock_price_ref.rb +15 -0
  401. data/lib/usps/imis/models/generated/sales_location_status_ref.rb +15 -0
  402. data/lib/usps/imis/models/generated/salutation_ref.rb +22 -0
  403. data/lib/usps/imis/models/generated/sbuddy_answers.rb +23 -0
  404. data/lib/usps/imis/models/generated/sbuddy_definition.rb +28 -0
  405. data/lib/usps/imis/models/generated/schedule_frequency_ref.rb +14 -0
  406. data/lib/usps/imis/models/generated/segmentation_job_status_ref.rb +15 -0
  407. data/lib/usps/imis/models/generated/sequence_counter.rb +16 -0
  408. data/lib/usps/imis/models/generated/set_district_org_committee_terms.rb +28 -0
  409. data/lib/usps/imis/models/generated/set_squadron_org_committee_terms.rb +28 -0
  410. data/lib/usps/imis/models/generated/ship_price_ref.rb +15 -0
  411. data/lib/usps/imis/models/generated/soa_group.rb +21 -0
  412. data/lib/usps/imis/models/generated/soa_group_member.rb +19 -0
  413. data/lib/usps/imis/models/generated/soa_group_member_detail.rb +28 -0
  414. data/lib/usps/imis/models/generated/social_network_ref.rb +15 -0
  415. data/lib/usps/imis/models/generated/solicitation.rb +40 -0
  416. data/lib/usps/imis/models/generated/solicitation_status_ref.rb +15 -0
  417. data/lib/usps/imis/models/generated/source_code.rb +43 -0
  418. data/lib/usps/imis/models/generated/source_code_status_ref.rb +15 -0
  419. data/lib/usps/imis/models/generated/source_code_type_ref.rb +15 -0
  420. data/lib/usps/imis/models/generated/squad_form_add_fam.rb +23 -0
  421. data/lib/usps/imis/models/generated/squad_form_add_individual.rb +31 -0
  422. data/lib/usps/imis/models/generated/squad_leader_add_individual_contact.rb +28 -0
  423. data/lib/usps/imis/models/generated/squad_note.rb +13 -0
  424. data/lib/usps/imis/models/generated/squad_to_district.rb +18 -0
  425. data/lib/usps/imis/models/generated/squadron_chap_com.rb +16 -0
  426. data/lib/usps/imis/models/generated/squadron_district_lookup.rb +18 -0
  427. data/lib/usps/imis/models/generated/squadrons_and_primary_members.rb +15 -0
  428. data/lib/usps/imis/models/generated/standard_page.rb +15 -0
  429. data/lib/usps/imis/models/generated/state_province_ref.rb +21 -0
  430. data/lib/usps/imis/models/generated/suffix_ref.rb +16 -0
  431. data/lib/usps/imis/models/generated/supplement.rb +27 -0
  432. data/lib/usps/imis/models/generated/supplement_status_ref.rb +15 -0
  433. data/lib/usps/imis/models/generated/supplement_type_ref.rb +15 -0
  434. data/lib/usps/imis/models/generated/system_config_xml.rb +14 -0
  435. data/lib/usps/imis/models/generated/system_param_int.rb +23 -0
  436. data/lib/usps/imis/models/generated/tag_hierarchy.rb +32 -0
  437. data/lib/usps/imis/models/generated/tag_relationship_type.rb +16 -0
  438. data/lib/usps/imis/models/generated/task_item.rb +32 -0
  439. data/lib/usps/imis/models/generated/task_item_status_ref.rb +15 -0
  440. data/lib/usps/imis/models/generated/task_latest_log.rb +15 -0
  441. data/lib/usps/imis/models/generated/task_notify_creator_ref.rb +15 -0
  442. data/lib/usps/imis/models/generated/task_priority.rb +15 -0
  443. data/lib/usps/imis/models/generated/task_status.rb +16 -0
  444. data/lib/usps/imis/models/generated/task_type.rb +15 -0
  445. data/lib/usps/imis/models/generated/tax_authority_level_ref.rb +15 -0
  446. data/lib/usps/imis/models/generated/time_zone_ref.rb +20 -0
  447. data/lib/usps/imis/models/generated/top_level_parent_organization.rb +20 -0
  448. data/lib/usps/imis/models/generated/transaction_detail.rb +56 -0
  449. data/lib/usps/imis/models/generated/transaction_summary_large_batch.rb +44 -0
  450. data/lib/usps/imis/models/generated/uniform_registry.rb +14 -0
  451. data/lib/usps/imis/models/generated/uniform_tag.rb +17 -0
  452. data/lib/usps/imis/models/generated/upgrade_log_detail.rb +19 -0
  453. data/lib/usps/imis/models/generated/url_mapping_type_ref.rb +15 -0
  454. data/lib/usps/imis/models/generated/user_data.rb +33 -0
  455. data/lib/usps/imis/models/generated/user_role.rb +14 -0
  456. data/lib/usps/imis/models/generated/user_token.rb +14 -0
  457. data/lib/usps/imis/models/generated/vertical_alignment_ref.rb +15 -0
  458. data/lib/usps/imis/models/generated/vessels.rb +18 -0
  459. data/lib/usps/imis/models/generated/volunteer_information.rb +22 -0
  460. data/lib/usps/imis/models/generated/warehouse_status_ref.rb +14 -0
  461. data/lib/usps/imis/models/generated/warehouse_type_ref.rb +14 -0
  462. data/lib/usps/imis/models/generated/web_user_control_ref.rb +15 -0
  463. data/lib/usps/imis/models/generated/workflow_queue_item.rb +25 -0
  464. data/lib/usps/imis/models/generated/workflow_queue_item_with_status.rb +25 -0
  465. data/lib/usps/imis/models/generated/workflow_queue_status_ref.rb +15 -0
  466. data/lib/usps/imis/models/generated/workflow_status_ref.rb +15 -0
  467. data/lib/usps/imis/models/party/address.rb +32 -0
  468. data/lib/usps/imis/models/party/alternate_id.rb +16 -0
  469. data/lib/usps/imis/models/party/email.rb +17 -0
  470. data/lib/usps/imis/models/party/phone.rb +17 -0
  471. data/lib/usps/imis/models/party/salutation.rb +18 -0
  472. data/lib/usps/imis/models/party.rb +131 -0
  473. data/lib/usps/imis/models/types/upcase_string.rb +18 -0
  474. data/lib/usps/imis/models/vessel_safety_checks.rb +20 -0
  475. data/lib/usps/imis/models.rb +57 -0
  476. data/lib/usps/imis/party_data.rb +1 -6
  477. data/lib/usps/imis/query.rb +5 -1
  478. data/lib/usps/imis/version.rb +1 -1
  479. data/lib/usps/imis.rb +10 -19
  480. data/spec/support/usps/simple_cov_uncovered_lines_formatter.rb +53 -0
  481. metadata +477 -1
@@ -0,0 +1,279 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'types/upcase_string'
4
+ require_relative 'base/finders'
5
+ require_relative 'base/persistence'
6
+
7
+ module Usps
8
+ module Imis
9
+ module Models
10
+ # ActiveModel-compatible wrapper layered on top of Data / PartyData.
11
+ #
12
+ # Subclasses declare typed attributes mapped to iMIS property names via
13
+ # +imis_attribute+ and bind to a Business Object via +business_object+.
14
+ #
15
+ # See +/Users/julianfiander/.claude/plans/this-api-wrapper-library-functional-crystal.md+
16
+ # for the design rationale.
17
+ #
18
+ class Base
19
+ include ActiveModel::Model
20
+ include ActiveModel::Attributes
21
+ include ActiveModel::Dirty
22
+ include Persistence
23
+ extend Finders
24
+
25
+ class_attribute :business_object_name, instance_writer: false
26
+ class_attribute :imis_attribute_map, instance_writer: false, default: {}.freeze
27
+ class_attribute :imis_collection_map, instance_writer: false, default: {}.freeze
28
+
29
+ # What the second positional arg to +find+ represents for this model:
30
+ # +:record_id+ for the default child-record case, +:ordinal+ for panels.
31
+ # Set via the +find_by:+ keyword on +business_object+.
32
+ #
33
+ class_attribute :find_key, instance_writer: false, default: :record_id
34
+
35
+ class << self
36
+ # Declare a typed attribute backed by an iMIS property.
37
+ #
38
+ # Default type is +:string+ — iMIS commonly stringifies values, and most
39
+ # attributes need no further coercion.
40
+ #
41
+ # The type can be passed positionally or as a keyword (+type:+) — the
42
+ # keyword form lets +source:+ and +type:+ be aligned across declarations:
43
+ #
44
+ # imis_attribute :certificate, :upcase_string, source: :ABC_ECertificate
45
+ # imis_attribute :certificate, source: :ABC_ECertificate, type: :upcase_string
46
+ #
47
+ # @param name [Symbol] Ruby attribute name in snake_case
48
+ # @param positional_type [Symbol] ActiveModel type (positional form)
49
+ # @param source [String, Symbol] iMIS property name (or dotted path for nested PartyData)
50
+ # @param type [Symbol] ActiveModel type (keyword form)
51
+ #
52
+ def imis_attribute(name, positional_type = nil, source:, **opts)
53
+ raise ArgumentError, 'pass type positionally or via type:, not both' if positional_type && opts[:type]
54
+
55
+ type = positional_type || opts.delete(:type) || :string
56
+ attribute(name, type, **opts)
57
+ self.imis_attribute_map = imis_attribute_map.merge(name.to_sym => source.to_s).freeze
58
+ end
59
+
60
+ # Bind this Model subclass to an iMIS Business Object name and
61
+ # register it in the routing registry. After this, any
62
+ # +BusinessObject#get+ / +#put+ for the matching entity returns an
63
+ # instance of this Model (instead of the bare +Data+ / +PartyData+).
64
+ #
65
+ # @param name [String, Symbol] Name of the iMIS Business Object
66
+ # @param find_by [Symbol] What the second positional arg to +find+
67
+ # represents — +:record_id+ for the default child-record case,
68
+ # +:ordinal+ for panels.
69
+ #
70
+ def business_object(name, find_by: :record_id)
71
+ self.business_object_name = name.to_s
72
+ self.find_key = find_by
73
+ Models.register(self)
74
+ end
75
+
76
+ # Declare an embedded array-of-Model collection sourced from a key
77
+ # (or dotted path) on the parent payload. Phase 1 is read-only:
78
+ # collections load on +from_data+ and are exposed as a frozen array
79
+ # via an +attr_reader+. They do not participate in +save+.
80
+ #
81
+ # @param name [Symbol] Ruby reader name (snake_case, plural)
82
+ # @param source [String, Symbol] Key (or dotted path) on the parent
83
+ # @param class_name [String] Element class name under +Usps::Imis::Models+
84
+ #
85
+ def has_many(name, source:, class_name:) # rubocop:disable Naming/PredicatePrefix
86
+ attr_reader name
87
+
88
+ self.imis_collection_map = imis_collection_map.merge(
89
+ name.to_sym => [source.to_s, class_name.to_s]
90
+ ).freeze
91
+ end
92
+
93
+ # Declare a lazy lookup to a related Model whose canonical key is
94
+ # the same +imis_id+ as +self+ — e.g. +Party#individual_demog+ or
95
+ # +IndividualDemog#party+. Returns +nil+ when +api+ or +imis_id+
96
+ # is missing.
97
+ #
98
+ # @param name [Symbol] Reader method name
99
+ # @param class_name [String, Symbol] Target Model class under
100
+ # +Usps::Imis::Models+ (defaults to camelized +name+).
101
+ #
102
+ def has_one(name, class_name: nil) # rubocop:disable Naming/PredicatePrefix
103
+ klass_name = (class_name || name.to_s.camelize).to_s
104
+ cache = :"@#{name}"
105
+
106
+ define_method(name) do
107
+ return instance_variable_get(cache) if instance_variable_defined?(cache)
108
+ return if api.nil? || imis_id.nil?
109
+
110
+ instance_variable_set(cache, Models.const_get(klass_name).find(imis_id, api: api))
111
+ end
112
+
113
+ define_method(:"reload_#{name}") do
114
+ remove_instance_variable(cache) if instance_variable_defined?(cache)
115
+ public_send(name)
116
+ end
117
+ end
118
+
119
+ # Declare a lazy lookup to a related Business Object. Two shapes:
120
+ #
121
+ # - Foreign-key form (+foreign_key:+): uses the FK attribute on
122
+ # +self+ as the related Business Object's +record_id+, under the
123
+ # parent's +imis_id+ — e.g. +Party::Address#cs_address+. The
124
+ # target's iMIS Business Object name is read from
125
+ # +Models.const_get(class_name).business_object_name+ at call
126
+ # time, so the related class must be a registered +Models::Base+
127
+ # subclass.
128
+ # - Arg-less form: equivalent to +has_one+, looking up the named
129
+ # Model by +self.imis_id+ — e.g. +IndividualDemog#party+.
130
+ #
131
+ # @param name [Symbol] Reader method name
132
+ # @param foreign_key [Symbol, nil] Attribute on +self+ holding the Business Object record_id (FK form only).
133
+ # @param class_name [String, Symbol, nil] Target Model class (defaults to camelized +name+).
134
+ #
135
+ def belongs_to(name, foreign_key: nil, class_name: nil)
136
+ return has_one(name, class_name:) if foreign_key.nil?
137
+
138
+ cache = :"@#{name}"
139
+ klass_name = (class_name || name.to_s.camelize).to_s
140
+
141
+ define_method(name) do
142
+ return instance_variable_get(cache) if instance_variable_defined?(cache)
143
+ return if api.nil?
144
+ return unless (target_id = public_send(foreign_key))
145
+
146
+ bon = Models.const_get(klass_name).business_object_name
147
+ instance_variable_set(cache, api.with(imis_id, record_id: target_id) { on(bon).get })
148
+ end
149
+
150
+ define_method(:"reload_#{name}") do
151
+ remove_instance_variable(cache) if instance_variable_defined?(cache)
152
+ public_send(name)
153
+ end
154
+ end
155
+
156
+ # Build an instance from a Data / PartyData fetched from the API.
157
+ #
158
+ def from_data(data, api: nil) = new(api:).tap { it.send(:load_from_data, data) }
159
+
160
+ # Pull a value from a Data / PartyData by source name. Supports dotted
161
+ # paths for nested PartyData fields (e.g. +'PersonName.FirstName'+).
162
+ #
163
+ def extract(data, source)
164
+ return data[source] unless source.include?('.')
165
+
166
+ source.split('.').reduce(data) { |obj, key| obj && obj[key] }
167
+ end
168
+ end
169
+
170
+ # The originating Data / PartyData (server snapshot at last read or save).
171
+ #
172
+ attr_reader :data
173
+
174
+ # The +Api+ used for HTTP dispatch on save.
175
+ #
176
+ attr_accessor :api
177
+
178
+ def initialize(attributes = {})
179
+ attributes = attributes.dup
180
+ @api = attributes.delete(:api)
181
+ super
182
+ end
183
+
184
+ # Identity readers
185
+ # Each delegates to the underlying data (for loaded instances) or the
186
+ # configured +api+ (for not-yet-saved instances). +PartyData+ does not
187
+ # implement +record_id+ or +ordinal+; those readers return +nil+ for
188
+ # Party-backed instances.
189
+ #
190
+ def imis_id = identity_from_data(:imis_id) || api&.imis_id || @parent_imis_id
191
+ def record_id = identity_from_data(:record_id) || api&.record_id
192
+ def ordinal = identity_from_data(:ordinal)
193
+ def uniform_id = identity_from_data(:uniform_id)
194
+ alias id imis_id
195
+ alias uuid uniform_id
196
+
197
+ # Backward-compatible passthrough to the underlying +Data+ / +PartyData+.
198
+ # Lets Model instances stand in for Data wherever raw property lookup was
199
+ # used (e.g. +result['ABC_Educ_Source_System']+ from Panel callers).
200
+ #
201
+ def [](key) = data&.[](key)
202
+ def raw = data&.raw
203
+
204
+ def persisted? = !!@persisted
205
+ def to_key = persisted? ? [imis_id, ordinal].compact : nil
206
+ def to_param = to_key&.join('-')
207
+
208
+ def ==(other)
209
+ case other
210
+ when Models::Base then equal_to_model?(other)
211
+ when BaseData then equal_to_raw?(other.raw)
212
+ when Hash then equal_to_raw?(other)
213
+ else super
214
+ end
215
+ end
216
+ alias eql? ==
217
+
218
+ def hash = [self.class, raw, changes].hash
219
+
220
+ def inspect
221
+ stringio = StringIO.new
222
+ PP.pp(self, stringio)
223
+ stringio.string.delete("\n")
224
+ end
225
+
226
+ def pretty_print(pp)
227
+ pp.group(1, "#<#{self.class}:0x#{format('%016x', object_id << 1)}", '>') do
228
+ pretty_print_pair(pp, :@api, api) if Usps::Imis.config.pretty_print_api && api
229
+ self.class.imis_attribute_map.each_key do |attr|
230
+ pretty_print_pair(pp, :"@#{attr}", public_send(attr))
231
+ end
232
+ self.class.imis_collection_map.each_key do |name|
233
+ pretty_print_pair(pp, :"@#{name}", public_send(name))
234
+ end
235
+ end
236
+ end
237
+
238
+ private
239
+
240
+ def equal_to_model?(other) = instance_of?(other.class) && raw == other.raw && changes == other.changes
241
+ def equal_to_raw?(other_raw) = !changed? && raw == other_raw
242
+
243
+ def pretty_print_pair(pp, label, value)
244
+ pp.breakable
245
+ pp.text "#{label}="
246
+ pp.pp value
247
+ end
248
+
249
+ def identity_from_data(method)
250
+ data&.public_send(method)
251
+ rescue Errors::ApiError, NoMethodError
252
+ nil
253
+ end
254
+
255
+ def load_from_data(data)
256
+ @data = data
257
+ @persisted = true
258
+ assign_attributes(self.class.imis_attribute_map.each_with_object({}) do |(attr, source), hash|
259
+ hash[attr] = self.class.extract(data, source)
260
+ end)
261
+ load_collections(data)
262
+ changes_applied
263
+ end
264
+
265
+ def load_collections(data)
266
+ parent_id = imis_id
267
+ self.class.imis_collection_map.each do |name, (source, class_name)|
268
+ klass = Models.const_get(class_name)
269
+ items = self.class.extract(data, source) || []
270
+ children = items.map do |item|
271
+ klass.from_data(item, api:).tap { it.instance_variable_set(:@parent_imis_id, parent_id) }
272
+ end
273
+ instance_variable_set(:"@#{name}", children.freeze)
274
+ end
275
+ end
276
+ end
277
+ end
278
+ end
279
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ # Reference Model for the +ABC_ASC_Educ+ Business Object — exemplar of
7
+ # the typed-attribute pattern. See +Panels::Education+ for the equivalent
8
+ # Panel-style accessor.
9
+ #
10
+ class Education < Base
11
+ business_object :ABC_ASC_Educ, find_by: :ordinal
12
+
13
+ imis_attribute :certificate, source: :ABC_ECertificate, type: :upcase_string
14
+ imis_attribute :description, source: :ABC_Educ_Description
15
+ imis_attribute :effective_date, source: :ABC_Educ_Effective_Date
16
+ imis_attribute :thru_date, source: :ABC_EDUC_THRU_DATE, default: '0001-01-01T00:00:00'
17
+ imis_attribute :source, source: :ABC_Educ_Source_System
18
+ imis_attribute :transaction_date, source: :ABC_Educ_Transaction_Date, default: -> { Time.now }
19
+ imis_attribute :code, source: :ABC_Other_Code
20
+ imis_attribute :type_code, source: :ABC_Product_Code
21
+ imis_attribute :abc_type_code, source: :ABC_TYPE, default: 'EDUC'
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class AbcCsContact < Base
7
+ business_object :ABC_CsContact
8
+
9
+ imis_attribute :address_number1, source: :AddressNumber1, type: :integer
10
+ imis_attribute :address_number2, source: :AddressNumber2, type: :integer
11
+ imis_attribute :address_number3, source: :AddressNumber3, type: :integer
12
+ imis_attribute :bar_code, source: :BarCode
13
+ imis_attribute :bill_address_num, source: :BillAddressNum, type: :integer
14
+ imis_attribute :birth_date, source: :BirthDate
15
+ imis_attribute :category, source: :Category
16
+ imis_attribute :chapter, source: :Chapter
17
+ imis_attribute :company_id, source: :CompanyId
18
+ imis_attribute :company_member_type, source: :CompanyMemberType
19
+ imis_attribute :company, source: :Company
20
+ imis_attribute :company_sort, source: :CompanySort
21
+ imis_attribute :contact_rank, source: :ContactRank, type: :integer
22
+ imis_attribute :country, source: :Country
23
+ imis_attribute :county, source: :County
24
+ imis_attribute :crrt, source: :Crrt
25
+ imis_attribute :date_added, source: :DateAdded
26
+ imis_attribute :designation, source: :Designation
27
+ imis_attribute :dup_match_key, source: :DupMatchKey
28
+ imis_attribute :email, source: :Email
29
+ imis_attribute :exclude_directory, source: :ExcludeDirectory, type: :boolean
30
+ imis_attribute :exclude_mail, source: :ExcludeMail, type: :boolean
31
+ imis_attribute :fax, source: :Fax
32
+ imis_attribute :full_address, source: :FullAddress
33
+ imis_attribute :functional_title, source: :FunctionalTitle
34
+ imis_attribute :home_phone, source: :HomePhone
35
+ imis_attribute :informal, source: :Informal
36
+ imis_attribute :intent_to_edit, source: :IntentToEdit
37
+ imis_attribute :join_date, source: :JoinDate
38
+ imis_attribute :last_first, source: :LastFirst
39
+ imis_attribute :last_name, source: :LastName
40
+ imis_attribute :last_updated, source: :LastUpdated
41
+ imis_attribute :mail_address_number, source: :MailAddressNumber, type: :integer
42
+ imis_attribute :mail_code, source: :MailCode
43
+ imis_attribute :major_key, source: :MajorKey
44
+ imis_attribute :is_member, source: :IsMember, type: :boolean
45
+ imis_attribute :member_status, source: :MemberStatus
46
+ imis_attribute :member_status_date, source: :MemberStatusDate
47
+ imis_attribute :member_type, source: :MemberType
48
+ imis_attribute :middle_name, source: :MiddleName
49
+ imis_attribute :member_type_change_date, source: :MemberTypeChangeDate
50
+ imis_attribute :entity_code, source: :EntityCode
51
+ imis_attribute :paid_through, source: :PaidThrough
52
+ imis_attribute :prefix, source: :Prefix
53
+ imis_attribute :previous_member_type, source: :PreviousMemberType
54
+ imis_attribute :sic_code, source: :SicCode
55
+ imis_attribute :source_code, source: :SourceCode
56
+ imis_attribute :state_house, source: :StateHouse
57
+ imis_attribute :state_province, source: :StateProvince
58
+ imis_attribute :state_senate, source: :StateSenate
59
+ imis_attribute :status, source: :Status
60
+ imis_attribute :suffix, source: :Suffix
61
+ imis_attribute :title, source: :Title
62
+ imis_attribute :updated_by, source: :UpdatedBy
63
+ imis_attribute :us_congress, source: :UsCongress
64
+ imis_attribute :website, source: :Website
65
+ imis_attribute :work_phone, source: :WorkPhone
66
+ imis_attribute :zip, source: :Zip
67
+ imis_attribute :first_name, source: :FirstName
68
+ imis_attribute :city, source: :City
69
+ imis_attribute :toll_free, source: :TollFree
70
+ imis_attribute :ship_address_num, source: :ShipAddressNum, type: :integer
71
+ imis_attribute :backorders, source: :Backorders, type: :integer
72
+ imis_attribute :credit_limit, source: :CreditLimit, type: :float
73
+ imis_attribute :no_statements, source: :NoStatements, type: :boolean
74
+ imis_attribute :renew_months, source: :RenewMonths, type: :float
75
+ imis_attribute :renewed_thru, source: :RenewedThru
76
+ imis_attribute :default_tax_authority, source: :DefaultTaxAuthority
77
+ imis_attribute :tax_exempt, source: :TaxExempt
78
+ imis_attribute :default_terms_code, source: :DefaultTermsCode
79
+ imis_attribute :vat_exempt, source: :VatExempt, type: :boolean
80
+ imis_attribute :vat_country, source: :VatCountry
81
+ imis_attribute :vat_reg_number, source: :VatRegNumber
82
+ imis_attribute :is_company, source: :IsCompany, type: :boolean
83
+ imis_attribute :full_name, source: :FullName
84
+ imis_attribute :next_renewal, source: :NextRenewal
85
+ imis_attribute :mobile_phone, source: :MobilePhone
86
+ imis_attribute :bill_to_id, source: :BillToID
87
+ imis_attribute :gender, source: :Gender
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class AbcFed990 < Base
7
+ business_object :ABC_FED990
8
+
9
+ imis_attribute :form_filed, source: :FormFiled, type: :boolean
10
+ imis_attribute :incorporated, source: :Incorporated, type: :boolean
11
+ imis_attribute :total_expenditures, source: :TotalExpenditures, type: :float
12
+ imis_attribute :start_date, source: :StartDate
13
+ imis_attribute :end_date, source: :EndDate
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class AbcPsVolunteerSkills < Base
7
+ business_object :ABC_PS_VolunteerSkills, find_by: :ordinal
8
+
9
+ imis_attribute :notes, source: :Notes
10
+ imis_attribute :skill_level, source: :Skill_Level
11
+ imis_attribute :skills, source: :Skills
12
+ imis_attribute :staff_notes, source: :Staff_Notes
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class AccessArea < Base
7
+ business_object :AccessArea
8
+
9
+ imis_attribute :description, source: :Description
10
+ imis_attribute :is_system, source: :IsSystem, type: :boolean
11
+ imis_attribute :name, source: :Name
12
+ imis_attribute :updated_by_user_key, source: :UpdatedByUserKey
13
+ imis_attribute :updated_on, source: :UpdatedOn
14
+ imis_attribute :access_area_key, source: :AccessAreaKey
15
+ imis_attribute :created_by_user_key, source: :CreatedByUserKey
16
+ imis_attribute :created_on, source: :CreatedOn
17
+ imis_attribute :protected_access_key, source: :ProtectedAccessKey
18
+ imis_attribute :is_content_acl, source: :IsContentACL, type: :boolean
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class AccessItem < Base
7
+ business_object :AccessItem
8
+
9
+ imis_attribute :access_key, source: :AccessKey
10
+ imis_attribute :grantee, source: :Grantee
11
+ imis_attribute :group_key, source: :GroupKey
12
+ imis_attribute :permission, source: :Permission, type: :integer
13
+ imis_attribute :role_key, source: :RoleKey
14
+ imis_attribute :user_key, source: :UserKey
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class AccessMain < Base
7
+ business_object :AccessMain
8
+
9
+ imis_attribute :access_key, source: :AccessKey
10
+ imis_attribute :access_scope, source: :AccessScope
11
+ imis_attribute :created_by_user_key, source: :CreatedByUserKey
12
+ imis_attribute :created_on, source: :CreatedOn
13
+ imis_attribute :updated_by_user_key, source: :UpdatedByUserKey
14
+ imis_attribute :updated_on, source: :UpdatedOn
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class ActionPlan < Base
7
+ business_object :ActionPlan
8
+
9
+ imis_attribute :action_manifest, source: :ActionManifest
10
+ imis_attribute :description, source: :Description
11
+ imis_attribute :name, source: :Name
12
+ imis_attribute :updated_by_user_key, source: :UpdatedByUserKey
13
+ imis_attribute :updated_on, source: :UpdatedOn
14
+ imis_attribute :action_plan_key, source: :ActionPlanKey
15
+ imis_attribute :opportunity_type_key, source: :OpportunityTypeKey
16
+ imis_attribute :created_by_user_key, source: :CreatedByUserKey
17
+ imis_attribute :created_on, source: :CreatedOn
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class Activity < Base
7
+ business_object :Activity
8
+
9
+ imis_attribute :action_codes, source: :ACTION_CODES
10
+ imis_attribute :activity_type, source: :ACTIVITY_TYPE
11
+ imis_attribute :amount, source: :AMOUNT, type: :float
12
+ imis_attribute :attach_seqn, source: :ATTACH_SEQN, type: :integer
13
+ imis_attribute :attach_total, source: :ATTACH_TOTAL, type: :integer
14
+ imis_attribute :batch_num, source: :BATCH_NUM
15
+ imis_attribute :campaign_code, source: :CAMPAIGN_CODE
16
+ imis_attribute :category, source: :CATEGORY
17
+ imis_attribute :co_id, source: :CO_ID
18
+ imis_attribute :description, source: :DESCRIPTION
19
+ imis_attribute :effective_date, source: :EFFECTIVE_DATE
20
+ imis_attribute :grace_period, source: :GRACE_PERIOD
21
+ imis_attribute :party_id, source: :PartyId
22
+ imis_attribute :intent_to_edit, source: :INTENT_TO_EDIT
23
+ imis_attribute :mem_trib_code, source: :MEM_TRIB_CODE
24
+ imis_attribute :member_type, source: :MEMBER_TYPE
25
+ imis_attribute :next_install_date, source: :NEXT_INSTALL_DATE
26
+ imis_attribute :note, source: :NOTE
27
+ imis_attribute :note_2, source: :NOTE_2
28
+ imis_attribute :object, source: :OBJECT
29
+ imis_attribute :org_code, source: :ORG_CODE
30
+ imis_attribute :originating_trans_num, source: :ORIGINATING_TRANS_NUM, type: :integer
31
+ imis_attribute :other_code, source: :OTHER_CODE
32
+ imis_attribute :other_id, source: :OTHER_ID
33
+ imis_attribute :pay_method, source: :PAY_METHOD
34
+ imis_attribute :product_code, source: :PRODUCT_CODE
35
+ imis_attribute :quantity, source: :QUANTITY, type: :float
36
+ imis_attribute :recurring_request, source: :RECURRING_REQUEST, type: :boolean
37
+ imis_attribute :seqn, source: :SEQN, type: :integer
38
+ imis_attribute :solicitor_id, source: :SOLICITOR_ID
39
+ imis_attribute :source_code, source: :SOURCE_CODE
40
+ imis_attribute :source_system, source: :SOURCE_SYSTEM
41
+ imis_attribute :status_code, source: :STATUS_CODE
42
+ imis_attribute :taxable_value, source: :TAXABLE_VALUE, type: :float
43
+ imis_attribute :thru_date, source: :THRU_DATE
44
+ imis_attribute :tickler_date, source: :TICKLER_DATE
45
+ imis_attribute :transaction_date, source: :TRANSACTION_DATE
46
+ imis_attribute :uf_1, source: :UF_1
47
+ imis_attribute :uf_2, source: :UF_2
48
+ imis_attribute :uf_3, source: :UF_3
49
+ imis_attribute :uf_4, source: :UF_4, type: :float
50
+ imis_attribute :uf_5, source: :UF_5, type: :float
51
+ imis_attribute :uf_6, source: :UF_6
52
+ imis_attribute :uf_7, source: :UF_7
53
+ imis_attribute :units, source: :UNITS, type: :float
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Usps
4
+ module Imis
5
+ module Models
6
+ class ActivityLdao < Base
7
+ business_object :Activity_LDAO
8
+
9
+ imis_attribute :action_codes, source: :ACTION_CODES
10
+ imis_attribute :activity_type, source: :ACTIVITY_TYPE
11
+ imis_attribute :amount, source: :AMOUNT, type: :float
12
+ imis_attribute :attach_seqn, source: :ATTACH_SEQN, type: :integer
13
+ imis_attribute :attach_total, source: :ATTACH_TOTAL, type: :integer
14
+ imis_attribute :batch_num, source: :BATCH_NUM
15
+ imis_attribute :campaign_code, source: :CAMPAIGN_CODE
16
+ imis_attribute :category, source: :CATEGORY
17
+ imis_attribute :co_id, source: :CO_ID
18
+ imis_attribute :description, source: :DESCRIPTION
19
+ imis_attribute :effective_date, source: :EFFECTIVE_DATE
20
+ imis_attribute :grace_period, source: :GRACE_PERIOD, type: :integer
21
+ imis_attribute :intent_to_edit, source: :INTENT_TO_EDIT
22
+ imis_attribute :mem_trib_code, source: :MEM_TRIB_CODE
23
+ imis_attribute :member_type, source: :MEMBER_TYPE
24
+ imis_attribute :next_install_date, source: :NEXT_INSTALL_DATE
25
+ imis_attribute :note, source: :NOTE
26
+ imis_attribute :note_2, source: :NOTE_2
27
+ imis_attribute :object, source: :OBJECT
28
+ imis_attribute :org_code, source: :ORG_CODE
29
+ imis_attribute :originating_trans_num, source: :ORIGINATING_TRANS_NUM, type: :integer
30
+ imis_attribute :other_code, source: :OTHER_CODE
31
+ imis_attribute :other_id, source: :OTHER_ID
32
+ imis_attribute :pay_method, source: :PAY_METHOD
33
+ imis_attribute :product_code, source: :PRODUCT_CODE
34
+ imis_attribute :quantity, source: :QUANTITY, type: :float
35
+ imis_attribute :recurring_request, source: :RECURRING_REQUEST, type: :boolean
36
+ imis_attribute :seqn, source: :SEQN, type: :integer
37
+ imis_attribute :solicitor_id, source: :SOLICITOR_ID
38
+ imis_attribute :source_code, source: :SOURCE_CODE
39
+ imis_attribute :source_system, source: :SOURCE_SYSTEM
40
+ imis_attribute :status_code, source: :STATUS_CODE
41
+ imis_attribute :taxable_value, source: :TAXABLE_VALUE, type: :float
42
+ imis_attribute :thru_date, source: :THRU_DATE
43
+ imis_attribute :tickler_date, source: :TICKLER_DATE
44
+ imis_attribute :time_stamp, source: :TIME_STAMP
45
+ imis_attribute :transaction_date, source: :TRANSACTION_DATE
46
+ imis_attribute :uf_1, source: :UF_1
47
+ imis_attribute :uf_2, source: :UF_2
48
+ imis_attribute :uf_3, source: :UF_3
49
+ imis_attribute :uf_4, source: :UF_4, type: :float
50
+ imis_attribute :uf_5, source: :UF_5, type: :float
51
+ imis_attribute :uf_6, source: :UF_6
52
+ imis_attribute :uf_7, source: :UF_7
53
+ imis_attribute :units, source: :UNITS, type: :float
54
+ imis_attribute :custom_property, source: :CustomProperty
55
+ end
56
+ end
57
+ end
58
+ end