xcal-parktronic 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +21 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +7 -0
- data/lib/xcal/parktronic.rb +21 -0
- data/lib/xcal/parktronic/api_client.rb +60 -0
- data/lib/xcal/parktronic/exceptions.rb +9 -0
- data/lib/xcal/parktronic/generic_response.rb +45 -0
- data/lib/xcal/parktronic/routes.rb +9 -0
- data/lib/xcal/parktronic/routes/alarms.rb +77 -0
- data/lib/xcal/parktronic/version.rb +5 -0
- data/spec/lib/xcal/parktronic/api_client_spec.rb +33 -0
- data/spec/lib/xcal/parktronic/generic_response_spec.rb +46 -0
- data/spec/lib/xcal/parktronic/routes/alarms_route_spec.rb +57 -0
- data/spec/lib/xcal/parktronic/routes/metrics_routes_spec.rb +49 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/api_mock.rb +37 -0
- data/spec/support/fixtures/responses/alarm.json +21 -0
- data/spec/support/fixtures/responses/alarms_page_1.json +220 -0
- data/spec/support/fixtures/responses/alarms_page_2.json +220 -0
- data/spec/support/fixtures/responses/alarms_post.json +27 -0
- data/spec/support/fixtures/responses/forbidden.json +1 -0
- data/xcal-parktronic.gemspec +32 -0
- metadata +177 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NTRjMTNmYzgwYWZmNTYzZDQ4NmJkZTBjOTE3OTg1ZTE0ZjA2ZDJhOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTllOTViZWE1ODMyZTRmMGQ2YTRjYjBiZWE4NDNiY2JmYWYwNDc2Zg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OTg4NGU4YWU2OTZhZDVjOWUyOWY0ZGQyNzE1NmJlZDg2ZWU4MWI0MWQ0NGFi
|
10
|
+
Mjc2OTZjMDg0NWY1NTkzOGE5ZDhiNDlhMjcxYWU2MmU4ZjFmNTI3ZTJmZGE1
|
11
|
+
Njg3NmI5YjhjNTAyMmU1YmNmYTFlOTVhYWI5NTFjNjVlZDA5OWU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NTNjM2QwOGNmZDg4MTM5YTU5Yjk5NTQ4MzlkZjkzNzY0YTM4Yzk4MjBiZGFk
|
14
|
+
NzQ5ZmZlYmNmZWE0NWUwNzZkODBkZDQzYTYzNDE5ZjVmYmExN2VkZTU1OTdl
|
15
|
+
NzY3MTU5ZmVjMzk3NzcxM2NmYWRmNGI3OGUyNTg0MWJkOGJmYzY=
|
data/.gitignore
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
|
19
|
+
/.idea/*
|
20
|
+
/*.sublime-*
|
21
|
+
.ruby-version
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Max Reznichenko
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Xcal::Parktronic
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'xcal-parktronic'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install xcal-parktronic
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
module Xcal; module Parktronic; class ApiClient; end end end
|
5
|
+
|
6
|
+
# version
|
7
|
+
require 'xcal/parktronic/version'
|
8
|
+
|
9
|
+
# extensions
|
10
|
+
require 'hashie'
|
11
|
+
|
12
|
+
# each route then common Routes module
|
13
|
+
require 'xcal/parktronic/routes/alarms'
|
14
|
+
require 'xcal/parktronic/routes'
|
15
|
+
|
16
|
+
# exceptions
|
17
|
+
require 'xcal/parktronic/exceptions'
|
18
|
+
|
19
|
+
# response and client
|
20
|
+
require 'xcal/parktronic/generic_response'
|
21
|
+
require 'xcal/parktronic/api_client'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Xcal
|
2
|
+
module Parktronic
|
3
|
+
|
4
|
+
class ApiClient
|
5
|
+
|
6
|
+
include Xcal::Parktronic::Routes
|
7
|
+
|
8
|
+
# API Client initialization.
|
9
|
+
#
|
10
|
+
# Acceptable attributes:
|
11
|
+
# +endpoint+ - OIV endpoint
|
12
|
+
# +proxy+ - enables proxy if proxy url is passed
|
13
|
+
# +access_token+ - access key to application
|
14
|
+
# +version+ - api version. defaults to v1
|
15
|
+
def initialize(args)
|
16
|
+
@args = args
|
17
|
+
end
|
18
|
+
|
19
|
+
def host
|
20
|
+
uri.host
|
21
|
+
end
|
22
|
+
|
23
|
+
def uri
|
24
|
+
@uri ||= URI(@args[:endpoint])
|
25
|
+
end
|
26
|
+
|
27
|
+
def access_token
|
28
|
+
@args[:access_token]
|
29
|
+
end
|
30
|
+
|
31
|
+
def api_version
|
32
|
+
@args[:version] || 'v1'
|
33
|
+
end
|
34
|
+
|
35
|
+
def port
|
36
|
+
uri.port
|
37
|
+
end
|
38
|
+
|
39
|
+
def http
|
40
|
+
return @http if @http
|
41
|
+
|
42
|
+
proxy_http = @args[:proxy]
|
43
|
+
if proxy_http.nil? || proxy_http.empty?
|
44
|
+
@http = Net::HTTP.new(uri.host, uri.port)
|
45
|
+
else
|
46
|
+
proxy_uri = URI.parse(proxy_http)
|
47
|
+
@http = Net::HTTP.new(uri.host, uri.port, proxy_uri.host, proxy_uri.port)
|
48
|
+
end
|
49
|
+
|
50
|
+
if uri.scheme == 'https'
|
51
|
+
@http.use_ssl = true
|
52
|
+
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
53
|
+
end
|
54
|
+
|
55
|
+
@http
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Xcal
|
2
|
+
module Parktronic
|
3
|
+
|
4
|
+
class GenericResponse
|
5
|
+
include Exceptions
|
6
|
+
|
7
|
+
# Generic Response initializations
|
8
|
+
#
|
9
|
+
# Accepted attributes are:
|
10
|
+
# +raw_response+ should be a hash or a valid raw JSON string
|
11
|
+
def initialize(raw_response = nil)
|
12
|
+
# nil input
|
13
|
+
raise InvalidResponseArgument.new('Cannot create response object without raw response') if raw_response.nil?
|
14
|
+
|
15
|
+
if raw_response.is_a?(Hash)
|
16
|
+
# hash input
|
17
|
+
@source = raw_response
|
18
|
+
elsif raw_response.is_a?(String)
|
19
|
+
# json input
|
20
|
+
parsed_json = JSON.parse(raw_response) rescue nil
|
21
|
+
raise InvalidResponseArgument.new("Argument `#{raw_response}' should be a Hash or raw json String") unless parsed_json
|
22
|
+
|
23
|
+
# for list routes render first Array object, for single item routes render object as is
|
24
|
+
@source = parsed_json.is_a?(Array) ? parsed_json.first : parsed_json
|
25
|
+
else
|
26
|
+
# invalid input
|
27
|
+
raise InvalidResponseArgument.new("Argument `#{raw_response}' should be a Hash or raw json String")
|
28
|
+
end
|
29
|
+
|
30
|
+
@source = Hashie::Mash.new(@source)
|
31
|
+
end
|
32
|
+
|
33
|
+
def method_missing(*args)
|
34
|
+
# deep inject itself into the each object of the hash
|
35
|
+
if @source.has_key?(args.first)
|
36
|
+
@source[args.first]
|
37
|
+
else
|
38
|
+
raise NoMethodError, "undefined method `#{args.first}' for #{self.class}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Xcal
|
2
|
+
module Parktronic
|
3
|
+
module Routes
|
4
|
+
|
5
|
+
module Alarms
|
6
|
+
|
7
|
+
# Fetches latest alarms
|
8
|
+
#
|
9
|
+
# Accepted attributes:
|
10
|
+
# +page+ set page, defaults to 1
|
11
|
+
# +per_page+ set per page value, defaults to 10
|
12
|
+
def get_paged_alarms(args = {})
|
13
|
+
args.merge!(:access_token => access_token)
|
14
|
+
response = http.get("/#{api_version}/alarms?#{URI.encode_www_form(args)}")
|
15
|
+
|
16
|
+
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
17
|
+
response.code == '200' ? generic_response.alarms.map(&:alarm) : generic_response
|
18
|
+
|
19
|
+
# TODO Add caching
|
20
|
+
end
|
21
|
+
alias :alarms :get_paged_alarms
|
22
|
+
|
23
|
+
|
24
|
+
# Fetches alarm with specific ID
|
25
|
+
#
|
26
|
+
# Accepted attributes:
|
27
|
+
# +id+ alarm ID
|
28
|
+
def get_alarm(id)
|
29
|
+
response = http.get("/#{api_version}/alarms/#{id}?access_token=#{access_token}")
|
30
|
+
|
31
|
+
generic_response = Xcal::Parktronic::GenericResponse.new(response.body)
|
32
|
+
response.code == '200' ? generic_response.alarm : generic_response
|
33
|
+
|
34
|
+
# TODO Add caching
|
35
|
+
end
|
36
|
+
alias :alarm :get_alarm
|
37
|
+
|
38
|
+
# Posts new alarm
|
39
|
+
#
|
40
|
+
# Alarm argument should be a hash of Alarm + Events data.
|
41
|
+
#
|
42
|
+
# Example of alarm data:
|
43
|
+
#
|
44
|
+
# +alarm+ :
|
45
|
+
# {
|
46
|
+
# :name => 'alarm name',
|
47
|
+
# :originating_system => 'Source System',
|
48
|
+
# :impact_level => 'low',
|
49
|
+
# :tag_list => %w(taga tagb)
|
50
|
+
# }
|
51
|
+
#
|
52
|
+
# Example of events array:
|
53
|
+
# +events+ :
|
54
|
+
# [
|
55
|
+
# {
|
56
|
+
# :subject => 'EventSubj',
|
57
|
+
# :description => 'EventDesc',
|
58
|
+
# :host_impacted => 'host',
|
59
|
+
# :initiated_at => '2013-11-22T01:00:24Z',
|
60
|
+
# :service_impacted => 'EventSvc',
|
61
|
+
# :incident_status => 'CRITICAL'
|
62
|
+
# }
|
63
|
+
# ]
|
64
|
+
#
|
65
|
+
def post_alarm(alarm = {}, events = [])
|
66
|
+
request = Net::HTTP::Post.new("/#{api_version}/alarms", 'Content-Type' => 'application/json')
|
67
|
+
request.body = { access_token: access_token, alarm: alarm, events: events }.to_json
|
68
|
+
response = http.start { |net| net.request(request) }
|
69
|
+
|
70
|
+
Xcal::Parktronic::GenericResponse.new(response.body)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Xcal::Parktronic::ApiClient do
|
4
|
+
|
5
|
+
context 'initialization' do
|
6
|
+
|
7
|
+
let(:api_http_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://localhost:3000/v1', access_token: 'fake_access_token') }
|
8
|
+
let(:api_http_proxy_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://localhost:3000/v1', access_token: 'fake_access_token', proxy: 'http://localhost:3333') }
|
9
|
+
let(:api_https_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'https://localhost:3000/v1', access_token: 'fake_access_token') }
|
10
|
+
let(:api_invalid_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://', access_token: 'fake_access_token') }
|
11
|
+
|
12
|
+
it 'should initialize correctly and provide access to arguments' do
|
13
|
+
expect(api_http_client.host).to eql('localhost')
|
14
|
+
expect(api_http_client.port).to eql(3000)
|
15
|
+
expect(api_http_client.uri).to be_a_kind_of(URI)
|
16
|
+
|
17
|
+
expect { api_invalid_client.http.get('/') } .to raise_error(URI::InvalidURIError, /bad URI/)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should have a valid set of http arguments' do
|
21
|
+
expect(api_http_client.http).to be_a_kind_of(Net::HTTP)
|
22
|
+
|
23
|
+
# ssl
|
24
|
+
expect(api_http_client.http.use_ssl?).to eql(false)
|
25
|
+
expect(api_https_client.http.use_ssl?).to eql(true)
|
26
|
+
|
27
|
+
# proxy
|
28
|
+
expect(api_http_client.http.proxy?).to eql(nil)
|
29
|
+
expect(api_http_proxy_client.http.proxy?).to eql(true)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Xcal::Parktronic::GenericResponse do
|
4
|
+
|
5
|
+
context 'initialization' do
|
6
|
+
|
7
|
+
let(:valid_generic_response) do
|
8
|
+
Xcal::Parktronic::GenericResponse.new(
|
9
|
+
{
|
10
|
+
:first_argument => 'first',
|
11
|
+
:second_argument => 'second',
|
12
|
+
:nil_argument => nil,
|
13
|
+
:boolean_argument => false
|
14
|
+
}
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should initialize correctly and raise appropriate errors' do
|
19
|
+
expect do
|
20
|
+
Xcal::Parktronic::GenericResponse.new
|
21
|
+
end.to raise_error(Xcal::Parktronic::Exceptions::InvalidResponseArgument, /without raw response/)
|
22
|
+
|
23
|
+
expect do
|
24
|
+
Xcal::Parktronic::GenericResponse.new('d')
|
25
|
+
end.to raise_error(Xcal::Parktronic::Exceptions::InvalidResponseArgument, /should be a Hash/)
|
26
|
+
|
27
|
+
expect do
|
28
|
+
Xcal::Parktronic::GenericResponse.new('{"key":"value"}')
|
29
|
+
end.not_to raise_error
|
30
|
+
|
31
|
+
expect(Xcal::Parktronic::GenericResponse.new('{"key":"value"}').key).to eql('value')
|
32
|
+
|
33
|
+
expect{ Xcal::Parktronic::GenericResponse.new({}) }.not_to raise_error
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should have a valid set of http arguments' do
|
37
|
+
expect(valid_generic_response.first_argument).to eql('first')
|
38
|
+
expect(valid_generic_response.second_argument).to eql('second')
|
39
|
+
expect(valid_generic_response.nil_argument).to eql(nil)
|
40
|
+
expect(valid_generic_response.boolean_argument).to eql(false)
|
41
|
+
|
42
|
+
expect{ valid_generic_response.missing_argument }.to raise_error(NoMethodError, /undefined method/)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Xcal::Parktronic::ApiClient do
|
4
|
+
|
5
|
+
let(:api_http_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://api.mock', access_token: 'access_token') }
|
6
|
+
let(:api_invalid_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://api.mock') }
|
7
|
+
|
8
|
+
context 'alarms route' do
|
9
|
+
|
10
|
+
it 'should not be allowed without access_token' do
|
11
|
+
expect{ api_invalid_client.get_paged_alarms(page: 1, per_page: 10) }.not_to raise_error
|
12
|
+
expect{ api_invalid_client.get_alarm(1) }.not_to raise_error
|
13
|
+
expect{ api_invalid_client.post_alarm({}, {}) }.not_to raise_error
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'getting' do
|
17
|
+
it 'should respond with the correct set of alarms' do
|
18
|
+
alarms = nil
|
19
|
+
expect{ alarms = api_http_client.get_paged_alarms(page: 1, per_page: 10) }.not_to raise_error
|
20
|
+
expect(alarms.first.id.to_s).to eql('1')
|
21
|
+
expect(alarms.first.name).to eql('ALARM NAME 1')
|
22
|
+
|
23
|
+
expect(alarms.last.id.to_s).to eql('10')
|
24
|
+
expect(alarms.last.name).to eql('ALARM NAME 10')
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should respond with single alarm' do
|
28
|
+
alarm = nil
|
29
|
+
expect{ alarm = api_http_client.get_alarm(2) }.not_to raise_error
|
30
|
+
|
31
|
+
expect(alarm.id.to_s).to eql('2')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'posting' do
|
36
|
+
let(:alarm) do
|
37
|
+
{ :name => 'alarm name', :originating_system => 'Source System', :impact_level => 'low', :tag_list => %w(taga tagb) }
|
38
|
+
end
|
39
|
+
let(:event) do
|
40
|
+
{
|
41
|
+
:subject => 'EventSubj',
|
42
|
+
:description => 'EventDesc',
|
43
|
+
:host_impacted => 'host',
|
44
|
+
:initiated_at => '2013-11-22T01:00:24Z',
|
45
|
+
:service_impacted => 'EventSvc',
|
46
|
+
:incident_status => 'CRITICAL'
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should post alarms successfully' do
|
51
|
+
expect{ api_http_client.post_alarm({ :alarm => alarm, :events => [event] }) }.not_to raise_error
|
52
|
+
expect{ api_invalid_client.post_alarm({ :alarm => alarm, :events => [event] }) }.not_to raise_error
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#require 'spec_helper'
|
2
|
+
#
|
3
|
+
#describe Xcal::Parktronic::ApiClient do
|
4
|
+
#
|
5
|
+
# let(:api_http_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://api.mock', access_token: 'fake_access_token') }
|
6
|
+
# let(:api_invalid_client){ Xcal::Parktronic::ApiClient.new(endpoint: 'http://api.mock') }
|
7
|
+
#
|
8
|
+
# context 'alarms route' do
|
9
|
+
#
|
10
|
+
# it 'should not be allowed without access_token' do
|
11
|
+
# response = api_invalid_client.get_paged_alarms(page: 1, per_page: 10)
|
12
|
+
#
|
13
|
+
# expect(response.code).to eql('403')
|
14
|
+
# expect{ JSON.load(response.body) }.not_to raise_error
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# it 'should respond with the correct set of alarms' do
|
18
|
+
# response = api_http_client.get_paged_alarms(page: 1, per_page: 10)
|
19
|
+
#
|
20
|
+
# expect(response.code).to eql('200')
|
21
|
+
# expect{ JSON.load(response.body) }.not_to raise_error
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# context 'posting' do
|
25
|
+
# let(:alarm) do
|
26
|
+
# { :name => 'alarm name', :originating_system => 'Source System', :impact_level => 'low', :tag_list => %w(taga tagb) }
|
27
|
+
# end
|
28
|
+
# let(:event) do
|
29
|
+
# {
|
30
|
+
# :subject => 'EventSubj',
|
31
|
+
# :description => 'EventDesc',
|
32
|
+
# :host_impacted => 'host',
|
33
|
+
# :initiated_at => '2013-11-22T01:00:24Z',
|
34
|
+
# :service_impacted => 'EventSvc',
|
35
|
+
# :incident_status => 'CRITICAL'
|
36
|
+
# }
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# it 'should post alarms successfully' do
|
40
|
+
# response = api_http_client.post_alarm({ :alarm => alarm, :events => [event] })
|
41
|
+
#
|
42
|
+
# expect(response.code).to eql('201')
|
43
|
+
# expect{ JSON.load(response.body) }.not_to raise_error
|
44
|
+
# end
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
#
|
48
|
+
# end
|
49
|
+
#end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'xcal/parktronic'
|
2
|
+
require 'webmock/rspec'
|
3
|
+
|
4
|
+
Dir['spec/support/**/*.rb'].each do |support_file|
|
5
|
+
require File.expand_path('.', support_file)
|
6
|
+
end
|
7
|
+
|
8
|
+
WebMock.disable_net_connect!(allow_localhost: false)
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.before(:each) do
|
12
|
+
stub_request(:any, /api.mock/).to_rack(ApiMock)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
class ApiMock < Sinatra::Base
|
4
|
+
|
5
|
+
before /.*/ do
|
6
|
+
request_body = JSON.parse(request.body.read) rescue {}
|
7
|
+
|
8
|
+
if params[:access_token].nil? || params[:access_token].empty?
|
9
|
+
if request_body['access_token'].nil? || request_body['access_token'].empty?
|
10
|
+
json_response(403, 'forbidden.json')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/:version/alarms' do
|
16
|
+
if params[:page].nil? || params[:page].empty?
|
17
|
+
json_response 200, 'alarms_page_1.json'
|
18
|
+
else
|
19
|
+
json_response 200, "alarms_page_#{params[:page]}.json"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
get '/:version/alarms/:id' do
|
24
|
+
json_response 200, 'alarm.json'
|
25
|
+
end
|
26
|
+
|
27
|
+
post '/:version/alarms' do
|
28
|
+
json_response 201, 'alarms_post.json'
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def json_response(response_code, file_name)
|
34
|
+
content_type :json
|
35
|
+
halt response_code, File.open(File.dirname(__FILE__) + '/fixtures/responses/' + file_name, 'rb').read
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"alarm":{
|
3
|
+
"id":2,
|
4
|
+
"name":"Alarm Name",
|
5
|
+
"alarm_type":null,
|
6
|
+
"originating_system":"Source System",
|
7
|
+
"component":null,
|
8
|
+
"primary_owner":null,
|
9
|
+
"secondary_owner":null,
|
10
|
+
"impact_level":"CRITICAL",
|
11
|
+
"impacted_business_process":null,
|
12
|
+
"confidence_factor":null,
|
13
|
+
"description":"HARD",
|
14
|
+
"sop":null,
|
15
|
+
"is_active":true,
|
16
|
+
"upper_threshold":null,
|
17
|
+
"lower_threshold":null,
|
18
|
+
"added_at":"2013-07-05T13:56:42.000Z",
|
19
|
+
"last_reviewed_at":null
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1,220 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"alarms":[
|
4
|
+
{
|
5
|
+
"alarm":{
|
6
|
+
"added_at":"2013-05-21T16:03:39.000Z",
|
7
|
+
"alarm_type":null,
|
8
|
+
"component":null,
|
9
|
+
"confidence_factor":null,
|
10
|
+
"description":null,
|
11
|
+
"id":1,
|
12
|
+
"impact_level":"Unknown",
|
13
|
+
"impacted_business_process":null,
|
14
|
+
"is_active":true,
|
15
|
+
"last_reviewed_at":null,
|
16
|
+
"lower_threshold":null,
|
17
|
+
"name":"ALARM NAME 1",
|
18
|
+
"originating_system":"Source System",
|
19
|
+
"primary_owner":null,
|
20
|
+
"secondary_owner":null,
|
21
|
+
"sop":null,
|
22
|
+
"upper_threshold":null
|
23
|
+
}
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"alarm":{
|
27
|
+
"added_at":"2013-05-21T16:08:24.000Z",
|
28
|
+
"alarm_type":null,
|
29
|
+
"component":null,
|
30
|
+
"confidence_factor":null,
|
31
|
+
"description":null,
|
32
|
+
"id":2,
|
33
|
+
"impact_level":"Unknown",
|
34
|
+
"impacted_business_process":null,
|
35
|
+
"is_active":true,
|
36
|
+
"last_reviewed_at":null,
|
37
|
+
"lower_threshold":null,
|
38
|
+
"name":"ALARM NAME 2",
|
39
|
+
"originating_system":"Source System",
|
40
|
+
"primary_owner":null,
|
41
|
+
"secondary_owner":null,
|
42
|
+
"sop":null,
|
43
|
+
"upper_threshold":null
|
44
|
+
}
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"alarm":{
|
48
|
+
"added_at":"2013-05-21T16:08:25.000Z",
|
49
|
+
"alarm_type":null,
|
50
|
+
"component":null,
|
51
|
+
"confidence_factor":null,
|
52
|
+
"description":null,
|
53
|
+
"id":3,
|
54
|
+
"impact_level":"Unknown",
|
55
|
+
"impacted_business_process":null,
|
56
|
+
"is_active":true,
|
57
|
+
"last_reviewed_at":null,
|
58
|
+
"lower_threshold":null,
|
59
|
+
"name":"ALARM NAME 3",
|
60
|
+
"originating_system":"Source System",
|
61
|
+
"primary_owner":null,
|
62
|
+
"secondary_owner":null,
|
63
|
+
"sop":null,
|
64
|
+
"upper_threshold":null
|
65
|
+
}
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"alarm":{
|
69
|
+
"added_at":"2013-05-21T16:10:09.000Z",
|
70
|
+
"alarm_type":null,
|
71
|
+
"component":null,
|
72
|
+
"confidence_factor":null,
|
73
|
+
"description":null,
|
74
|
+
"id":4,
|
75
|
+
"impact_level":"Unknown",
|
76
|
+
"impacted_business_process":null,
|
77
|
+
"is_active":true,
|
78
|
+
"last_reviewed_at":null,
|
79
|
+
"lower_threshold":null,
|
80
|
+
"name":"ALARM NAME 4",
|
81
|
+
"originating_system":"Source System",
|
82
|
+
"primary_owner":null,
|
83
|
+
"secondary_owner":null,
|
84
|
+
"sop":null,
|
85
|
+
"upper_threshold":null
|
86
|
+
}
|
87
|
+
},
|
88
|
+
{
|
89
|
+
"alarm":{
|
90
|
+
"added_at":"2013-05-21T16:24:09.000Z",
|
91
|
+
"alarm_type":null,
|
92
|
+
"component":null,
|
93
|
+
"confidence_factor":null,
|
94
|
+
"description":null,
|
95
|
+
"id":5,
|
96
|
+
"impact_level":"Unknown",
|
97
|
+
"impacted_business_process":null,
|
98
|
+
"is_active":true,
|
99
|
+
"last_reviewed_at":null,
|
100
|
+
"lower_threshold":null,
|
101
|
+
"name":"ALARM NAME 5",
|
102
|
+
"originating_system":"Source System",
|
103
|
+
"primary_owner":null,
|
104
|
+
"secondary_owner":null,
|
105
|
+
"sop":null,
|
106
|
+
"upper_threshold":null
|
107
|
+
}
|
108
|
+
},
|
109
|
+
{
|
110
|
+
"alarm":{
|
111
|
+
"added_at":"2013-05-21T16:32:24.000Z",
|
112
|
+
"alarm_type":null,
|
113
|
+
"component":null,
|
114
|
+
"confidence_factor":null,
|
115
|
+
"description":null,
|
116
|
+
"id":6,
|
117
|
+
"impact_level":"Unknown",
|
118
|
+
"impacted_business_process":null,
|
119
|
+
"is_active":true,
|
120
|
+
"last_reviewed_at":null,
|
121
|
+
"lower_threshold":null,
|
122
|
+
"name":"ALARM NAME 6",
|
123
|
+
"originating_system":"Source System",
|
124
|
+
"primary_owner":null,
|
125
|
+
"secondary_owner":null,
|
126
|
+
"sop":null,
|
127
|
+
"upper_threshold":null
|
128
|
+
}
|
129
|
+
},
|
130
|
+
{
|
131
|
+
"alarm":{
|
132
|
+
"added_at":"2013-05-21T16:33:14.000Z",
|
133
|
+
"alarm_type":null,
|
134
|
+
"component":null,
|
135
|
+
"confidence_factor":null,
|
136
|
+
"description":null,
|
137
|
+
"id":7,
|
138
|
+
"impact_level":"Unknown",
|
139
|
+
"impacted_business_process":null,
|
140
|
+
"is_active":true,
|
141
|
+
"last_reviewed_at":null,
|
142
|
+
"lower_threshold":null,
|
143
|
+
"name":"ALARM NAME 7",
|
144
|
+
"originating_system":"Source System",
|
145
|
+
"primary_owner":null,
|
146
|
+
"secondary_owner":null,
|
147
|
+
"sop":null,
|
148
|
+
"upper_threshold":null
|
149
|
+
}
|
150
|
+
},
|
151
|
+
{
|
152
|
+
"alarm":{
|
153
|
+
"added_at":"2013-05-21T16:58:41.000Z",
|
154
|
+
"alarm_type":null,
|
155
|
+
"component":null,
|
156
|
+
"confidence_factor":null,
|
157
|
+
"description":null,
|
158
|
+
"id":8,
|
159
|
+
"impact_level":"Unknown",
|
160
|
+
"impacted_business_process":null,
|
161
|
+
"is_active":true,
|
162
|
+
"last_reviewed_at":null,
|
163
|
+
"lower_threshold":null,
|
164
|
+
"name":"ALARM NAME 8",
|
165
|
+
"originating_system":"Source System",
|
166
|
+
"primary_owner":null,
|
167
|
+
"secondary_owner":null,
|
168
|
+
"sop":null,
|
169
|
+
"upper_threshold":null
|
170
|
+
}
|
171
|
+
},
|
172
|
+
{
|
173
|
+
"alarm":{
|
174
|
+
"added_at":"2013-05-21T17:29:50.000Z",
|
175
|
+
"alarm_type":"",
|
176
|
+
"component":"Component",
|
177
|
+
"confidence_factor":"medium",
|
178
|
+
"description":"",
|
179
|
+
"id":9,
|
180
|
+
"impact_level":"medium",
|
181
|
+
"impacted_business_process":"",
|
182
|
+
"is_active":true,
|
183
|
+
"last_reviewed_at":null,
|
184
|
+
"lower_threshold":"",
|
185
|
+
"name":"ALARM NAME 9",
|
186
|
+
"originating_system":"Source System",
|
187
|
+
"primary_owner":"Primary Owner",
|
188
|
+
"secondary_owner":"Owner",
|
189
|
+
"sop":"",
|
190
|
+
"upper_threshold":""
|
191
|
+
}
|
192
|
+
},
|
193
|
+
{
|
194
|
+
"alarm":{
|
195
|
+
"added_at":"2013-05-21T18:01:40.000Z",
|
196
|
+
"alarm_type":null,
|
197
|
+
"component":null,
|
198
|
+
"confidence_factor":null,
|
199
|
+
"description":null,
|
200
|
+
"id":10,
|
201
|
+
"impact_level":"Unknown",
|
202
|
+
"impacted_business_process":null,
|
203
|
+
"is_active":true,
|
204
|
+
"last_reviewed_at":null,
|
205
|
+
"lower_threshold":null,
|
206
|
+
"name":"ALARM NAME 10",
|
207
|
+
"originating_system":"Source System",
|
208
|
+
"primary_owner":null,
|
209
|
+
"secondary_owner":null,
|
210
|
+
"sop":null,
|
211
|
+
"upper_threshold":null
|
212
|
+
}
|
213
|
+
}
|
214
|
+
],
|
215
|
+
"page":1,
|
216
|
+
"per_page":10,
|
217
|
+
"total_count":20,
|
218
|
+
"total_pages":2
|
219
|
+
}
|
220
|
+
]
|
@@ -0,0 +1,220 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"alarms":[
|
4
|
+
{
|
5
|
+
"alarm":{
|
6
|
+
"added_at":"2013-05-21T16:03:39.000Z",
|
7
|
+
"alarm_type":null,
|
8
|
+
"component":null,
|
9
|
+
"confidence_factor":null,
|
10
|
+
"description":null,
|
11
|
+
"id":1,
|
12
|
+
"impact_level":"Unknown",
|
13
|
+
"impacted_business_process":null,
|
14
|
+
"is_active":true,
|
15
|
+
"last_reviewed_at":null,
|
16
|
+
"lower_threshold":null,
|
17
|
+
"name":"ALARM NAME 11",
|
18
|
+
"originating_system":"Source System",
|
19
|
+
"primary_owner":null,
|
20
|
+
"secondary_owner":null,
|
21
|
+
"sop":null,
|
22
|
+
"upper_threshold":null
|
23
|
+
}
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"alarm":{
|
27
|
+
"added_at":"2013-05-21T16:08:24.000Z",
|
28
|
+
"alarm_type":null,
|
29
|
+
"component":null,
|
30
|
+
"confidence_factor":null,
|
31
|
+
"description":null,
|
32
|
+
"id":2,
|
33
|
+
"impact_level":"Unknown",
|
34
|
+
"impacted_business_process":null,
|
35
|
+
"is_active":true,
|
36
|
+
"last_reviewed_at":null,
|
37
|
+
"lower_threshold":null,
|
38
|
+
"name":"ALARM NAME 12",
|
39
|
+
"originating_system":"Source System",
|
40
|
+
"primary_owner":null,
|
41
|
+
"secondary_owner":null,
|
42
|
+
"sop":null,
|
43
|
+
"upper_threshold":null
|
44
|
+
}
|
45
|
+
},
|
46
|
+
{
|
47
|
+
"alarm":{
|
48
|
+
"added_at":"2013-05-21T16:08:25.000Z",
|
49
|
+
"alarm_type":null,
|
50
|
+
"component":null,
|
51
|
+
"confidence_factor":null,
|
52
|
+
"description":null,
|
53
|
+
"id":3,
|
54
|
+
"impact_level":"Unknown",
|
55
|
+
"impacted_business_process":null,
|
56
|
+
"is_active":true,
|
57
|
+
"last_reviewed_at":null,
|
58
|
+
"lower_threshold":null,
|
59
|
+
"name":"ALARM NAME 13",
|
60
|
+
"originating_system":"Source System",
|
61
|
+
"primary_owner":null,
|
62
|
+
"secondary_owner":null,
|
63
|
+
"sop":null,
|
64
|
+
"upper_threshold":null
|
65
|
+
}
|
66
|
+
},
|
67
|
+
{
|
68
|
+
"alarm":{
|
69
|
+
"added_at":"2013-05-21T16:10:09.000Z",
|
70
|
+
"alarm_type":null,
|
71
|
+
"component":null,
|
72
|
+
"confidence_factor":null,
|
73
|
+
"description":null,
|
74
|
+
"id":4,
|
75
|
+
"impact_level":"Unknown",
|
76
|
+
"impacted_business_process":null,
|
77
|
+
"is_active":true,
|
78
|
+
"last_reviewed_at":null,
|
79
|
+
"lower_threshold":null,
|
80
|
+
"name":"ALARM NAME 14",
|
81
|
+
"originating_system":"Source System",
|
82
|
+
"primary_owner":null,
|
83
|
+
"secondary_owner":null,
|
84
|
+
"sop":null,
|
85
|
+
"upper_threshold":null
|
86
|
+
}
|
87
|
+
},
|
88
|
+
{
|
89
|
+
"alarm":{
|
90
|
+
"added_at":"2013-05-21T16:24:09.000Z",
|
91
|
+
"alarm_type":null,
|
92
|
+
"component":null,
|
93
|
+
"confidence_factor":null,
|
94
|
+
"description":null,
|
95
|
+
"id":5,
|
96
|
+
"impact_level":"Unknown",
|
97
|
+
"impacted_business_process":null,
|
98
|
+
"is_active":true,
|
99
|
+
"last_reviewed_at":null,
|
100
|
+
"lower_threshold":null,
|
101
|
+
"name":"ALARM NAME 15",
|
102
|
+
"originating_system":"Source System",
|
103
|
+
"primary_owner":null,
|
104
|
+
"secondary_owner":null,
|
105
|
+
"sop":null,
|
106
|
+
"upper_threshold":null
|
107
|
+
}
|
108
|
+
},
|
109
|
+
{
|
110
|
+
"alarm":{
|
111
|
+
"added_at":"2013-05-21T16:32:24.000Z",
|
112
|
+
"alarm_type":null,
|
113
|
+
"component":null,
|
114
|
+
"confidence_factor":null,
|
115
|
+
"description":null,
|
116
|
+
"id":6,
|
117
|
+
"impact_level":"Unknown",
|
118
|
+
"impacted_business_process":null,
|
119
|
+
"is_active":true,
|
120
|
+
"last_reviewed_at":null,
|
121
|
+
"lower_threshold":null,
|
122
|
+
"name":"ALARM NAME 16",
|
123
|
+
"originating_system":"Source System",
|
124
|
+
"primary_owner":null,
|
125
|
+
"secondary_owner":null,
|
126
|
+
"sop":null,
|
127
|
+
"upper_threshold":null
|
128
|
+
}
|
129
|
+
},
|
130
|
+
{
|
131
|
+
"alarm":{
|
132
|
+
"added_at":"2013-05-21T16:33:14.000Z",
|
133
|
+
"alarm_type":null,
|
134
|
+
"component":null,
|
135
|
+
"confidence_factor":null,
|
136
|
+
"description":null,
|
137
|
+
"id":7,
|
138
|
+
"impact_level":"Unknown",
|
139
|
+
"impacted_business_process":null,
|
140
|
+
"is_active":true,
|
141
|
+
"last_reviewed_at":null,
|
142
|
+
"lower_threshold":null,
|
143
|
+
"name":"ALARM NAME 17",
|
144
|
+
"originating_system":"Source System",
|
145
|
+
"primary_owner":null,
|
146
|
+
"secondary_owner":null,
|
147
|
+
"sop":null,
|
148
|
+
"upper_threshold":null
|
149
|
+
}
|
150
|
+
},
|
151
|
+
{
|
152
|
+
"alarm":{
|
153
|
+
"added_at":"2013-05-21T16:58:41.000Z",
|
154
|
+
"alarm_type":null,
|
155
|
+
"component":null,
|
156
|
+
"confidence_factor":null,
|
157
|
+
"description":null,
|
158
|
+
"id":8,
|
159
|
+
"impact_level":"Unknown",
|
160
|
+
"impacted_business_process":null,
|
161
|
+
"is_active":true,
|
162
|
+
"last_reviewed_at":null,
|
163
|
+
"lower_threshold":null,
|
164
|
+
"name":"ALARM NAME 18",
|
165
|
+
"originating_system":"Source System",
|
166
|
+
"primary_owner":null,
|
167
|
+
"secondary_owner":null,
|
168
|
+
"sop":null,
|
169
|
+
"upper_threshold":null
|
170
|
+
}
|
171
|
+
},
|
172
|
+
{
|
173
|
+
"alarm":{
|
174
|
+
"added_at":"2013-05-21T17:29:50.000Z",
|
175
|
+
"alarm_type":"",
|
176
|
+
"component":"Component",
|
177
|
+
"confidence_factor":"medium",
|
178
|
+
"description":"",
|
179
|
+
"id":9,
|
180
|
+
"impact_level":"medium",
|
181
|
+
"impacted_business_process":"",
|
182
|
+
"is_active":true,
|
183
|
+
"last_reviewed_at":null,
|
184
|
+
"lower_threshold":"",
|
185
|
+
"name":"ALARM NAME 19",
|
186
|
+
"originating_system":"Source System",
|
187
|
+
"primary_owner":"Primary Owner",
|
188
|
+
"secondary_owner":"Owner",
|
189
|
+
"sop":"",
|
190
|
+
"upper_threshold":""
|
191
|
+
}
|
192
|
+
},
|
193
|
+
{
|
194
|
+
"alarm":{
|
195
|
+
"added_at":"2013-05-21T18:01:40.000Z",
|
196
|
+
"alarm_type":null,
|
197
|
+
"component":null,
|
198
|
+
"confidence_factor":null,
|
199
|
+
"description":null,
|
200
|
+
"id":10,
|
201
|
+
"impact_level":"Unknown",
|
202
|
+
"impacted_business_process":null,
|
203
|
+
"is_active":true,
|
204
|
+
"last_reviewed_at":null,
|
205
|
+
"lower_threshold":null,
|
206
|
+
"name":"ALARM NAME 20",
|
207
|
+
"originating_system":"Source System",
|
208
|
+
"primary_owner":null,
|
209
|
+
"secondary_owner":null,
|
210
|
+
"sop":null,
|
211
|
+
"upper_threshold":null
|
212
|
+
}
|
213
|
+
}
|
214
|
+
],
|
215
|
+
"page":2,
|
216
|
+
"per_page":10,
|
217
|
+
"total_count":20,
|
218
|
+
"total_pages":2
|
219
|
+
}
|
220
|
+
]
|
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"message":"Alarm updated",
|
3
|
+
"alarm":{
|
4
|
+
"id":23,
|
5
|
+
"name":"Alarm Name",
|
6
|
+
"alarm_type":null,
|
7
|
+
"originating_system":"SourceSystem",
|
8
|
+
"component":null,
|
9
|
+
"primary_owner":null,
|
10
|
+
"secondary_owner":null,
|
11
|
+
"impact_level":"low",
|
12
|
+
"confidence_factor":null,
|
13
|
+
"impacted_business_process":null,
|
14
|
+
"description":null,
|
15
|
+
"sop":null,
|
16
|
+
"is_active":true,
|
17
|
+
"upper_threshold":null,
|
18
|
+
"lower_threshold":null,
|
19
|
+
"added_at":"2013-11-22T18:05:17.000Z",
|
20
|
+
"last_reviewed_at":null,
|
21
|
+
"created_at":"2013-11-22T18:05:17.000Z",
|
22
|
+
"updated_at":"2013-12-12T13:59:17.492Z",
|
23
|
+
"event_handlers":[
|
24
|
+
|
25
|
+
]
|
26
|
+
}
|
27
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"message":"Your API key is invalid"}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'xcal/parktronic/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'xcal-parktronic'
|
8
|
+
spec.version = Xcal::Parktronic::VERSION
|
9
|
+
spec.authors = ['Max Reznichenko']
|
10
|
+
spec.email = ['max.reznichenko@gmail.com']
|
11
|
+
spec.description = %q{OIV API gem}
|
12
|
+
spec.summary = %q{Get easy access to the most OIV data}
|
13
|
+
spec.homepage = ''
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features|support)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.required_ruby_version = '>=1.9.2'
|
22
|
+
|
23
|
+
spec.add_dependency 'hashie'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
|
+
spec.add_development_dependency 'rb-readline'
|
27
|
+
spec.add_development_dependency 'rake'
|
28
|
+
spec.add_development_dependency 'rspec'
|
29
|
+
spec.add_development_dependency 'webmock'
|
30
|
+
spec.add_development_dependency 'sinatra'
|
31
|
+
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xcal-parktronic
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Max Reznichenko
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-12-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: hashie
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rb-readline
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: sinatra
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: OIV API gem
|
112
|
+
email:
|
113
|
+
- max.reznichenko@gmail.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- .gitignore
|
119
|
+
- Gemfile
|
120
|
+
- LICENSE.txt
|
121
|
+
- README.md
|
122
|
+
- Rakefile
|
123
|
+
- lib/xcal/parktronic.rb
|
124
|
+
- lib/xcal/parktronic/api_client.rb
|
125
|
+
- lib/xcal/parktronic/exceptions.rb
|
126
|
+
- lib/xcal/parktronic/generic_response.rb
|
127
|
+
- lib/xcal/parktronic/routes.rb
|
128
|
+
- lib/xcal/parktronic/routes/alarms.rb
|
129
|
+
- lib/xcal/parktronic/version.rb
|
130
|
+
- spec/lib/xcal/parktronic/api_client_spec.rb
|
131
|
+
- spec/lib/xcal/parktronic/generic_response_spec.rb
|
132
|
+
- spec/lib/xcal/parktronic/routes/alarms_route_spec.rb
|
133
|
+
- spec/lib/xcal/parktronic/routes/metrics_routes_spec.rb
|
134
|
+
- spec/spec_helper.rb
|
135
|
+
- spec/support/api_mock.rb
|
136
|
+
- spec/support/fixtures/responses/alarm.json
|
137
|
+
- spec/support/fixtures/responses/alarms_page_1.json
|
138
|
+
- spec/support/fixtures/responses/alarms_page_2.json
|
139
|
+
- spec/support/fixtures/responses/alarms_post.json
|
140
|
+
- spec/support/fixtures/responses/forbidden.json
|
141
|
+
- xcal-parktronic.gemspec
|
142
|
+
homepage: ''
|
143
|
+
licenses:
|
144
|
+
- MIT
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ! '>='
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 1.9.2
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.0.3
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: Get easy access to the most OIV data
|
166
|
+
test_files:
|
167
|
+
- spec/lib/xcal/parktronic/api_client_spec.rb
|
168
|
+
- spec/lib/xcal/parktronic/generic_response_spec.rb
|
169
|
+
- spec/lib/xcal/parktronic/routes/alarms_route_spec.rb
|
170
|
+
- spec/lib/xcal/parktronic/routes/metrics_routes_spec.rb
|
171
|
+
- spec/spec_helper.rb
|
172
|
+
- spec/support/api_mock.rb
|
173
|
+
- spec/support/fixtures/responses/alarm.json
|
174
|
+
- spec/support/fixtures/responses/alarms_page_1.json
|
175
|
+
- spec/support/fixtures/responses/alarms_page_2.json
|
176
|
+
- spec/support/fixtures/responses/alarms_post.json
|
177
|
+
- spec/support/fixtures/responses/forbidden.json
|