axl 0.0.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +9 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version.example +1 -0
- data/Gemfile +18 -0
- data/Guardfile +6 -0
- data/LICENSE.txt +13 -0
- data/README.md +131 -0
- data/Rakefile +9 -0
- data/axl.gemspec +42 -0
- data/axl.yml.example +18 -0
- data/lib/axl.rb +5 -0
- data/lib/axl/client.rb +40 -0
- data/lib/axl/configuration.rb +76 -0
- data/lib/axl/utils/compatibility.rb +41 -0
- data/lib/axl/utils/string.rb +30 -0
- data/lib/axl/version.rb +4 -0
- data/test/axl/client_test.rb +43 -0
- data/test/axl/configuration_test.rb +59 -0
- data/test/cassettes/axl/client/i_call/calls_a_given_operation.yml +49 -0
- data/test/support/base_test_class.rb +43 -0
- data/test/support/vcr_setup.rb +106 -0
- data/test/test_helper.rb +25 -0
- data/tmp/.gitkeep +0 -0
- metadata +92 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2e8b992e611f152ae91a620f7cd0795bfc1fbb2
|
4
|
+
data.tar.gz: 39a472890dedfc24903021599d3d0efb41874f45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 371d1b20a855ccb76f58360b082aab95113969e1a1765482d67d724ae85516a53f1a5587e19c9381bcdb7e4c318d2a4fb7c2f5fdea8523df61f05b75b4413e5b
|
7
|
+
data.tar.gz: dc0850d819453be65a008488e0a8d585a65cf03ed2eb7edff8424fd40d584af5ad1e0c5c8f038e49d914fe3a012aed11e3830cefd243ced06c91c881c7b5b2d4
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
axl
|
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p598
|
data/Gemfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify production and development-only dependencies in jet.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
# We're separating these dependencies from the development dependencies
|
7
|
+
# specified in the gemspec. This is so that, should we start running Axl
|
8
|
+
# tests in the CI, we can exclude the development dependencies while
|
9
|
+
# keeping the following in. That will help with the build speed.
|
10
|
+
group :test do
|
11
|
+
gem 'json', '~> 1.8.0'
|
12
|
+
gem 'minitest', '~> 4.7.0'
|
13
|
+
gem 'minitest-reporters', '~> 0.14.20'
|
14
|
+
gem 'mocha', '~> 1.1.0'
|
15
|
+
gem 'rake'
|
16
|
+
gem 'simplecov', '~> 0.7.0'
|
17
|
+
gem 'vcr', '~> 2.8.0'
|
18
|
+
end
|
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2015 Nexus IS
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
AXL: Ruby Bindings for the Cisco Administrative XML (AXL) API
|
2
|
+
=============================================================
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
|
6
|
+
### Install from rubygems.org
|
7
|
+
|
8
|
+
1. `gem install axl`
|
9
|
+
|
10
|
+
### ...or Install locally
|
11
|
+
|
12
|
+
1. Clone this repo
|
13
|
+
1. `cd` to this repo's top dir
|
14
|
+
1. `rm *.gem`
|
15
|
+
1. `gem build axl.gemspec`
|
16
|
+
1. `gem install axl`
|
17
|
+
|
18
|
+
### Download the Cisco AXL Toolkit
|
19
|
+
|
20
|
+
Due to copyright restrictions, this gem does not come with the Cisco
|
21
|
+
AXL WSDL files. Download the Cisco AXL Toolkit by following these instructions.
|
22
|
+
|
23
|
+
1. Browse to your CUCM web interface
|
24
|
+
1. Click on Cisco Unified Communications Manager and log in
|
25
|
+
1. Click Application > Plugins
|
26
|
+
1. Click the Find button
|
27
|
+
1. You should see a "Cisco AXL Toolkit" entry in the results
|
28
|
+
1. Click Download on that result
|
29
|
+
1. Extract the contents to the home directory of the user that the axl gem
|
30
|
+
will run as. If you are going to run the gem directly, extract it to
|
31
|
+
your home directory as axlsqltoolkit
|
32
|
+
1. You should end up with the following directory structure:
|
33
|
+
|
34
|
+
```
|
35
|
+
<USER_HOMEDIR>
|
36
|
+
└── axlsqltoolkit
|
37
|
+
├── README.txt
|
38
|
+
├── classes/
|
39
|
+
├── client/
|
40
|
+
├── lib/
|
41
|
+
├── sample.xml
|
42
|
+
├── schema/
|
43
|
+
│ ├── 10.0/
|
44
|
+
│ ├── 10.5/
|
45
|
+
│ ├── 8.0/
|
46
|
+
│ ├── 8.5/
|
47
|
+
│ ├── 9.0/
|
48
|
+
│ ├── 9.1/
|
49
|
+
│ └── current/
|
50
|
+
└── src/
|
51
|
+
```
|
52
|
+
|
53
|
+
The gem will assume the above directory structure exists and will use that
|
54
|
+
assumption to get to the correct WSDL files in the schema/ directory.
|
55
|
+
|
56
|
+
## Schema Reference
|
57
|
+
|
58
|
+
You will need to consult the appropriate schema reference when developing.
|
59
|
+
To download a copy of the appropriate reference document, visit:
|
60
|
+
|
61
|
+
https://developer.cisco.com/site/axl/documents/previous-versions/index.gsp
|
62
|
+
|
63
|
+
## Usage
|
64
|
+
|
65
|
+
```
|
66
|
+
require 'axl'
|
67
|
+
|
68
|
+
# If you don't supply a version, it will default to '10.5'
|
69
|
+
client = Axl::Client.new(endpoint: 'https://192.168.10.11:8443/axl/',
|
70
|
+
api_version: '10.5',
|
71
|
+
username: 'myusername',
|
72
|
+
password: 'mypassword')
|
73
|
+
|
74
|
+
# Print the available operations
|
75
|
+
puts client.operations
|
76
|
+
|
77
|
+
# Call an operation
|
78
|
+
message = {
|
79
|
+
search_criteria: {
|
80
|
+
name: 'test'
|
81
|
+
}
|
82
|
+
}
|
83
|
+
response = client.call(:list_line_group, message: message)
|
84
|
+
|
85
|
+
puts response.success?
|
86
|
+
puts response.header
|
87
|
+
puts response.body
|
88
|
+
puts response.hash
|
89
|
+
```
|
90
|
+
|
91
|
+
See the appropriate schema reference for the API version you're working with
|
92
|
+
for more information about the operation arguments.
|
93
|
+
|
94
|
+
## Development Setup
|
95
|
+
|
96
|
+
### Requirements
|
97
|
+
|
98
|
+
1. RVM. Not a hard requirement but will make your life easier
|
99
|
+
1. Ruby MRI ruby-2.0.0-p598
|
100
|
+
1. Bundler (`gem install bundler`)
|
101
|
+
|
102
|
+
### Set Stuff Up!
|
103
|
+
|
104
|
+
1. If you're using RVM, copy .ruby-version.example to .ruby-version and
|
105
|
+
modify the contents to indicate the Ruby version you need to use during
|
106
|
+
development. Once done `cd` out and `cd` back in.
|
107
|
+
1. Run `bundle install`
|
108
|
+
1. What are you still doing here? You're done!
|
109
|
+
|
110
|
+
### Running the Tests Manually
|
111
|
+
|
112
|
+
1. Run `rake`
|
113
|
+
|
114
|
+
Fix bugs. Rinse. Repeat.
|
115
|
+
|
116
|
+
### Running the Tests Automatically
|
117
|
+
|
118
|
+
1. Run `guard`
|
119
|
+
|
120
|
+
Guard will watch for changes under the lib/ directory and execute the
|
121
|
+
associated test(s) automatically. Also, if any tests in the test/ directory
|
122
|
+
change, that test will automatically get executed. To see how Guard
|
123
|
+
determines which test to execute given a file changed, see Guardfile.
|
124
|
+
|
125
|
+
### Code Coverage
|
126
|
+
|
127
|
+
After running the tests (either via `rake` or `guard`), the coverage report
|
128
|
+
will be saved to coverage/index.html. Note that triggerring a single test
|
129
|
+
case via guard will produce an incomplete coverage report since it will
|
130
|
+
only exercise a limited set of the code. To ensure complete code coverage
|
131
|
+
reports, press <ENTER> in the guard prompt or just run `rake` manually.
|
data/Rakefile
ADDED
data/axl.gemspec
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'axl/version'
|
6
|
+
require 'axl/utils/compatibility'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = "axl"
|
10
|
+
spec.version = Axl::VERSION
|
11
|
+
spec.authors = ["Nexus IS Dev Team"]
|
12
|
+
spec.email = ["dev@nexusis.com"]
|
13
|
+
spec.description = "Ruby Bindings for the Cisco Administrative XML (AXL) API"
|
14
|
+
spec.summary = "Ruby Bindings for the Cisco Administrative XML (AXL) API"
|
15
|
+
spec.homepage = "http://nexusis.com"
|
16
|
+
spec.license = "Apache 2.0"
|
17
|
+
|
18
|
+
spec.files = `git ls-files`.split($/)
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
# Runtime dependencies
|
23
|
+
spec.add_runtime_dependency 'savon', '~> 2.0'
|
24
|
+
spec.add_runtime_dependency 'webmock', '>= 1.8.0', '< 1.16'
|
25
|
+
|
26
|
+
# Development dependencies. See Gemfile for more non-prod dependencies.
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.0'
|
28
|
+
spec.add_development_dependency 'guard', '~> 1.8', '>= 1.8.0'
|
29
|
+
spec.add_development_dependency 'guard-rake', '~> 0.0', '>= 0.0.0'
|
30
|
+
spec.add_development_dependency 'guard-minitest', '~> 0.5', '>= 0.5.0'
|
31
|
+
spec.add_development_dependency 'rb-fsevent', '~> 0.9', '>= 0.9.0'
|
32
|
+
|
33
|
+
if /darwin|mac os/ === RbConfig::CONFIG['host_os']
|
34
|
+
spec.add_development_dependency 'terminal-notifier-guard', '~> 1.5', '>= 1.5.3'
|
35
|
+
else
|
36
|
+
spec.add_development_dependency 'ruby_gntp', '~> 0.3', '>= 0.3.0'
|
37
|
+
end
|
38
|
+
|
39
|
+
spec.add_development_dependency 'pry', '~> 0.9', '>= 0.9.0'
|
40
|
+
spec.add_development_dependency 'redcarpet', '~> 2.3', '>= 2.3.0'
|
41
|
+
spec.add_development_dependency 'yard', '~> 0.8', '>= 0.8.0'
|
42
|
+
end
|
data/axl.yml.example
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
server1: &server1
|
2
|
+
endpoint: https://192.168.10.1:8443/axl/
|
3
|
+
api_version: 10.5
|
4
|
+
username: myusername
|
5
|
+
password: mypassword
|
6
|
+
|
7
|
+
server2: &server2
|
8
|
+
endpoint: https://192.168.10.2:8443/axl/
|
9
|
+
api_version: 11
|
10
|
+
username: myusername
|
11
|
+
password: mypassword
|
12
|
+
|
13
|
+
|
14
|
+
test:
|
15
|
+
<<: *server1
|
16
|
+
|
17
|
+
production:
|
18
|
+
<<: *server2
|
data/lib/axl.rb
ADDED
data/lib/axl/client.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'forwardable'
|
3
|
+
|
4
|
+
|
5
|
+
module Axl
|
6
|
+
|
7
|
+
class Client
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
def_delegators :@client, :call, :operations
|
11
|
+
|
12
|
+
def initialize(endpoint: nil, api_version: '10.5', username: nil, password: nil)
|
13
|
+
wsdl_path = wsdl_path(api_version.to_s)
|
14
|
+
|
15
|
+
if endpoint.class == String && endpoint[-1] != '/'
|
16
|
+
# Cisco AXL API doesn't like it if you don't add a trailing slash
|
17
|
+
endpoint << '/'
|
18
|
+
end
|
19
|
+
|
20
|
+
# Notice how we're disabling SSL verification. This library is meant
|
21
|
+
# to be used within a data center. If you are worried about a MITM
|
22
|
+
# attack happening while using this library, you have bigger problems
|
23
|
+
# to deal with than this library's SSL strategy.
|
24
|
+
@client = Savon.client(endpoint: endpoint,
|
25
|
+
wsdl: wsdl_path,
|
26
|
+
ssl_verify_mode: :none,
|
27
|
+
basic_auth: [username, password],
|
28
|
+
namespace: "http://www.cisco.com/AXL/API/#{api_version}")
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def wsdl_path(version)
|
34
|
+
path = ['~', 'axlsqltoolkit', 'schema', version, 'AXLAPI.wsdl']
|
35
|
+
File.expand_path(File.join(*path))
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Axl
|
4
|
+
|
5
|
+
# ==========
|
6
|
+
# EXCEPTIONS
|
7
|
+
# ==========
|
8
|
+
|
9
|
+
class ConfigurationFileNotFoundError < StandardError
|
10
|
+
|
11
|
+
def initialize(path)
|
12
|
+
msg = "The configuration file could not be found at #{path}."
|
13
|
+
super msg
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
# ===================
|
19
|
+
# CONFIGURATION CLASS
|
20
|
+
# ===================
|
21
|
+
|
22
|
+
class Configuration
|
23
|
+
|
24
|
+
# =============
|
25
|
+
# CLASS METHODS
|
26
|
+
# =============
|
27
|
+
|
28
|
+
class << self
|
29
|
+
|
30
|
+
def load(path, env: 'production')
|
31
|
+
Configuration.new(path, env: env)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
# ===========
|
37
|
+
# INITIALIZER
|
38
|
+
# ===========
|
39
|
+
|
40
|
+
def initialize(path, env: nil)
|
41
|
+
begin
|
42
|
+
@config = YAML.load_file(path)[env.to_s]
|
43
|
+
rescue Errno::ENOENT
|
44
|
+
raise ConfigurationFileNotFoundError.new(path) unless Pathname.new(path).exist?
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# ======
|
49
|
+
# PUBLIC
|
50
|
+
# ======
|
51
|
+
|
52
|
+
def to_h
|
53
|
+
config.dup
|
54
|
+
end
|
55
|
+
|
56
|
+
# =======
|
57
|
+
# PRIVATE
|
58
|
+
# =======
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def config
|
63
|
+
@config
|
64
|
+
end
|
65
|
+
|
66
|
+
def method_missing(name, *args, &block) # :nodoc:
|
67
|
+
if config.has_key? name.to_s
|
68
|
+
config[name.to_s]
|
69
|
+
else
|
70
|
+
super name, *args, &block
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Axl
|
2
|
+
|
3
|
+
module Utils
|
4
|
+
|
5
|
+
module Compatibility
|
6
|
+
RUBY_1_8_MODE = (not (RUBY_VERSION =~ /1\.8\.\d*/).nil?)
|
7
|
+
end
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
if Axl::Utils::Compatibility::RUBY_1_8_MODE
|
14
|
+
|
15
|
+
class Module
|
16
|
+
|
17
|
+
# Redefine certain Module instance methods so that they're
|
18
|
+
# consistent across the various Ruby versions that we support.
|
19
|
+
|
20
|
+
alias_method :old_const_defined?, :const_defined?
|
21
|
+
|
22
|
+
def const_defined?(sym, ignore=nil)
|
23
|
+
old_const_defined?(sym)
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
alias_method :old_const_get, :const_get
|
28
|
+
|
29
|
+
def const_get(sym, ignore=nil)
|
30
|
+
old_const_get(sym)
|
31
|
+
end
|
32
|
+
|
33
|
+
alias_method :old_instance_methods, :instance_methods
|
34
|
+
|
35
|
+
def instance_methods(include_super=true)
|
36
|
+
old_instance_methods(include_super).map(&:to_sym)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Axl
|
2
|
+
|
3
|
+
module Utils
|
4
|
+
|
5
|
+
class String
|
6
|
+
|
7
|
+
class <<self
|
8
|
+
|
9
|
+
def camelize(str)
|
10
|
+
word = str.slice(0,1).capitalize + str.slice(1..-1)
|
11
|
+
word.gsub(/_([a-zA-Z\d])/) { "#{$1.capitalize}" }
|
12
|
+
end
|
13
|
+
|
14
|
+
def constantize(str)
|
15
|
+
str.split("::").inject(Object) do |namespace, sym|
|
16
|
+
namespace.const_get(self.camelize(sym.to_s), false)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def underscore(str)
|
21
|
+
str.gsub(/([a-z\d])([A-Z])/, '\1_\2').downcase
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/lib/axl/version.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
|
4
|
+
class Axl::ClientTest < Axl::VCRBackedTest
|
5
|
+
|
6
|
+
describe 'Axl::Client' do
|
7
|
+
|
8
|
+
let(:client) do
|
9
|
+
# NOTE: 'config' is defined in base test class under test/support
|
10
|
+
Axl::Client.new(endpoint: config.endpoint,
|
11
|
+
api_version: config.api_version,
|
12
|
+
username: config.username,
|
13
|
+
password: config.password)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#call' do
|
17
|
+
|
18
|
+
it 'calls a given operation' do
|
19
|
+
message = {
|
20
|
+
search_criteria: {
|
21
|
+
name: 'test'
|
22
|
+
}
|
23
|
+
}
|
24
|
+
response = client.call(:list_line_group, message: message)
|
25
|
+
response.success?.must_equal true
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
describe '#operations' do
|
32
|
+
|
33
|
+
it 'returns an array of symbols' do
|
34
|
+
operations = client.operations
|
35
|
+
|
36
|
+
operations.must_be_instance_of Array
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
|
5
|
+
class Axl::ConfigurationTest < Axl::Test
|
6
|
+
|
7
|
+
describe 'Axl::Configuration' do
|
8
|
+
|
9
|
+
let :path do
|
10
|
+
Pathname.new(__FILE__).join('..', '..', 'support', 'bogus.yml')
|
11
|
+
end
|
12
|
+
|
13
|
+
let :valid_config do
|
14
|
+
{
|
15
|
+
'test' => {
|
16
|
+
'endpoint' => 'somewhere'
|
17
|
+
}
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '::load' do
|
22
|
+
|
23
|
+
it 'loads the configuration from the given path for the given env' do
|
24
|
+
YAML.expects(:load_file).with(path).returns(valid_config)
|
25
|
+
|
26
|
+
config = Axl::Configuration.load(path, env: 'test')
|
27
|
+
|
28
|
+
config.must_be_instance_of Axl::Configuration
|
29
|
+
config.to_h.must_equal valid_config['test']
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'throws an error when the configuration file is not found' do
|
33
|
+
method = lambda do
|
34
|
+
Axl::Configuration.load(path, env: 'test')
|
35
|
+
end
|
36
|
+
method.must_raise Axl::ConfigurationFileNotFoundError
|
37
|
+
|
38
|
+
error = method.call rescue $!
|
39
|
+
|
40
|
+
error.message.wont_be_nil
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#endpoint' do
|
46
|
+
|
47
|
+
it 'returns the configured endpoint for the env' do
|
48
|
+
YAML.stubs(:load_file).returns(valid_config)
|
49
|
+
|
50
|
+
config = Axl::Configuration.load(path, env: 'test')
|
51
|
+
|
52
|
+
config.endpoint.must_equal valid_config['test']['endpoint']
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://appuser:Nexus1sLab@10.21.111.233:8443/axl/
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
9
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd1="http://www.cisco.com/AXL/API/10.5"
|
10
|
+
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><xsd1:listLineGroup><searchCriteria><name>test</name></searchCriteria></xsd1:listLineGroup></env:Body></env:Envelope>
|
11
|
+
headers:
|
12
|
+
Soapaction:
|
13
|
+
- '"CUCM:DB ver=10.5 listLineGroup"'
|
14
|
+
Content-Type:
|
15
|
+
- text/xml;charset=UTF-8
|
16
|
+
Content-Length:
|
17
|
+
- '379'
|
18
|
+
Accept-Encoding:
|
19
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
20
|
+
Accept:
|
21
|
+
- '*/*'
|
22
|
+
User-Agent:
|
23
|
+
- Ruby
|
24
|
+
response:
|
25
|
+
status:
|
26
|
+
code: 200
|
27
|
+
message: OK
|
28
|
+
headers:
|
29
|
+
Set-Cookie:
|
30
|
+
- JSESSIONID=D3F89E494F8F3331F8D7DA17F1CD83E5; Path=/axl/; Secure; HttpOnly
|
31
|
+
- JSESSIONIDSSO=072051ACE8519CBB9CA3B699AAB9D0D8; Path=/; Secure; HttpOnly
|
32
|
+
X-Frame-Options:
|
33
|
+
- SAMEORIGIN
|
34
|
+
Content-Type:
|
35
|
+
- text/xml;charset=UTF-8
|
36
|
+
Transfer-Encoding:
|
37
|
+
- chunked
|
38
|
+
Date:
|
39
|
+
- Mon, 05 Oct 2015 22:53:33 GMT
|
40
|
+
Server:
|
41
|
+
- ''
|
42
|
+
body:
|
43
|
+
encoding: UTF-8
|
44
|
+
string: |-
|
45
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/10.5"><soapenv:Body><ns:listLineGroupResponse><return/></ns:listLineGroupResponse></soapenv:Body></soapenv:Envelope>
|
46
|
+
<!--This API has been processed by GAXL not AXL-->
|
47
|
+
http_version:
|
48
|
+
recorded_at: Mon, 05 Oct 2015 22:53:38 GMT
|
49
|
+
recorded_with: VCR 2.8.0
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Axl
|
2
|
+
|
3
|
+
class Test < MiniTest::Spec
|
4
|
+
|
5
|
+
let(:config) do
|
6
|
+
Axl::Configuration.load(
|
7
|
+
Pathname.new(__FILE__).join('..', '..', '..', 'axl.yml'),
|
8
|
+
env: 'test')
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
class VCRBackedTest < Test
|
15
|
+
|
16
|
+
def cassette_name
|
17
|
+
path = self.class.to_s \
|
18
|
+
.gsub(/^axl\//, '') \
|
19
|
+
.gsub(/^Axl::Test::/, '') \
|
20
|
+
.gsub(/::#/, '/i_') \
|
21
|
+
.gsub(/::::/, '/c_') \
|
22
|
+
.gsub(/::/, '/')
|
23
|
+
|
24
|
+
path = Axl::Utils::String.underscore(path)
|
25
|
+
|
26
|
+
basename = __name__.gsub(/test_\d+_/, '')
|
27
|
+
|
28
|
+
"#{ path }/#{ basename }"
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
before do
|
33
|
+
::VCR.insert_cassette cassette_name
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
after do
|
38
|
+
::VCR.eject_cassette
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'vcr'
|
2
|
+
|
3
|
+
|
4
|
+
VCR.configure do |c|
|
5
|
+
c.cassette_library_dir = Pathname.new(__FILE__).join('..', '..', 'cassettes')
|
6
|
+
c.debug_logger = File.open(Pathname.new(__FILE__).join('..', '..', '..', 'tmp', 'vcr.log'), 'w')
|
7
|
+
c.hook_into :webmock
|
8
|
+
|
9
|
+
# unless @vcr_port_matcher_registered
|
10
|
+
# # References:
|
11
|
+
# # From VCR :docs => http://goo.gl/j0fiJ
|
12
|
+
# # Discussion by :author => http://goo.gl/p9q4r
|
13
|
+
# c.register_request_matcher :port do |r1, r2|
|
14
|
+
# r1.parsed_uri.port == r2.parsed_uri.port
|
15
|
+
# end
|
16
|
+
# @vcr_port_matcher_registered = true
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# unless @vcr_json_body_matcher_registered
|
20
|
+
# # References:
|
21
|
+
# # From VCR :docs => http://goo.gl/j0fiJ
|
22
|
+
# # Discussion by :author => http://goo.gl/p9q4r
|
23
|
+
# c.register_request_matcher :json_body do |r1, r2|
|
24
|
+
# if r1.body.length != r2.body.length
|
25
|
+
# false
|
26
|
+
# elsif r1.body.empty?
|
27
|
+
# true
|
28
|
+
# else
|
29
|
+
# JSON.parse(r1.body) == JSON.parse(r2.body)
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# @vcr_json_body_matcher_registered = true
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# unless @vcr_custom_headers_matcher_registered
|
36
|
+
# # References:
|
37
|
+
# # From VCR :docs => http://goo.gl/j0fiJ
|
38
|
+
# # Discussion by :author => http://goo.gl/p9q4r
|
39
|
+
# c.register_request_matcher :custom_headers do |r1, r2|
|
40
|
+
# r1.headers["User-Agent"] = r2.headers["User-Agent"]
|
41
|
+
# r1.headers == r2.headers
|
42
|
+
# end
|
43
|
+
# @vcr_custom_headers_matcher_registered = true
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# #=========== BEGIN FILTERS FOR SENSITIVE DATA ===========
|
47
|
+
#
|
48
|
+
# configs = [:openstack_admin, :openstack_member]
|
49
|
+
# env = Aviator::Test::Environment
|
50
|
+
#
|
51
|
+
# [:username, :password, :tenantName, :tokenId].each do |key|
|
52
|
+
# configs.each do |config|
|
53
|
+
# c.filter_sensitive_data("<#{ config.to_s.upcase }_#{key.to_s.upcase}>") do
|
54
|
+
# env.send(config)[:auth_credentials][key] || env.send(config)[:auth_credentials][Aviator::StrUtil.underscore(key.to_s)]
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# configs.each do |config|
|
60
|
+
#
|
61
|
+
# c.filter_sensitive_data("<#{ config.to_s.upcase }_HOST_URI>") do
|
62
|
+
# auth_url = URI(env.send(config)[:auth_service][:host_uri])
|
63
|
+
# auth_url.scheme + '://' + auth_url.host
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# # In a multi-host environment, this will come in handy since HOST_URI wont match the
|
67
|
+
# # URI of services or resources available in a different host but same domain.
|
68
|
+
# c.filter_sensitive_data("<#{ config.to_s.upcase }_ENV_DOMAIN>") do
|
69
|
+
# domain_patterns = Regexp.union([
|
70
|
+
# /\.[\w-]+\.[^\.]+\.\w{2,3}$/,
|
71
|
+
# /\.[^\.]+\.\w{2,3}$/,
|
72
|
+
# /\.[^\.]+\.\w{2,3}.\w+$/,
|
73
|
+
# /^\w+$/
|
74
|
+
# ])
|
75
|
+
#
|
76
|
+
# auth_url = URI(env.send(config)[:auth_service][:host_uri])
|
77
|
+
# auth_url.host.match(domain_patterns)
|
78
|
+
# end
|
79
|
+
#
|
80
|
+
# end
|
81
|
+
|
82
|
+
#=========== END FILTERS FOR SENSITIVE DATA ===========
|
83
|
+
|
84
|
+
c.default_cassette_options = {
|
85
|
+
# IF NOT RUNNING IN CI:
|
86
|
+
# If no cassette exists for a spec, VCR will record. Afterwards, VCR will
|
87
|
+
# stop recording for that spec. If new requests are made that are not
|
88
|
+
# matched by anything in the cassette, an error is thrown
|
89
|
+
#
|
90
|
+
# IF RUNNING IN CI:
|
91
|
+
# Test should immediately throw an error if no cassette exists for a
|
92
|
+
# given example that needs one.
|
93
|
+
# :record => (ENV['CI'] || ENV['TRAVIS'] ? :none : :once),
|
94
|
+
:record => :new_episodes,
|
95
|
+
|
96
|
+
:match_requests_on => [:method],
|
97
|
+
|
98
|
+
# Strict mocking
|
99
|
+
# Inspired :by => http://myronmars.to/n/dev-blog/2012/06/thoughts-on-mocking
|
100
|
+
:allow_unused_http_interactions => false,
|
101
|
+
|
102
|
+
# Enable ERB in the cassettes.
|
103
|
+
# :Reference => http://goo.gl/aPXYk
|
104
|
+
:erb => true
|
105
|
+
}
|
106
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
$:.unshift File.expand_path(File.join('..', '..', 'lib'), __FILE__)
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.command_name 'MiniTest'
|
5
|
+
SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
|
6
|
+
|
7
|
+
SimpleCov.start do
|
8
|
+
add_filter '/test/'
|
9
|
+
add_filter '/.bundled_gems/'
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'minitest/autorun'
|
13
|
+
require 'mocha/setup'
|
14
|
+
|
15
|
+
# In case running in the CI
|
16
|
+
unless ['BUILD_NUMBER', 'CI', 'JENKINS_URL'].any? { |name| ENV.key? name }
|
17
|
+
require 'pry'
|
18
|
+
end
|
19
|
+
|
20
|
+
# Load all helpers in test/support
|
21
|
+
Dir[Pathname.new(__FILE__).join('..', 'support', '*.rb')].each do |f|
|
22
|
+
require f
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'axl'
|
data/tmp/.gitkeep
ADDED
File without changes
|
metadata
CHANGED
@@ -1,201 +1,221 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: axl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nexus IS Dev Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: savon
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '2.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: webmock
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.8.0
|
34
|
+
- - <
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '1.16'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.8.0
|
44
|
+
- - <
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.16'
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: bundler
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
30
50
|
requirements:
|
31
|
-
- -
|
51
|
+
- - ~>
|
32
52
|
- !ruby/object:Gem::Version
|
33
53
|
version: '1.0'
|
34
54
|
type: :development
|
35
55
|
prerelease: false
|
36
56
|
version_requirements: !ruby/object:Gem::Requirement
|
37
57
|
requirements:
|
38
|
-
- -
|
58
|
+
- - ~>
|
39
59
|
- !ruby/object:Gem::Version
|
40
60
|
version: '1.0'
|
41
61
|
- !ruby/object:Gem::Dependency
|
42
62
|
name: guard
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
44
64
|
requirements:
|
45
|
-
- -
|
65
|
+
- - ~>
|
46
66
|
- !ruby/object:Gem::Version
|
47
67
|
version: '1.8'
|
48
|
-
- -
|
68
|
+
- - '>='
|
49
69
|
- !ruby/object:Gem::Version
|
50
70
|
version: 1.8.0
|
51
71
|
type: :development
|
52
72
|
prerelease: false
|
53
73
|
version_requirements: !ruby/object:Gem::Requirement
|
54
74
|
requirements:
|
55
|
-
- -
|
75
|
+
- - ~>
|
56
76
|
- !ruby/object:Gem::Version
|
57
77
|
version: '1.8'
|
58
|
-
- -
|
78
|
+
- - '>='
|
59
79
|
- !ruby/object:Gem::Version
|
60
80
|
version: 1.8.0
|
61
81
|
- !ruby/object:Gem::Dependency
|
62
82
|
name: guard-rake
|
63
83
|
requirement: !ruby/object:Gem::Requirement
|
64
84
|
requirements:
|
65
|
-
- -
|
85
|
+
- - ~>
|
66
86
|
- !ruby/object:Gem::Version
|
67
87
|
version: '0.0'
|
68
|
-
- -
|
88
|
+
- - '>='
|
69
89
|
- !ruby/object:Gem::Version
|
70
90
|
version: 0.0.0
|
71
91
|
type: :development
|
72
92
|
prerelease: false
|
73
93
|
version_requirements: !ruby/object:Gem::Requirement
|
74
94
|
requirements:
|
75
|
-
- -
|
95
|
+
- - ~>
|
76
96
|
- !ruby/object:Gem::Version
|
77
97
|
version: '0.0'
|
78
|
-
- -
|
98
|
+
- - '>='
|
79
99
|
- !ruby/object:Gem::Version
|
80
100
|
version: 0.0.0
|
81
101
|
- !ruby/object:Gem::Dependency
|
82
102
|
name: guard-minitest
|
83
103
|
requirement: !ruby/object:Gem::Requirement
|
84
104
|
requirements:
|
85
|
-
- -
|
105
|
+
- - ~>
|
86
106
|
- !ruby/object:Gem::Version
|
87
107
|
version: '0.5'
|
88
|
-
- -
|
108
|
+
- - '>='
|
89
109
|
- !ruby/object:Gem::Version
|
90
110
|
version: 0.5.0
|
91
111
|
type: :development
|
92
112
|
prerelease: false
|
93
113
|
version_requirements: !ruby/object:Gem::Requirement
|
94
114
|
requirements:
|
95
|
-
- -
|
115
|
+
- - ~>
|
96
116
|
- !ruby/object:Gem::Version
|
97
117
|
version: '0.5'
|
98
|
-
- -
|
118
|
+
- - '>='
|
99
119
|
- !ruby/object:Gem::Version
|
100
120
|
version: 0.5.0
|
101
121
|
- !ruby/object:Gem::Dependency
|
102
122
|
name: rb-fsevent
|
103
123
|
requirement: !ruby/object:Gem::Requirement
|
104
124
|
requirements:
|
105
|
-
- -
|
125
|
+
- - ~>
|
106
126
|
- !ruby/object:Gem::Version
|
107
127
|
version: '0.9'
|
108
|
-
- -
|
128
|
+
- - '>='
|
109
129
|
- !ruby/object:Gem::Version
|
110
130
|
version: 0.9.0
|
111
131
|
type: :development
|
112
132
|
prerelease: false
|
113
133
|
version_requirements: !ruby/object:Gem::Requirement
|
114
134
|
requirements:
|
115
|
-
- -
|
135
|
+
- - ~>
|
116
136
|
- !ruby/object:Gem::Version
|
117
137
|
version: '0.9'
|
118
|
-
- -
|
138
|
+
- - '>='
|
119
139
|
- !ruby/object:Gem::Version
|
120
140
|
version: 0.9.0
|
121
141
|
- !ruby/object:Gem::Dependency
|
122
142
|
name: terminal-notifier-guard
|
123
143
|
requirement: !ruby/object:Gem::Requirement
|
124
144
|
requirements:
|
125
|
-
- -
|
145
|
+
- - ~>
|
126
146
|
- !ruby/object:Gem::Version
|
127
147
|
version: '1.5'
|
128
|
-
- -
|
148
|
+
- - '>='
|
129
149
|
- !ruby/object:Gem::Version
|
130
150
|
version: 1.5.3
|
131
151
|
type: :development
|
132
152
|
prerelease: false
|
133
153
|
version_requirements: !ruby/object:Gem::Requirement
|
134
154
|
requirements:
|
135
|
-
- -
|
155
|
+
- - ~>
|
136
156
|
- !ruby/object:Gem::Version
|
137
157
|
version: '1.5'
|
138
|
-
- -
|
158
|
+
- - '>='
|
139
159
|
- !ruby/object:Gem::Version
|
140
160
|
version: 1.5.3
|
141
161
|
- !ruby/object:Gem::Dependency
|
142
162
|
name: pry
|
143
163
|
requirement: !ruby/object:Gem::Requirement
|
144
164
|
requirements:
|
145
|
-
- -
|
165
|
+
- - ~>
|
146
166
|
- !ruby/object:Gem::Version
|
147
167
|
version: '0.9'
|
148
|
-
- -
|
168
|
+
- - '>='
|
149
169
|
- !ruby/object:Gem::Version
|
150
170
|
version: 0.9.0
|
151
171
|
type: :development
|
152
172
|
prerelease: false
|
153
173
|
version_requirements: !ruby/object:Gem::Requirement
|
154
174
|
requirements:
|
155
|
-
- -
|
175
|
+
- - ~>
|
156
176
|
- !ruby/object:Gem::Version
|
157
177
|
version: '0.9'
|
158
|
-
- -
|
178
|
+
- - '>='
|
159
179
|
- !ruby/object:Gem::Version
|
160
180
|
version: 0.9.0
|
161
181
|
- !ruby/object:Gem::Dependency
|
162
182
|
name: redcarpet
|
163
183
|
requirement: !ruby/object:Gem::Requirement
|
164
184
|
requirements:
|
165
|
-
- -
|
185
|
+
- - ~>
|
166
186
|
- !ruby/object:Gem::Version
|
167
187
|
version: '2.3'
|
168
|
-
- -
|
188
|
+
- - '>='
|
169
189
|
- !ruby/object:Gem::Version
|
170
190
|
version: 2.3.0
|
171
191
|
type: :development
|
172
192
|
prerelease: false
|
173
193
|
version_requirements: !ruby/object:Gem::Requirement
|
174
194
|
requirements:
|
175
|
-
- -
|
195
|
+
- - ~>
|
176
196
|
- !ruby/object:Gem::Version
|
177
197
|
version: '2.3'
|
178
|
-
- -
|
198
|
+
- - '>='
|
179
199
|
- !ruby/object:Gem::Version
|
180
200
|
version: 2.3.0
|
181
201
|
- !ruby/object:Gem::Dependency
|
182
202
|
name: yard
|
183
203
|
requirement: !ruby/object:Gem::Requirement
|
184
204
|
requirements:
|
185
|
-
- -
|
205
|
+
- - ~>
|
186
206
|
- !ruby/object:Gem::Version
|
187
207
|
version: '0.8'
|
188
|
-
- -
|
208
|
+
- - '>='
|
189
209
|
- !ruby/object:Gem::Version
|
190
210
|
version: 0.8.0
|
191
211
|
type: :development
|
192
212
|
prerelease: false
|
193
213
|
version_requirements: !ruby/object:Gem::Requirement
|
194
214
|
requirements:
|
195
|
-
- -
|
215
|
+
- - ~>
|
196
216
|
- !ruby/object:Gem::Version
|
197
217
|
version: '0.8'
|
198
|
-
- -
|
218
|
+
- - '>='
|
199
219
|
- !ruby/object:Gem::Version
|
200
220
|
version: 0.8.0
|
201
221
|
description: Ruby Bindings for the Cisco Administrative XML (AXL) API
|
@@ -204,7 +224,30 @@ email:
|
|
204
224
|
executables: []
|
205
225
|
extensions: []
|
206
226
|
extra_rdoc_files: []
|
207
|
-
files:
|
227
|
+
files:
|
228
|
+
- .gitignore
|
229
|
+
- .ruby-gemset
|
230
|
+
- .ruby-version.example
|
231
|
+
- Gemfile
|
232
|
+
- Guardfile
|
233
|
+
- LICENSE.txt
|
234
|
+
- README.md
|
235
|
+
- Rakefile
|
236
|
+
- axl.gemspec
|
237
|
+
- axl.yml.example
|
238
|
+
- lib/axl.rb
|
239
|
+
- lib/axl/client.rb
|
240
|
+
- lib/axl/configuration.rb
|
241
|
+
- lib/axl/utils/compatibility.rb
|
242
|
+
- lib/axl/utils/string.rb
|
243
|
+
- lib/axl/version.rb
|
244
|
+
- test/axl/client_test.rb
|
245
|
+
- test/axl/configuration_test.rb
|
246
|
+
- test/cassettes/axl/client/i_call/calls_a_given_operation.yml
|
247
|
+
- test/support/base_test_class.rb
|
248
|
+
- test/support/vcr_setup.rb
|
249
|
+
- test/test_helper.rb
|
250
|
+
- tmp/.gitkeep
|
208
251
|
homepage: http://nexusis.com
|
209
252
|
licenses:
|
210
253
|
- Apache 2.0
|
@@ -215,19 +258,25 @@ require_paths:
|
|
215
258
|
- lib
|
216
259
|
required_ruby_version: !ruby/object:Gem::Requirement
|
217
260
|
requirements:
|
218
|
-
- -
|
261
|
+
- - '>='
|
219
262
|
- !ruby/object:Gem::Version
|
220
263
|
version: '0'
|
221
264
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
222
265
|
requirements:
|
223
|
-
- -
|
266
|
+
- - '>='
|
224
267
|
- !ruby/object:Gem::Version
|
225
268
|
version: '0'
|
226
269
|
requirements: []
|
227
270
|
rubyforge_project:
|
228
|
-
rubygems_version: 2.
|
271
|
+
rubygems_version: 2.4.6
|
229
272
|
signing_key:
|
230
273
|
specification_version: 4
|
231
274
|
summary: Ruby Bindings for the Cisco Administrative XML (AXL) API
|
232
|
-
test_files:
|
275
|
+
test_files:
|
276
|
+
- test/axl/client_test.rb
|
277
|
+
- test/axl/configuration_test.rb
|
278
|
+
- test/cassettes/axl/client/i_call/calls_a_given_operation.yml
|
279
|
+
- test/support/base_test_class.rb
|
280
|
+
- test/support/vcr_setup.rb
|
281
|
+
- test/test_helper.rb
|
233
282
|
has_rdoc:
|