TestGemTM 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +2 -0
- data/TestGemTM.gemspec +31 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/TestGemTM.rb +9 -0
- data/lib/TestGemTM/ProxyAgent.rb +129 -0
- data/lib/TestGemTM/SpiraAgent.rb +124 -0
- data/lib/TestGemTM/translator.rb +14 -0
- data/lib/TestGemTM/version.rb +3 -0
- metadata +146 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 435975756de1f69bf23c4c45ce342cfc7b9734ed
|
4
|
+
data.tar.gz: 6c223d55f94e03ae0466077fea1cec18d76a32f8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 637eb2192dcaed48e71dc963f8ae3c26b25aa49c8eddbe3093a31727f8b6b3eff963376fd6306cd56b37113059455497c86f5f423f83dfb78d2eda7db473d393
|
7
|
+
data.tar.gz: 864dde906c361f0128c4e80f922e554ccd4a24a612026c2b983b2484edb4f537d419719e5bfd3239f789388ddf7e3a7988b6e2b48ca5916aa8d759f2752c131e
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
|
4
|
+
|
5
|
+
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
|
6
|
+
|
7
|
+
Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
|
8
|
+
|
9
|
+
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
|
10
|
+
|
11
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
|
12
|
+
|
13
|
+
This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Taru Malik
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# TestGemTM
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/TestGemTM`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'TestGemTM'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install TestGemTM
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
1. Fork it ( https://github.com/[my-github-username]/TestGemTM/fork )
|
36
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
37
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
38
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
39
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/TestGemTM.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'TestGemTM/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "TestGemTM"
|
8
|
+
spec.version = TestGemTM::VERSION
|
9
|
+
spec.authors = ["QA Automation Group @ Yellow Pages Group"]
|
10
|
+
spec.email = ["taru.malik@ypg.com"]
|
11
|
+
|
12
|
+
if spec.respond_to?(:metadata)
|
13
|
+
spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
14
|
+
end
|
15
|
+
|
16
|
+
spec.summary = %q{Ruby Package to help the wayward QA Tester}
|
17
|
+
spec.description = %q{Ruby Package to help the wayward QA Tester}
|
18
|
+
spec.license = "MIT"
|
19
|
+
|
20
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_runtime_dependency "savon", "~> 2.8.0"
|
25
|
+
spec.add_runtime_dependency "json", "~> 1.8.1"
|
26
|
+
spec.add_runtime_dependency "rest-client", "~> 1.6.7"
|
27
|
+
spec.add_runtime_dependency "rspec", "~> 3.1.0"
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 1.8"
|
30
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
31
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "TestGemTM"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/lib/TestGemTM.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
require 'rspec'
|
4
|
+
|
5
|
+
# start logging before each scenario post http://172.27.108.80:9091/start_logging?src_ip=172.22.221.55
|
6
|
+
# tear down after each scenario delete http://172.27.108.80:9091/log?src_ip=172.22.221.55
|
7
|
+
# post http://172.27.108.80:9091/stop_logging?src_ip=172.22.221.55
|
8
|
+
|
9
|
+
|
10
|
+
module TestGemTM
|
11
|
+
class ProxyAgent
|
12
|
+
include RSpec::Matchers
|
13
|
+
|
14
|
+
attr_accessor :proxy_server_ip, :proxy_server_port, :device_ip
|
15
|
+
|
16
|
+
#set the proxy server ip here or write your own function to load from config file
|
17
|
+
def initialize(hash)
|
18
|
+
puts "Initializing proxy agent"
|
19
|
+
@proxy_server_ip = hash[:proxy_server_ip]
|
20
|
+
@proxy_server_port = hash[:proxy_server_port]
|
21
|
+
@device_ip = hash[:device_ip]
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
#gets status of logging for the agent
|
26
|
+
#return: boolean
|
27
|
+
def is_logging?
|
28
|
+
begin
|
29
|
+
return (RestClient.get "#{@proxy_server_ip}/logging?src_ip=#{@device_ip}").code == 200
|
30
|
+
rescue
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def _proxy_url
|
36
|
+
'http://'+@proxy_server_ip+':'+@proxy_server_port
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
#sets server to start logging for the agent
|
41
|
+
#returns: None
|
42
|
+
def start_logging
|
43
|
+
begin
|
44
|
+
puts "Trying to Start logging at #{_proxy_url} for device #{@device_ip}" if Calabash::Cucumber::Logging.full_console_logging?
|
45
|
+
RestClient.post "#{_proxy_url}/start_logging?src_ip=#{@device_ip}", ''
|
46
|
+
puts 'Success...!' if Calabash::Cucumber::Logging.full_console_logging?
|
47
|
+
return true
|
48
|
+
rescue
|
49
|
+
return false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
#stops logging on the proxy server for the agent
|
55
|
+
#returns: None
|
56
|
+
def stop_logging
|
57
|
+
begin
|
58
|
+
puts "Trying to Terminate logging at #{_proxy_url} for device #{@device_ip}" if Calabash::Cucumber::Logging.full_console_logging?
|
59
|
+
RestClient.post "#{_proxy_url}/stop_logging?src_ip=#{@device_ip}", ''
|
60
|
+
puts 'Success...!' if Calabash::Cucumber::Logging.full_console_logging?
|
61
|
+
return true
|
62
|
+
rescue
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
#clears proxy server memory
|
69
|
+
#returns: None
|
70
|
+
def clear_server_mem(max_delete_retries=2)
|
71
|
+
max_delete_retries.times do |n|
|
72
|
+
begin
|
73
|
+
puts "Trying to Clear server memory at #{_proxy_url} for device #{@device_ip}..." if Calabash::Cucumber::Logging.full_console_logging?
|
74
|
+
RestClient.delete ("#{_proxy_url}/log?src_ip=#{@device_ip}") { |response, request, result, &block|
|
75
|
+
sleep 1
|
76
|
+
case response.code
|
77
|
+
when 200
|
78
|
+
puts 'Success...!' if Calabash::Cucumber::Logging.full_console_logging?
|
79
|
+
return response
|
80
|
+
else
|
81
|
+
puts "Failed to delete the logs on the proxy server. (attempt #{n+1})"
|
82
|
+
if n==max_delete_retries-1
|
83
|
+
puts "Delete retry attempts exhausted.\nResponse: #{result.code} #{result.message}"
|
84
|
+
return false
|
85
|
+
else
|
86
|
+
puts 'Retrying to delete after failure.'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
}
|
90
|
+
rescue
|
91
|
+
return false
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
#gets requests from the proxy server
|
98
|
+
#returns: A list of URLs {url1, url2, ..., urlN}
|
99
|
+
def get_all_request(max_get_retries = 2)
|
100
|
+
max_get_retries.times do |n|
|
101
|
+
begin
|
102
|
+
RestClient.get ("#{_proxy_url}/log?src_ip=#{@device_ip}") { |response, request, result, &block|
|
103
|
+
sleep 1
|
104
|
+
case response.code
|
105
|
+
when 200
|
106
|
+
return response
|
107
|
+
when 404
|
108
|
+
if JSON.parse(response)['message'].start_with?('NO logs found for IP')
|
109
|
+
return false
|
110
|
+
end
|
111
|
+
else
|
112
|
+
puts "Failed to get the logs on the proxy server. (attempt #{n+1})"
|
113
|
+
if n==max_get_retries-1
|
114
|
+
puts "Get retry attempts exhausted.\nResponse: #{result.code} #{result.message}"
|
115
|
+
return false
|
116
|
+
#return response.return!(request, result, &block)
|
117
|
+
else
|
118
|
+
puts 'Retrying to get after failure.'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
}
|
122
|
+
rescue
|
123
|
+
return false
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# This class is needed to retrieve test case descriptions and more from the Spira. It uses savon instead of soap4r as
|
2
|
+
# savon is more reliable.
|
3
|
+
|
4
|
+
require 'savon'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module TestGemTM
|
8
|
+
class SpiraAgent
|
9
|
+
# This method Establishes connection with the Spira to retrive a test case data for a project_id and test_case_id;
|
10
|
+
# returns a hash with representing a test case with the following keys:
|
11
|
+
# 'tcDescription' => Test Case Description
|
12
|
+
# 'tsExpectedResult' => Array with expected results for the test
|
13
|
+
# 'tsDescription'
|
14
|
+
|
15
|
+
@cookies
|
16
|
+
@client
|
17
|
+
@test_name_table
|
18
|
+
@project_id
|
19
|
+
|
20
|
+
# initializing the spira agent
|
21
|
+
def initialize user_name, password, project_id = nil, folder_id = nil
|
22
|
+
# setting up savon client, passing the wsdl address
|
23
|
+
@client = Savon.client(wsdl: 'http://spirateam.ypg.com/Services/v4_0/ImportExport.svc?wsdl')
|
24
|
+
#connecting to the service point
|
25
|
+
#the complete list of the functions can be found at spira documentation pages.
|
26
|
+
connection = @client.call(:connection_authenticate, message: {user_name: user_name, password: password})
|
27
|
+
# saving cookies for further use, to avoid authentication every time
|
28
|
+
@cookies = connection.http.cookies
|
29
|
+
#retrieving the table which maps test names to the unique test IDs automatically generated by spira (can be found in test URL)
|
30
|
+
if project_id != nil and folder_id != nil
|
31
|
+
set_test_name_table(project_id, folder_id)
|
32
|
+
@project_id = project_id
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
#this function sets the test_name_table variable to the map that contains mapping of test names to the test IDs
|
37
|
+
def set_test_name_table(project_id, folder_id)
|
38
|
+
@project_id = project_id
|
39
|
+
@test_name_table = self.retrieve_test_table_from_spira_by_folder(project_id, folder_id)
|
40
|
+
end
|
41
|
+
|
42
|
+
# returns the table with test names mapped to test IDs to allow to retrßy name
|
43
|
+
def retrieve_test_table_from_spira_by_folder(project_id, folder_id)
|
44
|
+
#connecting to project Id. Note: project id can be found on url on spira.
|
45
|
+
@client.call(:connection_connect_to_project, message: {project_id: project_id}, cookies: @cookies)
|
46
|
+
resp = @client.call(:test_case_retrieve_by_folder, message: {test_casefolder_id: folder_id}, cookies: @cookies)
|
47
|
+
# getting the response body and retrieving array with the test cases
|
48
|
+
test_cases = resp.body[:test_case_retrieve_by_folder_response][:test_case_retrieve_by_folder_result][:remote_test_case]
|
49
|
+
test_table = {}
|
50
|
+
# for each test case slice the name and the ID of the test case and save it in the table
|
51
|
+
test_cases.each do |test|
|
52
|
+
test_table[test[:name]] = test[:test_case_id]
|
53
|
+
end
|
54
|
+
return test_table
|
55
|
+
end
|
56
|
+
|
57
|
+
def retrieve_from_spira_by_id(project_id, test_case_id)
|
58
|
+
test_case = {}
|
59
|
+
#connecting to project Id. Note: project id can be found on url on spira.
|
60
|
+
# Ex. http://spirateam.ypg.com/49/test_case/0000000.aspx id is 49.
|
61
|
+
@client.call(:connection_connect_to_project, message: {project_id: project_id}, cookies: @cookies)
|
62
|
+
|
63
|
+
resp = @client.call(:test_case_retrieve_by_id, message: {test_case_id: test_case_id}, cookies: @cookies)
|
64
|
+
# getting the response body
|
65
|
+
response_body = resp.body[:test_case_retrieve_by_id_response][:test_case_retrieve_by_id_result]
|
66
|
+
test_case['tcDescription'] = response_body[:description].gsub( %r{</?[^>]+?>}, '' )
|
67
|
+
test_case['tcName'] = response_body[:name]
|
68
|
+
steps_data = response_body[:test_steps][:remote_test_step]
|
69
|
+
steps = []
|
70
|
+
#parsing and returning the result
|
71
|
+
if steps_data
|
72
|
+
# if multiple steps
|
73
|
+
if steps_data.kind_of?(Array)
|
74
|
+
steps_data.each_with_index{|step|
|
75
|
+
temp_step = {}
|
76
|
+
temp_step['tsExpectedResult'] = step[:expected_result]
|
77
|
+
temp_step['tsDescription'] = step[:description].gsub('<div>',"\n").gsub(/<[^>]*>/,'').strip
|
78
|
+
steps.push temp_step
|
79
|
+
}
|
80
|
+
else
|
81
|
+
temp_step = {}
|
82
|
+
temp_step['tsExpectedResult'] = steps_data[:expected_result]
|
83
|
+
temp_step['tsDescription'] = steps_data[:description].gsub('<div>',"\n").gsub(/<[^>]*>/,'').strip
|
84
|
+
steps.push temp_step
|
85
|
+
end
|
86
|
+
end
|
87
|
+
test_case['tcSteps'] = steps
|
88
|
+
return test_case
|
89
|
+
end
|
90
|
+
|
91
|
+
# this method just returns the expected result in array for a given project and test case in JSON format
|
92
|
+
def get_expected_result_by_id(project_id, test_case_id)
|
93
|
+
test_case = self.retrieve_from_spira_by_id(project_id, test_case_id)
|
94
|
+
steps = test_case['tcSteps']
|
95
|
+
expected = []
|
96
|
+
expected_hash = {}
|
97
|
+
steps.each{|le_step|
|
98
|
+
# expected.push JSON.parse(le_step['tsExpectedResult'])
|
99
|
+
le_step['tsExpectedResult'].split('</div>').each { |item| expected.push(item.gsub( %r{</?[^>]+?>}, '' )) }
|
100
|
+
}
|
101
|
+
expected.each { |item| items = item.split(':'); expected_hash.merge!({items[0] => items[1] })}
|
102
|
+
{ :expected_results => expected_hash, :test_case_name => test_case['tcName'], :test_case_description => test_case['tcDescription'] }
|
103
|
+
end
|
104
|
+
|
105
|
+
# This method allows to pass the test names and get the expected result shipped from the Spira. To get the expected results
|
106
|
+
# first initialize test names by calling set_test_name_table(projectId, folderId) method and provide the ID of the project
|
107
|
+
# and the ID of the folder that contains the test cases. Once the test tables are initialized get the expected result by simply
|
108
|
+
# providing the name of the desired test case.
|
109
|
+
def get_expected_result_by_name(test_case_name)
|
110
|
+
if @test_name_table == nil
|
111
|
+
raise 'ERROR: test_name_table is not set, call set_test_name_table(project_id, folder_id) method to initialize the '+
|
112
|
+
'test_name_table and project ID. Alternatively you can call get_expected_result_by_id(project_id, test_case_id) or' +
|
113
|
+
'set_test_name_table(project_id, folder_id) to set test_name_table.'
|
114
|
+
end
|
115
|
+
|
116
|
+
test_id = @test_name_table[test_case_name]
|
117
|
+
if test_id == nil
|
118
|
+
raise "ERROR: Program returned empty ID for the test name \"#{test_case_name}\""
|
119
|
+
end
|
120
|
+
|
121
|
+
get_expected_result_by_id(@project_id, test_id)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: TestGemTM
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- QA Automation Group @ Yellow Pages Group
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: savon
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.8.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.8.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.8.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.8.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.6.7
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.6.7
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.1.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.8'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.8'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
description: Ruby Package to help the wayward QA Tester
|
98
|
+
email:
|
99
|
+
- taru.malik@ypg.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- .gitignore
|
105
|
+
- .rspec
|
106
|
+
- .travis.yml
|
107
|
+
- CODE_OF_CONDUCT.md
|
108
|
+
- Gemfile
|
109
|
+
- LICENSE.txt
|
110
|
+
- README.md
|
111
|
+
- Rakefile
|
112
|
+
- TestGemTM.gemspec
|
113
|
+
- bin/console
|
114
|
+
- bin/setup
|
115
|
+
- lib/TestGemTM.rb
|
116
|
+
- lib/TestGemTM/ProxyAgent.rb
|
117
|
+
- lib/TestGemTM/SpiraAgent.rb
|
118
|
+
- lib/TestGemTM/translator.rb
|
119
|
+
- lib/TestGemTM/version.rb
|
120
|
+
homepage:
|
121
|
+
licenses:
|
122
|
+
- MIT
|
123
|
+
metadata:
|
124
|
+
allowed_push_host: 'TODO: Set to ''http://mygemserver.com'' to prevent pushes to
|
125
|
+
rubygems.org, or delete to allow pushes to any server.'
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
require_paths:
|
129
|
+
- lib
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - '>='
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
requirements: []
|
141
|
+
rubyforge_project:
|
142
|
+
rubygems_version: 2.0.14
|
143
|
+
signing_key:
|
144
|
+
specification_version: 4
|
145
|
+
summary: Ruby Package to help the wayward QA Tester
|
146
|
+
test_files: []
|