paraduct 0.0.1.beta5 → 0.0.1.beta6
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.
- data/README.md +2 -1
- data/lib/paraduct/cli.rb +9 -0
- data/lib/paraduct/configuration.rb +14 -9
- data/lib/paraduct/runner.rb +1 -15
- data/lib/paraduct/sync_utils.rb +20 -0
- data/lib/paraduct/templates/.paraduct_rsync_exclude.txt.tt +2 -0
- data/lib/paraduct/version.rb +1 -1
- data/lib/paraduct.rb +1 -0
- data/paraduct.gemspec +1 -0
- data/spec/.paraduct.yml +2 -0
- data/spec/.paraduct_rsync_exclude.txt +2 -0
- data/spec/paraduct/cli_spec.rb +42 -31
- data/spec/paraduct/runner_spec.rb +0 -28
- data/spec/paraduct/sync_utils_spec.rb +39 -0
- data/spec/support/contexts/stub_configuration.rb +16 -0
- data/spec/support/contexts/within_temp_dir.rb +13 -0
- data/spec/support/contexts/within_temp_work_dir.rb +2 -1
- metadata +29 -3
    
        data/README.md
    CHANGED
    
    | @@ -10,7 +10,8 @@ Paraduct (**parallel** + **parameterize** + **product**) is matrix test runner | |
