rs_service_now 0.0.1 → 0.0.3
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 +15 -0
- data/.gitignore +16 -14
- data/Gemfile +4 -4
- data/README.md +11 -3
- data/Rakefile +11 -2
- data/lib/rs_service_now.rb +7 -7
- data/lib/rs_service_now/ci.rb +2 -10
- data/lib/rs_service_now/common.rb +23 -0
- data/lib/rs_service_now/company.rb +2 -10
- data/lib/rs_service_now/record.rb +26 -1
- data/lib/rs_service_now/version.rb +1 -1
- data/spec/helpers.rb +142 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/unit/records_spec.rb +186 -0
- metadata +14 -16
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZWJmYzg5NDk1NTdjMjdkMzBmZmIyYWU2Zjg0YjU5ZjkyMDU1ZTlmMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YjllMTMwMjc2ZmM2ZmI2ZTg2MjRmMjhkYWM1MTk3YjhlZTgyZjkzYQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NjlkNjAzZTExMDNlNzZmOWQ4ZGI3ZDY5M2M4NWE4NmRlMWU5ZDQyNWZlYjg5
|
10
|
+
YjkzNjYzNDAzYTRkM2EzNGNiNGRmODcwMjc1ODE3MGI3NmI3OTY5YWQ4MmVi
|
11
|
+
OGY3MDA3NDk4NzJhMTBkMDc5NGI3MzIwZDMyY2QxZDdkMGMxNTc=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NmQzNzM1OWVjN2JiN2IwZjdkZTU0MDBlMTI3OGZiNzZlODg4OWMyODhjNjM5
|
14
|
+
YTMxMjljM2ZmMTRkZmZkNmVkNjQ2M2QzOGNhMjhhYTdiMWJkZGI2Njk0MmU0
|
15
|
+
ZjAyNzdhN2JiYWFjNTRiMmRkN2Q3ODM4ODkxYzcwOTA5NWRjNjI=
|
data/.gitignore
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
/.bundle/
|
2
|
-
/.yardoc
|
3
|
-
/Gemfile.lock
|
4
|
-
/_yardoc/
|
5
|
-
/coverage/
|
6
|
-
/doc/
|
7
|
-
/pkg/
|
8
|
-
/spec/reports/
|
9
|
-
/tmp/
|
10
|
-
*.bundle
|
11
|
-
*.so
|
12
|
-
*.o
|
13
|
-
*.a
|
14
|
-
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/Gemfile.lock
|
4
|
+
/_yardoc/
|
5
|
+
/coverage/
|
6
|
+
/doc/
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/tmp/
|
10
|
+
*.bundle
|
11
|
+
*.so
|
12
|
+
*.o
|
13
|
+
*.a
|
14
|
+
*.gem
|
15
|
+
mkmf.log
|
16
|
+
/.idea
|
data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in rs_service_now.gemspec
|
4
|
-
gemspec
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in rs_service_now.gemspec
|
4
|
+
gemspec
|
data/README.md
CHANGED
@@ -20,17 +20,25 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
+
```ruby
|
23
24
|
sn = RsServiceNow::Company.new user, password, instance
|
25
|
+
```
|
24
26
|
|
25
27
|
### Retrieve
|
26
|
-
|
28
|
+
Get every field from matching records. This is a quick way to retrieve any number of records, 250 at a time.
|
27
29
|
|
28
|
-
|
30
|
+
Using an encodedQuery. This can be easily retrieved by conducting a search in Service-Now, right clicking the very end of the search string and selecting "Copy query"
|
31
|
+
|
32
|
+
```ruby
|
29
33
|
sn.request :encoded_query => "active=true"
|
34
|
+
```
|
30
35
|
|
31
36
|
### Export
|
32
|
-
|
37
|
+
Retrieve a data export from Service-Now. Should be more efficient than Retrieve as by default it can export 10000 records at a time, instead of 250. This is experimental at the moment that has not been thoroughly tested.
|
38
|
+
|
39
|
+
```ruby
|
33
40
|
sn.export :encoded_query => "active=true"
|
41
|
+
```
|
34
42
|
|
35
43
|
## Contributing
|
36
44
|
|
data/Rakefile
CHANGED
@@ -1,2 +1,11 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
desc "Run the tests"
|
5
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
6
|
+
t.rspec_opts = ['--color', '-f d']
|
7
|
+
t.pattern = 'spec/*/*_spec.rb'
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
task :default => [:spec_prep, :spec, :spec_clean]
|
data/lib/rs_service_now.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
require "rs_service_now
|
3
|
-
|
4
|
-
|
5
|
-
module RsServiceNow
|
6
|
-
|
7
|
-
end
|
1
|
+
[ 'version', 'record', 'common', 'company', 'ci' ].each do |file|
|
2
|
+
require "rs_service_now/#{file}"
|
3
|
+
end
|
4
|
+
|
5
|
+
module RsServiceNow
|
6
|
+
|
7
|
+
end
|
data/lib/rs_service_now/ci.rb
CHANGED
@@ -1,11 +1,3 @@
|
|
1
|
-
class RsServiceNow::Ci < RsServiceNow::
|
2
|
-
|
3
|
-
|
4
|
-
def request encoded_query
|
5
|
-
self._request TABLE, encoded_query
|
6
|
-
end
|
7
|
-
|
8
|
-
def export encoded_query, max_export = 10000
|
9
|
-
self._export TABLE, encoded_query, max_export
|
10
|
-
end
|
1
|
+
class RsServiceNow::Ci < RsServiceNow::Common
|
2
|
+
create_methods 'cmdb_ci'
|
11
3
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class RsServiceNow::Common < RsServiceNow::Record
|
2
|
+
def self.create_methods table
|
3
|
+
define_method('get') do |sys_id|
|
4
|
+
self._get table, sys_id
|
5
|
+
end
|
6
|
+
|
7
|
+
define_method('export') do |encoded_query, max_export = 10000|
|
8
|
+
self._export table, encoded_query, max_export
|
9
|
+
end
|
10
|
+
|
11
|
+
define_method('request') do |encoded_query|
|
12
|
+
self._request table, encoded_query
|
13
|
+
end
|
14
|
+
|
15
|
+
define_method('insert') do |parameters|
|
16
|
+
self._insert table, parameters
|
17
|
+
end
|
18
|
+
|
19
|
+
define_method('update') do |parameters|
|
20
|
+
self._update table, parameters
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,11 +1,3 @@
|
|
1
|
-
class RsServiceNow::Company < RsServiceNow::
|
2
|
-
|
3
|
-
|
4
|
-
def request encoded_query
|
5
|
-
self._request TABLE, encoded_query
|
6
|
-
end
|
7
|
-
|
8
|
-
def export encoded_query, max_export = 10000
|
9
|
-
self._export TABLE, encoded_query, max_export
|
10
|
-
end
|
1
|
+
class RsServiceNow::Company < RsServiceNow::Common
|
2
|
+
create_methods 'core_company'
|
11
3
|
end
|
@@ -4,10 +4,11 @@ require 'active_support/core_ext/hash/conversions'
|
|
4
4
|
|
5
5
|
class RsServiceNow::Record
|
6
6
|
|
7
|
-
def initialize user, password, instance
|
7
|
+
def initialize user, password, instance, proxy = nil
|
8
8
|
@user = user
|
9
9
|
@password = password
|
10
10
|
@url = "https://#{instance}.service-now.com"
|
11
|
+
@proxy = proxy
|
11
12
|
end
|
12
13
|
|
13
14
|
def _request table, encoded_query
|
@@ -67,12 +68,36 @@ class RsServiceNow::Record
|
|
67
68
|
response.hash[:envelope][:body][:get_keys_response]
|
68
69
|
end
|
69
70
|
|
71
|
+
def _get table, sys_id
|
72
|
+
client = setup_client table
|
73
|
+
response = client.call(:get, :message => {:sys_id => sys_id})
|
74
|
+
response.hash[:envelope][:body][:get_response]
|
75
|
+
end
|
76
|
+
|
70
77
|
def setup_client table
|
71
78
|
Savon.client do |globals|
|
72
79
|
globals.wsdl "#{@url}/#{table}.do?WSDL"
|
73
80
|
globals.basic_auth [@user, @password]
|
74
81
|
globals.convert_request_keys_to :none
|
75
82
|
globals.namespace_identifier :u
|
83
|
+
if @proxy
|
84
|
+
globals.proxy @proxy
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def _insert table, parameters
|
90
|
+
client = setup_client table
|
91
|
+
response = client.call(:insert, :message => parameters)
|
92
|
+
response.hash[:envelope][:body][:insert_response][:sys_id]
|
93
|
+
end
|
94
|
+
|
95
|
+
def _update table, parameters
|
96
|
+
if parameters[:sys_id].nil?
|
97
|
+
raise "You must supply the sys_id of the record to update"
|
76
98
|
end
|
99
|
+
|
100
|
+
client = setup_client table
|
101
|
+
client.call(:update, :message => parameters)
|
77
102
|
end
|
78
103
|
end
|
data/spec/helpers.rb
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module ServiceNowHelpers
|
4
|
+
def make_multiple_xml start, max_export
|
5
|
+
xml_doc = Nokogiri::XML(make_record_xml)
|
6
|
+
index_array = (start..(max_export - 1)).to_a
|
7
|
+
(index_array.length - 1).times do |num|
|
8
|
+
xml_doc.at('core_company').add_next_sibling(xml_doc.at('core_company').dup)
|
9
|
+
end
|
10
|
+
|
11
|
+
xml_doc.xpath('//xml/core_company/sys_id').each_with_index do |id, index|
|
12
|
+
id.children = "deadbeefdeadbeefdeadbeefdead#{index_array[index]}"
|
13
|
+
end
|
14
|
+
|
15
|
+
xml_doc.to_xml
|
16
|
+
end
|
17
|
+
|
18
|
+
def make_record_xml
|
19
|
+
<<EOF
|
20
|
+
<xml>
|
21
|
+
<core_company>
|
22
|
+
<apple_icon/>
|
23
|
+
<banner_image/>
|
24
|
+
<banner_text></banner_text>
|
25
|
+
<city/>
|
26
|
+
<color_scheme/>
|
27
|
+
<contact/>
|
28
|
+
<country/>
|
29
|
+
<customer>true</customer>
|
30
|
+
<discount/>
|
31
|
+
<fax_phone/>
|
32
|
+
<fiscal_year/>
|
33
|
+
<lat_long_error/>
|
34
|
+
<latitude/>
|
35
|
+
<longitude/>
|
36
|
+
<manufacturer>false</manufacturer>
|
37
|
+
<market_cap>0</market_cap>
|
38
|
+
<name>ACME</name>
|
39
|
+
<num_employees/>
|
40
|
+
<parent/>
|
41
|
+
<phone/>
|
42
|
+
<primary>false</primary>
|
43
|
+
<profits>0</profits>
|
44
|
+
<publicly_traded>false</publicly_traded>
|
45
|
+
<rank_tier/>
|
46
|
+
<revenue_per_year>0</revenue_per_year>
|
47
|
+
<state/>
|
48
|
+
<stock_price/>
|
49
|
+
<stock_symbol/>
|
50
|
+
<street/>
|
51
|
+
<sys_created_by>acme_administrator</sys_created_by>
|
52
|
+
<sys_created_on>2015-02-01 22:52:00</sys_created_on>
|
53
|
+
<sys_domain_number>3.14</sys_domain_number>
|
54
|
+
<sys_id>deadbeefdeadbeefdeadbeefdeadbeef</sys_id>
|
55
|
+
<sys_mod_count>28</sys_mod_count>
|
56
|
+
<sys_updated_by>acme_administrator</sys_updated_by>
|
57
|
+
<sys_updated_on>2015-02-01 22:52:00</sys_updated_on>
|
58
|
+
<theme/>
|
59
|
+
<vendor>false</vendor>
|
60
|
+
<vendor_manager/>
|
61
|
+
<vendor_type/>
|
62
|
+
<website/>
|
63
|
+
<zip/>
|
64
|
+
</core_company>
|
65
|
+
</xml>
|
66
|
+
EOF
|
67
|
+
end
|
68
|
+
|
69
|
+
def make_record_hash suffix = "beef"
|
70
|
+
{
|
71
|
+
"apple_icon"=>nil,
|
72
|
+
"banner_image"=>nil,
|
73
|
+
"banner_text"=>nil,
|
74
|
+
"city"=>nil,
|
75
|
+
"color_scheme"=>nil,
|
76
|
+
"contact"=>nil,
|
77
|
+
"country"=>nil,
|
78
|
+
"customer"=>"true",
|
79
|
+
"discount"=>nil,
|
80
|
+
"fax_phone"=>nil,
|
81
|
+
"fiscal_year"=>nil,
|
82
|
+
"lat_long_error"=>nil,
|
83
|
+
"latitude"=>nil,
|
84
|
+
"longitude"=>nil,
|
85
|
+
"manufacturer"=>"false",
|
86
|
+
"market_cap"=>"0",
|
87
|
+
"name"=>"ACME",
|
88
|
+
"num_employees"=>nil,
|
89
|
+
"parent"=>nil,
|
90
|
+
"phone"=>nil,
|
91
|
+
"primary"=>"false",
|
92
|
+
"profits"=>"0",
|
93
|
+
"publicly_traded"=>"false",
|
94
|
+
"rank_tier"=>nil,
|
95
|
+
"revenue_per_year"=>"0",
|
96
|
+
"state"=>nil,
|
97
|
+
"stock_price"=>nil,
|
98
|
+
"stock_symbol"=>nil,
|
99
|
+
"street"=>nil,
|
100
|
+
"sys_created_by"=>"acme_administrator",
|
101
|
+
"sys_created_on"=>"2015-02-01 22:52:00",
|
102
|
+
"sys_domain_number"=>"3.14",
|
103
|
+
"sys_id"=>"deadbeefdeadbeefdeadbeefdead#{suffix}",
|
104
|
+
"sys_mod_count"=>"28",
|
105
|
+
"sys_updated_by"=>"acme_administrator",
|
106
|
+
"sys_updated_on"=>"2015-02-01 22:52:00",
|
107
|
+
"theme"=>nil,
|
108
|
+
"vendor"=>"false",
|
109
|
+
"vendor_manager"=>nil,
|
110
|
+
"vendor_type"=>nil,
|
111
|
+
"website"=>nil,
|
112
|
+
"zip"=>nil
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
def make_insert_response_xml
|
117
|
+
<<EOF
|
118
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:inc="http://www.service-now.com/incident">
|
119
|
+
<soapenv:Header/>
|
120
|
+
<soapenv:Body>
|
121
|
+
<inc:insertResponse>
|
122
|
+
<inc:sys_id>deadbeefdeadbeefdeadbeefdeadbeef</inc:sys_id>
|
123
|
+
<inc:number>1</inc:number>
|
124
|
+
</inc:insertResponse>
|
125
|
+
</soapenv:Body>
|
126
|
+
</soapenv:Envelope>
|
127
|
+
EOF
|
128
|
+
end
|
129
|
+
|
130
|
+
def make_insert_response_hash
|
131
|
+
{
|
132
|
+
:envelope => {
|
133
|
+
:body => {
|
134
|
+
:insert_response => {
|
135
|
+
:sys_id => "deadbeefdeadbeefdeadbeefdeadbeef",
|
136
|
+
:number => 1,
|
137
|
+
}
|
138
|
+
}
|
139
|
+
}
|
140
|
+
}
|
141
|
+
end
|
142
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RsServiceNow
|
4
|
+
describe Record do
|
5
|
+
let(:subject) { RsServiceNow::Record.new "user", "supersekrit", "reporting" }
|
6
|
+
let(:max_export) { 100 }
|
7
|
+
let(:single_record_hash) { make_record_hash }
|
8
|
+
let(:single_record_xml) { make_record_xml }
|
9
|
+
let(:encoded_query) { 'active=true' }
|
10
|
+
|
11
|
+
describe '#_request' do
|
12
|
+
let(:dummy_client) { Object.new }
|
13
|
+
let(:dummy_response) { Object.new }
|
14
|
+
let(:multi_record_hash) { (0..251).collect { single_record_hash } }
|
15
|
+
|
16
|
+
before :each do
|
17
|
+
allow( subject ).to receive(:setup_client).and_return(dummy_client)
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'single result' do
|
21
|
+
let(:dummy_response_hash) { {:envelope => {:body => {:get_records_response => {:get_records_result => single_record_hash } } } } }
|
22
|
+
|
23
|
+
before :each do
|
24
|
+
allow( subject ).to receive(:get_keys).and_return({:count => "1"})
|
25
|
+
allow( dummy_response ).to receive(:hash).and_return(dummy_response_hash)
|
26
|
+
allow( dummy_client ).to receive(:call).and_return(dummy_response)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should return an array with one hash' do
|
30
|
+
expect( subject._request 'core_company', encoded_query ).to be == [single_record_hash]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'multiple results' do
|
35
|
+
let(:dummy_response_hash) { {:envelope => {:body => {:get_records_response => {:get_records_result => multi_record_hash } } } } }
|
36
|
+
|
37
|
+
before :each do
|
38
|
+
allow( subject ).to receive(:get_keys).and_return({:count => "251"})
|
39
|
+
allow( dummy_response ).to receive(:hash).and_return(dummy_response_hash)
|
40
|
+
allow( dummy_client ).to receive(:call).and_return(dummy_response)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should get records 250 at a time' do
|
44
|
+
expect( dummy_client ).to receive(:call).with(:get_records, :message => {:__encoded_query => encoded_query, :__first_row => 0, :__last_row => 250}).ordered
|
45
|
+
expect( dummy_client ).to receive(:call).with(:get_records, :message => {:__encoded_query => encoded_query, :__first_row => 250, :__last_row => 500}).ordered
|
46
|
+
|
47
|
+
subject._request 'core_company', encoded_query
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should return an array of hashes containing each entry' do
|
51
|
+
expect( subject._request 'core_company', encoded_query ) == [multi_record_hash]
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#_export' do
|
58
|
+
let(:dummy_open) { Object.new }
|
59
|
+
let(:multi_record_hash) { (0..251).map { |n| make_record_hash n } }
|
60
|
+
|
61
|
+
context 'single result' do
|
62
|
+
let(:export_url) { "https://reporting.service-now.com/core_company.do?XML&sysparm_order_by=sys_id&sysparm_query=#{CGI.escape(encoded_query + '^')}sys_id#{CGI.escape('>=') + "deadbeefdeadbeefdeadbeefdeadbeef"}&sysparm_record_count=#{max_export}" }
|
63
|
+
|
64
|
+
before :each do
|
65
|
+
allow( subject ).to receive(:get_keys).and_return({:count => "1", :sys_id => "deadbeefdeadbeefdeadbeefdeadbeef"})
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should use the first sys_id in the first query' do
|
69
|
+
expect( subject ).to receive(:open).with(
|
70
|
+
export_url,
|
71
|
+
:http_basic_authentication => ["user", "supersekrit"]
|
72
|
+
).and_return(dummy_open)
|
73
|
+
allow( dummy_open ).to receive(:read).and_return(single_record_xml)
|
74
|
+
|
75
|
+
subject._export 'core_company', encoded_query, max_export
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should return an array with one hash' do
|
79
|
+
allow( subject ).to receive(:open).and_return(dummy_open)
|
80
|
+
allow( dummy_open ).to receive(:read).and_return(single_record_xml)
|
81
|
+
expect( subject._export 'core_company', encoded_query, max_export ).to be == [single_record_hash]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'multiple results' do
|
86
|
+
let(:multi_xml_return0) { make_multiple_xml 0, 100 }
|
87
|
+
let(:multi_xml_return1) { make_multiple_xml 100, 200 }
|
88
|
+
let(:multi_xml_return2) { make_multiple_xml 200, 252 }
|
89
|
+
let(:sys_ids) { (0..299).map { |num| "deadbeefdeadbeefdeadbeefdead#{num}" }.join(',') }
|
90
|
+
let(:export_url0) { "https://reporting.service-now.com/core_company.do?XML&sysparm_order_by=sys_id&sysparm_query=#{CGI.escape(encoded_query + '^')}sys_id#{CGI.escape('>=') + "deadbeefdeadbeefdeadbeefdead0"}&sysparm_record_count=#{max_export}" }
|
91
|
+
let(:export_url1) { "https://reporting.service-now.com/core_company.do?XML&sysparm_order_by=sys_id&sysparm_query=#{CGI.escape(encoded_query + '^')}sys_id#{CGI.escape('>=') + "deadbeefdeadbeefdeadbeefdead100"}&sysparm_record_count=#{max_export}" }
|
92
|
+
let(:export_url2) { "https://reporting.service-now.com/core_company.do?XML&sysparm_order_by=sys_id&sysparm_query=#{CGI.escape(encoded_query + '^')}sys_id#{CGI.escape('>=') + "deadbeefdeadbeefdeadbeefdead200"}&sysparm_record_count=#{max_export}" }
|
93
|
+
|
94
|
+
before :each do
|
95
|
+
allow( subject ).to receive(:get_keys).and_return({:count => "251", :sys_id => sys_ids})
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should get records 100 at a time using sys_ids as the index' do
|
100
|
+
expect( subject ).to receive(:open).with(export_url0, :http_basic_authentication => ["user", "supersekrit"]).and_return(dummy_open)
|
101
|
+
expect( subject ).to receive(:open).with(export_url1, :http_basic_authentication => ["user", "supersekrit"]).and_return(dummy_open)
|
102
|
+
expect( subject ).to receive(:open).with(export_url2, :http_basic_authentication => ["user", "supersekrit"]).and_return(dummy_open)
|
103
|
+
allow( dummy_open ).to receive(:read).and_return(multi_xml_return0, multi_xml_return1, multi_xml_return2)
|
104
|
+
subject._export 'core_company', encoded_query, max_export
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should parse the xml and return an array of hashes' do
|
108
|
+
allow( subject ).to receive(:open).and_return(dummy_open)
|
109
|
+
allow( dummy_open ).to receive(:read).and_return(multi_xml_return0, multi_xml_return1, multi_xml_return2)
|
110
|
+
expect( subject._export 'core_company', encoded_query, max_export ).to be == multi_record_hash
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
describe '#get' do
|
117
|
+
let(:dummy_client) { Object.new }
|
118
|
+
let(:dummy_response) { Object.new }
|
119
|
+
let(:get_response) { make_record_hash }
|
120
|
+
let(:dummy_response_hash) { {:envelope => {:body => {:get_response => get_response } } } }
|
121
|
+
let(:sys_id) { "deadbeefdeadbeefdeadbeefdeadbeef" }
|
122
|
+
|
123
|
+
before :each do
|
124
|
+
allow( subject ).to receive(:setup_client).and_return(dummy_client)
|
125
|
+
allow( dummy_response ).to receive(:hash).and_return(dummy_response_hash)
|
126
|
+
allow( dummy_client ).to receive(:call).and_return(dummy_response)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should return a hash' do
|
130
|
+
expect( dummy_client ).to receive(:call).with(:get, :message => {:sys_id => sys_id})
|
131
|
+
|
132
|
+
expect( subject._get("core_company", sys_id) ).to be == get_response
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe '#_insert' do
|
137
|
+
let(:dummy_client) { Object.new }
|
138
|
+
let(:dummy_response) { Object.new }
|
139
|
+
let(:insert_response) { make_insert_response_hash }
|
140
|
+
let(:insert_request) {
|
141
|
+
{
|
142
|
+
:active => true,
|
143
|
+
:assigned_to => "me",
|
144
|
+
:cmdb_ci => "router1",
|
145
|
+
:severity => 1,
|
146
|
+
:urgency => 1,
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
before :each do
|
151
|
+
allow( subject ).to receive(:setup_client).and_return(dummy_client)
|
152
|
+
allow( dummy_response ).to receive(:hash).and_return(insert_response)
|
153
|
+
allow( dummy_client ).to receive(:call).and_return(dummy_response)
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'should return a sys_id' do
|
157
|
+
expect( dummy_client ).to receive(:call).with(:insert, :message => insert_request)
|
158
|
+
|
159
|
+
expect( subject._insert("incident", insert_request) ).to be == "deadbeefdeadbeefdeadbeefdeadbeef"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
describe '#_update' do
|
164
|
+
let(:dummy_client) { Object.new }
|
165
|
+
let(:dummy_response) { Object.new }
|
166
|
+
let(:update_response) { make_insert_response_hash }
|
167
|
+
let(:update_request) {
|
168
|
+
{
|
169
|
+
:active => true,
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
before :each do
|
174
|
+
allow( subject ).to receive(:setup_client).and_return(dummy_client)
|
175
|
+
allow( dummy_response ).to receive(:hash).and_return(update_response)
|
176
|
+
allow( dummy_client ).to receive(:call).and_return(dummy_response)
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'should update the record' do
|
180
|
+
expect( dummy_client ).to receive(:call).with(:insert, :message => update_request)
|
181
|
+
subject._insert("incident", update_request)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rs_service_now
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- nemski
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2015-
|
11
|
+
date: 2015-03-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: savon
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: activesupport
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -89,33 +80,40 @@ files:
|
|
89
80
|
- Rakefile
|
90
81
|
- lib/rs_service_now.rb
|
91
82
|
- lib/rs_service_now/ci.rb
|
83
|
+
- lib/rs_service_now/common.rb
|
92
84
|
- lib/rs_service_now/company.rb
|
93
85
|
- lib/rs_service_now/record.rb
|
94
86
|
- lib/rs_service_now/version.rb
|
95
87
|
- rs_service_now.gemspec
|
88
|
+
- spec/helpers.rb
|
89
|
+
- spec/spec_helper.rb
|
90
|
+
- spec/unit/records_spec.rb
|
96
91
|
homepage: https://github.com/nemski/rs_service_now
|
97
92
|
licenses:
|
98
93
|
- BSD
|
94
|
+
metadata: {}
|
99
95
|
post_install_message:
|
100
96
|
rdoc_options: []
|
101
97
|
require_paths:
|
102
98
|
- lib
|
103
99
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
-
none: false
|
105
100
|
requirements:
|
106
101
|
- - ! '>='
|
107
102
|
- !ruby/object:Gem::Version
|
108
103
|
version: '0'
|
109
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
-
none: false
|
111
105
|
requirements:
|
112
106
|
- - ! '>='
|
113
107
|
- !ruby/object:Gem::Version
|
114
108
|
version: '0'
|
115
109
|
requirements: []
|
116
110
|
rubyforge_project:
|
117
|
-
rubygems_version:
|
111
|
+
rubygems_version: 2.4.6
|
118
112
|
signing_key:
|
119
|
-
specification_version:
|
113
|
+
specification_version: 4
|
120
114
|
summary: A Ruby Soap ServiceNow interface.
|
121
|
-
test_files:
|
115
|
+
test_files:
|
116
|
+
- spec/helpers.rb
|
117
|
+
- spec/spec_helper.rb
|
118
|
+
- spec/unit/records_spec.rb
|
119
|
+
has_rdoc:
|