d4h_api 2.0.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 (126) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/LICENSE.md +136 -0
  4. data/README.md +785 -0
  5. data/d4h_api.gemspec +28 -0
  6. data/lib/d4h/api/client.rb +216 -0
  7. data/lib/d4h/api/collection.rb +55 -0
  8. data/lib/d4h/api/error.rb +31 -0
  9. data/lib/d4h/api/model.rb +57 -0
  10. data/lib/d4h/api/models/animal.rb +8 -0
  11. data/lib/d4h/api/models/animal_group.rb +8 -0
  12. data/lib/d4h/api/models/animal_group_membership.rb +8 -0
  13. data/lib/d4h/api/models/animal_qualification.rb +8 -0
  14. data/lib/d4h/api/models/attendance.rb +8 -0
  15. data/lib/d4h/api/models/custom_field.rb +8 -0
  16. data/lib/d4h/api/models/custom_field_for_entity.rb +8 -0
  17. data/lib/d4h/api/models/customer_identifier.rb +8 -0
  18. data/lib/d4h/api/models/d4h_module.rb +8 -0
  19. data/lib/d4h/api/models/d4h_task.rb +8 -0
  20. data/lib/d4h/api/models/document.rb +8 -0
  21. data/lib/d4h/api/models/duty.rb +8 -0
  22. data/lib/d4h/api/models/equipment.rb +8 -0
  23. data/lib/d4h/api/models/equipment_brand.rb +8 -0
  24. data/lib/d4h/api/models/equipment_category.rb +8 -0
  25. data/lib/d4h/api/models/equipment_fund.rb +8 -0
  26. data/lib/d4h/api/models/equipment_inspection.rb +8 -0
  27. data/lib/d4h/api/models/equipment_inspection_result.rb +8 -0
  28. data/lib/d4h/api/models/equipment_inspection_step.rb +8 -0
  29. data/lib/d4h/api/models/equipment_inspection_step_result.rb +8 -0
  30. data/lib/d4h/api/models/equipment_kind.rb +8 -0
  31. data/lib/d4h/api/models/equipment_location.rb +8 -0
  32. data/lib/d4h/api/models/equipment_model.rb +8 -0
  33. data/lib/d4h/api/models/equipment_retired_reason.rb +8 -0
  34. data/lib/d4h/api/models/equipment_supplier.rb +8 -0
  35. data/lib/d4h/api/models/equipment_supplier_ref.rb +8 -0
  36. data/lib/d4h/api/models/equipment_usage.rb +8 -0
  37. data/lib/d4h/api/models/event.rb +8 -0
  38. data/lib/d4h/api/models/exercise.rb +8 -0
  39. data/lib/d4h/api/models/handler_group.rb +8 -0
  40. data/lib/d4h/api/models/handler_group_membership.rb +8 -0
  41. data/lib/d4h/api/models/handler_qualification.rb +8 -0
  42. data/lib/d4h/api/models/health_safety_category.rb +8 -0
  43. data/lib/d4h/api/models/health_safety_report.rb +8 -0
  44. data/lib/d4h/api/models/health_safety_severity.rb +8 -0
  45. data/lib/d4h/api/models/incident.rb +8 -0
  46. data/lib/d4h/api/models/incident_involved_injury.rb +8 -0
  47. data/lib/d4h/api/models/incident_involved_metadata.rb +8 -0
  48. data/lib/d4h/api/models/incident_involved_person.rb +8 -0
  49. data/lib/d4h/api/models/location_bookmark.rb +8 -0
  50. data/lib/d4h/api/models/member.rb +8 -0
  51. data/lib/d4h/api/models/member_custom_status.rb +8 -0
  52. data/lib/d4h/api/models/member_group.rb +8 -0
  53. data/lib/d4h/api/models/member_group_membership.rb +8 -0
  54. data/lib/d4h/api/models/member_qualification.rb +8 -0
  55. data/lib/d4h/api/models/member_qualification_award.rb +8 -0
  56. data/lib/d4h/api/models/member_retired_reason.rb +8 -0
  57. data/lib/d4h/api/models/organisation.rb +8 -0
  58. data/lib/d4h/api/models/repair.rb +8 -0
  59. data/lib/d4h/api/models/resource_bundle.rb +8 -0
  60. data/lib/d4h/api/models/role.rb +8 -0
  61. data/lib/d4h/api/models/search_result.rb +8 -0
  62. data/lib/d4h/api/models/tag.rb +8 -0
  63. data/lib/d4h/api/models/team.rb +8 -0
  64. data/lib/d4h/api/models/whiteboard.rb +8 -0
  65. data/lib/d4h/api/models/whoami.rb +8 -0
  66. data/lib/d4h/api/resource.rb +171 -0
  67. data/lib/d4h/api/resources/animal_group_membership_resource.rb +21 -0
  68. data/lib/d4h/api/resources/animal_group_resource.rb +33 -0
  69. data/lib/d4h/api/resources/animal_qualification_resource.rb +21 -0
  70. data/lib/d4h/api/resources/animal_resource.rb +21 -0
  71. data/lib/d4h/api/resources/attendance_resource.rb +25 -0
  72. data/lib/d4h/api/resources/custom_field_for_entity_resource.rb +17 -0
  73. data/lib/d4h/api/resources/custom_field_resource.rb +33 -0
  74. data/lib/d4h/api/resources/customer_identifier_resource.rb +17 -0
  75. data/lib/d4h/api/resources/d4h_module_resource.rb +17 -0
  76. data/lib/d4h/api/resources/d4h_task_resource.rb +17 -0
  77. data/lib/d4h/api/resources/document_resource.rb +33 -0
  78. data/lib/d4h/api/resources/duty_resource.rb +21 -0
  79. data/lib/d4h/api/resources/equipment_brand_resource.rb +33 -0
  80. data/lib/d4h/api/resources/equipment_category_resource.rb +33 -0
  81. data/lib/d4h/api/resources/equipment_fund_resource.rb +33 -0
  82. data/lib/d4h/api/resources/equipment_inspection_resource.rb +21 -0
  83. data/lib/d4h/api/resources/equipment_inspection_result_resource.rb +29 -0
  84. data/lib/d4h/api/resources/equipment_inspection_step_resource.rb +33 -0
  85. data/lib/d4h/api/resources/equipment_inspection_step_result_resource.rb +33 -0
  86. data/lib/d4h/api/resources/equipment_kind_resource.rb +33 -0
  87. data/lib/d4h/api/resources/equipment_location_resource.rb +21 -0
  88. data/lib/d4h/api/resources/equipment_model_resource.rb +33 -0
  89. data/lib/d4h/api/resources/equipment_resource.rb +33 -0
  90. data/lib/d4h/api/resources/equipment_retired_reason_resource.rb +33 -0
  91. data/lib/d4h/api/resources/equipment_supplier_ref_resource.rb +33 -0
  92. data/lib/d4h/api/resources/equipment_supplier_resource.rb +33 -0
  93. data/lib/d4h/api/resources/equipment_usage_resource.rb +33 -0
  94. data/lib/d4h/api/resources/event_resource.rb +29 -0
  95. data/lib/d4h/api/resources/exercise_resource.rb +33 -0
  96. data/lib/d4h/api/resources/handler_group_membership_resource.rb +21 -0
  97. data/lib/d4h/api/resources/handler_group_resource.rb +33 -0
  98. data/lib/d4h/api/resources/handler_qualification_resource.rb +21 -0
  99. data/lib/d4h/api/resources/health_safety_category_resource.rb +33 -0
  100. data/lib/d4h/api/resources/health_safety_report_resource.rb +21 -0
  101. data/lib/d4h/api/resources/health_safety_severity_resource.rb +33 -0
  102. data/lib/d4h/api/resources/incident_involved_injury_resource.rb +21 -0
  103. data/lib/d4h/api/resources/incident_involved_metadata_resource.rb +17 -0
  104. data/lib/d4h/api/resources/incident_involved_person_resource.rb +21 -0
  105. data/lib/d4h/api/resources/incident_resource.rb +29 -0
  106. data/lib/d4h/api/resources/location_bookmark_resource.rb +21 -0
  107. data/lib/d4h/api/resources/member_custom_status_resource.rb +17 -0
  108. data/lib/d4h/api/resources/member_group_membership_resource.rb +21 -0
  109. data/lib/d4h/api/resources/member_group_resource.rb +33 -0
  110. data/lib/d4h/api/resources/member_qualification_award_resource.rb +21 -0
  111. data/lib/d4h/api/resources/member_qualification_resource.rb +21 -0
  112. data/lib/d4h/api/resources/member_resource.rb +21 -0
  113. data/lib/d4h/api/resources/member_retired_reason_resource.rb +17 -0
  114. data/lib/d4h/api/resources/organisation_resource.rb +13 -0
  115. data/lib/d4h/api/resources/repair_resource.rb +33 -0
  116. data/lib/d4h/api/resources/resource_bundle_resource.rb +21 -0
  117. data/lib/d4h/api/resources/role_resource.rb +21 -0
  118. data/lib/d4h/api/resources/search_result_resource.rb +17 -0
  119. data/lib/d4h/api/resources/tag_resource.rb +33 -0
  120. data/lib/d4h/api/resources/team_resource.rb +13 -0
  121. data/lib/d4h/api/resources/whiteboard_resource.rb +33 -0
  122. data/lib/d4h/api/resources/whoami_resource.rb +13 -0
  123. data/lib/d4h.rb +156 -0
  124. data.tar.gz.sig +0 -0
  125. metadata +264 -0
  126. metadata.gz.sig +0 -0
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class HandlerGroup < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class HandlerGroupMembership < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class HandlerQualification < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class HealthSafetyCategory < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class HealthSafetyReport < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class HealthSafetySeverity < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Incident < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class IncidentInvolvedInjury < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class IncidentInvolvedMetadata < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class IncidentInvolvedPerson < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class LocationBookmark < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Member < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class MemberCustomStatus < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class MemberGroup < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class MemberGroupMembership < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class MemberQualification < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class MemberQualificationAward < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class MemberRetiredReason < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Organisation < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Repair < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class ResourceBundle < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Role < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class SearchResult < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Tag < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Team < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Whiteboard < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class Whoami < Model
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,171 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ # Public: Base class for all D4H API resource endpoints.
6
+ #
7
+ # Provides HTTP verb helpers (GET, POST, PUT, PATCH, DELETE), automatic
8
+ # Bearer token authentication, error handling, and a pagination helper
9
+ # for fetching all pages of a list endpoint.
10
+ #
11
+ # Subclasses must define a `SUB_URL` constant (e.g. "members", "tags")
12
+ # and implement whichever CRUD methods the API supports for that resource.
13
+ #
14
+ # Examples
15
+ #
16
+ # class TagResource < Resource
17
+ # SUB_URL = "tags"
18
+ #
19
+ # def list(**params)
20
+ # Collection.new(get_request(resource_url, params: params).body, model_class: Tag)
21
+ # end
22
+ #
23
+ # def show(id:)
24
+ # Tag.new(get_request("#{resource_url}/#{id}").body)
25
+ # end
26
+ # end
27
+ class Resource
28
+ # Public: Returns the Client instance this resource is bound to.
29
+ attr_reader :client
30
+
31
+ # Public: Initialize a Resource bound to a Client.
32
+ #
33
+ # client - A D4H::API::Client instance.
34
+ def initialize(client)
35
+ @client = client
36
+ end
37
+
38
+ # Public: Returns the context-scoped base path (e.g. "v3/team/42").
39
+ def base_path
40
+ client.base_path
41
+ end
42
+
43
+ # Public: Returns the full resource URL path (e.g. "v3/team/42/tags").
44
+ #
45
+ # Built from the client's base_path and the subclass's SUB_URL constant.
46
+ def resource_url
47
+ "#{base_path}/#{self.class::SUB_URL}"
48
+ end
49
+
50
+ # Public: Perform a GET request.
51
+ #
52
+ # url - The URL path to request.
53
+ # params - Optional Hash of query parameters (default: {}).
54
+ # headers - Optional Hash of additional HTTP headers (default: {}).
55
+ #
56
+ # Returns the Faraday::Response on success.
57
+ # Raises D4H::API::Error on non-2xx status.
58
+ def get_request(url, params: {}, headers: {})
59
+ handle_response(client.connection.get(url, params, default_headers.merge(headers)))
60
+ end
61
+
62
+ # Public: Perform a POST request.
63
+ #
64
+ # url - The URL path to request.
65
+ # body - The Hash request body to send.
66
+ # headers - Optional Hash of additional HTTP headers (default: {}).
67
+ #
68
+ # Returns the Faraday::Response on success.
69
+ # Raises D4H::API::Error on non-2xx status.
70
+ def post_request(url, body:, headers: {})
71
+ handle_response(client.connection.post(url, body, default_headers.merge(headers)))
72
+ end
73
+
74
+ # Public: Perform a PUT request.
75
+ #
76
+ # Used by DocumentResource, which requires PUT for updates per the D4H API.
77
+ #
78
+ # url - The URL path to request.
79
+ # body - The Hash request body to send.
80
+ # headers - Optional Hash of additional HTTP headers (default: {}).
81
+ #
82
+ # Returns the Faraday::Response on success.
83
+ # Raises D4H::API::Error on non-2xx status.
84
+ def put_request(url, body:, headers: {})
85
+ handle_response(client.connection.put(url, body, default_headers.merge(headers)))
86
+ end
87
+
88
+ # Public: Perform a PATCH request.
89
+ #
90
+ # Used by most resources for updates.
91
+ #
92
+ # url - The URL path to request.
93
+ # body - The Hash request body to send (default: {}).
94
+ # headers - Optional Hash of additional HTTP headers (default: {}).
95
+ #
96
+ # Returns the Faraday::Response on success.
97
+ # Raises D4H::API::Error on non-2xx status.
98
+ def patch_request(url, body: {}, headers: {})
99
+ handle_response(client.connection.patch(url, body, default_headers.merge(headers)))
100
+ end
101
+
102
+ # Public: Perform a DELETE request.
103
+ #
104
+ # url - The URL path to request.
105
+ # params - Optional Hash of query parameters (default: {}).
106
+ # headers - Optional Hash of additional HTTP headers (default: {}).
107
+ #
108
+ # Returns the Faraday::Response on success.
109
+ # Raises D4H::API::Error on non-2xx status.
110
+ def delete_request(url, params: {}, headers: {})
111
+ handle_response(client.connection.delete(url, params, default_headers.merge(headers)))
112
+ end
113
+
114
+ # Internal: Returns the default Authorization header for all requests.
115
+ def default_headers
116
+ {Authorization: "Bearer #{client.api_key}"}
117
+ end
118
+
119
+ # Internal: Check the HTTP response status and raise on errors.
120
+ #
121
+ # response - A Faraday::Response object.
122
+ #
123
+ # Returns the response if status is 2xx.
124
+ # Raises D4H::API::RetriableError for transient errors (429, 5xx) after
125
+ # all retry attempts have been exhausted by the Faraday retry middleware.
126
+ # Raises D4H::API::Error for all other non-2xx responses.
127
+ def handle_response(response)
128
+ return response if (200..299).cover?(response.status)
129
+
130
+ body = response.body || {}
131
+ message = [body["error"], body["message"]].compact.join(": ")
132
+
133
+ raise RetriableError, message if Client::RETRIABLE_STATUSES.include?(response.status)
134
+
135
+ raise Error, message
136
+ end
137
+
138
+ private
139
+
140
+ # Internal: Fetch all pages of a list endpoint and return a single Collection.
141
+ #
142
+ # Iterates through pages starting at page 0, accumulating results until
143
+ # all records are fetched (based on totalSize) or the API returns an
144
+ # empty page.
145
+ #
146
+ # params - A Hash of query parameters. :size defaults to 250.
147
+ # model_class - The Model subclass to wrap results in (e.g. Member, Tag).
148
+ #
149
+ # Returns a Collection containing all results across all pages.
150
+ def paginate_all(params, model_class:)
151
+ params[:size] ||= 250
152
+ all_results = []
153
+ page = params.fetch(:page, 0)
154
+
155
+ loop do
156
+ response = get_request(resource_url, params: params.merge(page: page)).body
157
+ results = response["results"] || []
158
+ all_results.concat(results)
159
+ break if all_results.size >= response["totalSize"] || results.empty?
160
+
161
+ page += 1
162
+ end
163
+
164
+ Collection.new(
165
+ {"results" => all_results, "page" => 0, "pageSize" => all_results.size, "totalSize" => all_results.size},
166
+ model_class: model_class,
167
+ )
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class AnimalGroupMembershipResource < Resource
6
+ SUB_URL = "animal-group-memberships"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: AnimalGroupMembership)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: AnimalGroupMembership)
14
+ end
15
+
16
+ def show(id:)
17
+ AnimalGroupMembership.new(get_request("#{resource_url}/#{id}").body)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class AnimalGroupResource < Resource
6
+ SUB_URL = "animal-groups"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: AnimalGroup)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: AnimalGroup)
14
+ end
15
+
16
+ def show(id:)
17
+ AnimalGroup.new(get_request("#{resource_url}/#{id}").body)
18
+ end
19
+
20
+ def create(data)
21
+ AnimalGroup.new(post_request(resource_url, body: data).body)
22
+ end
23
+
24
+ def update(id:, **params)
25
+ AnimalGroup.new(patch_request("#{resource_url}/#{id}", body: params).body)
26
+ end
27
+
28
+ def destroy(id:)
29
+ delete_request("#{resource_url}/#{id}")
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class AnimalQualificationResource < Resource
6
+ SUB_URL = "animal-qualifications"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: AnimalQualification)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: AnimalQualification)
14
+ end
15
+
16
+ def show(id:)
17
+ AnimalQualification.new(get_request("#{resource_url}/#{id}").body)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class AnimalResource < Resource
6
+ SUB_URL = "animals"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: Animal)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: Animal)
14
+ end
15
+
16
+ def show(id:)
17
+ Animal.new(get_request("#{resource_url}/#{id}").body)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class AttendanceResource < Resource
6
+ SUB_URL = "attendance"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: Attendance)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: Attendance)
14
+ end
15
+
16
+ def show(id:)
17
+ Attendance.new(get_request("#{resource_url}/#{id}").body)
18
+ end
19
+
20
+ def create(data)
21
+ Attendance.new(post_request(resource_url, body: data).body)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class CustomFieldForEntityResource < Resource
6
+ SUB_URL = "custom-field-options"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: CustomFieldForEntity)
10
+ end
11
+
12
+ def show(id:)
13
+ CustomFieldForEntity.new(get_request("#{resource_url}/#{id}").body)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class CustomFieldResource < Resource
6
+ SUB_URL = "custom-fields"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: CustomField)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: CustomField)
14
+ end
15
+
16
+ def show(id:)
17
+ CustomField.new(get_request("#{resource_url}/#{id}").body)
18
+ end
19
+
20
+ def create(data)
21
+ CustomField.new(post_request(resource_url, body: data).body)
22
+ end
23
+
24
+ def update(id:, **params)
25
+ CustomField.new(patch_request("#{resource_url}/#{id}", body: params).body)
26
+ end
27
+
28
+ def destroy(id:)
29
+ delete_request("#{resource_url}/#{id}")
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class CustomerIdentifierResource < Resource
6
+ SUB_URL = "customer-identifiers"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: CustomerIdentifier)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: CustomerIdentifier)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class D4hModuleResource < Resource
6
+ SUB_URL = "modules"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: D4hModule)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: D4hModule)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module D4H
4
+ module API
5
+ class D4hTaskResource < Resource
6
+ SUB_URL = "tasks"
7
+
8
+ def list(**params)
9
+ Collection.new(get_request(resource_url, params: params).body, model_class: D4hTask)
10
+ end
11
+
12
+ def list_all(**params)
13
+ paginate_all(params, model_class: D4hTask)
14
+ end
15
+ end
16
+ end
17
+ end