lex-service_now 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.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/legion/extensions/service_now/access_control/runners/access_control.rb +54 -0
  3. data/lib/legion/extensions/service_now/calendar/runners/calendar.rb +60 -0
  4. data/lib/legion/extensions/service_now/catalog_task/runners/catalog_task.rb +51 -0
  5. data/lib/legion/extensions/service_now/change/runners/change.rb +4 -4
  6. data/lib/legion/extensions/service_now/ci_relationship/runners/ci_relationship.rb +52 -0
  7. data/lib/legion/extensions/service_now/client.rb +18 -0
  8. data/lib/legion/extensions/service_now/cmdb_health/runners/cmdb_health.rb +48 -0
  9. data/lib/legion/extensions/service_now/currency/runners/currency.rb +40 -0
  10. data/lib/legion/extensions/service_now/deprecation_log/runners/deprecation_log.rb +43 -0
  11. data/lib/legion/extensions/service_now/errors.rb +26 -0
  12. data/lib/legion/extensions/service_now/helpers/client.rb +32 -0
  13. data/lib/legion/extensions/service_now/helpers/pagination.rb +31 -0
  14. data/lib/legion/extensions/service_now/helpers/retry.rb +32 -0
  15. data/lib/legion/extensions/service_now/knowledge_base/runners/knowledge_base.rb +64 -0
  16. data/lib/legion/extensions/service_now/knowledge_feedback/runners/knowledge_feedback.rb +45 -0
  17. data/lib/legion/extensions/service_now/license/runners/license.rb +44 -0
  18. data/lib/legion/extensions/service_now/metric/runners/metric.rb +47 -0
  19. data/lib/legion/extensions/service_now/script_action/runners/script_action.rb +50 -0
  20. data/lib/legion/extensions/service_now/table/runners/table.rb +4 -2
  21. data/lib/legion/extensions/service_now/tag/runners/tag.rb +61 -0
  22. data/lib/legion/extensions/service_now/ui_action/runners/ui_action.rb +53 -0
  23. data/lib/legion/extensions/service_now/ui_policy/runners/ui_policy.rb +51 -0
  24. data/lib/legion/extensions/service_now/vendor/runners/vendor.rb +61 -0
  25. data/lib/legion/extensions/service_now/version.rb +1 -1
  26. data/lib/legion/extensions/service_now.rb +19 -0
  27. metadata +20 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dbf260038f432fcd485cb48c125da454b3f796b3165cefe76675b5fea1c1a336
4
- data.tar.gz: 1a82c55c3644116943755c214c527173b928a499437cb3b75aa897b25afbf1bf
3
+ metadata.gz: 7299f2cb64f753600e58b75350804a51164e4ed0b246a0124e9dd691ae813860
4
+ data.tar.gz: 4cdb63326d0a106814c0f6abb67bf819198e0114d299dbf971a3185ed3b75f8c
5
5
  SHA512:
