halo_msp_api 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 298a5f2396dac7b60b32afb4d7e12af0797c20ea696f06adb5b7cde91a1802e7
4
- data.tar.gz: a90a79d513e0384e0ac3b3fac4c4f10afa99616b0e4d21f032a21d5958d8dab9
3
+ metadata.gz: 66a71218fe73c35441a0f239ab1c80a3879aac9d9c44116c167a260c6cf6cb3c
4
+ data.tar.gz: 8602e863b06f0e4fd6ea315da702c6e9f1f8e41fdbdb3f19c22e08c4dd5ab91c
5
5
  SHA512:
6
- metadata.gz: 0fb09a0fca38736575835d473bd52f0836b4f520e1442a9a7c8faa3f0d65e738789a9a52d4c620cccbc9730da822552283afd1f958ca4cf7a90917d029e4b1f8
7
- data.tar.gz: 20bd7c4acb3661c4240b2749fa15f9b02181d17ba08b40d233e7f4811cea86a78c112fc7b2c547419de56c63629134f1862ba5d561e3c833c0391fe6ac29a009
6
+ metadata.gz: a4fbc442112b4f78af465735d8b59b74f3cfed6308306d42810a550729aafe6ed8a61815d904841a648e956a11c1aed92f15bfe512423a9c848895962d9d4be8
7
+ data.tar.gz: 300aebb149d31b354667abc6845598739e74f8b60008702f8c418b3ab0159646e53c40996e1e11c12591097bb5df9b5c33acf227ece2fa56a517978f95605ad7
data/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.3.0] - 2025-09-23
9
+
10
+ ### Added
11
+ - Added methods for grabbing ticket statuses, categories, and other user defined attributes
12
+
13
+ ### Fixed
14
+ - Fixed resource methods not using the correct method from the base class
15
+
8
16
  ## [0.2.0] - 2025-09-15
9
17
 
10
18
  ### Added
data/README.md CHANGED
@@ -55,13 +55,13 @@ client = HaloApi::Client.new(config)
55
55
 
56
56
  ```ruby
57
57
  # List all tickets
58
- tickets = client.tickets.list
58
+ tickets = client.tickets.tickets
59
59
 
60
60
  # Get a specific ticket
61
- ticket = client.tickets.get(123)
61
+ ticket = client.tickets.ticket(123)
62
62
 
63
63
  # Create a new ticket
64
- new_ticket = client.tickets.create({
64
+ new_ticket = client.tickets.create_ticket({
65
65
  summary: "New ticket",
66
66
  details: "Ticket description",
67
67
  tickettype_id: 1,
@@ -69,23 +69,20 @@ new_ticket = client.tickets.create({
69
69
  })
70
70
 
71
71
  # Update a ticket
72
- client.tickets.update(123, { summary: "Updated summary" })
72
+ client.tickets.update_ticket(123, { summary: "Updated summary" })
73
73
 
74
74
  # Delete a ticket
75
- client.tickets.delete(123)
75
+ client.tickets.delete_ticket(123)
76
76
  ```
77
77
 
78
78
  ### Working with Users
79
79
 
80
80
  ```ruby
81
81
  # List all users
82
- users = client.users.list
83
-
84
- # Get current user
85
- current_user = client.users.me
82
+ users = client.users.users
86
83
 
87
84
  # Create a new user
88
- new_user = client.users.create({
85
+ new_user = client.users.create_user({
89
86
  name: "John Doe",
90
87
  emailaddress: "john@example.com"
91
88
  })
@@ -95,13 +92,13 @@ new_user = client.users.create({
95
92
 
96
93
  ```ruby
97
94
  # List all assets
98
- assets = client.assets.list
95
+ assets = client.assets.assets
99
96
 
100
97
  # Get a specific asset
101
- asset = client.assets.get(123)
98
+ asset = client.assets.asset(123)
102
99
 
103
100
  # Create a new asset
