solarwinds-itsm-api-definitions 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a7ea66292b7c9f3019dedc2b63e45fba1a1517501c3d20213b075440091b2ef1
4
+ data.tar.gz: 88c5a8e92f0f4539d98b78aa306798401fdbd9f6f1684a0a60b5efa9b30fa5ba
5
+ SHA512:
6
+ metadata.gz: 2c1bd3454a5d487a990e01608c448ae5b60fa22d138a9c3716809c97bc2c22878427cd504a20edd9a8f4d5dc808b23d472cf51accf5d7c61c3acc744679ed47e
7
+ data.tar.gz: 68d1aa1a5a8a3fad5f53c16e39cba6c2c44065306c04f67d3aaf001e72cbfb117d77b8252ad8a0c2a4d0dedce77a3c1e0d82a5527437e9737b35de3b00729701
@@ -0,0 +1,34 @@
1
+ {
2
+ "components": {
3
+ "parameters": {
4
+ "token_param": {
5
+ "name": "X-Samanage-Authorization",
6
+ "in": "header",
7
+ "schema": { "type": "string" },
8
+ "example": "Bearer TOKEN"
9
+ },
10
+ "id_param": {
11
+ "name": "id",
12
+ "in": "path",
13
+ "schema": { "oneOf": [{ "type": "string" }, { "type": "integer" }] },
14
+ "required": true,
15
+ "description": "Numeric ID of the incident to update"
16
+ }
17
+ },
18
+ "schemas": {
19
+ "association_by_name": {
20
+ "type": "object",
21
+ "oneOf": [{
22
+ "type": "object",
23
+ "properties": {
24
+ "name": { "type": "string", "required": true }
25
+ }
26
+ },
27
+ { "enum": ["nil", "", null] }]
28
+ },
29
+ "association_by_id": {
30
+ "oneOf": [{ "type": "string" }, { "type": "integer" }]
31
+ }
32
+ }
33
+ }
34
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "site": { "$ref": "components.json#/components/schemas/association_by_name" },
3
+ "site_id": { "$ref": "components.json#/components/schemas/association_by_id" },
4
+ "department": { "$ref": "components.json#/components/schemas/association_by_name" },
5
+ "department_id": { "$ref": "components.json#/components/schemas/association_by_id" }
6
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "SolarWinds ITSM API",
5
+ "description": "All SolarWinds ITSM API definitions",
6
+ "version": "0.0.1",
7
+ "contact": {
8
+ "name": "API Support",
9
+ "url": "samanage.com/support",
10
+ "email": "support@samanage.com"
11
+ }
12
+ },
13
+ "servers": [
14
+ { "url": "https://api.samanage.com" },
15
+ { "url": "https://apieu.samanage.com" }
16
+ ],
17
+ "paths": {
18
+ "$ref": "paths/paths.json"
19
+ }
20
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "/incidents/{id}": {
3
+ "put": {
4
+ "operationId": "updateIncidentById",
5
+ "description": "The update API for incidents in JSON",
6
+ "parameters": [
7
+ { "$ref": "../../common/components.json#/components/parameters/token_param" },
8
+ { "$ref": "../../common/components.json#/components/parameters/id_param" }
9
+ ],
10
+ "requestBody": {
11
+ "content": {
12
+ "application/json": {
13
+ "schema": {
14
+ "type": "object",
15
+ "properties": {
16
+ "incident": {
17
+ "type": "object",
18
+ "properties": {
19
+ "$ref": [
20
+ "../../common/sites_and_departments.json"
21
+ ],
22
+ "description": { "type": "string" },
23
+ "state": { "$ref": "../../common/components.json#/components/schemas/association_by_id" },
24
+ "assignee": {
25
+ "type": "object",
26
+ "oneOf": [{
27
+ "type": "object",
28
+ "properties": {
29
+ "email": {
30
+ "type": "string",
31
+ "required": true
32
+ }
33
+ }
34
+ },
35
+ {
36
+ "enum": ["nil", "", null]
37
+ }]
38
+ },
39
+ "assignee_id": { "$ref": "../../common/components.json#/components/schemas/association_by_id" }
40
+ }
41
+ }
42
+ }
43
+ },
44
+ "examples": {
45
+ "0": {
46
+ "value": "{\"incident\":{\"site\":{\"name\":\"SITE-NAME\"},\"department\":{\"name\":\"DEPARTMENT-NAME\"},\"site_id\":SITE-ID,\"department_id\":DEPARTMENT-ID,\"description\":\"SOMEDESCRIPTION\",\"state\":\"SITE-NAME\",\"assignee\":{\"email\":\"EMAIL\"}}}"
47
+ }
48
+ }
49
+ }
50
+ }
51
+ },
52
+ "responses": {
53
+ "200": { "description": "Object was updated correctly" },
54
+ "404": { "description": "Not found" }
55
+ }
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "$ref": [
3
+ "content/incidents.json"
4
+ ]
5
+ }
@@ -0,0 +1 @@
1
+ {"openapi":"3.0.1","info":{"title":"SolarWinds ITSM API","description":"All SolarWinds ITSM API definitions","version":"0.0.1","contact":{"name":"API Support","url":"samanage.com/support","email":"support@samanage.com"}},"servers":[{"url":"https://api.samanage.com"},{"url":"https://apieu.samanage.com"}],"paths":{"/incidents/{id}":{"put":{"operationId":"updateIncidentById","description":"The update API for incidents in JSON","parameters":[{"name":"X-Samanage-Authorization","in":"header","schema":{"type":"string"},"example":"Bearer TOKEN"},{"name":"id","in":"path","schema":{"oneOf":[{"type":"string"},{"type":"integer"}]},"required":true,"description":"Numeric ID of the incident to update"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"incident":{"type":"object","properties":{"site":{"type":"object","oneOf":[{"type":"object","properties":{"name":{"type":"string","required":true}}},{"enum":["nil","",null]}]},"site_id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"department":{"type":"object","oneOf":[{"type":"object","properties":{"name":{"type":"string","required":true}}},{"enum":["nil","",null]}]},"department_id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"description":{"type":"string"},"state":{"oneOf":[{"type":"string"},{"type":"integer"}]},"assignee":{"type":"object","oneOf":[{"type":"object","properties":{"email":{"type":"string","required":true}}},{"enum":["nil","",null]}]},"assignee_id":{"oneOf":[{"type":"string"},{"type":"integer"}]}}}}},"examples":{"0":{"value":"{\"incident\":{\"site\":{\"name\":\"SITE-NAME\"},\"department\":{\"name\":\"DEPARTMENT-NAME\"},\"site_id\":SITE-ID,\"department_id\":DEPARTMENT-ID,\"description\":\"SOMEDESCRIPTION\",\"state\":\"SITE-NAME\",\"assignee\":{\"email\":\"EMAIL\"}}}"}}}}},"responses":{"200":{"description":"Object was updated correctly"},"404":{"description":"Not found"}}}}}}
@@ -0,0 +1,57 @@
1
+ require 'json'
2
+
3
+ module Solarwinds
4
+ module Itsm
5
+ module Api
6
+ module Definitions
7
+ RESOLVED_DIR = 'lib/resolved_schema'
8
+
9
+ def self.base_schema
10
+ path = 'lib/definitions/openapi.json'
11
+ JSON.parse(File.open(path).read)
12
+ end
13
+
14
+ def self.resolved_schema
15
+ recursive_resolve(base_schema, 'lib/definitions')
16
+ end
17
+
18
+ def self.resolved_schema_path
19
+ File.join(RESOLVED_DIR, 'resolved_schema.json')
20
+ end
21
+
22
+ def self.write_resolved_schema(path = RESOLVED_DIR, name = 'resolved_schema.json')
23
+ File.write(File.join(path, name), resolved_schema.to_json)
24
+ end
25
+
26
+ private
27
+
28
+ def self.recursive_resolve(schema, base_uri)
29
+ return schema unless schema.is_a?(Array) || schema.is_a?(Hash)
30
+
31
+ schema.each_with_object({}) do |(key, value), resolved_schema|
32
+ if key == '$ref'
33
+ reference = [*value].each_with_object({}) do |referred_path, result|
34
+ split_path = referred_path.split('#/')
35
+ path_to_file = split_path.first
36
+ path_to_nested_object = split_path.size > 1 ? split_path.last.split('/') : nil
37
+
38
+ path_and_file_name = path_to_file.split(/\/(?!.*\/.*)/)
39
+ new_base_uri = (path_and_file_name.size > 1) ? Pathname.new("#{base_uri}/#{path_and_file_name.first}").cleanpath.to_s : base_uri
40
+ json = JSON.parse(File.open(File.join(new_base_uri, path_and_file_name.last)).read)
41
+ internal_object = path_to_nested_object&.inject(json) { |obj, arg| obj[arg] } || json
42
+ result.merge!(recursive_resolve(internal_object, new_base_uri))
43
+ end
44
+ resolved_schema.merge!(reference)
45
+ elsif value.is_a?(Array)
46
+ resolved_schema[key] = value.map { |v| recursive_resolve(v, base_uri) }
47
+ elsif value.is_a?(Hash)
48
+ resolved_schema[key] = recursive_resolve(value, base_uri)
49
+ else
50
+ resolved_schema[key] = value
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solarwinds-itsm-api-definitions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Goldstein
8
+ - Darth Vader
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2020-05-26 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: SolarWinds ITSM OpenAPI definitions gem
15
+ email: jonsgold@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/definitions/common/components.json
21
+ - lib/definitions/common/sites_and_departments.json
22
+ - lib/definitions/openapi.json
23
+ - lib/definitions/paths/content/incidents.json
24
+ - lib/definitions/paths/paths.json
25
+ - lib/resolved_schema/resolved_schema.json
26
+ - lib/solarwinds/itsm/api/definitions.rb
27
+ homepage: https://rubygems.org/gems/solarwinds-itsm-api-definitions
28
+ licenses:
29
+ - MIT
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubygems_version: 3.0.6
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: OpenAPI definitions
50
+ test_files: []