From 8a014959b3740136fc36b837c5a4d61373eab551 Mon Sep 17 00:00:00 2001 From: Lovro Bikic Date: Wed, 18 Aug 2021 23:05:05 +0200 Subject: [PATCH 1/7] Turn on coverage by branch and exclude spec folder --- spec/spec_helper.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 03de4120..4087821b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,9 +1,11 @@ require 'simplecov' -SimpleCov.start +SimpleCov.start do + add_filter '/spec/' -$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib')) -$LOAD_PATH.unshift(File.dirname(__FILE__)) + enable_coverage :branch + primary_coverage :branch +end require 'mina' require 'rspec' From bfaa4008b98d90982f188c67e765438747e7e4ee Mon Sep 17 00:00:00 2001 From: Lovro Bikic Date: Wed, 18 Aug 2021 23:21:08 +0200 Subject: [PATCH 2/7] Refactor tests so that they don't share state --- spec/configs/default.rb | 6 +++++ spec/lib/mina/application_spec.rb | 24 ------------------ spec/lib/mina/helpers/internal_spec.rb | 5 +--- spec/spec_helper.rb | 18 +++++++------- spec/support/rake_example_group.rb | 15 ++++++------ spec/tasks/bundler_spec.rb | 4 +++ spec/tasks/chruby_spec.rb | 4 +++ spec/tasks/default_spec.rb | 14 +++++------ spec/tasks/deploy_spec.rb | 4 +++ spec/tasks/git_spec.rb | 4 +++ spec/tasks/init_spec.rb | 4 +++ spec/tasks/rails_spec.rb | 34 ++++++-------------------- spec/tasks/rbenv_spec.rb | 4 +++ spec/tasks/rvm_spec.rb | 4 +++ spec/tasks/ry_spec.rb | 4 +++ 15 files changed, 70 insertions(+), 78 deletions(-) create mode 100644 spec/configs/default.rb diff --git a/spec/configs/default.rb b/spec/configs/default.rb new file mode 100644 index 00000000..e73ed1c4 --- /dev/null +++ b/spec/configs/default.rb @@ -0,0 +1,6 @@ +set :simulate, true +set :domain, 'localhost' +set :deploy_to, "#{Dir.pwd}/deploy" +set :repository, "#{Mina.root_path}" +set :shared_paths, ['config/database.yml', 'log'] +set :keep_releases, 2 diff --git a/spec/lib/mina/application_spec.rb b/spec/lib/mina/application_spec.rb index e66ed135..a8f06222 100644 --- a/spec/lib/mina/application_spec.rb +++ b/spec/lib/mina/application_spec.rb @@ -37,12 +37,6 @@ ['--verbose', '-v'].each do |option| describe option do - around do |example| - original_flag = application.fetch(:verbose) - example.run - application.set(:verbose, original_flag) - end - it 'sets verbose flag to true' do expect do application.handle_options([option]) @@ -53,12 +47,6 @@ ['--simulate', '-s'].each do |option| describe option do - around do |example| - original_flag = application.fetch(:simulate) - example.run - application.set(:simulate, original_flag) - end - it 'sets simulate flag to true' do expect do application.handle_options([option]) @@ -69,12 +57,6 @@ ['--debug-configuration-variables', '-d'].each do |option| describe option do - around do |example| - original_flag = application.fetch(:debug_configuration_variables) - example.run - application.set(:debug_configuration_variables, original_flag) - end - it 'sets debug_configuration_variables flag to true' do expect do application.handle_options([option]) @@ -84,12 +66,6 @@ end describe '--no-report-time' do - around do |example| - original_flag = application.fetch(:skip_report_time) - example.run - application.set(:skip_report_time, original_flag) - end - it 'sets skip_report_time flag to true' do expect do application.handle_options(['--no-report-time']) diff --git a/spec/lib/mina/helpers/internal_spec.rb b/spec/lib/mina/helpers/internal_spec.rb index fed3b54f..fb0c9d19 100644 --- a/spec/lib/mina/helpers/internal_spec.rb +++ b/spec/lib/mina/helpers/internal_spec.rb @@ -89,11 +89,8 @@ class DummyInternalHelper end describe '#next_version' do - around do |example| - original_releases_path = Mina::Configuration.instance.remove(:releases_path) + before do Mina::Configuration.instance.set(:releases_path, '/releases') - example.run - Mina::Configuration.instance.set(:releases_path, original_releases_path) end context 'when :version_scheme is :datetime' do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4087821b..d3e76877 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -10,6 +10,7 @@ require 'mina' require 'rspec' require 'pry' +require 'set' Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } Rake.application = Mina::Application.new @@ -21,17 +22,16 @@ config.raise_errors_for_deprecations! config.order = 'random' - config.before(:all, type: :rake) do - Mina::Configuration.instance.set :simulate, true - Mina::Configuration.instance.set :domain, 'localhost' - Mina::Configuration.instance.set :deploy_to, "#{Dir.pwd}/deploy" - Mina::Configuration.instance.set :repository, "#{Mina.root_path}" - Mina::Configuration.instance.set :shared_paths, ['config/database.yml', 'log'] - Mina::Configuration.instance.set :keep_releases, 2 + initial_task_names = Rake.application.tasks.to_set(&:name) + initial_variables = Mina::Configuration.instance.variables + + config.before(:each) do + Mina::Configuration.instance.instance_variable_set(:@variables, initial_variables.clone) end - config.after(:all, type: :rake) do - Mina::Configuration.instance.remove :simulate + config.after(:each) do + Rake.application.tasks.keep_if { |task_name, _| initial_task_names.include?(task_name) } + Rake.application.tasks.each(&:reenable) end config.around(:each, :suppressed_output) do |example| diff --git a/spec/support/rake_example_group.rb b/spec/support/rake_example_group.rb index f1aa4dc6..81388ce5 100644 --- a/spec/support/rake_example_group.rb +++ b/spec/support/rake_example_group.rb @@ -8,16 +8,17 @@ def self.included(klass) let(:run_commands) { rake['run_commands']} let(:reset!) { rake['reset!'] } subject { rake[task_name] } - - after do - subject.reenable - run_commands.reenable - reset!.invoke - reset!.reenable - end end end + def load_default_config + load_config 'default' + end + + def load_config(config_name) + Rake.load_rakefile(Dir.pwd + "/spec/configs/#{config_name}.rb") + end + def invoke_all(*args) subject.invoke(*args) run_commands.invoke diff --git a/spec/tasks/bundler_spec.rb b/spec/tasks/bundler_spec.rb index a39d7aff..488402ef 100644 --- a/spec/tasks/bundler_spec.rb +++ b/spec/tasks/bundler_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'bundler', type: :rake do + before do + load_default_config + end + describe 'bundle:install' do it 'bundle install' do expect { invoke_all }.to output(output_file('bundle_install')).to_stdout diff --git a/spec/tasks/chruby_spec.rb b/spec/tasks/chruby_spec.rb index 3b426224..06f87cbc 100644 --- a/spec/tasks/chruby_spec.rb +++ b/spec/tasks/chruby_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'chruby', type: :rake do + before do + load_default_config + end + describe 'chruby' do subject { rake['chruby'] } diff --git a/spec/tasks/default_spec.rb b/spec/tasks/default_spec.rb index 8fe4c941..56a985ce 100644 --- a/spec/tasks/default_spec.rb +++ b/spec/tasks/default_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'default', type: :rake do + before do + load_default_config + end + describe 'environment' do it 'outputs a deprecation warning' do expect { invoke_all }.to output(output_file('environment')).to_stdout @@ -18,11 +22,8 @@ subject { rake['ssh_keyscan_domain'] } context "when domain isn't set" do - around do |example| - original_domain = Mina::Configuration.instance.fetch(:domain) + before do Mina::Configuration.instance.remove(:domain) - example.run - Mina::Configuration.instance.set(:domain, original_domain) end it 'exits with an error message' do @@ -34,11 +35,8 @@ end context "when port isn't set" do - around do |example| - original_port = Mina::Configuration.instance.fetch(:port) + before do Mina::Configuration.instance.remove(:port) - example.run - Mina::Configuration.instance.set(:port, original_port) end it 'exits with an error message' do diff --git a/spec/tasks/deploy_spec.rb b/spec/tasks/deploy_spec.rb index bf4c900f..28a0aa0e 100644 --- a/spec/tasks/deploy_spec.rb +++ b/spec/tasks/deploy_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'deploy', type: :rake do + before do + load_default_config + end + describe 'deploy:force_unlock' do it 'deploy force_unlock' do expect { invoke_all }.to output(output_file('deploy_force_unlock')).to_stdout diff --git a/spec/tasks/git_spec.rb b/spec/tasks/git_spec.rb index e099b083..b56f7bd8 100644 --- a/spec/tasks/git_spec.rb +++ b/spec/tasks/git_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'git', type: :rake do + before do + load_default_config + end + describe 'git:clone' do it 'git clone' do expect { invoke_all }.to output(output_file('git_clone')).to_stdout diff --git a/spec/tasks/init_spec.rb b/spec/tasks/init_spec.rb index 737e97c5..e2f4ff29 100644 --- a/spec/tasks/init_spec.rb +++ b/spec/tasks/init_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'init', type: :rake do + before do + load_default_config + end + it 'creates new deploy rb' do allow(File).to receive(:exist?).and_return(true) expect(FileUtils).to receive(:mkdir_p) diff --git a/spec/tasks/rails_spec.rb b/spec/tasks/rails_spec.rb index 370043a9..abe008bb 100644 --- a/spec/tasks/rails_spec.rb +++ b/spec/tasks/rails_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'rails', type: :rake do + before do + load_default_config + end + describe 'console' do it 'starts console' do expect { invoke_all }.to output(output_file('rails_console')).to_stdout @@ -17,10 +21,8 @@ subject { rake['rails:db_migrate'] } context 'when outside deploy block' do - around do |example| - original_flag = Mina::Configuration.instance.remove(:deploy_block) - example.run - Mina::Configuration.instance.set(:deploy_block, original_flag) + before do + Mina::Configuration.instance.remove(:deploy_block) end it 'exits with an error message' do @@ -37,11 +39,6 @@ Mina::Configuration.instance.set(:deploy_block, true) end - after do - Mina::Configuration.instance.remove(:force_migrate) - Mina::Configuration.instance.set(:deploy_block, false) - end - it 'runs rails db:migrate' do expect do invoke_all @@ -54,10 +51,6 @@ Mina::Configuration.instance.set(:deploy_block, true) end - after do - Mina::Configuration.instance.set(:deploy_block, false) - end - it 'runs rails db:migrate but checks for changes first' do expect do invoke_all @@ -82,10 +75,8 @@ subject { rake['rails:assets_precompile'] } context 'when outside deploy block' do - around do |example| - original_flag = Mina::Configuration.instance.remove(:deploy_block) - example.run - Mina::Configuration.instance.set(:deploy_block, original_flag) + before do + Mina::Configuration.instance.remove(:deploy_block) end it 'exits with an error message' do @@ -102,11 +93,6 @@ Mina::Configuration.instance.set(:deploy_block, true) end - after do - Mina::Configuration.instance.remove(:force_asset_precompile) - Mina::Configuration.instance.set(:deploy_block, false) - end - it 'runs rails assets:precompile' do expect do invoke_all @@ -119,10 +105,6 @@ Mina::Configuration.instance.set(:deploy_block, true) end - after do - Mina::Configuration.instance.set(:deploy_block, false) - end - it 'runs rails assets:precompile but checks for changes first' do expect do invoke_all diff --git a/spec/tasks/rbenv_spec.rb b/spec/tasks/rbenv_spec.rb index 07a5bf67..945cd418 100644 --- a/spec/tasks/rbenv_spec.rb +++ b/spec/tasks/rbenv_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'rbenv', type: :rake do + before do + load_default_config + end + describe 'rbenv:load' do it 'loads rbenv' do expect { invoke_all }.to output(output_file('rbenv_load')).to_stdout diff --git a/spec/tasks/rvm_spec.rb b/spec/tasks/rvm_spec.rb index fa9e8de8..f3f1239c 100644 --- a/spec/tasks/rvm_spec.rb +++ b/spec/tasks/rvm_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'rvm', type: :rake do + before do + load_default_config + end + describe 'rvm:use' do subject { rake['rvm:use'] } diff --git a/spec/tasks/ry_spec.rb b/spec/tasks/ry_spec.rb index 03b7e42b..acefa77d 100644 --- a/spec/tasks/ry_spec.rb +++ b/spec/tasks/ry_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' RSpec.describe 'ry', type: :rake do + before do + load_default_config + end + describe 'ry' do subject { rake['ry'] } From e51d3db69b7f1612d2e5e21bf6d344f17ba1435c Mon Sep 17 00:00:00 2001 From: Lovro Bikic Date: Wed, 18 Aug 2021 23:23:46 +0200 Subject: [PATCH 3/7] Refactor rake example group using rspec shared context --- spec/support/rake_example_group.rb | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/spec/support/rake_example_group.rb b/spec/support/rake_example_group.rb index 81388ce5..5b5ff6b8 100644 --- a/spec/support/rake_example_group.rb +++ b/spec/support/rake_example_group.rb @@ -1,15 +1,10 @@ module RakeExampleGroup - extend RSpec::Matchers::DSL + extend RSpec::SharedContext - def self.included(klass) - klass.instance_eval do - let(:rake) { Rake.application } - let(:task_name) { self.class.description } - let(:run_commands) { rake['run_commands']} - let(:reset!) { rake['reset!'] } - subject { rake[task_name] } - end - end + let(:rake) { Rake.application } + let(:task_name) { self.class.description } + let(:run_commands) { rake['run_commands']} + subject { rake[task_name] } def load_default_config load_config 'default' From 9a15af5a28b5e468947cb6699600558d06b3b530 Mon Sep 17 00:00:00 2001 From: Lovro Bikic Date: Thu, 19 Aug 2021 12:06:01 +0200 Subject: [PATCH 4/7] Fix how tasks get reset --- spec/spec_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d3e76877..e475806c 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -30,7 +30,7 @@ end config.after(:each) do - Rake.application.tasks.keep_if { |task_name, _| initial_task_names.include?(task_name) } + Rake.application.instance_variable_get(:@tasks).keep_if { |task_name, _| initial_task_names.include?(task_name) } Rake.application.tasks.each(&:reenable) end From ed1bf82a02d8d9319eb658165ced29eb109306d0 Mon Sep 17 00:00:00 2001 From: Lovro Bikic Date: Thu, 19 Aug 2021 12:07:47 +0200 Subject: [PATCH 5/7] Invoke reset! after each spec --- spec/support/rake_example_group.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/support/rake_example_group.rb b/spec/support/rake_example_group.rb index 5b5ff6b8..8c94269d 100644 --- a/spec/support/rake_example_group.rb +++ b/spec/support/rake_example_group.rb @@ -3,9 +3,14 @@ module RakeExampleGroup let(:rake) { Rake.application } let(:task_name) { self.class.description } - let(:run_commands) { rake['run_commands']} + let(:run_commands) { rake['run_commands'] } + let(:reset!) { rake['reset!'] } subject { rake[task_name] } + after(:each) do + reset!.invoke + end + def load_default_config load_config 'default' end From 6689b68f81d96e11b9de865bf4b61c604d9a17b8 Mon Sep 17 00:00:00 2001 From: Lovro Bikic Date: Thu, 19 Aug 2021 12:08:06 +0200 Subject: [PATCH 6/7] Add DSL tests --- spec/configs/dsl.rb | 53 ++++++++++++++ spec/lib/mina/dsl_spec.rb | 92 +++++++++++++++++++++++++ spec/support/outputs/dsl_deploy.txt | 4 ++ spec/support/outputs/dsl_in_path.txt | 1 + spec/support/outputs/dsl_local_run.txt | 5 ++ spec/support/outputs/dsl_on.txt | 6 ++ spec/support/outputs/dsl_remote_run.txt | 5 ++ spec/support/outputs/dsl_reset.txt | 2 + 8 files changed, 168 insertions(+) create mode 100644 spec/configs/dsl.rb create mode 100644 spec/lib/mina/dsl_spec.rb create mode 100644 spec/support/outputs/dsl_deploy.txt create mode 100644 spec/support/outputs/dsl_in_path.txt create mode 100644 spec/support/outputs/dsl_local_run.txt create mode 100644 spec/support/outputs/dsl_on.txt create mode 100644 spec/support/outputs/dsl_remote_run.txt create mode 100644 spec/support/outputs/dsl_reset.txt diff --git a/spec/configs/dsl.rb b/spec/configs/dsl.rb new file mode 100644 index 00000000..87584476 --- /dev/null +++ b/spec/configs/dsl.rb @@ -0,0 +1,53 @@ +task :reset_task do + command "echo Hello there" + reset! + command "echo New command" +end + +task :one_run_inside_another do + run :local do + run :remote do + puts "I shouldn't execute" + end + end +end + +task :local_run do + run :local do + comment "I am a comment" + command "echo Hello there" + end +end + +task :remote_run do + run :remote do + comment "I am a comment" + command "echo Hello there" + end +end + +task :nonexistent_run do + run :nonexistent do + comment "I shouldn't run" + end +end + +task :on_stage_task do + deploy do + on :launch do + command "echo Hello there" + end + end +end + +task :in_path_task do + in_path '/path' do + command "echo Hello there" + end +end + +task :deploy_block_task do + deploy do + command "echo Hello there" + end +end diff --git a/spec/lib/mina/dsl_spec.rb b/spec/lib/mina/dsl_spec.rb new file mode 100644 index 00000000..91024471 --- /dev/null +++ b/spec/lib/mina/dsl_spec.rb @@ -0,0 +1,92 @@ +require 'spec_helper' + +describe Mina::DSL, type: :rake do + before do + load_default_config + load_config 'dsl' + end + + describe '#reset!' do + let(:task_name) { 'reset_task' } + + it "clears all commands before it" do + expect do + invoke_all + end.to output(output_file('dsl_reset')).to_stdout + end + end + + describe '#run' do + context 'when one run block is inside another' do + let(:task_name) { 'one_run_inside_another' } + + it 'exits with an error message' do + expect do + invoke_all + end.to raise_error(SystemExit) + .and output(/Can't use run block inside another run block./).to_stdout + end + end + + context 'when backend is :local' do + let(:task_name) { 'local_run' } + + it 'executes commands locally' do + expect do + invoke_all + end.to output(output_file('dsl_local_run')).to_stdout + end + end + + context 'when backend is :remote' do + let(:task_name) { 'remote_run' } + + it 'executes commands on the server' do + expect do + invoke_all + end.to output(output_file('dsl_remote_run')).to_stdout + end + end + + context "when backend doesn't exist" do + let(:task_name) { 'nonexistent_run' } + + # TODO: refactor for more user-friendly error handling + it 'raises a runtime error' do + expect do + invoke_all + end.to raise_error(RuntimeError, /Don't know how to build task 'nonexistent_environment'/) + end + end + end + + describe '#on' do + let(:task_name) { 'on_stage_task' } + + it 'executes the command in the given stage' do + expect do + invoke_all + end.to output(output_file('dsl_on')).to_stdout + end + end + + describe '#in_path' do + let(:task_name) { 'in_path_task' } + + it 'executes the command in the given path' do + expect do + invoke_all + end.to output(output_file('dsl_in_path')).to_stdout + end + end + + describe '#deploy' do + let(:task_name) { 'deploy_block_task' } + + it 'executes the deploy script and commands on remote' do + expect do + invoke_all + end.to output(output_file('dsl_deploy')).to_stdout + end + end +end diff --git a/spec/support/outputs/dsl_deploy.txt b/spec/support/outputs/dsl_deploy.txt new file mode 100644 index 00000000..ab8e687a --- /dev/null +++ b/spec/support/outputs/dsl_deploy.txt @@ -0,0 +1,4 @@ +(?m)#!/usr/bin/env bash +# Executing the following via 'ssh localhost -p 22 -tt': +.* + echo Hello there \ No newline at end of file diff --git a/spec/support/outputs/dsl_in_path.txt b/spec/support/outputs/dsl_in_path.txt new file mode 100644 index 00000000..9d7b2f67 --- /dev/null +++ b/spec/support/outputs/dsl_in_path.txt @@ -0,0 +1 @@ +\(cd /path && echo Hello there && cd -\) \ No newline at end of file diff --git a/spec/support/outputs/dsl_local_run.txt b/spec/support/outputs/dsl_local_run.txt new file mode 100644 index 00000000..4e98ef4e --- /dev/null +++ b/spec/support/outputs/dsl_local_run.txt @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Executing the following: +# +echo "-----> I am a comment" +echo Hello there \ No newline at end of file diff --git a/spec/support/outputs/dsl_on.txt b/spec/support/outputs/dsl_on.txt new file mode 100644 index 00000000..eeedbb0e --- /dev/null +++ b/spec/support/outputs/dsl_on.txt @@ -0,0 +1,6 @@ +# ============================ +# === Start up server => \(in deployer\) +\( +cd ".*/deploy/current" + echo Hello there +\) && diff --git a/spec/support/outputs/dsl_remote_run.txt b/spec/support/outputs/dsl_remote_run.txt new file mode 100644 index 00000000..04f60715 --- /dev/null +++ b/spec/support/outputs/dsl_remote_run.txt @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# Executing the following via 'ssh localhost -p 22 -tt': +# +echo "-----> I am a comment" +echo Hello there \ No newline at end of file diff --git a/spec/support/outputs/dsl_reset.txt b/spec/support/outputs/dsl_reset.txt new file mode 100644 index 00000000..caabf309 --- /dev/null +++ b/spec/support/outputs/dsl_reset.txt @@ -0,0 +1,2 @@ +^((?!echo Hello there).)*$ +echo New command \ No newline at end of file From af7afefb08d43b1d85922047069e33f7e5b6d3ff Mon Sep 17 00:00:00 2001 From: Lovro Bikic Date: Thu, 19 Aug 2021 12:12:38 +0200 Subject: [PATCH 7/7] Add gemfile.lock to version control --- .gitignore | 1 - Gemfile.lock | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 Gemfile.lock diff --git a/.gitignore b/.gitignore index 95e3992b..881533cc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ test_env/deploy .rvmrc .ruby-gemset .ruby-version -Gemfile.lock pkg/ support/helpers.md support/modules.md diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..08fbf61f --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,53 @@ +PATH + remote: . + specs: + mina (1.2.4) + rake + +GEM + remote: https://rubygems.org/ + specs: + awesome_print (1.9.2) + codeclimate-test-reporter (1.0.7) + simplecov + coderay (1.1.3) + diff-lcs (1.4.4) + docile (1.4.0) + method_source (1.0.0) + pry (0.13.1) + coderay (~> 1.1) + method_source (~> 1.0) + rake (13.0.6) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + simplecov (0.21.2) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.3) + +PLATFORMS + ruby + +DEPENDENCIES + awesome_print + codeclimate-test-reporter + mina! + pry + rspec (~> 3.5.0) + simplecov + +BUNDLED WITH + 2.2.25