rspec_starter 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 94076d4db8d8a8e83410f07f9134d2e94d3bff4d
4
+ data.tar.gz: 300135da1ef3d8c491e75f2a092690d1941caaf7
5
+ SHA512:
6
+ metadata.gz: 6c35c1d6769f02ddf3e435017b854bafeb70ab7e12fb737902a4e8052412bc9c710a261f916eecc56002cef2b5a0a932bf897fe3f9ff94e0d2abf15f7039201f
7
+ data.tar.gz: 7525262e24ad869c37ea1a327bfa345939b5d1a6b35c68d206ff54ac5d6c454c7b60f39adba9bdc2e6689a1a8436a89f8f6adbb8257c426380800affc441e077
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,5 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.1.0 (Apr 06, 2017)
4
+
5
+ 1. Initial Release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rspec_starter.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2017
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 all
13
+ 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 THE
21
+ SOFTWARE.
@@ -0,0 +1,94 @@
1
+ # rspec_starter
2
+
3
+ rspec_starter is a Ruby gem that simplifies the process of running RSpec. Large development teams often manage multiple projects. When developers move around projects, it can be unclear how to start RSpec in a way that runs the test suite properly for a given project. Hopefully someone took the time to explain how to do it in the README, but this frequently doesn't happen.
4
+
5
+ With rspec_starter, a script is created which specifies how to run RSpec properly for the application. Anyone can invoke the script to run the rspec test suite. No confusion. Self documenting. Amazing.
6
+
7
+ rspec_starter also helps smooth out differences between operating systems. For example, MacOS provides it's own display server for running feature tests whereas Linux operating systems may need to start a display sever, like XVFB, before feature tests will pass. Once rspec_starter is setup, developers simply execute the script and rspec_starter does the rest.
8
+
9
+ At the moment, rspec_starter works for Rails applications and raw ruby applications/gems that are not database dependent. We can support other frameworks if needed desired.
10
+
11
+ ### Main Steps
12
+
13
+ RSpec runner can curently perform the following steps (these steps can be toggled on or off)
14
+
15
+ - Prepare a Rails database by running `rake db:drop db:create db:migrate RAILS_ENV=test`
16
+ - Remove the `tmp` folder if it exists
17
+ - Verify XVFB is installed when running on a Linux box
18
+ - Start RSpec with 'bundle exec rspec' or 'xvfb-run bundle exec rspec' as needed
19
+
20
+ ## Versioning Strategy
21
+
22
+ This gem uses [semver](semver.org).
23
+
24
+ ## Installation
25
+
26
+ ### Rails
27
+
28
+ Add this line to your application's Gemfile:
29
+
30
+ ```ruby
31
+ gem 'rspec_starter', require: false
32
+ ```
33
+
34
+ And then execute:
35
+
36
+ $ bundle
37
+
38
+ Inside the `bin` folder, create file called `start_rspec` (it can be named anything you like).
39
+
40
+ Run `chmod +x start_rspec` to make the file executable.
41
+
42
+ Add the following contents to the file
43
+
44
+ #!/usr/bin/env ruby
45
+
46
+ # Execute this script to run RSpec for the app.
47
+ # To run all specs, navigate to the application's root folder and execute
48
+ # bin/start_rspec
49
+ # rspec_starter takes command line options and forwards unknown options to rspec
50
+ # bin/start_rspec --no-prep-db spec/features
51
+ # See the help output for more advanced ways to run the script
52
+ # bin/start_rspec --help
53
+
54
+ require "bundler/setup"
55
+ require "rspec_starter"
56
+
57
+ # The path to the application's root folder.
58
+ APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
59
+
60
+ # Run commands in the context of the application's root folder.
61
+ Dir.chdir APP_ROOT do
62
+ # Arguments passed to 'start' define the steps needed to cleanly run RSpec.
63
+ # Command line options may change execution on a per-run basis.
64
+ RspecStarter.start(prepare_db: true, remove_tmp: true, allow_xvfb: true)
65
+ end
66
+
67
+ ## Usage
68
+
69
+ `cd` into the root of your application/project and invoke the script. For these examples, it is assumed you placed the script in the `bin` folder of your app.
70
+
71
+ $ bin/start_rspec
72
+
73
+ The above command will run the entire test suite. You can pass options to the script as well. Some of the options will be consumed by start_rspec and some will be forwarded on to rspec. As a result, you could do something like
74
+
75
+ $ bin/start_rspec spec/features
76
+
77
+ which tells start_rspec, to tell rspec, to only run the feature tests. Run the following command to see other ways to use the script
78
+
79
+ $ bin/start_rspec --help
80
+
81
+ ## Configuration
82
+
83
+ The entire idea behind start_rspec is to standardize the process of starting application. You can modify the `bin/start_rspec` file (assuming you put `start_rspec` inside the `bin` folder of your project) to do whatever you want. If you open that file, you'll see that it basically does one thing - it calls the following command in the context of the root folder, of your project:
84
+
85
+ RspecStarter.start(prepare_db: true, remove_tmp: true, allow_xvfb: true)
86
+
87
+ The arguments passed to `start_rspec`, represent the defaults you consider important for achieving a clean RSpec run. If your particular project doesn't have a DB, or you don't need it prepared before each Rspec run, you could turn that step off by passing `prepare_db: false`.
88
+
89
+ Be careful about the steps you enable/disable inside the script file. **The goal is to define steps that help people, with limited knowledge of the app, successfully run the test suite.** Having said that, it's certainly a waste of time to prepare the test database if you just ran the test suite and you know it's empty (start_rspec doesn't advocate seeding the test database). If you want to turn steps off on a per run basis, you can use command line options. Run `bin/start_rspec --help` to see a list of available options.
90
+
91
+ ## Contributing
92
+
93
+ Bug reports and pull requests are welcome on GitHub at https://github.com/roberts1000/rspec_starter.
94
+
@@ -0,0 +1,13 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
8
+ # Adds the ability to run 'rake console' in the terminal and have a console
9
+ # that already knows about the gem
10
+ task :console do
11
+ exec "pry -r rspec_starter -I ./lib"
12
+ # exec "irb -r didit_rails_framework -I ./lib"
13
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "rspec_starter"
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
+ require "pry"
10
+ Pry.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Execute this script to run RSpec for the app.
4
+ # To run all specs, navigate to the application's root folder and execute
5
+ # bin/start_rspec
6
+ # rspec_starter takes command line options and forwards unknown options to rspec
7
+ # bin/start_rspec --no-prep-db spec/features
8
+ # See the help output for more advanced ways to run the script
9
+ # bin/start_rspec --help
10
+
11
+ require "bundler/setup"
12
+ require "rspec_starter"
13
+
14
+ # The path to the application's root folder.
15
+ APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
16
+
17
+ # Run commands in the context of the application's root folder.
18
+ Dir.chdir APP_ROOT do
19
+ # Arguments passed to 'start' define the steps needed to cleanly run RSpec.
20
+ # Command line options may change execution on a per-run basis.
21
+ RspecStarter.start(prepare_db: false, remove_tmp: true, allow_xvfb: true)
22
+ end
@@ -0,0 +1,28 @@
1
+ require "rspec_starter/version"
2
+ require_relative 'rspec_starter/runner'
3
+
4
+ module RspecStarter
5
+ # The 'start' method takes arguments that can be used to control the steps that are executed when running Rspec. These
6
+ # arguments are specified by the developer when configuring how the app prefers to run RSpec. In addition to the arguments,
7
+ # the end user can pass command line options to the script/executable that is executing 'start'. The command line options
8
+ # allow the end user to customize execution on a per-run basis. In general, the arguments have the ability to turn features
9
+ # on and off while the command line options allow users to turn features off. For example, a developer could probably
10
+ # configure his aplication to always prepare the database before running RSpec. When the command is run, the developer might
11
+ # want to bypass preparing the database for a specific run because he already knows the database is clean (this will save some
12
+ # startup time). On the other hand, if the developer has configured 'start' to never prepare the database, he cannot
13
+ # enable it via the command line on a specific run.
14
+ #
15
+ # Arguments List
16
+ # defaults(Hash)
17
+ # :prepare_db => (true/false) Should the database be rebuilt?
18
+ # :remove_tmp => (true/false) Should the tmp folder inside the application be removed before starting RSpec?
19
+ # :allow_xvfb => (true/false) Should XVFB be allowed on systems that need it (like Linux)
20
+ #
21
+ # Command Line Options
22
+ # --no-xvfb Do not attempt to start XVFB on Linux. On Macs, this doesn't do anything since XVFB doesn't exist.
23
+ # --no-prep-db Do not try to rebuild the database. This is useful when the db is already clean and want to save time.
24
+ # --no-remove-tmp Do not attempt to remove the tmp folder.
25
+ def self.start(defaults={})
26
+ Runner.new(defaults).run
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ # Add some ome simple colorization methods for formatting console output.
2
+ # Prefix methods with rs_ so they don't collide with other gems.
3
+ class String
4
+ def rs_colorize(color_code)
5
+ "\e[#{color_code}m#{self}\e[0m"
6
+ end
7
+
8
+ def rs_red
9
+ rs_colorize(31)
10
+ end
11
+
12
+ def rs_green
13
+ rs_colorize(32)
14
+ end
15
+
16
+ def rs_yellow
17
+ rs_colorize(33)
18
+ end
19
+ end
@@ -0,0 +1,35 @@
1
+ module RspecStarter
2
+ module Help
3
+ def should_show_help?
4
+ ARGV.any? { |option| option.include? "--help" }
5
+ end
6
+
7
+ def show_help
8
+ # Figure out the name of the file that invoked the rspec_starter helper. This is the name of the script; it be called anything.
9
+ script_name = calling_file_name
10
+ puts "Usage: #{script_name.rs_yellow} #{'[options] [options for RSpec]'.rs_yellow}\n"
11
+ puts " #{script_name} will look for its own options first then pass any remaining options to rspec"
12
+
13
+ puts "\nOptions: (run 'rspec --help' to see RSpec's options)"
14
+ puts " #{'--no-xvfb'.rs_yellow} DO NOT run XVFB (this can speed up RSpec when running tests that don't need XVFB)"
15
+ puts " #{'--no-prep'.rs_yellow} DO NOT prepare the test database (can speed up testing if you know the DB is clean)"
16
+
17
+ puts "\nExamples:"
18
+ puts " #{script_name.rs_yellow} #{'spec/features'.rs_yellow} (only run specs in the specs/features folder)"
19
+ puts " #{script_name.rs_yellow} #{'spec/features/some_spec:53'.rs_yellow} (run the spec on line 53 of the spec/features_some_spec.rb file)"
20
+ puts " #{script_name.rs_yellow} #{'--no-xvfb'.rs_yellow} #{'spec/requests/some_spec'.rs_yellow} (don't start XVFB since it's not needed for request specs)"
21
+ puts " SIMPLECOV_FORMATTER=rcov #{script_name.rs_yellow} (use with environment variables)\n"
22
+ end
23
+
24
+ # This is ugly, but it gives us some added flexibility. Users can invoke the rspec_starter method from any script or
25
+ # executable. This method attempts to find out the name of the script/exectuable.
26
+ # "caller" returns the method stack, and because of the location of this file in the gem, we happen to be the 4 item in the
27
+ # the array (hence "caller[3]" below).
28
+ #
29
+ # This method may not return a pretty result in all cases, but it's decent if the user has defined a script in their project
30
+ # (possibly in the bin folder, or root of the project).
31
+ def calling_file_name
32
+ caller[3].split(":")[0]
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,67 @@
1
+ require 'pathname'
2
+ require 'open3'
3
+ require_relative 'core_ext/string'
4
+ require_relative 'which'
5
+ require_relative 'help'
6
+ require_relative 'steps/step'
7
+ require_relative 'steps/verify_xvfb_step'
8
+ require_relative 'steps/prepare_database_step'
9
+ require_relative 'steps/remove_tmp_folder_step'
10
+ require_relative 'steps/invoke_rspec_step'
11
+
12
+ module RspecStarter
13
+ # This is a simple class that encapulates the process of running RSpec. When a Runner is created, it creates a set of
14
+ # steps that will be executed, in order, when the 'run' method is invoked. Each step encapsulates an action that can be
15
+ # taken to help invoke Rspec. Steps are typically independent do not depend on information from other steps. However
16
+ # this is not a hard rule. If more complex steps are needed, feel free to create them. Each steps knows about the main
17
+ # runner object, so the runner object is a good place to store shared info.
18
+ class Runner
19
+ include Help
20
+ attr_reader :xvfb_installed, :step_num, :steps
21
+
22
+ def initialize(defaults)
23
+ @steps = []
24
+ @step_num = 1
25
+ @xvfb_installed = RspecStarter.which("xvfb-run")
26
+ @steps << VerifyXvfbStep.new(defaults, self)
27
+ @steps << PrepareDatabaseStep.new(defaults, self)
28
+ @steps << RemoveTmpFolderStep.new(defaults, self)
29
+ @steps << InvokeRspecStep.new(defaults, self)
30
+ end
31
+
32
+ def run
33
+ return show_help if should_show_help? # If we show help, exit and don't do anything else.
34
+
35
+ @steps.each do |step|
36
+ if step.should_execute?
37
+ step.execute
38
+ @step_num += 1
39
+ break if step.failed?
40
+ end
41
+ end
42
+ end
43
+
44
+ def app_uses_rails?
45
+ File.file?(File.join(Dir.pwd, 'config', 'application.rb'))
46
+ end
47
+
48
+ def operating_system_name
49
+ result = `uname`
50
+ return 'Linux' if result.include?('Linux')
51
+ return 'MacOS' if result.include?('Darwin')
52
+ 'Unknown'
53
+ end
54
+
55
+ def is_linux?
56
+ operating_system_name == 'Linux'
57
+ end
58
+
59
+ def is_mac?
60
+ operating_system_name == 'MacOS'
61
+ end
62
+
63
+ def xvfb_installed?
64
+ @xvfb_installed
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,44 @@
1
+ module RspecStarter
2
+ class InvokeRspecStep < RspecStarter::Step
3
+
4
+ def initialize(defaults, runner)
5
+ super(runner)
6
+ @allow_xvfb = defaults.fetch(:allow_xvfb, true)
7
+ @relevant_options = ["--no-xvfb"]
8
+ @success_or_skipped = nil # Will be updated once step executes
9
+ @user_wants_to_skip_xvfb = ARGV.any? { |option| option.include?("--no-xvfb") }
10
+ init_rspec_options
11
+ end
12
+
13
+ def init_rspec_options
14
+ step_options = []
15
+ @runner.steps.each { |step| step_options.concat(step.relevant_options) }
16
+ @rspec_options = ARGV - step_options.to_a
17
+ end
18
+
19
+ def should_execute?
20
+ true
21
+ end
22
+
23
+ def failed?
24
+ !@success_or_skipped
25
+ end
26
+
27
+ def execute
28
+ cmd = command
29
+ cmd = "#{cmd} #{@rspec_options.join(' ')}" unless @rspec_options.empty?
30
+ puts "[#{@runner.step_num}] Running specs with '#{cmd.rs_yellow}' ...\n\n"
31
+ system cmd
32
+ @success_or_skipped = true
33
+ end
34
+
35
+ # Returns a string that will either be 'xvfb-run bundle exec rspec' or 'bundle exec rspec'
36
+ def command
37
+ base = "bundle exec rspec"
38
+ return base if @runner.is_mac?
39
+ return base unless @allow_xvfb
40
+ return base if @user_wants_to_skip_xvfb
41
+ @runner.xvfb_installed? ? "xvfb-run #{base}" : base
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,41 @@
1
+ module RspecStarter
2
+ class PrepareDatabaseStep < RspecStarter::Step
3
+ def initialize(defaults, runner)
4
+ super(runner)
5
+ @prepare_database = defaults.fetch(:prepare_db, true)
6
+ @relevant_options << '--no-prep-db'
7
+ @user_wants_to_skip = ARGV.any? { |option| option.include?("--no-prep-db") }
8
+ @success_or_skipped = nil # Will be updated once step executes
9
+ end
10
+
11
+ def failed?
12
+ !@success_or_skipped
13
+ end
14
+
15
+ def should_execute?
16
+ return false if @user_wants_to_skip
17
+ return false unless @prepare_database
18
+ @runner.app_uses_rails?
19
+ end
20
+
21
+ def execute
22
+ return @success_or_skipped = true if should_skip?
23
+
24
+ rebuild_cmd = "rake db:drop db:create db:migrate RAILS_ENV=test"
25
+ print "[#{@runner.step_num}] Preparing the test database with '#{rebuild_cmd.rs_yellow}' ... "
26
+ _stdin, _stdout, stderr = Open3.popen3(rebuild_cmd)
27
+ error_msg_array = stderr.readlines
28
+
29
+ if error_msg_array.empty?
30
+ puts "Success".rs_green
31
+ @success_or_skipped = true
32
+ else
33
+ puts "\n\n"
34
+ puts error_msg_array
35
+ puts "\n\nThere was an error rebuilding the test database. See the output above for details.".rs_red
36
+ puts "or manually run '#{rebuild_cmd}' for more information.".rs_red
37
+ @success_or_skipped = false
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,42 @@
1
+ module RspecStarter
2
+ class RemoveTmpFolderStep < RspecStarter::Step
3
+ def initialize(defaults, runner)
4
+ super(runner)
5
+ @remove_tmp_folder = defaults.fetch(:remove_tmp, true)
6
+ @runner = runner
7
+ @relevant_options << "--no-remove-tmp"
8
+ @user_wants_to_skip_removal = ARGV.any? { |option| option.include?("--no-remove-tmp") }
9
+ @success_or_skipped = nil # Will be updated once step executes
10
+ end
11
+
12
+ def failed?
13
+ !@success_or_skipped
14
+ end
15
+
16
+ def should_execute?
17
+ return false if @user_wants_to_skip_removal
18
+ @remove_tmp_folder
19
+ end
20
+
21
+ def execute
22
+ return @success_or_skipped = true unless should_execute?
23
+ existed_before = tmp_folder_exists?
24
+
25
+ print "[#{@runner.step_num}] Removing #{'tmp'.rs_yellow} folder ... "
26
+ system "rm -rf tmp/"
27
+
28
+ if tmp_folder_exists?
29
+ @succss_or_skipped = false
30
+ puts "Failed (The tmp folder could not be removed.)".red
31
+ else
32
+ @success_or_skipped = true
33
+ info = existed_before ? "" : " (the tmp folder didn't exist)"
34
+ puts "Success!!#{info}".rs_green
35
+ end
36
+ end
37
+
38
+ def tmp_folder_exists?
39
+ File.exist?(File.join(Dir.pwd, "tmp"))
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,14 @@
1
+ module RspecStarter
2
+ class Step
3
+ attr_reader :relevant_options
4
+
5
+ def initialize(runner)
6
+ @runner = runner
7
+ @relevant_options = []
8
+ end
9
+
10
+ def should_skip?
11
+ !should_execute?
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,48 @@
1
+ module RspecStarter
2
+ class VerifyXvfbStep < RspecStarter::Step
3
+
4
+ def initialize(defaults, runner)
5
+ super(runner)
6
+ @relevant_options << '--no-xvfb'
7
+ @use_xvfb = defaults.fetch(:use_xvfb, true)
8
+ @user_wants_to_skip_xvfb = ARGV.any? { |option| option.include?("--no-xvfb") }
9
+ end
10
+
11
+ # This step doesn't really fail. Although there may be problems with how XVFB is installed, it's only a problem when the
12
+ # user is trying to run feature specs. The user may be in a situation where he's working on Linux and XVFB isn't installed,
13
+ # but he may not have any feature specs to run. We shouldn't block the tests from running just because XVFB hasn't been
14
+ # installed yet. So we just warn the user and put the ball in his court. If he's running feature specs with a busted
15
+ # XVFB setup, we have at least warned him.
16
+ def failed?
17
+ false
18
+ end
19
+
20
+ def should_execute?
21
+ return false if @user_wants_to_skip_xvfb
22
+ @use_xvfb
23
+ end
24
+
25
+ # There are two cases we need to be checked
26
+ # 1. A Linux user does not have xvfb installed (xvfb is needed to run RSpec feature tests on Linux).
27
+ # 2. A Mac User has xvfb installed. (Macs have their own display server so xvfb is not needed; a dev might have mistakenly
28
+ # tried to install, so we can check for it just in case.)
29
+ def execute
30
+ return if should_skip?
31
+
32
+ print "[#{@runner.step_num}] Verifying display server ... "
33
+
34
+ if @runner.is_linux? && !@runner.xvfb_installed?
35
+ print "Warning".rs_yellow
36
+ return puts " (XVFB has NOT been installed on this system. If you are running feature specs, they will fail.)".rs_yellow
37
+ end
38
+
39
+ if @runner.is_mac? && @runner.xvfb_installed?
40
+ print "Warning".rs_yellow
41
+ return puts " (XVFB has been installed. This is not needed on a Mac and may cause specs to fail.)".rs_yellow
42
+ end
43
+
44
+ puts "Success!!".rs_green
45
+ end
46
+ end
47
+ end
48
+
@@ -0,0 +1,3 @@
1
+ module RspecStarter
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,12 @@
1
+ module RspecStarter
2
+ def self.which(cmd)
3
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
4
+ ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
5
+ exts.each { |ext|
6
+ exe = File.join(path, "#{cmd}#{ext}")
7
+ return exe if File.executable?(exe) && !File.directory?(exe)
8
+ }
9
+ end
10
+ return "nil"
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rspec_starter/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rspec_starter"
8
+ spec.version = RspecStarter::VERSION
9
+ spec.authors = ["Roberts"]
10
+ spec.email = ["roberts@corlewsolutions.com"]
11
+
12
+ spec.summary = "A Ruby gem that helps run RSpec in a standard manner."
13
+ spec.description = "A Ruby gem that helps run RSpec in a standard manner."
14
+ spec.homepage = "https://github.com/roberts1000/rspec_starter"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.14"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "pry"
27
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rspec_starter
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Roberts
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-04-06 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.14'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.14'
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: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
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
+ description: A Ruby gem that helps run RSpec in a standard manner.
70
+ email:
71
+ - roberts@corlewsolutions.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - CHANGELOG.md
79
+ - Gemfile
80
+ - LICENSE.md
81
+ - README.md
82
+ - Rakefile
83
+ - bin/console
84
+ - bin/setup
85
+ - bin/start_rspec
86
+ - lib/rspec_starter.rb
87
+ - lib/rspec_starter/core_ext/string.rb
88
+ - lib/rspec_starter/help.rb
89
+ - lib/rspec_starter/runner.rb
90
+ - lib/rspec_starter/steps/invoke_rspec_step.rb
91
+ - lib/rspec_starter/steps/prepare_database_step.rb
92
+ - lib/rspec_starter/steps/remove_tmp_folder_step.rb
93
+ - lib/rspec_starter/steps/step.rb
94
+ - lib/rspec_starter/steps/verify_xvfb_step.rb
95
+ - lib/rspec_starter/version.rb
96
+ - lib/rspec_starter/which.rb
97
+ - rspec_starter.gemspec
98
+ homepage: https://github.com/roberts1000/rspec_starter
99
+ licenses: []
100
+ metadata: {}
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 2.6.11
118
+ signing_key:
119
+ specification_version: 4
120
+ summary: A Ruby gem that helps run RSpec in a standard manner.
121
+ test_files: []