initial stuff
This commit is contained in:
commit
a9d5f05c48
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
*.gem
|
||||
*.rbc
|
||||
.bundle
|
||||
.config
|
||||
.yardoc
|
||||
Gemfile.lock
|
||||
InstalledFiles
|
||||
_yardoc
|
||||
coverage
|
||||
doc/
|
||||
lib/bundler/man
|
||||
pkg
|
||||
rdoc
|
||||
spec/reports
|
||||
test/tmp
|
||||
test/version_tmp
|
||||
tmp
|
4
Gemfile
Normal file
4
Gemfile
Normal file
@ -0,0 +1,4 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
# Specify your gem's dependencies in cuke-pack.gemspec
|
||||
gemspec
|
22
LICENSE
Normal file
22
LICENSE
Normal file
@ -0,0 +1,22 @@
|
||||
Copyright (c) 2012 John Bintz
|
||||
|
||||
MIT License
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
29
README.md
Normal file
29
README.md
Normal file
@ -0,0 +1,29 @@
|
||||
# Cuke::Pack
|
||||
|
||||
TODO: Write a gem description
|
||||
|
||||
## Installation
|
||||
|
||||
Add this line to your application's Gemfile:
|
||||
|
||||
gem 'cuke-pack'
|
||||
|
||||
And then execute:
|
||||
|
||||
$ bundle
|
||||
|
||||
Or install it yourself as:
|
||||
|
||||
$ gem install cuke-pack
|
||||
|
||||
## Usage
|
||||
|
||||
TODO: Write usage instructions here
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork it
|
||||
2. Create your feature branch (`git checkout -b my-new-feature`)
|
||||
3. Commit your changes (`git commit -am 'Added some feature'`)
|
||||
4. Push to the branch (`git push origin my-new-feature`)
|
||||
5. Create new Pull Request
|
23
bin/cuke-pack
Executable file
23
bin/cuke-pack
Executable file
@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'thor'
|
||||
|
||||
module CukePack
|
||||
class CLI < Thor
|
||||
include Thor::Actions
|
||||
|
||||
def self.source_root
|
||||
File.expand_path('../../skel', __FILE__)
|
||||
end
|
||||
|
||||
desc "install", "Install CukePack into the current directory"
|
||||
def install
|
||||
directory '.', '.'
|
||||
end
|
||||
|
||||
default_task :install
|
||||
end
|
||||
end
|
||||
|
||||
CukePack::CLI.start
|
||||
|
23
cuke-pack.gemspec
Normal file
23
cuke-pack.gemspec
Normal file
@ -0,0 +1,23 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
require File.expand_path('../lib/cuke-pack/version', __FILE__)
|
||||
|
||||
Gem::Specification.new do |gem|
|
||||
gem.authors = ["John Bintz"]
|
||||
gem.email = ["john@coswellproductions.com"]
|
||||
gem.description = %q{Stuff I use for Cucumber}
|
||||
gem.summary = %q{Stuff I use for Cucumber}
|
||||
gem.homepage = ""
|
||||
|
||||
gem.files = `git ls-files`.split($\)
|
||||
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
||||
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
||||
gem.name = "cuke-pack"
|
||||
gem.require_paths = ["lib"]
|
||||
gem.version = CukePack::VERSION
|
||||
|
||||
gem.add_dependency 'cucumber'
|
||||
gem.add_dependency 'cucumber-step_writer'
|
||||
gem.add_dependency 'thor'
|
||||
gem.add_dependency 'flay'
|
||||
end
|
||||
|
25
lib/cucumber/cleanup_formatter.rb
Normal file
25
lib/cucumber/cleanup_formatter.rb
Normal file
@ -0,0 +1,25 @@
|
||||
require 'cucumber/formatter/ansicolor'
|
||||
|
||||
module Cucumber
|
||||
class CleanupFormatter
|
||||
include Cucumber::Formatter::ANSIColor
|
||||
|
||||
def initialize(step_mother, path_or_io, options)
|
||||
@step_mother = step_mother
|
||||
end
|
||||
|
||||
def after_features(features)
|
||||
defs = @step_mother.unmatched_step_definitions
|
||||
|
||||
if !defs.empty?
|
||||
$stdout.puts yellow("The following steps are unused:")
|
||||
$stdout.puts
|
||||
|
||||
defs.each do |step|
|
||||
$stdout.puts yellow(step.file_colon_line)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
2
lib/cuke-pack.rb
Normal file
2
lib/cuke-pack.rb
Normal file
@ -0,0 +1,2 @@
|
||||
require "cuke-pack/version"
|
||||
require 'cucumber/cleanup_formatter'
|
7
lib/cuke-pack/support/failfast.rb
Normal file
7
lib/cuke-pack/support/failfast.rb
Normal file
@ -0,0 +1,7 @@
|
||||
After do |scenario|
|
||||
if ENV['FAILFAST'] && scenario.failed?
|
||||
$stderr.puts "Test failed, quitting..."
|
||||
|
||||
Cucumber.wants_to_quit = true
|
||||
end
|
||||
end
|
18
lib/cuke-pack/support/flay.rb
Normal file
18
lib/cuke-pack/support/flay.rb
Normal file
@ -0,0 +1,18 @@
|
||||
# run flay on your cucumber steps after a successful run. prevent bloat and
|
||||
# promote reusability!
|
||||
|
||||
flay_exception = nil
|
||||
flay_level = 32 if flay_level = nil
|
||||
# set me to a minimum sane level. don't go nuts refactoring!
|
||||
# code should be cleaner when you're done, not become spaghetti.
|
||||
|
||||
After do |s|
|
||||
flay_exception ||= s.exception
|
||||
end
|
||||
|
||||
at_exit do
|
||||
if flay_level
|
||||
system %{flay -m #{flay_level} features/step_definitions/**/*.rb} if !flay_exception
|
||||
end
|
||||
end
|
||||
|
8
lib/cuke-pack/support/pause.rb
Normal file
8
lib/cuke-pack/support/pause.rb
Normal file
@ -0,0 +1,8 @@
|
||||
def pause
|
||||
if @pause_ok
|
||||
$stdout.puts "Paused. Press [ Return ] to continue."
|
||||
$stdin.getc
|
||||
$stdout.puts "Resuming..."
|
||||
end
|
||||
end
|
||||
|
10
lib/cuke-pack/support/pending.rb
Normal file
10
lib/cuke-pack/support/pending.rb
Normal file
@ -0,0 +1,10 @@
|
||||
module Cucumber::RbSupport::RbWorld
|
||||
alias :_pending :pending
|
||||
|
||||
def pending
|
||||
pause
|
||||
|
||||
_pending
|
||||
end
|
||||
end
|
||||
|
13
lib/cuke-pack/support/step_writer.rb
Normal file
13
lib/cuke-pack/support/step_writer.rb
Normal file
@ -0,0 +1,13 @@
|
||||
require 'cucumber/step_writer'
|
||||
|
||||
Cucumber::StepWriter.after_write do |dir|
|
||||
%w{open xdg-open}.each do |cmd|
|
||||
%x{which #{cmd}}
|
||||
|
||||
if $?.exitstatus
|
||||
system %{#{cmd} #{dir}}
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
48
lib/cuke-pack/support/wait_for.rb
Normal file
48
lib/cuke-pack/support/wait_for.rb
Normal file
@ -0,0 +1,48 @@
|
||||
MAX_TIMES = 20
|
||||
WAIT_TIME = 0.1
|
||||
|
||||
def wait_for(times = MAX_TIMES)
|
||||
1.upto(times) do
|
||||
ok = false
|
||||
|
||||
begin
|
||||
ok = yield
|
||||
rescue Capybara::ElementNotFound, Capybara::Driver::Webkit::Node::ElementNotDisplayedError
|
||||
ok = false
|
||||
end
|
||||
|
||||
if ok
|
||||
return
|
||||
else
|
||||
sleep WAIT_TIME
|
||||
end
|
||||
end
|
||||
|
||||
raise StandardError.new("Failed")
|
||||
end
|
||||
|
||||
def wait_for_not(times = MAX_TIMES)
|
||||
original_time = Capybara.default_wait_time
|
||||
Capybara.default_wait_time = 0
|
||||
|
||||
1.upto(times) do
|
||||
ok = false
|
||||
|
||||
begin
|
||||
yield
|
||||
rescue Capybara::Driver::Webkit::NodeNotAttachedError, Capybara::ElementNotFound
|
||||
ok = true
|
||||
end
|
||||
|
||||
if ok
|
||||
Capybara.default_wait_time = original_time
|
||||
|
||||
return
|
||||
else
|
||||
sleep WAIT_TIME
|
||||
end
|
||||
end
|
||||
|
||||
raise StandardError.new('Timed out')
|
||||
end
|
||||
|
3
lib/cuke-pack/version.rb
Normal file
3
lib/cuke-pack/version.rb
Normal file
@ -0,0 +1,3 @@
|
||||
module CukePack
|
||||
VERSION = "0.0.1"
|
||||
end
|
8
skel/config/cucumber.yml
Normal file
8
skel/config/cucumber.yml
Normal file
@ -0,0 +1,8 @@
|
||||
<%
|
||||
std_opts = "-r features --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} -f Cucumber::StepWriter --out features/step_definitions --strict"
|
||||
%>
|
||||
default: <%= std_opts %> features
|
||||
wip: <%= std_opts %> --tags @wip features
|
||||
precommit: FAILFAST=true <%= std_opts %> --tags ~@wip:0 features
|
||||
cleanup: <%= std_opts %> -f Cucumber::CleanupFormatter --out unused.txt features
|
||||
|
20
skel/features/support/cuke-pack.rb
Normal file
20
skel/features/support/cuke-pack.rb
Normal file
@ -0,0 +1,20 @@
|
||||
require 'cuke-pack/support/pause'
|
||||
require 'cuke-pack/support/pending'
|
||||
|
||||
Before do
|
||||
# if you want pending steps to pause before marking the step as pending,
|
||||
# set @pause_ok to true
|
||||
|
||||
@pause_ok = false
|
||||
end
|
||||
|
||||
require 'cuke-pack/support/step_writer'
|
||||
require 'cuke-pack/support/wait_for'
|
||||
require 'cuke-pack/support/failfast'
|
||||
|
||||
# set the level of flaying on the step definitions
|
||||
# set it to false to skip flaying
|
||||
flay_level = 32
|
||||
|
||||
require 'cuke-pack/support/flay'
|
||||
|
Loading…
Reference in New Issue
Block a user