104
- new_asset = client.assets.create({
101
+ new_asset = client.assets.create_asset({
105
102
  inventory_number: "ASSET001",
106
103
  assettype_id: 1
107
104
  })
@@ -111,13 +108,13 @@ new_asset = client.assets.create({
111
108
 
112
109
  ```ruby
113
110
  # List all clients
114
- clients = client.clients.list
111
+ clients = client.clients.clients
115
112
 
116
113
  # Get a specific client
117
- client_record = client.clients.get(123)
114
+ client_record = client.clients.client(123)
118
115
 
119
116
  # Create a new client
120
- new_client = client.clients.create({
117
+ new_client = client.clients.create_client({
121
118
  name: "ACME Corp",
122
119
  website: "https://acme.com"
123
120
  })
@@ -127,13 +124,13 @@ new_client = client.clients.create({
127
124
 
128
125
  ```ruby
129
126
  # List all invoices
130
- invoices = client.invoices.list
127
+ invoices = client.invoices.invoices
131
128
 
132
129
  # Get a specific invoice
133
- invoice = client.invoices.get(123)
130
+ invoice = client.invoices.invoice(123)
134
131
 
135
132
  # Create a new invoice
136
- new_invoice = client.invoices.create({
133
+ new_invoice = client.invoices.create_invoice({
137
134
  client_id: 1,
138
135
  invoicedate: "2023-01-01"
139
136
  })
@@ -146,10 +143,10 @@ pdf_data = client.invoices.pdf(123)
146
143
 
147
144
  ```ruby
148
145
  # List all reports
149
- reports = client.reports.list
146
+ reports = client.reports.reports
150
147
 
151
148
  # Get a specific report
152
- report = client.reports.get(123)
149
+ report = client.reports.report(123)
153
150
 
154
151
  # Get report data
155
152
  report_data = client.reports.data("published_report_id")
@@ -159,10 +156,10 @@ report_data = client.reports.data("published_report_id")
159
156
 
160
157
  ```ruby
161
158
  # Get Azure AD data
162
- azure_data = client.integrations.get_azure_ad
159
+ azure_data = client.integrations.azure_ad
163
160
 
164
161
  # Get Slack data
165
- slack_data = client.integrations.get_slack
162
+ slack_data = client.integrations.slack
166
163
 
167
164
  # Import Jira data
168
165
  client.integrations.import_jira(jira_data)
@@ -210,7 +207,7 @@ The gem provides specific error classes for different types of API errors:
210
207
 
211
208
  ```ruby
212
209
  begin
213
- ticket = client.tickets.get(999999)
210
+ ticket = client.tickets.ticket(999999)
214
211
  rescue HaloMspApi::NotFoundError
215
212
  puts "Ticket not found"
216
213
  rescue HaloMspApi::AuthenticationError
@@ -117,6 +117,11 @@ begin
117
117
  end
118
118
  puts
119
119
 
120
+ puts '9. Listing Statuses'
121
+ statuses = instance.tickets.statuses
122
+ puts "Found #{statuses&.length || 0} statuses"
123
+ puts "First Status: #{statuses.first['name']}"
124
+
120
125
  puts '=== Example completed successfully! ==='
121
126
  rescue HaloMspApi::AuthenticationError => e
122
127
  puts "Authentication failed: #{e.message}"
@@ -34,53 +34,53 @@ module HaloMspApi
34
34
  # Action Reactions methods
35
35
  # GET /ActionReaction - List action reactions
36
36
  def reactions(params = {})
37
- get('ActionReaction', params)
37
+ list_resource('ActionReaction', params)
38
38
  end
39
39
 
40
40
  # GET /ActionReaction/{id} - Get specific action reaction
41
41
  def reaction(id, params = {})
42
- get("ActionReaction/#{id}", params)
42
+ get_resource('ActionReaction', id, params)
43
43
  end
44
44
 
45
45
  # POST /ActionReaction - Create action reaction
46
46
  def create_reaction(data)
47
- post('ActionReaction', data)
47
+ create_resource('ActionReaction', data)
48
48
  end
49
49
 
50
50
  # PUT /ActionReaction/{id} - Update action reaction
51
51
  def update_reaction(id, data)
52
- put("ActionReaction/#{id}", data)
52
+ update_resource('ActionReaction', id, data)
53
53
  end
54
54
 
55
55
  # DELETE /ActionReaction/{id} - Delete action reaction
56
56
  def delete_reaction(id)
57
- delete("ActionReaction/#{id}")
57
+ delete_resource('ActionReaction', id)
58
58
  end
59
59
 
60
60
  # Action Review methods
61
61
  # GET /ActionReview - List action reviews
62
62
  def reviews(params = {})
63
- get('ActionReview', params)
63
+ list_resource('ActionReview', params)
64
64
  end
65
65
 
66
66
  # GET /ActionReview/{id} - Get specific action review
67
67
  def review(id, params = {})
68
- get("ActionReview/#{id}", params)
68
+ get_resource('ActionReview', id, params)
69
69
  end
70
70
 
71
71
  # POST /ActionReview - Create action review
72
72
  def create_review(data)
73
- post('ActionReview', data)
73
+ create_resource('ActionReview', data)
74
74
  end
75
75
 
76
76
  # PUT /ActionReview/{id} - Update action review
77
77
  def update_review(id, data)
78
- put("ActionReview/#{id}", data)
78
+ update_resource('ActionReview', id, data)
79
79
  end
80
80
 
81
81
  # DELETE /ActionReview/{id} - Delete action review
82
82
  def delete_review(id)
83
- delete("ActionReview/#{id}")
83
+ delete_resource('ActionReview', id)
84
84
  end
85
85
  end
86
86
  end
@@ -31,7 +31,7 @@ module HaloMspApi
31
31
 
32
32
  # GET /Agent/me - Get current Agent information
33
33
  def me(params = {})
34
- get(resource_path('Agent', nil, 'me'), params)
34
+ get_resource('Agent', 'me', params)
35
35
  end
36
36
 
37
37
  # POST /Agent/ClearCache - Clear Agent cache
@@ -41,60 +41,60 @@ module HaloMspApi
41
41
 
42
42
  # GET /AgentImage/{id} - Get Agent image
43
43
  def image(id)
44
- get(resource_path('AgentImage', id))
44
+ get_resource('AgentImage', id)
45
45
  end
46
46
 
47
47
  # Agent Check-in related methods
48
48
  # GET /AgentCheckIn - List Agent check-ins
49
49
  def check_ins(params = {})
50
- get('AgentCheckIn', params)
50
+ list_resource('AgentCheckIn', params)
51
51
  end
52
52
 
53
53
  # GET /AgentCheckIn/{id} - Get specific Agent check-in
54
54
  def check_in(id, params = {})
55
- get("AgentCheckIn/#{id}", params)
55
+ get_resource('AgentCheckIn', id, params)
56
56
  end
57
57
 
58
58
  # POST /AgentCheckIn - Create Agent check-in
59
59
  def create_check_in(data)
60
- post('AgentCheckIn', data)
60
+ create_resource('AgentCheckIn', data)
61
61
  end
62
62
 
63
63
  # Agent Event Subscription methods
64
64
  # GET /AgentEventSubscription - List Agent event subscriptions
65
65
  def event_subscriptions(params = {})
66
- get('AgentEventSubscription', params)
66
+ list_resource('AgentEventSubscription', params)
67
67
  end
68
68
 
69
69
  # GET /AgentEventSubscription/{id} - Get specific Agent event subscription
70
70
  def event_subscription(id, params = {})
71
- get("AgentEventSubscription/#{id}", params)
71
+ get_resource('AgentEventSubscription', id, params)
72
72
  end
73
73
 
74
74
  # POST /AgentEventSubscription - Create Agent event subscription
75
75
  def create_event_subscription(data)
76
- post('AgentEventSubscription', data)
76
+ create_resource('AgentEventSubscription', data)
77
77
  end
78
78
 
79
79
  # Agent Presence related methods
80
80
  # GET /AgentPresenceRule - List Agent presence rules
81
81
  def presence_rules(params = {})
82
- get('AgentPresenceRule', params)
82
+ list_resource('AgentPresenceRule', params)
83
83
  end
84
84
 
85
85
  # GET /AgentPresenceSubscription - List Agent presence subscriptions
86
86
  def presence_subscriptions(params = {})
87
- get('AgentPresenceSubscription', params)
87
+ list_resource('AgentPresenceSubscription', params)
88
88
  end
89
89
 
90
90
  # GET /AgentPresenceSubscription/{id} - Get specific Agent presence subscription
91
91
  def presence_subscription(id, params = {})
92
- get("AgentPresenceSubscription/#{id}", params)
92
+ get_resource('AgentPresenceSubscription', id, params)
93
93
  end
94
94
 
95
95
  # POST /AgentPresenceSubscription - Create Agent presence subscription
96
96
  def create_presence_subscription(data)
97
- post('AgentPresenceSubscription', data)
97
+ create_resource('AgentPresenceSubscription', data)
98
98
  end
99
99
  end
100
100
  end
@@ -31,12 +31,12 @@ module HaloMspApi
31
31
 
32
32
  # GET /Appointment/Availability - Get Appointment availability
33
33
  def availability(params = {})
34
- get(resource_path('Appointment', nil, 'Availability'), params)
34
+ get_resource('Appointment', 'Availability', params)
35
35
  end
36
36
 
37
37
  # GET /Appointment/Calendar - Get Appointment calendar
38
38
  def calendar(params = {})
39
- get(resource_path('Appointment', nil, 'Calendar'), params)
39
+ get_resource('Appointment', 'Calendar', params)
40
40
  end
41
41
 
42
42
  # POST /Appointment/CheckAvailability - Check Appointment availability
@@ -46,22 +46,22 @@ module HaloMspApi
46
46
 
47
47
  # GET /Appointment/Slots - Get Appointment slots
48
48
  def slots(params = {})
49
- get(resource_path('Appointment', nil, 'Slots'), params)
49
+ list_resource('Appointment', 'Slots', params)
50
50
  end
51
51
 
52
52
  # POST /Appointment/Slots - Create Appointment slots
53
53
  def create_slots(data)
54
- post(resource_path('Appointment', nil, 'Slots'), data)
54
+ create_resource('Appointment', 'Slots', data)
55
55
  end
56
56
 
57
57
  # GET /Appointment/Types - Get Appointment types
58
58
  def types(params = {})
59
- get(resource_path('Appointment', nil, 'Types'), params)
59
+ list_resource('Appointment', 'Types', params)
60
60
  end
61
61
 
62
62
  # POST /Appointment/Types - Create Appointment type
63
63
  def create_type(data)
64
- post(resource_path('Appointment', nil, 'Types'), data)
64
+ create_resource('Appointment', 'Types', data)
65
65
  end
66
66
  end
67
67
  end
@@ -31,117 +31,117 @@ module HaloMspApi
31
31
 
32
32
  # GET /Asset/GetAllSoftwareVersions - Get all software versions
33
33
  def software_versions(params = {})
34
- get(resource_path('Asset', nil, 'GetAllSoftwareVersions'), params)
34
+ list_resource('Asset', params, 'GetAllSoftwareVersions')
35
35
  end
36
36
 
37
37
  # GET /Asset/NextTag - Get next asset tag
38
38
  def next_tag(params = {})
39
- get(resource_path('Asset', nil, 'NextTag'), params)
39
+ get_resource('Asset', 'NextTag', params)
40
40
  end
41
41
 
42
42
  # Asset Change related methods
43
43
  # GET /AssetChange - List Asset changes
44
44
  def changes(params = {})
45
- get('AssetChange', params)
45
+ list_resource('AssetChange', params)
46
46
  end
47
47
 
48
48
  # POST /AssetChange - Create Asset change
49
49
  def create_change(data)
50
- post('AssetChange', data)
50
+ create_resource('AssetChange', data)
51
51
  end
52
52
 
53
53
  # Asset Group methods
54
54
  # GET /AssetGroup - List Asset groups
55
55
  def groups(params = {})
56
- get('AssetGroup', params)
56
+ list_resource('AssetGroup', params)
57
57
  end
58
58
 
59
59
  # GET /AssetGroup/{id} - Get specific Asset group
60
60
  def group(id, params = {})
61
- get("AssetGroup/#{id}", params)
61
+ get_resource('AssetGroup', id, params)
62
62
  end
63
63
 
64
64
  # POST /AssetGroup - Create Asset group
65
65
  def create_group(data)
66
- post('AssetGroup', data)
66
+ create_resource('AssetGroup', data)
67
67
  end
68
68
 
69
69
  # PUT /AssetGroup/{id} - Update Asset group
70
70
  def update_group(id, data)
71
- put("AssetGroup/#{id}", data)
71
+ update_resource('AssetGroup', id, data)
72
72
  end
73
73
 
74
74
  # DELETE /AssetGroup/{id} - Delete Asset group
75
75
  def delete_group(id)
76
- delete("AssetGroup/#{id}")
76
+ delete_resource('AssetGroup', id)
77
77
  end
78
78
 
79
79
  # Asset Software methods
80
80
  # GET /AssetSoftware - List Asset software
81
81
  def software(params = {})
82
- get('AssetSoftware', params)
82
+ list_resource('AssetSoftware', params)
83
83
  end
84
84
 
85
85
  # POST /AssetSoftware - Create Asset software
86
86
  def create_software(data)
87
- post('AssetSoftware', data)
87
+ create_resource('AssetSoftware', data)
88
88
  end
89
89
 
90
90
  # Asset Type methods
91
91
  # GET /AssetType - List Asset types
92
92
  def types(params = {})
93
- get('AssetType', params)
93
+ list_resource('AssetType', params)
94
94
  end
95
95
 
96
96
  # GET /AssetType/{id} - Get specific Asset type
97
97
  def type(id, params = {})
98
- get("AssetType/#{id}", params)
98
+ get_resource('AssetType', id, params)
99
99
  end
100
100
 
101
101
  # POST /AssetType - Create Asset type
102
102
  def create_type(data)
103
- post('AssetType', data)
103
+ create_resource('AssetType', data)
104
104
  end
105
105
 
106
106
  # PUT /AssetType/{id} - Update Asset type
107
107
  def update_type(id, data)
108
- put("AssetType/#{id}", data)
108
+ update_resource('AssetType', id, data)
109
109
  end
110
110
 
111
111
  # DELETE /AssetType/{id} - Delete Asset type
112
112
  def delete_type(id)
113
- delete("AssetType/#{id}")
113
+ delete_resource('AssetType', id)
114
114
  end
115
115
 
116
116
  # GET /AssetTypeInfo - Get Asset type info
117
117
  def type_info(params = {})
118
- get('AssetTypeInfo', params)
118
+ get(resource_path('AssetTypeInfo'), params)
119
119
  end
120
120
 
121
121
  # Asset Type Mappings methods
122
122
  # GET /AssetTypeMappings - List Asset type mappings
123
123
  def type_mappings(params = {})
124
- get('AssetTypeMappings', params)
124
+ list_resource('AssetTypeMappings', params)
125
125
  end
126
126
 
127
127
  # GET /AssetTypeMappings/{id} - Get specific Asset type mapping
128
128
  def type_mapping(id, params = {})
129
- get("AssetTypeMappings/#{id}", params)
129
+ get_resource('AssetTypeMappings', id, params)
130
130
  end
131
131
 
132
132
  # POST /AssetTypeMappings - Create Asset type mapping
133
133
  def create_type_mapping(data)
134
- post('AssetTypeMappings', data)
134
+ create_resource('AssetTypeMappings', data)
135
135
  end
136
136
 
137
137
  # PUT /AssetTypeMappings/{id} - Update Asset type mapping
138
138
  def update_type_mapping(id, data)
139
- put("AssetTypeMappings/#{id}", data)
139
+ update_resource('AssetTypeMappings', id, data)
140
140
  end
141
141
 
142
142
  # DELETE /AssetTypeMappings/{id} - Delete Asset type mapping
143
143
  def delete_type_mapping(id)
144
- delete("AssetTypeMappings/#{id}")
144
+ delete_resource('AssetTypeMappings', id)
145
145
  end
146
146
  end
147
147
  end
@@ -57,7 +57,8 @@ module HaloMspApi
57
57
 
58
58
  # Helper method for update operations
59
59
  def update_resource(resource_name, id, data)
60
- put(resource_path(resource_name, id), data)
60
+ data_with_id = data.merge(id: id)
61
+ post(resource_path(resource_name), data_with_id)
61
62
  end
62
63
 
63
64
  # Helper method for delete operations
@@ -48,27 +48,27 @@ module HaloMspApi
48
48
  # Client Contract methods
49
49
  # GET /ClientContract - List Client contracts
50
50
  def contracts(params = {})
51
- get('ClientContract', params)
51
+ list_resource('ClientContract', params)
52
52
  end
53
53
 
54
54
  # GET /ClientContract/{id} - Get specific Client contract
55
55
  def contract(id, params = {})
56
- get("ClientContract/#{id}", params)
56
+ get_resource('ClientContract', id, params)
57
57
  end
58
58
 
59
59
  # POST /ClientContract - Create Client contract
60
60
  def create_contract(data)
61
- post('ClientContract', data)
61
+ create_resource('ClientContract', data)
62
62
  end
63
63
 
64
64
  # PUT /ClientContract/{id} - Update Client contract
65
65
  def update_contract(id, data)
66
- put("ClientContract/#{id}", data)
66
+ update_resource('ClientContract', id, data)
67
67
  end
68
68
 
69
69
  # DELETE /ClientContract/{id} - Delete Client contract
70
70
  def delete_contract(id)
71
- delete("ClientContract/#{id}")
71
+ delete_resource('ClientContract', id)
72
72
  end
73
73
 
74
74
  # POST /ClientContract/Approval - Client contract approval
@@ -84,27 +84,27 @@ module HaloMspApi
84
84
  # Client Prepay methods
85
85
  # GET /ClientPrepay - List Client prepayments
86
86
  def prepayments(params = {})
87
- get('ClientPrepay', params)
87
+ list_resource('ClientPrepay', params)
88
88
  end
89
89
 
90
90
  # GET /ClientPrepay/{id} - Get specific Client prepayment
91
91
  def prepayment(id, params = {})
92
- get("ClientPrepay/#{id}", params)
92
+ get_resource('ClientPrepay', id, params)
93
93
  end
94
94
 
95
95
  # POST /ClientPrepay - Create Client prepayment
96
96
  def create_prepayment(data)
97
- post('ClientPrepay', data)
97
+ create_resource('ClientPrepay', data)
98
98
  end
99
99
 
100
100
  # PUT /ClientPrepay/{id} - Update Client prepayment
101
101
  def update_prepayment(id, data)
102
- put("ClientPrepay/#{id}", data)
102
+ update_resource('ClientPrepay', id, data)
103
103
  end
104
104
 
105
105
  # DELETE /ClientPrepay/{id} - Delete Client prepayment
106
106
  def delete_prepayment(id)
107
- delete("ClientPrepay/#{id}")
107
+ delete_resource('ClientPrepay', id)
108
108
  end
109
109
  end
110
110
  end