flood-capybara 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +44 -0
- data/Rakefile +2 -0
- data/bin/flood-capybara +6 -0
- data/flood-capybara.gemspec +35 -0
- data/lib/cli/application.rb +20 -0
- data/lib/flood-capybara.rb +12 -0
- data/lib/flood-capybara/application.rb +105 -0
- data/lib/flood-capybara/logger.rb +48 -0
- data/lib/flood-capybara/version.rb +5 -0
- data/spec/features/homepage_spec.rb +69 -0
- data/spec/spec_helper.rb +26 -0
- metadata +243 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eb82fe5275b610e824e9eb6e1af869482b0cd51b
|
4
|
+
data.tar.gz: c8f6ed8a9267aff043637db6488c44fb0aed6952
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d2a65322fbce7fa0d185868f4f6548e38c24584c1fa4cc3d0de4bd36688a53df65f031ad870f302bf5ec94ec23efdf9e45de83289b78180ff4919c25ea5c3471
|
7
|
+
data.tar.gz: 1533df20c56af777e769c92d2be28372b2dd89586cef5e51642b863753b96575cafcde3937908cab2b4187d93ac179d2e0b3f274e158ed9357c3fd23bf396f31
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Tim Koopmans
|
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,44 @@
|
|
1
|
+
# Flood::Capybara
|
2
|
+
|
3
|
+
![http://www.bay12forums.com/smf/index.php?action=profile;u=22552](http://i.imgur.com/4nAHS.gif)
|
4
|
+
|
5
|
+
This gem lets you run your Capybara acceptance tests on Flood IO. At the moment it supports the RSpec 3 runner only. Plans to include other test runners in the near future.
|
6
|
+
|
7
|
+
This works by essetinally parsing specs from your specs directory, wrapping them up and running them on Flood IO with a specialised docker container (using phantomjs / poltergeist)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'flood-capybara'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install flood-capybara
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
In your app / rails directory:
|
28
|
+
|
29
|
+
$ flood-capybara spec --api_token=$FLOOD_API_TOKEN --grid=1QNtoBftrokSErYJdTHRQg --duration=120 --url=https://flood.io
|
30
|
+
|
31
|
+
Options available:
|
32
|
+
|
33
|
+
- `grid` the Flood IO grid id you want to run this test on.
|
34
|
+
- `rampup` the rampup time for each capybara instance, note we use a maximum of 8 instances per grid node.
|
35
|
+
- `duration` how long you want the specs to iterate for. At the moment it will iterate over specs.
|
36
|
+
- `url` the URL which `Capybara.app_host` will get set to. This is so you can test real / integrated environments.
|
37
|
+
|
38
|
+
## Contributing
|
39
|
+
|
40
|
+
1. Fork it ( https://github.com/[my-github-username]/flood-capybara/fork )
|
41
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
42
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
43
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
44
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/bin/flood-capybara
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'flood-capybara/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "flood-capybara"
|
8
|
+
spec.version = Flood::Capybara::VERSION
|
9
|
+
spec.authors = ["Tim Koopmans"]
|
10
|
+
spec.email = ["tim@flood.io"]
|
11
|
+
spec.summary = %q{Run your Capybara RSpec test cases on Flood IO}
|
12
|
+
spec.description = %q{Run your Capybara RSpec test cases on Flood IO}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "capybara"
|
25
|
+
spec.add_development_dependency "poltergeist"
|
26
|
+
spec.add_development_dependency "elasticsearch"
|
27
|
+
spec.add_development_dependency "elasticsearch-api"
|
28
|
+
spec.add_development_dependency "selenium-webdriver"
|
29
|
+
spec.add_development_dependency "pry"
|
30
|
+
|
31
|
+
spec.add_dependency "parser"
|
32
|
+
spec.add_dependency "unparser"
|
33
|
+
spec.add_dependency "rest-client"
|
34
|
+
spec.add_dependency "thor"
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
class FloodCapybara
|
4
|
+
module Cli
|
5
|
+
class Application < Thor
|
6
|
+
|
7
|
+
desc 'spec', 'run specs on Flood IO'
|
8
|
+
option :api_token
|
9
|
+
option :grid
|
10
|
+
option :rampup
|
11
|
+
option :duration
|
12
|
+
option :name
|
13
|
+
option :url
|
14
|
+
def spec
|
15
|
+
specs = FloodCapybara.new
|
16
|
+
specs.run options
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
require 'json'
|
3
|
+
require 'cgi'
|
4
|
+
require 'open3'
|
5
|
+
require 'parser'
|
6
|
+
require 'unparser'
|
7
|
+
require 'thor'
|
8
|
+
|
9
|
+
require 'flood-capybara/version'
|
10
|
+
require 'flood-capybara/application'
|
11
|
+
require 'flood-capybara/logger'
|
12
|
+
require 'cli/application'
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'rspec/core/formatters/json_formatter'
|
3
|
+
|
4
|
+
class FloodCapybara
|
5
|
+
def initialize
|
6
|
+
@steps = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(params = {})
|
10
|
+
logger.info loading
|
11
|
+
config = RSpec.configuration
|
12
|
+
formatter = RSpec::Core::Formatters::JsonFormatter.new(config.output_stream)
|
13
|
+
reporter = RSpec::Core::Reporter.new(config)
|
14
|
+
config.instance_variable_set(:@reporter, reporter)
|
15
|
+
loader = config.send(:formatter_loader)
|
16
|
+
notifications = loader.send(:notifications_for, RSpec::Core::Formatters::JsonFormatter)
|
17
|
+
reporter.register_listener(formatter, *notifications)
|
18
|
+
RSpec::Core::Runner.run(['spec', '--dry-run'])
|
19
|
+
specs = formatter.output_hash
|
20
|
+
puts
|
21
|
+
logger.warn "Found the following specs:\n" +
|
22
|
+
specs[:examples].collect {|spec| spec[:description]}.join("\n")
|
23
|
+
specs = specs[:examples].collect {|spec| spec[:file_path]}
|
24
|
+
|
25
|
+
specs && specs.uniq.each do |spec|
|
26
|
+
ast = Parser::CurrentRuby.parse(File.read(spec))
|
27
|
+
iterate ast
|
28
|
+
end
|
29
|
+
flood params
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def iterate(node)
|
35
|
+
return unless node.is_a?(AST::Node)
|
36
|
+
|
37
|
+
node.children.each_with_index do |child, index|
|
38
|
+
begin
|
39
|
+
if child.to_a.first.children[1] == :it
|
40
|
+
@steps << Unparser.unparse(child)
|
41
|
+
end
|
42
|
+
rescue
|
43
|
+
end
|
44
|
+
iterate(child) if child.is_a?(AST::Node)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def flood(params={})
|
49
|
+
RestClient.proxy = params[:proxy] if params[:proxy]
|
50
|
+
begin
|
51
|
+
file = Tempfile.new(['capybara_rspec', '.rb'])
|
52
|
+
file.write(@steps.join("\n"))
|
53
|
+
file.rewind
|
54
|
+
|
55
|
+
flood_files = {
|
56
|
+
file: File.new("#{file.path}", 'rb')
|
57
|
+
}
|
58
|
+
|
59
|
+
if params[:files]
|
60
|
+
flood_files.merge!(Hash[params[:files].map.with_index { |value, index| [index, File.new(value, 'rb')] }])
|
61
|
+
params.delete(:files)
|
62
|
+
end
|
63
|
+
|
64
|
+
response = RestClient.post "#{params[:endpoint] ? params[:endpoint] : 'https://api.flood.io'}/floods?auth_token=#{params[:api_token]}",
|
65
|
+
{
|
66
|
+
flood: {
|
67
|
+
tool: 'capybara-rspec',
|
68
|
+
url: params[:url],
|
69
|
+
name: params[:name],
|
70
|
+
notes: params[:notes],
|
71
|
+
tag_list: params[:tag_list],
|
72
|
+
threads: params[:threads],
|
73
|
+
rampup: params[:rampup],
|
74
|
+
duration: params[:duration],
|
75
|
+
override_hosts: params[:override_hosts],
|
76
|
+
override_parameters: params[:override_parameters],
|
77
|
+
started: params[:started],
|
78
|
+
stopped: params[:stopped]
|
79
|
+
},
|
80
|
+
flood_files: flood_files,
|
81
|
+
region: params[:region],
|
82
|
+
multipart: true,
|
83
|
+
content_type: 'application/octet-stream'
|
84
|
+
}.merge(params)
|
85
|
+
|
86
|
+
if response.code == 200
|
87
|
+
logger.info "Flood results at: #{JSON.parse(response)["response"]["results"]["link"]}"
|
88
|
+
else
|
89
|
+
logger.fatal "Sorry there was an error: #{JSON.parse(response)["error_description"]}"
|
90
|
+
end
|
91
|
+
rescue => e
|
92
|
+
logger.fatal "Sorry there was an error: #{JSON.parse(e.response)["error_description"]}"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def logger
|
97
|
+
@log ||= Logger.new(STDOUT)
|
98
|
+
@log.level = Logger::DEBUG
|
99
|
+
@log
|
100
|
+
end
|
101
|
+
|
102
|
+
def loading
|
103
|
+
["Adding Hidden Agendas","Adjusting Bell Curves","Aesthesizing Industrial Areas","Aligning Covariance Matrices","Applying Feng Shui Shaders","Applying Theatre Soda Layer","Asserting Packed Exemplars","Attempting to Lock Back-Buffer","Binding Sapling Root System","Breeding Fauna","Building Data Trees","Bureacritizing Bureaucracies","Calculating Inverse Probability Matrices","Calculating Llama Expectoration Trajectory","Calibrating Blue Skies","Charging Ozone Layer","Coalescing Cloud Formations","Cohorting Exemplars","Collecting Meteor Particles","Compounding Inert Tessellations","Compressing Fish Files","Computing Optimal Bin Packing","Concatenating Sub-Contractors","Containing Existential Buffer","Debarking Ark Ramp","Debunching Unionized Commercial Services","Deciding What Message to Display Next","Decomposing Singular Values","Decrementing Tectonic Plates","Deleting Ferry Routes","Depixelating Inner Mountain Surface Back Faces","Depositing Slush Funds","Destabilizing Economic Indicators","Determining Width of Blast Fronts","Deunionizing Bulldozers","Dicing Models","Diluting Livestock Nutrition Variables","Downloading Satellite Terrain Data","Exposing Flash Variables to Streak System","Extracting Resources","Factoring Pay Scale","Fixing Election Outcome Matrix","Flood-Filling Ground Water","Flushing Pipe Network","Gathering Particle Sources","Generating Jobs","Gesticulating Mimes","Graphing Whale Migration","Hiding Willio Webnet Mask","Implementing Impeachment Routine","Increasing Accuracy of RCI Simulators","Increasing Magmafacation","Initializing My Sim Tracking Mechanism","Initializing Rhinoceros Breeding Timetable","Initializing Robotic Click-Path AI","Inserting Sublimated Messages","Integrating Curves","Integrating Illumination Form Factors","Integrating Population Graphs","Iterating Cellular Automata","Lecturing Errant Subsystems","Mixing Genetic Pool","Modeling Object Components","Mopping Occupant Leaks","Normalizing Power","Obfuscating Quigley Matrix","Overconstraining Dirty Industry Calculations","Partitioning City Grid Singularities","Perturbing Matrices","Pixalating Nude Patch","Polishing Water Highlights","Populating Lot Templates","Preparing Sprites for Random Walks","Prioritizing Landmarks","Projecting Law Enforcement Pastry Intake","Realigning Alternate Time Frames","Reconfiguring User Mental Processes","Relaxing Splines","Removing Road Network Speed Bumps","Removing Texture Gradients","Removing Vehicle Avoidance Behavior","Resolving GUID Conflict","Reticulating Splines","Retracting Phong Shader","Retrieving from Back Store","Reverse Engineering Image Consultant","Routing Neural Network Infanstructure","Scattering Rhino Food Sources","Scrubbing Terrain","Searching for Llamas","Seeding Architecture Simulation Parameters","Sequencing Particles","Setting Advisor Moods","Setting Inner Deity Indicators","Setting Universal Physical Constants","Sonically Enhancing Occupant-Free Timber","Speculating Stock Market Indices","Splatting Transforms","Stratifying Ground Layers","Sub-Sampling Water Data","Synthesizing Gravity","Synthesizing Wavelets","Time-Compressing Simulator Clock","Unable to Reveal Current Activity","Weathering Buildings","Zeroing Crime Network"].sample
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
class Logger
|
4
|
+
module Colors
|
5
|
+
VERSION = '1.0.0'
|
6
|
+
|
7
|
+
NOTHING = '0;0'
|
8
|
+
BLACK = '0;30'
|
9
|
+
RED = '0;31'
|
10
|
+
GREEN = '0;32'
|
11
|
+
BROWN = '0;33'
|
12
|
+
BLUE = '0;34'
|
13
|
+
PURPLE = '0;35'
|
14
|
+
CYAN = '0;36'
|
15
|
+
LIGHT_GRAY = '0;37'
|
16
|
+
DARK_GRAY = '1;30'
|
17
|
+
LIGHT_RED = '1;31'
|
18
|
+
LIGHT_GREEN = '1;32'
|
19
|
+
YELLOW = '1;33'
|
20
|
+
LIGHT_BLUE = '1;34'
|
21
|
+
LIGHT_PURPLE = '1;35'
|
22
|
+
LIGHT_CYAN = '1;36'
|
23
|
+
WHITE = '1;37'
|
24
|
+
|
25
|
+
SCHEMA = {
|
26
|
+
STDOUT => %w[nothing green brown red purple cyan],
|
27
|
+
STDERR => %w[nothing green yellow light_red light_purple light_cyan],
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Logger
|
33
|
+
alias format_message_colorless format_message
|
34
|
+
|
35
|
+
def format_message(level, *args)
|
36
|
+
if Logger::Colors::SCHEMA[@logdev.dev]
|
37
|
+
color = begin
|
38
|
+
Logger::Colors.const_get \
|
39
|
+
Logger::Colors::SCHEMA[@logdev.dev][Logger.const_get(level.sub "ANY","UNKNOWN")].to_s.upcase
|
40
|
+
rescue NameError
|
41
|
+
"0;0"
|
42
|
+
end
|
43
|
+
"\e[#{ color }m#{ format_message_colorless(level, *args) }\e[0;0m"
|
44
|
+
else
|
45
|
+
format_message_colorless(level, *args)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'cgi'
|
3
|
+
|
4
|
+
ENV['PUBLIC_IPV4'] ||= `curl -s --fail --connect-timeout 1 http://169.254.169.254/latest/meta-data/public-ipv4 || curl -s --connect-timeout 10 ifconfig.me || echo 127.0.0.1`.chomp
|
5
|
+
|
6
|
+
describe "sign in", type: :feature do
|
7
|
+
before :each do
|
8
|
+
page.driver.clear_network_traffic if Capybara.default_driver == :poltergeist
|
9
|
+
end
|
10
|
+
|
11
|
+
after :each do
|
12
|
+
Capybara.default_driver == :poltergeist &&
|
13
|
+
page.driver.network_traffic.each do |request|
|
14
|
+
@client.index index: "results-#{Time.now.utc.strftime("%Y.%m.%d")}", type: 'capybara', body: {
|
15
|
+
timestamp: (Time.now.utc.to_f * 1000).to_i.to_s,
|
16
|
+
url: request.url,
|
17
|
+
label: CGI::escape(request.url),
|
18
|
+
request_headers: request.headers.to_s,
|
19
|
+
response_headers: request.response_parts.last.headers.to_s,
|
20
|
+
start_time: (request.time.to_f * 1000).to_i.to_s,
|
21
|
+
end_time: (request.response_parts.last.time.to_f * 1000).to_i.to_s,
|
22
|
+
source_host: ENV['PUBLIC_IPV4'],
|
23
|
+
response_time: (request.response_parts.last.time.to_f * 1000).to_i - (request.time.to_f * 1000).to_i,
|
24
|
+
latency: nil,
|
25
|
+
sample_count: 1,
|
26
|
+
thread_id: ENV['THREAD_ID'] || 1,
|
27
|
+
active_threads: 1,
|
28
|
+
active_threads_in_group: 1,
|
29
|
+
uuid: ENV['FLOOD_UUID'],
|
30
|
+
response_code: request.response_parts.last.status,
|
31
|
+
bytes: 0,
|
32
|
+
request_data: nil,
|
33
|
+
response_data: nil
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should just work" do
|
39
|
+
visit '/'
|
40
|
+
expect(page).to have_content 'Flood'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "navigate", type: :feature do
|
45
|
+
it "should visit homepage" do
|
46
|
+
visit '/'
|
47
|
+
expect(page).to have_content 'Flood'
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should visit features page" do
|
51
|
+
visit '/features'
|
52
|
+
expect(page).to have_content 'Features'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should visit pricing page" do
|
56
|
+
visit '/pricing'
|
57
|
+
expect(page).to have_content 'Pricing'
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should visit faq page" do
|
61
|
+
visit '/faq'
|
62
|
+
expect(page).to have_content 'Frequently Asked Questions'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should visit broken page" do
|
66
|
+
visit '/broken'
|
67
|
+
expect(page).to have_content '404'
|
68
|
+
end
|
69
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'rspec'
|
4
|
+
require 'capybara/rspec'
|
5
|
+
require 'capybara/poltergeist'
|
6
|
+
require 'elasticsearch'
|
7
|
+
|
8
|
+
Capybara.default_driver = :poltergeist
|
9
|
+
Capybara.save_and_open_page_path = File.dirname(__FILE__) + '/var/log/flood/custom'
|
10
|
+
Capybara.app_host = "http://127.0.0.1"
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.before(:all) do
|
14
|
+
@client = Elasticsearch::Client.new log: false
|
15
|
+
end
|
16
|
+
config.after(:all) do
|
17
|
+
end
|
18
|
+
config.around(:each) do |example|
|
19
|
+
begin
|
20
|
+
example.run
|
21
|
+
rescue Exception => ex
|
22
|
+
save_and_open_page
|
23
|
+
raise ex
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,243 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flood-capybara
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tim Koopmans
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
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: capybara
|
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: poltergeist
|
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: elasticsearch
|
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: elasticsearch-api
|
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
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: selenium-webdriver
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: parser
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: unparser
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rest-client
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: thor
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
description: Run your Capybara RSpec test cases on Flood IO
|
196
|
+
email:
|
197
|
+
- tim@flood.io
|
198
|
+
executables:
|
199
|
+
- flood-capybara
|
200
|
+
extensions: []
|
201
|
+
extra_rdoc_files: []
|
202
|
+
files:
|
203
|
+
- ".gitignore"
|
204
|
+
- Gemfile
|
205
|
+
- LICENSE.txt
|
206
|
+
- README.md
|
207
|
+
- Rakefile
|
208
|
+
- bin/flood-capybara
|
209
|
+
- flood-capybara.gemspec
|
210
|
+
- lib/cli/application.rb
|
211
|
+
- lib/flood-capybara.rb
|
212
|
+
- lib/flood-capybara/application.rb
|
213
|
+
- lib/flood-capybara/logger.rb
|
214
|
+
- lib/flood-capybara/version.rb
|
215
|
+
- spec/features/homepage_spec.rb
|
216
|
+
- spec/spec_helper.rb
|
217
|
+
homepage: ''
|
218
|
+
licenses:
|
219
|
+
- MIT
|
220
|
+
metadata: {}
|
221
|
+
post_install_message:
|
222
|
+
rdoc_options: []
|
223
|
+
require_paths:
|
224
|
+
- lib
|
225
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
231
|
+
requirements:
|
232
|
+
- - ">="
|
233
|
+
- !ruby/object:Gem::Version
|
234
|
+
version: '0'
|
235
|
+
requirements: []
|
236
|
+
rubyforge_project:
|
237
|
+
rubygems_version: 2.2.2
|
238
|
+
signing_key:
|
239
|
+
specification_version: 4
|
240
|
+
summary: Run your Capybara RSpec test cases on Flood IO
|
241
|
+
test_files:
|
242
|
+
- spec/features/homepage_spec.rb
|
243
|
+
- spec/spec_helper.rb
|