| 10 10 | 
             
            [](http://waffle.io/sue445/paraduct)
         | 
| 11 11 |  | 
| 12 12 | 
             
            ## Requirements
         | 
| 13 | 
            -
            ruby 1.9+
         | 
| 13 | 
            +
            * ruby 1.9+
         | 
| 14 | 
            +
            * rsync
         | 
| 14 15 |  | 
| 15 16 | 
             
            ## Installation
         | 
| 16 17 |  | 
    
        data/lib/paraduct/cli.rb
    CHANGED
    
    | @@ -5,6 +5,14 @@ module Paraduct | |
| 5 5 | 
             
              class CLI < Thor
         | 
| 6 6 | 
             
                include Thor::Actions
         | 
| 7 7 |  | 
| 8 | 
            +
                class_option :version, type: :boolean
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                desc "version", "Show paraduct version"
         | 
| 11 | 
            +
                def version
         | 
| 12 | 
            +
                  puts Paraduct::VERSION
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
                default_task :version
         | 
| 15 | 
            +
             | 
| 8 16 | 
             
                desc "test", "run matrix test"
         | 
| 9 17 | 
             
                def test
         | 
| 10 18 | 
             
                  script = Paraduct.config.script
         | 
| @@ -22,6 +30,7 @@ module Paraduct | |
| 22 30 | 
             
                desc "generate", "generate .paraduct.yml"
         | 
| 23 31 | 
             
                def generate
         | 
| 24 32 | 
             
                  template(".paraduct.yml")
         | 
| 33 | 
            +
                  template(".paraduct_rsync_exclude.txt")
         | 
| 25 34 | 
             
                end
         | 
| 26 35 |  | 
| 27 36 | 
             
                def self.source_root
         | 
| @@ -5,29 +5,28 @@ module Paraduct | |
| 5 5 | 
             
              class Configuration
         | 
| 6 6 | 
             
                include Singleton
         | 
| 7 7 |  | 
| 8 | 
            -
                def initialize
         | 
| 9 | 
            -
                  raise "not found .paraduct.yml" unless config_file.exist?
         | 
| 10 | 
            -
                  @config = YAML.load_file(config_file)
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
             | 
| 13 8 | 
             
                # @return [Pathname]
         | 
| 14 9 | 
             
                def variables
         | 
| 15 | 
            -
                   | 
| 10 | 
            +
                  config_data[:variables]
         | 
| 16 11 | 
             
                end
         | 
| 17 12 |  | 
| 18 13 | 
             
                # @return [String, Array<String>]
         | 
| 19 14 | 
             
                def script
         | 
| 20 | 
            -
                   | 
| 15 | 
            +
                  config_data[:script]
         | 
| 21 16 | 
             
                end
         | 
| 22 17 |  | 
| 23 18 | 
             
                # @return [Integer]
         | 
| 24 19 | 
             
                def max_threads
         | 
| 25 | 
            -
                   | 
| 20 | 
            +
                  config_data[:max_threads] || 4
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def rsync_option
         | 
| 24 | 
            +
                  config_data[:rsync_option] || {}
         | 
| 26 25 | 
             
                end
         | 
| 27 26 |  | 
| 28 27 | 
             
                # @return [Pathname]
         | 
| 29 28 | 
             
                def work_dir
         | 
| 30 | 
            -
                  _work_dir =  | 
| 29 | 
            +
                  _work_dir = config_data[:work_dir] || "tmp/paraduct_workspace"
         | 
| 31 30 | 
             
                  root_dir.join(_work_dir)
         | 
| 32 31 | 
             
                end
         | 
| 33 32 |  | 
| @@ -40,5 +39,11 @@ module Paraduct | |
| 40 39 | 
             
                def root_dir
         | 
| 41 40 | 
             
                  Pathname.pwd
         | 
| 42 41 | 
             
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                private
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                def config_data
         | 
| 46 | 
            +
                  @config_data ||= YAML.load_file(config_file).with_indifferent_access
         | 
| 47 | 
            +
                end
         | 
| 43 48 | 
             
              end
         | 
| 44 49 | 
             
            end
         | 
    
        data/lib/paraduct/runner.rb
    CHANGED
    
    | @@ -16,7 +16,7 @@ module Paraduct | |
| 16 16 |  | 
| 17 17 | 
             
                def setup_dir
         | 
| 18 18 | 
             
                  FileUtils.mkdir_p(job_dir) unless job_dir.exist?
         | 
| 19 | 
            -
                   | 
| 19 | 
            +
                  Paraduct::SyncUtils.copy_recursive(Paraduct.config.root_dir, job_dir)
         | 
| 20 20 | 
             
                  Dir.chdir(job_dir)
         | 
| 21 21 | 
             
                end
         | 
| 22 22 |  | 
| @@ -48,20 +48,6 @@ module Paraduct | |
| 48 48 | 
             
                  @params.map{ |key, value| "#{key}=#{value}" }.join(", ")
         | 
| 49 49 | 
             
                end
         | 
| 50 50 |  | 
| 51 | 
            -
                # @param source_dir      [Pathname]
         | 
| 52 | 
            -
                # @param destination_dir [Pathname]
         | 
| 53 | 
            -
                def self.copy_recursive(source_dir, destination_dir)
         | 
| 54 | 
            -
                  FileUtils.mkdir_p(destination_dir)
         | 
| 55 | 
            -
                  source_dir.children.each do |source_child_dir|
         | 
| 56 | 
            -
                    begin
         | 
| 57 | 
            -
                      FileUtils.cp_r(source_child_dir, destination_dir)
         | 
| 58 | 
            -
                    rescue ArgumentError => e
         | 
| 59 | 
            -
                      # TODO: refactoring
         | 
| 60 | 
            -
                      raise unless e.message =~ /^cannot copy directory .+ to itself /
         | 
| 61 | 
            -
                    end
         | 
| 62 | 
            -
                  end
         | 
| 63 | 
            -
                end
         | 
| 64 | 
            -
             | 
| 65 51 | 
             
                def self.capitalize_keys(params)
         | 
| 66 52 | 
             
                  params.inject({}) do |res, (key, value)|
         | 
| 67 53 | 
             
                    res[key.upcase] = value
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module Paraduct
         | 
| 2 | 
            +
              require "rsync"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              class SyncUtils
         | 
| 5 | 
            +
                # @param source_dir      [Pathname]
         | 
| 6 | 
            +
                # @param destination_dir [Pathname]
         | 
| 7 | 
            +
                def self.copy_recursive(source_dir, destination_dir)
         | 
| 8 | 
            +
                  FileUtils.mkdir_p(destination_dir)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  rsync_options = %W(
         | 
| 11 | 
            +
                    --recursive
         | 
| 12 | 
            +
                    --delete
         | 
| 13 | 
            +
                    --exclude-from=#{Paraduct.config.rsync_option[:exclude_from]}
         | 
| 14 | 
            +
                  )
         | 
| 15 | 
            +
                  result = Rsync.run(source_dir.to_s + "/", destination_dir, rsync_options)
         | 
| 16 | 
            +
                  raise result.error unless result.success?
         | 
| 17 | 
            +
                  result
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        data/lib/paraduct/version.rb
    CHANGED
    
    
    
        data/lib/paraduct.rb
    CHANGED
    
    | @@ -8,6 +8,7 @@ module Paraduct | |
| 8 8 | 
             
              autoload :Errors           , 'paraduct/errors'
         | 
| 9 9 | 
             
              autoload :ParallelRunner   , 'paraduct/parallel_runner'
         | 
| 10 10 | 
             
              autoload :Runner           , 'paraduct/runner'
         | 
| 11 | 
            +
              autoload :SyncUtils        , 'paraduct/sync_utils'
         | 
| 11 12 | 
             
              autoload :TestResponse     , 'paraduct/test_response'
         | 
| 12 13 | 
             
              autoload :VariableConverter, 'paraduct/variable_converter'
         | 
| 13 14 | 
             
              autoload :Version          , 'paraduct/version'
         | 
    
        data/paraduct.gemspec
    CHANGED
    
    
    
        data/spec/.paraduct.yml
    CHANGED
    
    
    
        data/spec/paraduct/cli_spec.rb
    CHANGED
    
    | @@ -3,33 +3,41 @@ describe Paraduct::CLI do | |
| 3 3 |  | 
| 4 4 | 
             
              let(:args){ [command] }
         | 
| 5 5 |  | 
| 6 | 
            +
              describe "#version" do
         | 
| 7 | 
            +
                %w(version --version).each do |_command|
         | 
| 8 | 
            +
                  context "with #{_command}" do
         | 
| 9 | 
            +
                    let(:command){ _command }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    it { expect{ subject }.to output("#{Paraduct::VERSION}\n").to_stdout }
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 6 16 | 
             
              describe "#test" do
         | 
| 7 17 | 
             
                let(:command){ "test" }
         | 
| 8 18 |  | 
| 9 | 
            -
                include_context : | 
| 19 | 
            +
                include_context :stub_configuration
         | 
| 20 | 
            +
                include_context :within_temp_dir
         | 
| 10 21 |  | 
| 11 22 | 
             
                context "successful test" do
         | 
| 23 | 
            +
                  let(:config_data) do
         | 
| 24 | 
            +
                    {
         | 
| 25 | 
            +
                      script: "./script/build_success.sh",
         | 
| 26 | 
            +
                      work_dir: "tmp/paraduct_workspace",
         | 
| 27 | 
            +
                      variables: {
         | 
| 28 | 
            +
                        ruby:     ["1.9.3", "2.0.0"],
         | 
| 29 | 
            +
                        database: ["mysql", "postgresql"],
         | 
| 30 | 
            +
                      },
         | 
| 31 | 
            +
                    }
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 12 34 | 
             
                  let(:script){ "./script/build_success.sh" }
         | 
| 13 35 | 
             
                  let(:product_variables) do
         | 
| 14 36 | 
             
                    [
         | 
| 15 | 
            -
                      { "ruby" => "1.9.3", "database" => "mysql" | 
| 16 | 
            -
                      { "ruby" => "1.9.3", "database" => " | 
| 17 | 
            -
                      { "ruby" => " | 
| 18 | 
            -
                      { "ruby" => " | 
| 19 | 
            -
                      { "ruby" => "1.9.3", "database" => "postgresql", "rails" => "4.0.0" },
         | 
| 20 | 
            -
                      { "ruby" => "1.9.3", "database" => "postgresql", "rails" => "4.1.0" },
         | 
| 21 | 
            -
                      { "ruby" => "2.0.0", "database" => "mysql"     , "rails" => "3.2.0" },
         | 
| 22 | 
            -
                      { "ruby" => "2.0.0", "database" => "mysql"     , "rails" => "4.0.0" },
         | 
| 23 | 
            -
                      { "ruby" => "2.0.0", "database" => "mysql"     , "rails" => "4.1.0" },
         | 
| 24 | 
            -
                      { "ruby" => "2.0.0", "database" => "postgresql", "rails" => "3.2.0" },
         | 
| 25 | 
            -
                      { "ruby" => "2.0.0", "database" => "postgresql", "rails" => "4.0.0" },
         | 
| 26 | 
            -
                      { "ruby" => "2.0.0", "database" => "postgresql", "rails" => "4.1.0" },
         | 
| 27 | 
            -
                      { "ruby" => "2.1.2", "database" => "mysql"     , "rails" => "3.2.0" },
         | 
| 28 | 
            -
                      { "ruby" => "2.1.2", "database" => "mysql"     , "rails" => "4.0.0" },
         | 
| 29 | 
            -
                      { "ruby" => "2.1.2", "database" => "mysql"     , "rails" => "4.1.0" },
         | 
| 30 | 
            -
                      { "ruby" => "2.1.2", "database" => "postgresql", "rails" => "3.2.0" },
         | 
| 31 | 
            -
                      { "ruby" => "2.1.2", "database" => "postgresql", "rails" => "4.0.0" },
         | 
| 32 | 
            -
                      { "ruby" => "2.1.2", "database" => "postgresql", "rails" => "4.1.0" },
         | 
| 37 | 
            +
                      { "ruby" => "1.9.3", "database" => "mysql"      },
         | 
| 38 | 
            +
                      { "ruby" => "1.9.3", "database" => "postgresql" },
         | 
| 39 | 
            +
                      { "ruby" => "2.0.0", "database" => "mysql"      },
         | 
| 40 | 
            +
                      { "ruby" => "2.0.0", "database" => "postgresql" },
         | 
| 33 41 | 
             
                    ]
         | 
| 34 42 | 
             
                  end
         | 
| 35 43 |  | 
| @@ -46,9 +54,14 @@ describe Paraduct::CLI do | |
| 46 54 | 
             
                end
         | 
| 47 55 |  | 
| 48 56 | 
             
                context "failure test" do
         | 
| 49 | 
            -
                   | 
| 50 | 
            -
                     | 
| 51 | 
            -
             | 
| 57 | 
            +
                  let(:config_data) do
         | 
| 58 | 
            +
                    {
         | 
| 59 | 
            +
                      script: %q(exit ${STATUS}),
         | 
| 60 | 
            +
                      work_dir: "tmp/paraduct_workspace",
         | 
| 61 | 
            +
                      variables: {
         | 
| 62 | 
            +
                        status: [0, 1],
         | 
| 63 | 
            +
                      },
         | 
| 64 | 
            +
                    }
         | 
| 52 65 | 
             
                  end
         | 
| 53 66 |  | 
| 54 67 | 
             
                  it { expect{ subject }.to raise_error Paraduct::Errors::TestFailureError }
         | 
| @@ -58,21 +71,19 @@ describe Paraduct::CLI do | |
| 58 71 | 
             
              describe "#generate" do
         | 
| 59 72 | 
             
                let(:command){ "generate" }
         | 
| 60 73 |  | 
| 61 | 
            -
                include_context  | 
| 62 | 
            -
             | 
| 63 | 
            -
                around do |example|
         | 
| 64 | 
            -
                  Dir.chdir(temp_dir) do
         | 
| 65 | 
            -
                    example.run
         | 
| 66 | 
            -
                  end
         | 
| 67 | 
            -
                end
         | 
| 74 | 
            +
                include_context :within_temp_dir
         | 
| 68 75 |  | 
| 69 76 | 
             
                before do
         | 
| 70 77 | 
             
                  # exercise
         | 
| 71 78 | 
             
                  subject
         | 
| 72 79 | 
             
                end
         | 
| 73 80 |  | 
| 74 | 
            -
                 | 
| 81 | 
            +
                %w(.paraduct.yml .paraduct_rsync_exclude.txt).each do |template_file|
         | 
| 82 | 
            +
                  describe "whether copy #{template_file}" do
         | 
| 83 | 
            +
                    let(:generated_config_file){ temp_dir_path.join(template_file) }
         | 
| 75 84 |  | 
| 76 | 
            -
             | 
| 85 | 
            +
                    it { expect(generated_config_file).to be_exist }
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                end
         | 
| 77 88 | 
             
              end
         | 
| 78 89 | 
             
            end
         | 
| @@ -69,34 +69,6 @@ DATABASE=mysql | |
| 69 69 | 
             
                it { should eq Pathname("/tmp/jobs/RUBY_1.9_DATABASE_mysql") }
         | 
| 70 70 | 
             
              end
         | 
| 71 71 |  | 
| 72 | 
            -
              describe "#copy_recursive" do
         | 
| 73 | 
            -
                subject{ Paraduct::Runner.copy_recursive(source_dir, destination_dir) }
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                include_context "uses temp dir"
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                let(:source_dir)     { temp_dir_path }
         | 
| 78 | 
            -
                let(:destination_dir){ temp_dir_path.join("tmp/paraduct_workspace/RUBY_1.9_DATABASE_mysql") }
         | 
| 79 | 
            -
                let(:copied_file)    { destination_dir.join("build_success.sh") }
         | 
| 80 | 
            -
                let(:not_copied_file){ destination_dir.join("tmp/paraduct_workspace/dummy.txt") }
         | 
| 81 | 
            -
             | 
| 82 | 
            -
                before do
         | 
| 83 | 
            -
                  # setup
         | 
| 84 | 
            -
                  FileUtils.cp_r(spec_dir.join("script/tmp/paraduct_workspace"), source_dir)
         | 
| 85 | 
            -
                  FileUtils.cp_r(spec_dir.join("script/build_success.sh"), source_dir)
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                  # exercise
         | 
| 88 | 
            -
                  subject
         | 
| 89 | 
            -
                end
         | 
| 90 | 
            -
             | 
| 91 | 
            -
                # after do
         | 
| 92 | 
            -
                #   puts `tree #{source_dir}`
         | 
| 93 | 
            -
                # end
         | 
| 94 | 
            -
             | 
| 95 | 
            -
                it { expect(destination_dir).to be_exist }
         | 
| 96 | 
            -
                it { expect(copied_file).to be_exist }
         | 
| 97 | 
            -
                it { expect(not_copied_file).not_to be_exist }
         | 
| 98 | 
            -
              end
         | 
| 99 | 
            -
             | 
| 100 72 | 
             
              describe "#formatted_params" do
         | 
| 101 73 | 
             
                subject{ runner.formatted_params }
         | 
| 102 74 |  | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            describe Paraduct::SyncUtils do
         | 
| 2 | 
            +
              describe "#copy_recursive" do
         | 
| 3 | 
            +
                subject{ Paraduct::SyncUtils.copy_recursive(source_dir, destination_dir) }
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                include_context :within_temp_dir
         | 
| 6 | 
            +
                include_context :stub_configuration
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                let(:config_data) do
         | 
| 9 | 
            +
                  {
         | 
| 10 | 
            +
                    rsync_option: {
         | 
| 11 | 
            +
                      exclude_from: ".paraduct_rsync_exclude.txt",
         | 
| 12 | 
            +
                    },
         | 
| 13 | 
            +
                  }
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                let(:source_dir)     { temp_dir_path }
         | 
| 17 | 
            +
                let(:destination_dir){ temp_dir_path.join("tmp/paraduct_workspace/RUBY_1.9_DATABASE_mysql") }
         | 
| 18 | 
            +
                let(:copied_file)    { destination_dir.join("build_success.sh") }
         | 
| 19 | 
            +
                let(:not_copied_file){ destination_dir.join("tmp/paraduct_workspace/dummy.txt") }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                before do
         | 
| 22 | 
            +
                  # setup
         | 
| 23 | 
            +
                  FileUtils.cp_r(spec_dir.join("script/tmp/paraduct_workspace"), source_dir)
         | 
| 24 | 
            +
                  FileUtils.cp(spec_dir.join("script/build_success.sh"), source_dir)
         | 
| 25 | 
            +
                  FileUtils.cp(spec_dir.join(".paraduct_rsync_exclude.txt"), source_dir)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  # exercise
         | 
| 28 | 
            +
                  subject
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                # after do
         | 
| 32 | 
            +
                #   puts `tree #{source_dir}`
         | 
| 33 | 
            +
                # end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                it { expect(destination_dir).to be_exist }
         | 
| 36 | 
            +
                it { expect(copied_file).to be_exist }
         | 
| 37 | 
            +
                it { expect(not_copied_file).not_to be_exist }
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            shared_context :stub_configuration do
         | 
| 2 | 
            +
              before do
         | 
| 3 | 
            +
                allow_any_instance_of(Paraduct::Configuration).to receive(:config_data){ config_data.stringify_keys.with_indifferent_access }
         | 
| 4 | 
            +
              end
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              let(:config_data) do
         | 
| 7 | 
            +
                {
         | 
| 8 | 
            +
                  script: %q(echo "NAME1=${NAME1}, NAME2=${NAME2}"),
         | 
| 9 | 
            +
                  work_dir: "tmp/paraduct_workspace",
         | 
| 10 | 
            +
                  variables: {
         | 
| 11 | 
            +
                    name1: ["value1a", "value1b"],
         | 
| 12 | 
            +
                    name2: ["value2a", "value2b"],
         | 
| 13 | 
            +
                  },
         | 
| 14 | 
            +
                }
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            shared_context :within_temp_dir do
         | 
| 2 | 
            +
              include_context "uses temp dir"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              before do
         | 
| 5 | 
            +
                # avoid "warning: conflicting chdir during another chdir block"
         | 
| 6 | 
            +
                @current_dir = Pathname.pwd
         | 
| 7 | 
            +
                Dir.chdir(temp_dir)
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              after do
         | 
| 11 | 
            +
                Dir.chdir(@current_dir)
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -6,7 +6,8 @@ shared_context :within_temp_work_dir do | |
| 6 6 | 
             
                @current_dir = Pathname.pwd
         | 
| 7 7 | 
             
                Dir.chdir(temp_dir)
         | 
| 8 8 | 
             
                FileUtils.cp_r(spec_dir.join("script"), temp_dir)
         | 
| 9 | 
            -
                FileUtils. | 
| 9 | 
            +
                FileUtils.cp(spec_dir.join(".paraduct.yml"), temp_dir)
         | 
| 10 | 
            +
                FileUtils.cp(spec_dir.join(".paraduct_rsync_exclude.txt"), temp_dir)
         | 
| 10 11 | 
             
              end
         | 
| 11 12 |  | 
| 12 13 | 
             
              after do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: paraduct
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0.1. | 
| 4 | 
            +
              version: 0.0.1.beta6
         | 
| 5 5 | 
             
              prerelease: 6
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2014-10- | 
| 12 | 
            +
            date: 2014-10-21 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: activesupport
         | 
| @@ -27,6 +27,22 @@ dependencies: | |
| 27 27 | 
             
                - - ! '>='
         | 
| 28 28 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 29 | 
             
                    version: '0'
         | 
| 30 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 31 | 
            +
              name: rsync
         | 
| 32 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            +
                none: false
         | 
| 34 | 
            +
                requirements:
         | 
| 35 | 
            +
                - - ! '>='
         | 
| 36 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            +
                    version: '0'
         | 
| 38 | 
            +
              type: :runtime
         | 
| 39 | 
            +
              prerelease: false
         | 
| 40 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            +
                none: false
         | 
| 42 | 
            +
                requirements:
         | 
| 43 | 
            +
                - - ! '>='
         | 
| 44 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 45 | 
            +
                    version: '0'
         | 
| 30 46 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 47 | 
             
              name: thor
         | 
| 32 48 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -293,17 +309,21 @@ files: | |
| 293 309 | 
             
            - lib/paraduct/errors.rb
         | 
| 294 310 | 
             
            - lib/paraduct/parallel_runner.rb
         | 
| 295 311 | 
             
            - lib/paraduct/runner.rb
         | 
| 312 | 
            +
            - lib/paraduct/sync_utils.rb
         | 
| 296 313 | 
             
            - lib/paraduct/templates/.paraduct.yml.tt
         | 
| 314 | 
            +
            - lib/paraduct/templates/.paraduct_rsync_exclude.txt.tt
         | 
| 297 315 | 
             
            - lib/paraduct/test_response.rb
         | 
| 298 316 | 
             
            - lib/paraduct/variable_converter.rb
         | 
| 299 317 | 
             
            - lib/paraduct/version.rb
         | 
| 300 318 | 
             
            - paraduct.gemspec
         | 
| 301 319 | 
             
            - spec/.paraduct.yml
         | 
| 320 | 
            +
            - spec/.paraduct_rsync_exclude.txt
         | 
| 302 321 | 
             
            - spec/.rubocop.yml
         | 
| 303 322 | 
             
            - spec/paraduct/cli_spec.rb
         | 
| 304 323 | 
             
            - spec/paraduct/configuration_spec.rb
         | 
| 305 324 | 
             
            - spec/paraduct/parallel_runner_spec.rb
         | 
| 306 325 | 
             
            - spec/paraduct/runner_spec.rb
         | 
| 326 | 
            +
            - spec/paraduct/sync_utils_spec.rb
         | 
| 307 327 | 
             
            - spec/paraduct/test_response_spec.rb
         | 
| 308 328 | 
             
            - spec/paraduct/variable_converter_spec.rb
         | 
| 309 329 | 
             
            - spec/paraduct_spec.rb
         | 
| @@ -311,7 +331,9 @@ files: | |
| 311 331 | 
             
            - spec/script/build_success.sh
         | 
| 312 332 | 
             
            - spec/script/tmp/paraduct_workspace/dummy.txt
         | 
| 313 333 | 
             
            - spec/spec_helper.rb
         | 
| 334 | 
            +
            - spec/support/contexts/stub_configuration.rb
         | 
| 314 335 | 
             
            - spec/support/contexts/within_spec_dir.rb
         | 
| 336 | 
            +
            - spec/support/contexts/within_temp_dir.rb
         | 
| 315 337 | 
             
            - spec/support/contexts/within_temp_work_dir.rb
         | 
| 316 338 | 
             
            - tmp/.gitkeep
         | 
| 317 339 | 
             
            homepage: https://github.com/sue445/paraduct
         | 
| @@ -329,7 +351,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 329 351 | 
             
                  version: '0'
         | 
| 330 352 | 
             
                  segments:
         | 
| 331 353 | 
             
                  - 0
         | 
| 332 | 
            -
                  hash:  | 
| 354 | 
            +
                  hash: 3159191224660044510
         | 
| 333 355 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 334 356 | 
             
              none: false
         | 
| 335 357 | 
             
              requirements:
         | 
| @@ -344,11 +366,13 @@ specification_version: 3 | |
| 344 366 | 
             
            summary: matrix test runner
         | 
| 345 367 | 
             
            test_files:
         | 
| 346 368 | 
             
            - spec/.paraduct.yml
         | 
| 369 | 
            +
            - spec/.paraduct_rsync_exclude.txt
         | 
| 347 370 | 
             
            - spec/.rubocop.yml
         | 
| 348 371 | 
             
            - spec/paraduct/cli_spec.rb
         | 
| 349 372 | 
             
            - spec/paraduct/configuration_spec.rb
         | 
| 350 373 | 
             
            - spec/paraduct/parallel_runner_spec.rb
         | 
| 351 374 | 
             
            - spec/paraduct/runner_spec.rb
         | 
| 375 | 
            +
            - spec/paraduct/sync_utils_spec.rb
         | 
| 352 376 | 
             
            - spec/paraduct/test_response_spec.rb
         | 
| 353 377 | 
             
            - spec/paraduct/variable_converter_spec.rb
         | 
| 354 378 | 
             
            - spec/paraduct_spec.rb
         | 
| @@ -356,6 +380,8 @@ test_files: | |
| 356 380 | 
             
            - spec/script/build_success.sh
         | 
| 357 381 | 
             
            - spec/script/tmp/paraduct_workspace/dummy.txt
         | 
| 358 382 | 
             
            - spec/spec_helper.rb
         | 
| 383 | 
            +
            - spec/support/contexts/stub_configuration.rb
         | 
| 359 384 | 
             
            - spec/support/contexts/within_spec_dir.rb
         | 
| 385 | 
            +
            - spec/support/contexts/within_temp_dir.rb
         | 
| 360 386 | 
             
            - spec/support/contexts/within_temp_work_dir.rb
         | 
| 361 387 | 
             
            has_rdoc: 
         |