6
- metadata.gz: 552a514871309be55f0c41b899724cc833649741bbea34be70695e3b8e3f784f40952dd2afb6244163438b8214808b610cd267f871963cd9d74bd67c7ab0158f
7
- data.tar.gz: 8e37565b25abc8382372e77bb2e02acb14ef894b340ee823346671ea9e5beff9256f9af1e32ddb25780bfb3bb2790684164b6805d05125fec8fc55467b52bf65
6
+ metadata.gz: 619c90c1289c5b046076a55290a5969d51605b5491ad3163a4038de98d99e06294b62774d5a3d24592ec27f0705ab759df3aafca91778be7c6af10f8d0e0d3ea
7
+ data.tar.gz: 3ee2c4fb6921cf67f71139d9a288d6d056302a0b403f63dcb6b809dfb3667ca00b7689255e5ade8bb188d618a97169338b71673b7c8febb99401ca7e2e493374
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module AccessControl
7
+ module Runners
8
+ module AccessControl
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_acls(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = sysparm_query if sysparm_query
15
+ resp = connection(**).get('/api/now/table/sys_security_acl', params)
16
+ { acls: resp.body['result'] }
17
+ end
18
+
19
+ def get_acl(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/sys_security_acl/#{sys_id}")
21
+ { acl: resp.body['result'] }
22
+ end
23
+
24
+ def create_acl(name:, type:, operation:, active: true,
25
+ script: nil, condition: nil, **)
26
+ body = { name: name, type: type, operation: operation, active: active }
27
+ body[:script] = script if script
28
+ body[:condition] = condition if condition
29
+ resp = connection(**).post('/api/now/table/sys_security_acl', body)
30
+ { acl: resp.body['result'] }
31
+ end
32
+
33
+ def update_acl(sys_id:, active: nil, script: nil, condition: nil, **)
34
+ body = {}
35
+ body[:active] = active unless active.nil?
36
+ body[:script] = script if script
37
+ body[:condition] = condition if condition
38
+ resp = connection(**).patch("/api/now/table/sys_security_acl/#{sys_id}", body)
39
+ { acl: resp.body['result'] }
40
+ end
41
+
42
+ def delete_acl(sys_id:, **)
43
+ resp = connection(**).delete("/api/now/table/sys_security_acl/#{sys_id}")
44
+ { deleted: resp.status == 204, sys_id: sys_id }
45
+ end
46
+
47
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
48
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Calendar
7
+ module Runners
8
+ module Calendar
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_schedules(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = sysparm_query if sysparm_query
15
+ resp = connection(**).get('/api/now/table/cmn_schedule', params)
16
+ { schedules: resp.body['result'] }
17
+ end
18
+
19
+ def get_schedule(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/cmn_schedule/#{sys_id}")
21
+ { schedule: resp.body['result'] }
22
+ end
23
+
24
+ def create_schedule(name:, type: 'include', time_zone: nil, **)
25
+ body = { name: name, type: type }
26
+ body[:time_zone] = time_zone if time_zone
27
+ resp = connection(**).post('/api/now/table/cmn_schedule', body)
28
+ { schedule: resp.body['result'] }
29
+ end
30
+
31
+ def update_schedule(sys_id:, name: nil, time_zone: nil, **)
32
+ body = {}
33
+ body[:name] = name if name
34
+ body[:time_zone] = time_zone if time_zone
35
+ resp = connection(**).patch("/api/now/table/cmn_schedule/#{sys_id}", body)
36
+ { schedule: resp.body['result'] }
37
+ end
38
+
39
+ def delete_schedule(sys_id:, **)
40
+ resp = connection(**).delete("/api/now/table/cmn_schedule/#{sys_id}")
41
+ { deleted: resp.status == 204, sys_id: sys_id }
42
+ end
43
+
44
+ def list_schedule_entries(schedule_sys_id:, sysparm_limit: 100, **)
45
+ params = {
46
+ sysparm_query: "schedule=#{schedule_sys_id}",
47
+ sysparm_limit: sysparm_limit
48
+ }
49
+ resp = connection(**).get('/api/now/table/cmn_schedule_span', params)
50
+ { entries: resp.body['result'] }
51
+ end
52
+
53
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
54
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module CatalogTask
7
+ module Runners
8
+ module CatalogTask
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_catalog_tasks(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, request_item: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ if request_item
15
+ params[:sysparm_query] = "request_item=#{request_item}"
16
+ elsif sysparm_query
17
+ params[:sysparm_query] = sysparm_query
18
+ end
19
+ resp = connection(**).get('/api/now/table/sc_task', params)
20
+ { catalog_tasks: resp.body['result'] }
21
+ end
22
+
23
+ def get_catalog_task(sys_id:, **)
24
+ resp = connection(**).get("/api/now/table/sc_task/#{sys_id}")
25
+ { catalog_task: resp.body['result'] }
26
+ end
27
+
28
+ def update_catalog_task(sys_id:, state: nil, assigned_to: nil,
29
+ work_notes: nil, **)
30
+ body = {}
31
+ body[:state] = state if state
32
+ body[:assigned_to] = assigned_to if assigned_to
33
+ body[:work_notes] = work_notes if work_notes
34
+ resp = connection(**).patch("/api/now/table/sc_task/#{sys_id}", body)
35
+ { catalog_task: resp.body['result'] }
36
+ end
37
+
38
+ def close_catalog_task(sys_id:, close_notes:, **)
39
+ body = { state: '3', close_notes: close_notes }
40
+ resp = connection(**).patch("/api/now/table/sc_task/#{sys_id}", body)
41
+ { catalog_task: resp.body['result'] }
42
+ end
43
+
44
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
45
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -65,18 +65,18 @@ module Legion
65
65
  { deleted: resp.status == 204, id: id }
66
66
  end
67
67
 
68
- def list_tasks(id:, **)
68
+ def list_change_tasks(id:, **)
69
69
  resp = connection(**).get("/api/sn_chg_rest/change/#{id}/task")
70
70
  { tasks: resp.body['result'] }
71
71
  end
72
72
 
73
- def create_task(id:, short_description:, **)
73
+ def create_change_task(id:, short_description:, **)
74
74
  body = { short_description: short_description }
75
75
  resp = connection(**).post("/api/sn_chg_rest/change/#{id}/task", body)
76
76
  { task: resp.body['result'] }
77
77
  end
78
78
 
79
- def update_task(id:, task_id:, short_description: nil, state: nil, assigned_to: nil, **)
79
+ def update_change_task(id:, task_id:, short_description: nil, state: nil, assigned_to: nil, **)
80
80
  body = {}
81
81
  body[:short_description] = short_description if short_description
82
82
  body[:state] = state if state
@@ -85,7 +85,7 @@ module Legion
85
85
  { task: resp.body['result'] }
86
86
  end
87
87
 
88
- def delete_task(id:, task_id:, **)
88
+ def delete_change_task(id:, task_id:, **)
89
89
  resp = connection(**).delete("/api/sn_chg_rest/change/#{id}/task/#{task_id}")
90
90
  { deleted: resp.status == 204, task_id: task_id }
91
91
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module CiRelationship
7
+ module Runners
8
+ module CiRelationship
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_relationship_types(sysparm_limit: 100, sysparm_offset: 0, **)
12
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
13
+ resp = connection(**).get('/api/now/table/cmdb_rel_type', params)
14
+ { relationship_types: resp.body['result'] }
15
+ end
16
+
17
+ def get_relationship_type(sys_id:, **)
18
+ resp = connection(**).get("/api/now/table/cmdb_rel_type/#{sys_id}")
19
+ { relationship_type: resp.body['result'] }
20
+ end
21
+
22
+ def list_ci_relationships(sysparm_limit: 100, sysparm_offset: 0,
23
+ parent: nil, child: nil, sysparm_query: nil, **)
24
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
25
+ query_parts = []
26
+ query_parts << "parent=#{parent}" if parent
27
+ query_parts << "child=#{child}" if child
28
+ query_parts << sysparm_query if sysparm_query
29
+ params[:sysparm_query] = query_parts.join('^') unless query_parts.empty?
30
+ resp = connection(**).get('/api/now/table/cmdb_rel_ci', params)
31
+ { relationships: resp.body['result'] }
32
+ end
33
+
34
+ def create_ci_relationship(parent:, child:, type:, **)
35
+ body = { parent: parent, child: child, type: type }
36
+ resp = connection(**).post('/api/now/table/cmdb_rel_ci', body)
37
+ { relationship: resp.body['result'] }
38
+ end
39
+
40
+ def delete_ci_relationship(sys_id:, **)
41
+ resp = connection(**).delete("/api/now/table/cmdb_rel_ci/#{sys_id}")
42
+ { deleted: resp.status == 204, sys_id: sys_id }
43
+ end
44
+
45
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
46
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -5,6 +5,8 @@ module Legion
5
5
  module ServiceNow
6
6
  class Client
7
7
  include Helpers::Client
8
+ include Helpers::Pagination
9
+ include Helpers::Retry
8
10
  include Change::Runners::Change
9
11
  include Cmdb::Instance::Runners::Instance
10
12
  include Cmdb::Meta::Runners::Meta
@@ -51,6 +53,22 @@ module Legion
51
53
  include MidServer::Runners::MidServer
52
54
  include CatalogVariable::Runners::CatalogVariable
53
55
  include Workflow::Runners::Workflow
56
+ include Vendor::Runners::Vendor
57
+ include CiRelationship::Runners::CiRelationship
58
+ include ScriptAction::Runners::ScriptAction
59
+ include UiPolicy::Runners::UiPolicy
60
+ include UiAction::Runners::UiAction
61
+ include AccessControl::Runners::AccessControl
62
+ include CatalogTask::Runners::CatalogTask
63
+ include KnowledgeBase::Runners::KnowledgeBase
64
+ include Tag::Runners::Tag
65
+ include Metric::Runners::Metric
66
+ include Currency::Runners::Currency
67
+ include Calendar::Runners::Calendar
68
+ include KnowledgeFeedback::Runners::KnowledgeFeedback
69
+ include License::Runners::License
70
+ include DeprecationLog::Runners::DeprecationLog
71
+ include CmdbHealth::Runners::CmdbHealth
54
72
 
55
73
  attr_reader :opts
56
74
 
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module CmdbHealth
7
+ module Runners
8
+ module CmdbHealth
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_health_rules(sysparm_limit: 100, sysparm_offset: 0, **)
12
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
13
+ resp = connection(**).get('/api/now/table/sa_m2m_suggested_relationship', params)
14
+ { health_rules: resp.body['result'] }
15
+ end
16
+
17
+ def get_cmdb_health_dashboard(**)
18
+ resp = connection(**).get('/api/now/cmdb/health_dashboard')
19
+ { dashboard: resp.body['result'] }
20
+ end
21
+
22
+ def list_duplicate_cis(class_name:, sysparm_limit: 100, **)
23
+ params = {
24
+ sysparm_query: "sys_class_name=#{class_name}",
25
+ sysparm_limit: sysparm_limit
26
+ }
27
+ resp = connection(**).get('/api/now/table/cmdb_duplicate', params)
28
+ { duplicates: resp.body['result'] }
29
+ end
30
+
31
+ def list_stale_cis(class_name:, days_since_discovery: 30, **)
32
+ cutoff = (::Time.now - (days_since_discovery * 86_400)).strftime('%Y-%m-%d %H:%M:%S')
33
+ params = {
34
+ sysparm_query: "sys_class_name=#{class_name}^last_discovered<#{cutoff}",
35
+ sysparm_limit: 100
36
+ }
37
+ resp = connection(**).get('/api/now/table/cmdb_ci', params)
38
+ { stale_cis: resp.body['result'] }
39
+ end
40
+
41
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
42
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Currency
7
+ module Runners
8
+ module Currency
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_currencies(sysparm_limit: 100, sysparm_offset: 0, **)
12
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
13
+ resp = connection(**).get('/api/now/table/fx_currency', params)
14
+ { currencies: resp.body['result'] }
15
+ end
16
+
17
+ def get_currency(sys_id:, **)
18
+ resp = connection(**).get("/api/now/table/fx_currency/#{sys_id}")
19
+ { currency: resp.body['result'] }
20
+ end
21
+
22
+ def list_exchange_rates(from_currency: nil, to_currency: nil,
23
+ sysparm_limit: 100, **)
24
+ params = { sysparm_limit: sysparm_limit }
25
+ query_parts = []
26
+ query_parts << "from_cur=#{from_currency}" if from_currency
27
+ query_parts << "to_cur=#{to_currency}" if to_currency
28
+ params[:sysparm_query] = query_parts.join('^') unless query_parts.empty?
29
+ resp = connection(**).get('/api/now/table/fx_rate', params)
30
+ { exchange_rates: resp.body['result'] }
31
+ end
32
+
33
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
34
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module DeprecationLog
7
+ module Runners
8
+ module DeprecationLog
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_upgrade_logs(sysparm_limit: 100, sysparm_offset: 0, **)
12
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
13
+ resp = connection(**).get('/api/now/table/sys_upgrade_history', params)
14
+ { upgrade_logs: resp.body['result'] }
15
+ end
16
+
17
+ def get_upgrade_log(sys_id:, **)
18
+ resp = connection(**).get("/api/now/table/sys_upgrade_history/#{sys_id}")
19
+ { upgrade_log: resp.body['result'] }
20
+ end
21
+
22
+ def list_upgrade_skips(sysparm_limit: 100, **)
23
+ params = { sysparm_limit: sysparm_limit }
24
+ resp = connection(**).get('/api/now/table/sys_upgrade_skip', params)
25
+ { upgrade_skips: resp.body['result'] }
26
+ end
27
+
28
+ def list_deprecation_entries(sysparm_limit: 100, sysparm_offset: 0,
29
+ sysparm_query: nil, **)
30
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
31
+ params[:sysparm_query] = sysparm_query if sysparm_query
32
+ resp = connection(**).get('/api/now/table/sys_deprecation_log', params)
33
+ { deprecation_entries: resp.body['result'] }
34
+ end
35
+
36
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
37
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Errors
7
+ class ServiceNowError < StandardError
8
+ attr_reader :status, :detail
9
+
10
+ def initialize(message, status: nil, detail: nil)
11
+ super(message)
12
+ @status = status
13
+ @detail = detail
14
+ end
15
+ end
16
+
17
+ class AuthenticationError < ServiceNowError; end
18
+ class AuthorizationError < ServiceNowError; end
19
+ class NotFoundError < ServiceNowError; end
20
+ class UnprocessableError < ServiceNowError; end
21
+ class RateLimitError < ServiceNowError; end
22
+ class ServerError < ServiceNowError; end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -38,6 +38,38 @@ module Legion
38
38
  resp.body['access_token']
39
39
  end
40
40
  end
41
+
42
+ def handle_response(resp)
43
+ case resp.status
44
+ when 200, 201, 202, 204
45
+ resp
46
+ when 401
47
+ raise Errors::AuthenticationError.new(error_message(resp), status: 401, detail: resp.body)
48
+ when 403
49
+ raise Errors::AuthorizationError.new(error_message(resp), status: 403, detail: resp.body)
50
+ when 404
51
+ raise Errors::NotFoundError.new(error_message(resp), status: 404, detail: resp.body)
52
+ when 422
53
+ raise Errors::UnprocessableError.new(error_message(resp), status: 422, detail: resp.body)
54
+ when 429
55
+ raise Errors::RateLimitError.new(error_message(resp), status: 429, detail: resp.body)
56
+ when 500..599
57
+ raise Errors::ServerError.new(error_message(resp), status: resp.status, detail: resp.body)
58
+ else
59
+ raise Errors::ServiceNowError.new(error_message(resp), status: resp.status, detail: resp.body)
60
+ end
61
+ end
62
+
63
+ private
64
+
65
+ def error_message(resp)
66
+ body = resp.body
67
+ return "ServiceNow error (#{resp.status})" unless body.is_a?(Hash)
68
+
69
+ msg = body.dig('error', 'message') || body.dig('error', 'detail') ||
70
+ body['error'] || body['message'] || "ServiceNow error (#{resp.status})"
71
+ msg.to_s
72
+ end
41
73
  end
42
74
  end
43
75
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Helpers
7
+ module Pagination
8
+ def paginate(method_name, **opts)
9
+ results = []
10
+ offset = 0
11
+ limit = opts.fetch(:sysparm_limit, 100)
12
+
13
+ loop do
14
+ response = public_send(method_name, **opts, sysparm_limit: limit, sysparm_offset: offset)
15
+ key = response.keys.first
16
+ batch = response[key]
17
+ break if batch.nil? || batch.empty?
18
+
19
+ results.concat(batch)
20
+ break if batch.size < limit
21
+
22
+ offset += limit
23
+ end
24
+
25
+ results
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Helpers
7
+ module Retry
8
+ MAX_RETRIES = 3
9
+ BASE_DELAY = 1.0
10
+
11
+ def with_retry(max_retries: MAX_RETRIES)
12
+ attempts = 0
13
+ begin
14
+ attempts += 1
15
+ yield
16
+ rescue Errors::RateLimitError => e
17
+ raise e if attempts >= max_retries
18
+
19
+ sleep(BASE_DELAY * (2**(attempts - 1)))
20
+ retry
21
+ rescue Errors::ServerError => e
22
+ raise e if attempts >= max_retries
23
+
24
+ sleep(BASE_DELAY)
25
+ retry
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module KnowledgeBase
7
+ module Runners
8
+ module KnowledgeBase
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_knowledge_bases(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = sysparm_query if sysparm_query
15
+ resp = connection(**).get('/api/now/table/kb_knowledge_base', params)
16
+ { knowledge_bases: resp.body['result'] }
17
+ end
18
+
19
+ def get_knowledge_base(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/kb_knowledge_base/#{sys_id}")
21
+ { knowledge_base: resp.body['result'] }
22
+ end
23
+
24
+ def create_knowledge_base(title:, description: nil, owner: nil,
25
+ active: true, **)
26
+ body = { title: title, active: active }
27
+ body[:description] = description if description
28
+ body[:owner] = owner if owner
29
+ resp = connection(**).post('/api/now/table/kb_knowledge_base', body)
30
+ { knowledge_base: resp.body['result'] }
31
+ end
32
+
33
+ def update_knowledge_base(sys_id:, title: nil, description: nil,
34
+ active: nil, **)
35
+ body = {}
36
+ body[:title] = title if title
37
+ body[:description] = description if description
38
+ body[:active] = active unless active.nil?
39
+ resp = connection(**).patch("/api/now/table/kb_knowledge_base/#{sys_id}", body)
40
+ { knowledge_base: resp.body['result'] }
41
+ end
42
+
43
+ def delete_knowledge_base(sys_id:, **)
44
+ resp = connection(**).delete("/api/now/table/kb_knowledge_base/#{sys_id}")
45
+ { deleted: resp.status == 204, sys_id: sys_id }
46
+ end
47
+
48
+ def list_kb_categories(knowledge_base_sys_id:, sysparm_limit: 100, **)
49
+ params = {
50
+ sysparm_query: "kb_knowledge_base=#{knowledge_base_sys_id}",
51
+ sysparm_limit: sysparm_limit
52
+ }
53
+ resp = connection(**).get('/api/now/table/kb_category', params)
54
+ { categories: resp.body['result'] }
55
+ end
56
+
57
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
58
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module KnowledgeFeedback
7
+ module Runners
8
+ module KnowledgeFeedback
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_knowledge_feedback(sysparm_limit: 100, sysparm_offset: 0,
12
+ article: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = "article=#{article}" if article
15
+ resp = connection(**).get('/api/now/table/kb_feedback', params)
16
+ { feedback: resp.body['result'] }
17
+ end
18
+
19
+ def get_knowledge_feedback(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/kb_feedback/#{sys_id}")
21
+ { feedback: resp.body['result'] }
22
+ end
23
+
24
+ def create_knowledge_feedback(article:, rating:, comments: nil, **)
25
+ body = { article: article, rating: rating }
26
+ body[:comments] = comments if comments
27
+ resp = connection(**).post('/api/now/table/kb_feedback', body)
28
+ { feedback: resp.body['result'] }
29
+ end
30
+
31
+ def list_knowledge_views(article: nil, sysparm_limit: 100, **)
32
+ params = { sysparm_limit: sysparm_limit }
33
+ params[:sysparm_query] = "article=#{article}" if article
34
+ resp = connection(**).get('/api/now/table/kb_view', params)
35
+ { views: resp.body['result'] }
36
+ end
37
+
38
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
39
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module License
7
+ module Runners
8
+ module License
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_licenses(sysparm_limit: 100, sysparm_offset: 0, **)
12
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
13
+ resp = connection(**).get('/api/now/table/license_agreement', params)
14
+ { licenses: resp.body['result'] }
15
+ end
16
+
17
+ def get_license(sys_id:, **)
18
+ resp = connection(**).get("/api/now/table/license_agreement/#{sys_id}")
19
+ { license: resp.body['result'] }
20
+ end
21
+
22
+ def list_license_allocations(license_sys_id: nil, sysparm_limit: 100, **)
23
+ params = { sysparm_limit: sysparm_limit }
24
+ params[:sysparm_query] = "license_agreement=#{license_sys_id}" if license_sys_id
25
+ resp = connection(**).get('/api/now/table/license_allocation', params)
26
+ { allocations: resp.body['result'] }
27
+ end
28
+
29
+ def list_installed_software(sysparm_limit: 100, sysparm_offset: 0,
30
+ sysparm_query: nil, **)
31
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
32
+ params[:sysparm_query] = sysparm_query if sysparm_query
33
+ resp = connection(**).get('/api/now/table/cmdb_sam_sw_install', params)
34
+ { installations: resp.body['result'] }
35
+ end
36
+
37
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
38
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Metric
7
+ module Runners
8
+ module Metric
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_metric_definitions(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = sysparm_query if sysparm_query
15
+ resp = connection(**).get('/api/now/table/metric_definition', params)
16
+ { metric_definitions: resp.body['result'] }
17
+ end
18
+
19
+ def get_metric_definition(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/metric_definition/#{sys_id}")
21
+ { metric_definition: resp.body['result'] }
22
+ end
23
+
24
+ def list_metric_instances(metric_sys_id: nil, table: nil,
25
+ sysparm_limit: 100, sysparm_offset: 0, **)
26
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
27
+ query_parts = []
28
+ query_parts << "metric_definition=#{metric_sys_id}" if metric_sys_id
29
+ query_parts << "table=#{table}" if table
30
+ params[:sysparm_query] = query_parts.join('^') unless query_parts.empty?
31
+ resp = connection(**).get('/api/now/table/metric_instance', params)
32
+ { metric_instances: resp.body['result'] }
33
+ end
34
+
35
+ def get_metric_instance(sys_id:, **)
36
+ resp = connection(**).get("/api/now/table/metric_instance/#{sys_id}")
37
+ { metric_instance: resp.body['result'] }
38
+ end
39
+
40
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
41
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module ScriptAction
7
+ module Runners
8
+ module ScriptAction
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_script_actions(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = sysparm_query if sysparm_query
15
+ resp = connection(**).get('/api/now/table/sysevent_script_action', params)
16
+ { script_actions: resp.body['result'] }
17
+ end
18
+
19
+ def get_script_action(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/sysevent_script_action/#{sys_id}")
21
+ { script_action: resp.body['result'] }
22
+ end
23
+
24
+ def create_script_action(name:, event_name:, script:, active: true, **)
25
+ body = { name: name, event_name: event_name, script: script, active: active }
26
+ resp = connection(**).post('/api/now/table/sysevent_script_action', body)
27
+ { script_action: resp.body['result'] }
28
+ end
29
+
30
+ def update_script_action(sys_id:, script: nil, active: nil, **)
31
+ body = {}
32
+ body[:script] = script if script
33
+ body[:active] = active unless active.nil?
34
+ resp = connection(**).patch("/api/now/table/sysevent_script_action/#{sys_id}", body)
35
+ { script_action: resp.body['result'] }
36
+ end
37
+
38
+ def delete_script_action(sys_id:, **)
39
+ resp = connection(**).delete("/api/now/table/sysevent_script_action/#{sys_id}")
40
+ { deleted: resp.status == 204, sys_id: sys_id }
41
+ end
42
+
43
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
44
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -30,12 +30,14 @@ module Legion
30
30
  end
31
31
 
32
32
  def table_create(table_name:, **fields)
33
- resp = connection(**fields).post("/api/now/table/#{table_name}", fields)
33
+ body = fields.except(:url, :client_id, :client_secret, :token, :username, :password)
34
+ resp = connection(**fields).post("/api/now/table/#{table_name}", body)
34
35
  { record: resp.body['result'] }
35
36
  end
36
37
 
37
38
  def table_update(table_name:, sys_id:, **fields)
38
- resp = connection(**fields).patch("/api/now/table/#{table_name}/#{sys_id}", fields)
39
+ body = fields.except(:url, :client_id, :client_secret, :token, :username, :password, :sys_id)
40
+ resp = connection(**fields).patch("/api/now/table/#{table_name}/#{sys_id}", body)
39
41
  { record: resp.body['result'] }
40
42
  end
41
43
 
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Tag
7
+ module Runners
8
+ module Tag
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_tags(sysparm_limit: 100, sysparm_offset: 0, sysparm_query: nil, **)
12
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
13
+ params[:sysparm_query] = sysparm_query if sysparm_query
14
+ resp = connection(**).get('/api/now/table/label', params)
15
+ { tags: resp.body['result'] }
16
+ end
17
+
18
+ def get_tag(sys_id:, **)
19
+ resp = connection(**).get("/api/now/table/label/#{sys_id}")
20
+ { tag: resp.body['result'] }
21
+ end
22
+
23
+ def create_tag(name:, color: nil, **)
24
+ body = { name: name }
25
+ body[:color] = color if color
26
+ resp = connection(**).post('/api/now/table/label', body)
27
+ { tag: resp.body['result'] }
28
+ end
29
+
30
+ def delete_tag(sys_id:, **)
31
+ resp = connection(**).delete("/api/now/table/label/#{sys_id}")
32
+ { deleted: resp.status == 204, sys_id: sys_id }
33
+ end
34
+
35
+ def list_tagged_records(tag_sys_id:, table_name: nil, sysparm_limit: 100, **)
36
+ query = "label=#{tag_sys_id}"
37
+ query += "^table=#{table_name}" if table_name
38
+ params = { sysparm_query: query, sysparm_limit: sysparm_limit }
39
+ resp = connection(**).get('/api/now/table/label_entry', params)
40
+ { tagged_records: resp.body['result'] }
41
+ end
42
+
43
+ def add_tag_to_record(tag_sys_id:, table_name:, record_sys_id:, **)
44
+ body = { label: tag_sys_id, table: table_name, id_display: record_sys_id }
45
+ resp = connection(**).post('/api/now/table/label_entry', body)
46
+ { tag_entry: resp.body['result'] }
47
+ end
48
+
49
+ def remove_tag_from_record(tag_entry_sys_id:, **)
50
+ resp = connection(**).delete("/api/now/table/label_entry/#{tag_entry_sys_id}")
51
+ { deleted: resp.status == 204, sys_id: tag_entry_sys_id }
52
+ end
53
+
54
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
55
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module UiAction
7
+ module Runners
8
+ module UiAction
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_ui_actions(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = sysparm_query if sysparm_query
15
+ resp = connection(**).get('/api/now/table/sys_ui_action', params)
16
+ { ui_actions: resp.body['result'] }
17
+ end
18
+
19
+ def get_ui_action(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/sys_ui_action/#{sys_id}")
21
+ { ui_action: resp.body['result'] }
22
+ end
23
+
24
+ def create_ui_action(name:, table:, script:, action_type: 'button',
25
+ active: true, **)
26
+ body = { name: name, table: table, script: script,
27
+ action_type: action_type, active: active }
28
+ resp = connection(**).post('/api/now/table/sys_ui_action', body)
29
+ { ui_action: resp.body['result'] }
30
+ end
31
+
32
+ def update_ui_action(sys_id:, script: nil, active: nil, name: nil, **)
33
+ body = {}
34
+ body[:script] = script if script
35
+ body[:active] = active unless active.nil?
36
+ body[:name] = name if name
37
+ resp = connection(**).patch("/api/now/table/sys_ui_action/#{sys_id}", body)
38
+ { ui_action: resp.body['result'] }
39
+ end
40
+
41
+ def delete_ui_action(sys_id:, **)
42
+ resp = connection(**).delete("/api/now/table/sys_ui_action/#{sys_id}")
43
+ { deleted: resp.status == 204, sys_id: sys_id }
44
+ end
45
+
46
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
47
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module UiPolicy
7
+ module Runners
8
+ module UiPolicy
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_ui_policies(sysparm_limit: 100, sysparm_offset: 0,
12
+ sysparm_query: nil, **)
13
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
14
+ params[:sysparm_query] = sysparm_query if sysparm_query
15
+ resp = connection(**).get('/api/now/table/sys_ui_policy', params)
16
+ { ui_policies: resp.body['result'] }
17
+ end
18
+
19
+ def get_ui_policy(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/sys_ui_policy/#{sys_id}")
21
+ { ui_policy: resp.body['result'] }
22
+ end
23
+
24
+ def create_ui_policy(table:, short_description:, script: nil, active: true, **)
25
+ body = { table: table, short_description: short_description, active: active }
26
+ body[:script] = script if script
27
+ resp = connection(**).post('/api/now/table/sys_ui_policy', body)
28
+ { ui_policy: resp.body['result'] }
29
+ end
30
+
31
+ def update_ui_policy(sys_id:, active: nil, script: nil, **)
32
+ body = {}
33
+ body[:active] = active unless active.nil?
34
+ body[:script] = script if script
35
+ resp = connection(**).patch("/api/now/table/sys_ui_policy/#{sys_id}", body)
36
+ { ui_policy: resp.body['result'] }
37
+ end
38
+
39
+ def delete_ui_policy(sys_id:, **)
40
+ resp = connection(**).delete("/api/now/table/sys_ui_policy/#{sys_id}")
41
+ { deleted: resp.status == 204, sys_id: sys_id }
42
+ end
43
+
44
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
45
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module ServiceNow
6
+ module Vendor
7
+ module Runners
8
+ module Vendor
9
+ include Legion::Extensions::ServiceNow::Helpers::Client
10
+
11
+ def list_vendors(sysparm_limit: 100, sysparm_offset: 0, sysparm_query: nil, **)
12
+ params = { sysparm_limit: sysparm_limit, sysparm_offset: sysparm_offset }
13
+ params[:sysparm_query] = sysparm_query if sysparm_query
14
+ resp = connection(**).get('/api/now/table/core_company',
15
+ params.merge(sysparm_query: build_vendor_query(sysparm_query)))
16
+ { vendors: resp.body['result'] }
17
+ end
18
+
19
+ def get_vendor(sys_id:, **)
20
+ resp = connection(**).get("/api/now/table/core_company/#{sys_id}")
21
+ { vendor: resp.body['result'] }
22
+ end
23
+
24
+ def create_vendor(name:, phone: nil, website: nil, vendor_type: nil, **)
25
+ body = { name: name, vendor: true }
26
+ body[:phone] = phone if phone
27
+ body[:website] = website if website
28
+ body[:vendor_type] = vendor_type if vendor_type
29
+ resp = connection(**).post('/api/now/table/core_company', body)
30
+ { vendor: resp.body['result'] }
31
+ end
32
+
33
+ def update_vendor(sys_id:, name: nil, phone: nil, website: nil, **)
34
+ body = {}
35
+ body[:name] = name if name
36
+ body[:phone] = phone if phone
37
+ body[:website] = website if website
38
+ resp = connection(**).patch("/api/now/table/core_company/#{sys_id}", body)
39
+ { vendor: resp.body['result'] }
40
+ end
41
+
42
+ def delete_vendor(sys_id:, **)
43
+ resp = connection(**).delete("/api/now/table/core_company/#{sys_id}")
44
+ { deleted: resp.status == 204, sys_id: sys_id }
45
+ end
46
+
47
+ private
48
+
49
+ def build_vendor_query(extra_query)
50
+ base = 'vendor=true'
51
+ extra_query ? "#{base}^#{extra_query}" : base
52
+ end
53
+
54
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers, false) &&
55
+ Legion::Extensions::Helpers.const_defined?(:Lex, false)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module ServiceNow
6
- VERSION = '0.2.0'
6
+ VERSION = '0.3.0'
7
7
  end
8
8
  end
9
9
  end
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'legion/extensions/service_now/version'
4
+ require 'legion/extensions/service_now/errors'
4
5
  require 'legion/extensions/service_now/helpers/client'
6
+ require 'legion/extensions/service_now/helpers/pagination'
7
+ require 'legion/extensions/service_now/helpers/retry'
5
8
 
6
9
  require 'legion/extensions/service_now/change/runners/change'
7
10
  require 'legion/extensions/service_now/cmdb/instance/runners/instance'
@@ -49,6 +52,22 @@ require 'legion/extensions/service_now/discovery/runners/discovery'
49
52
  require 'legion/extensions/service_now/mid_server/runners/mid_server'
50
53
  require 'legion/extensions/service_now/catalog_variable/runners/catalog_variable'
51
54
  require 'legion/extensions/service_now/workflow/runners/workflow'
55
+ require 'legion/extensions/service_now/vendor/runners/vendor'
56
+ require 'legion/extensions/service_now/ci_relationship/runners/ci_relationship'
57
+ require 'legion/extensions/service_now/script_action/runners/script_action'
58
+ require 'legion/extensions/service_now/ui_policy/runners/ui_policy'
59
+ require 'legion/extensions/service_now/ui_action/runners/ui_action'
60
+ require 'legion/extensions/service_now/access_control/runners/access_control'
61
+ require 'legion/extensions/service_now/catalog_task/runners/catalog_task'
62
+ require 'legion/extensions/service_now/knowledge_base/runners/knowledge_base'
63
+ require 'legion/extensions/service_now/tag/runners/tag'
64
+ require 'legion/extensions/service_now/metric/runners/metric'
65
+ require 'legion/extensions/service_now/currency/runners/currency'
66
+ require 'legion/extensions/service_now/calendar/runners/calendar'
67
+ require 'legion/extensions/service_now/knowledge_feedback/runners/knowledge_feedback'
68
+ require 'legion/extensions/service_now/license/runners/license'
69
+ require 'legion/extensions/service_now/deprecation_log/runners/deprecation_log'
70
+ require 'legion/extensions/service_now/cmdb_health/runners/cmdb_health'
52
71
 
53
72
  require 'legion/extensions/service_now/client'
54
73
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-service_now
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -157,6 +157,7 @@ files:
157
157
  - Rakefile
158
158
  - lex-service_now.gemspec
159
159
  - lib/legion/extensions/service_now.rb
160
+ - lib/legion/extensions/service_now/access_control/runners/access_control.rb
160
161
  - lib/legion/extensions/service_now/account/runners/account.rb
161
162
  - lib/legion/extensions/service_now/aggregate/runners/aggregate.rb
162
163
  - lib/legion/extensions/service_now/approval/runners/approval.rb
@@ -164,25 +165,38 @@ files:
164
165
  - lib/legion/extensions/service_now/attachment/runners/attachment.rb
165
166
  - lib/legion/extensions/service_now/audit/runners/audit.rb
166
167
  - lib/legion/extensions/service_now/business_rule/runners/business_rule.rb
168
+ - lib/legion/extensions/service_now/calendar/runners/calendar.rb
169
+ - lib/legion/extensions/service_now/catalog_task/runners/catalog_task.rb
167
170
  - lib/legion/extensions/service_now/catalog_variable/runners/catalog_variable.rb
168
171
  - lib/legion/extensions/service_now/change/runners/change.rb
172
+ - lib/legion/extensions/service_now/ci_relationship/runners/ci_relationship.rb
169
173
  - lib/legion/extensions/service_now/client.rb
170
174
  - lib/legion/extensions/service_now/cmdb/instance/runners/instance.rb
171
175
  - lib/legion/extensions/service_now/cmdb/meta/runners/meta.rb
176
+ - lib/legion/extensions/service_now/cmdb_health/runners/cmdb_health.rb
172
177
  - lib/legion/extensions/service_now/company/runners/company.rb
173
178
  - lib/legion/extensions/service_now/contract/runners/contract.rb
174
179
  - lib/legion/extensions/service_now/cost_center/runners/cost_center.rb
180
+ - lib/legion/extensions/service_now/currency/runners/currency.rb
175
181
  - lib/legion/extensions/service_now/department/runners/department.rb
182
+ - lib/legion/extensions/service_now/deprecation_log/runners/deprecation_log.rb
176
183
  - lib/legion/extensions/service_now/discovery/runners/discovery.rb
177
184
  - lib/legion/extensions/service_now/email_log/runners/email_log.rb
185
+ - lib/legion/extensions/service_now/errors.rb
178
186
  - lib/legion/extensions/service_now/event/runners/event.rb
179
187
  - lib/legion/extensions/service_now/flow/runners/flow.rb
180
188
  - lib/legion/extensions/service_now/helpers/client.rb
189
+ - lib/legion/extensions/service_now/helpers/pagination.rb
190
+ - lib/legion/extensions/service_now/helpers/retry.rb
181
191
  - lib/legion/extensions/service_now/hr_case/runners/hr_case.rb
182
192
  - lib/legion/extensions/service_now/import_set/runners/import_set.rb
183
193
  - lib/legion/extensions/service_now/incident/runners/incident.rb
184
194
  - lib/legion/extensions/service_now/knowledge/runners/knowledge.rb
195
+ - lib/legion/extensions/service_now/knowledge_base/runners/knowledge_base.rb
196
+ - lib/legion/extensions/service_now/knowledge_feedback/runners/knowledge_feedback.rb
197
+ - lib/legion/extensions/service_now/license/runners/license.rb
185
198
  - lib/legion/extensions/service_now/location/runners/location.rb
199
+ - lib/legion/extensions/service_now/metric/runners/metric.rb
186
200
  - lib/legion/extensions/service_now/mid_server/runners/mid_server.rb
187
201
  - lib/legion/extensions/service_now/notification/runners/notification.rb
188
202
  - lib/legion/extensions/service_now/on_call/runners/on_call.rb
@@ -192,6 +206,7 @@ files:
192
206
  - lib/legion/extensions/service_now/release/runners/release.rb
193
207
  - lib/legion/extensions/service_now/request/runners/request.rb
194
208
  - lib/legion/extensions/service_now/scheduled_job/runners/scheduled_job.rb
209
+ - lib/legion/extensions/service_now/script_action/runners/script_action.rb
195
210
  - lib/legion/extensions/service_now/script_include/runners/script_include.rb
196
211
  - lib/legion/extensions/service_now/security_incident/runners/security_incident.rb
197
212
  - lib/legion/extensions/service_now/service_catalog/runners/service_catalog.rb
@@ -209,10 +224,14 @@ files:
209
224
  - lib/legion/extensions/service_now/survey/runners/survey.rb
210
225
  - lib/legion/extensions/service_now/system_property/runners/system_property.rb
211
226
  - lib/legion/extensions/service_now/table/runners/table.rb
227
+ - lib/legion/extensions/service_now/tag/runners/tag.rb
212
228
  - lib/legion/extensions/service_now/task/runners/task.rb
229
+ - lib/legion/extensions/service_now/ui_action/runners/ui_action.rb
230
+ - lib/legion/extensions/service_now/ui_policy/runners/ui_policy.rb
213
231
  - lib/legion/extensions/service_now/update_set/runners/update_set.rb
214
232
  - lib/legion/extensions/service_now/user/runners/user.rb
215
233
  - lib/legion/extensions/service_now/user_group/runners/user_group.rb
234
+ - lib/legion/extensions/service_now/vendor/runners/vendor.rb
216
235
  - lib/legion/extensions/service_now/version.rb
217
236
  - lib/legion/extensions/service_now/work_order/runners/work_order.rb
218
237
  - lib/legion/extensions/service_now/workflow/runners/workflow.rb