knapsack 0.0.3

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: ed337f85241e8de0a55b8f40474e07c491ffa954
4
+ data.tar.gz: 594c3f97f5076272f0883de5f093e6c6930e68f9
5
+ SHA512:
6
+ metadata.gz: 18e3ba7b288ce4b91d174b121b7f731564bf39e720ef7fa37191bfd68387696e5bbc45c1bc06a28fb0bc503c875078748d673a1f851af321eb657c92bcea78e4
7
+ data.tar.gz: 6eed013b760611599ce3bb8028cfc7bea32e6e853b5fc7a1366bdf26d8d2b41f443aed166777fd1d7dc7b6d2c467572f0a0cc7ab36dd4d94f26610030a2ef9f0
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,5 @@
1
+ --color
2
+ --warnings
3
+ --require spec_helper
4
+ --format documentation
5
+ #--profile
@@ -0,0 +1,21 @@
1
+ ---
2
+ language: ruby
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.0
7
+ - 2.1.1
8
+ - 2.1.2
9
+ addons:
10
+ code_climate:
11
+ repo_token: 38686058eed480dd0fcf8bce9015733e0bae88e44e30f4a1ac63df8aec2f86d8
12
+ before_install:
13
+ - "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc"
14
+ script:
15
+ - bundle exec rspec spec
16
+ # generate knapsack report
17
+ - KNAPSACK_GENERATE_REPORT=true bundle exec rspec --default-path spec_examples
18
+ # run specs with enabled time offset warning
19
+ - bundle exec rspec --default-path spec_examples
20
+ notifications:
21
+ email: false
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in knapsack.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 ArturT
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,71 @@
1
+ # Knapsack
2
+
3
+ [![Build Status](https://travis-ci.org/ArturT/knapsack.svg?branch=master)](travis)
4
+ [![Code Climate](https://codeclimate.com/github/ArturT/knapsack.png)](codeclimate)
5
+ [![Coverage Status](https://codeclimate.com/github/ArturT/knapsack/coverage.png)][coverage]
6
+
7
+ [travis]: http://travis-ci.org/ArturT/knapsack
8
+ [codeclimate]: https://codeclimate.com/github/ArturT/knapsack
9
+ [coverage]: https://codeclimate.com/github/ArturT/knapsack
10
+
11
+ Parallel specs across CI server nodes based on each spec file's time execution.
12
+
13
+ ## Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ gem 'knapsack'
18
+
19
+ And then execute:
20
+
21
+ $ bundle
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install knapsack
26
+
27
+ ## Usage
28
+
29
+ Add at the beginning of your `spec_helper.rb`:
30
+
31
+ require 'knapsack'
32
+ # default configuration, you can change it or omit
33
+ Knapsack.tracker.config({
34
+ enable_time_offset_warning: true,
35
+ time_offset_warning: 30,
36
+ })
37
+ Knapsack::Adapters::Rspec.bind
38
+
39
+ Generate time execution report for your spec files.
40
+
41
+ $ KNAPSACK_GENERATE_REPORT=true rspec spec
42
+
43
+ Commit generated report `knapsack_report.json` into your repository.
44
+
45
+ ## Contributing
46
+
47
+ 1. Fork it ( https://github.com/[my-github-username]/knapsack/fork )
48
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
49
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
50
+ 4. Push to the branch (`git push origin my-new-feature`)
51
+ 5. Create a new Pull Request
52
+
53
+ ## Tests
54
+
55
+ ### Spec
56
+
57
+ To run specs for Knapsack gem type:
58
+
59
+ $ rspec spec
60
+
61
+ ### Spec examples
62
+
63
+ Directory `spec_examples` contains examples of fast and slow specs. There is a `spec_helper.rb` with binded Knapsack.
64
+
65
+ Change one spec to make it sure it will take more than 5 seconds then run below to see Knapsack time offset warning.
66
+
67
+ $ rspec --default-path spec_examples
68
+
69
+ To generate a new knapsack report file please type:
70
+
71
+ $ KNAPSACK_GENERATE_REPORT=true rspec --default-path spec_examples
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'knapsack/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "knapsack"
8
+ spec.version = Knapsack::VERSION
9
+ spec.authors = ["ArturT"]
10
+ spec.email = ["arturtrzop@gmail.com"]
11
+ spec.summary = %q{Parallel specs across CI server nodes based on each spec file's time execution.}
12
+ spec.description = %q{Parallel specs across CI server nodes based on each spec file's time execution. It generates spec time execution report and uses it for further test runs.}
13
+ spec.homepage = "https://github.com/ArturT/knapsack"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.6'
22
+ spec.add_development_dependency 'rake', '~> 0'
23
+ spec.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
24
+ spec.add_development_dependency 'timecop', '~> 0'
25
+ spec.add_development_dependency 'codeclimate-test-reporter', '~> 0'
26
+ end
@@ -0,0 +1,14 @@
1
+ {
2
+ "./spec_examples/fast/1_spec.rb": 9.584426879882812e-05,
3
+ "./spec_examples/fast/2_spec.rb": 0.00014638900756835938,
4
+ "./spec_examples/fast/3_spec.rb": 0.0002243518829345703,
5
+ "./spec_examples/fast/4_spec.rb": 0.0002560615539550781,
6
+ "./spec_examples/fast/5_spec.rb": 0.00023126602172851562,
7
+ "./spec_examples/fast/6_spec.rb": 0.00020503997802734375,
8
+ "./spec_examples/slow/a_spec.rb": 1.6018133163452148,
9
+ "./spec_examples/slow/b_spec.rb": 3.202699661254883,
10
+ "./spec_examples/slow/c_spec.rb": 1.0021936893463135,
11
+ "./spec_examples/slow/d_spec.rb": 4.001989841461182,
12
+ "./spec_examples/slow/e_spec.rb": 2.4013099670410156,
13
+ "./spec_examples/slow/f_spec.rb": 0.60198974609375
14
+ }
@@ -0,0 +1,14 @@
1
+ require 'knapsack/version'
2
+ require 'knapsack/tracker'
3
+ require 'knapsack/presenter'
4
+ require 'knapsack/report'
5
+ require 'knapsack/adapters/base'
6
+ require 'knapsack/adapters/rspec'
7
+
8
+ module Knapsack
9
+ class << self
10
+ def tracker
11
+ Knapsack::Tracker.instance
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,33 @@
1
+ module Knapsack
2
+ module Adapters
3
+ class Base
4
+ def self.bind
5
+ new
6
+ end
7
+
8
+ protected
9
+
10
+ def initialize
11
+ if Knapsack.tracker.generate_report?
12
+ puts 'Knapsack report generator started!'
13
+ bind_time_tracker
14
+ bind_report_generator
15
+ elsif Knapsack.tracker.config[:enable_time_offset_warning]
16
+ puts 'Knapsack time offset warning enabled!'
17
+ bind_time_tracker
18
+ # TODO
19
+ else
20
+ puts 'Knapsack is off!'
21
+ end
22
+ end
23
+
24
+ def bind_time_tracker
25
+ raise NotImplementedError
26
+ end
27
+
28
+ def bind_report_generator
29
+ raise NotImplementedError
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ module Knapsack
2
+ module Adapters
3
+ class Rspec < Base
4
+ protected
5
+
6
+ def bind_time_tracker
7
+ ::RSpec.configure do |config|
8
+ config.before(:each) do
9
+ Knapsack.tracker.spec_path = Rspec.spec_path
10
+ Knapsack.tracker.start_timer
11
+ end
12
+
13
+ config.after(:each) do
14
+ Knapsack.tracker.stop_timer
15
+ end
16
+
17
+ config.after(:suite) do
18
+ puts
19
+ puts Presenter.global_time
20
+ end
21
+ end
22
+ end
23
+
24
+ def bind_report_generator
25
+ ::RSpec.configure do |config|
26
+ config.after(:suite) do
27
+ Report.save
28
+ puts Presenter.report_details
29
+ end
30
+ end
31
+ end
32
+
33
+ def self.spec_path
34
+ ::RSpec.current_example.metadata[:example_group][:file_path]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,24 @@
1
+ require 'yaml'
2
+ require 'json'
3
+
4
+ module Knapsack
5
+ class Presenter
6
+ class << self
7
+ def report_yml
8
+ Knapsack.tracker.files.to_yaml
9
+ end
10
+
11
+ def report_json
12
+ JSON.pretty_generate(Knapsack.tracker.files)
13
+ end
14
+
15
+ def global_time
16
+ "Knapsack global time execution for specs: #{Knapsack.tracker.global_time}s"
17
+ end
18
+
19
+ def report_details
20
+ "Knapsack report was generated. Preview:\n" + Presenter.report_json
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ module Knapsack
2
+ class Report
3
+ REPORT_PATH = 'knapsack_report.json'
4
+
5
+ class << self
6
+ def save
7
+ File.open(REPORT_PATH, 'w+') do |f|
8
+ f.write(Presenter.report_json)
9
+ end
10
+ end
11
+
12
+ def open
13
+ report = File.read(REPORT_PATH)
14
+ JSON.parse(report)
15
+ rescue Errno::ENOENT
16
+ raise "Knapsack report file doesn't exist. Please generate report first!"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,65 @@
1
+ require 'singleton'
2
+
3
+ module Knapsack
4
+ class Tracker
5
+ include Singleton
6
+
7
+ attr_reader :global_time, :files
8
+ attr_writer :spec_path
9
+
10
+ def initialize
11
+ set_defaults
12
+ end
13
+
14
+ def generate_report?
15
+ ENV['KNAPSACK_GENERATE_REPORT'] || false
16
+ end
17
+
18
+ def config(opts={})
19
+ @config ||= default_config
20
+ @config.merge!(opts)
21
+ end
22
+
23
+ def reset!
24
+ set_defaults
25
+ end
26
+
27
+ def start_timer
28
+ @start_time = Time.now.to_f
29
+ end
30
+
31
+ def stop_timer
32
+ @execution_time = Time.now.to_f - @start_time
33
+ update_global_time
34
+ update_spec_file_time
35
+ @execution_time
36
+ end
37
+
38
+ private
39
+
40
+ def default_config
41
+ {
42
+ enable_time_offset_warning: true,
43
+ time_offset_warning: 30,
44
+ }
45
+ end
46
+
47
+ def set_defaults
48
+ @global_time = 0
49
+ @files = {}
50
+ end
51
+
52
+ def update_global_time
53
+ @global_time += @execution_time
54
+ end
55
+
56
+ def update_spec_file_time
57
+ @files[spec_path] ||= 0
58
+ @files[spec_path] += @execution_time
59
+ end
60
+
61
+ def spec_path
62
+ @spec_path || raise("spec_path needs to be set by Knapsack Adapter's bind method")
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,3 @@
1
+ module Knapsack
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples 'default trakcer attributes' do
4
+ it { expect(tracker.global_time).to eql 0 }
5
+ it { expect(tracker.files).to eql({}) }
6
+ end
7
+
8
+ describe Knapsack::Tracker do
9
+ let(:tracker) { described_class.send(:new) }
10
+
11
+ it_behaves_like 'default trakcer attributes'
12
+
13
+ describe '#generate_report?' do
14
+ subject { tracker.generate_report? }
15
+
16
+ context 'when ENV variable is defined' do
17
+ before do
18
+ stub_const("ENV", { 'KNAPSACK_GENERATE_REPORT' => true })
19
+ end
20
+ it { should be true }
21
+ end
22
+
23
+ context 'when ENV variable is not defined' do
24
+ it { should be false }
25
+ end
26
+ end
27
+
28
+ describe '#config' do
29
+ context 'when passed options' do
30
+ let(:opts) do
31
+ {
32
+ enable_time_offset_warning: false,
33
+ fake: true
34
+ }
35
+ end
36
+
37
+ it do
38
+ expect(tracker.config(opts)).to eql({
39
+ enable_time_offset_warning: false,
40
+ time_offset_warning: 30,
41
+ fake: true
42
+ })
43
+ end
44
+ end
45
+
46
+ context "when didn't pass options" do
47
+ it do
48
+ expect(tracker.config).to eql({
49
+ enable_time_offset_warning: true,
50
+ time_offset_warning: 30,
51
+ })
52
+ end
53
+ end
54
+ end
55
+
56
+ describe 'track time execution' do
57
+ let(:now) { Time.now }
58
+ let(:spec_paths) { ['a_spec.rb', 'b_spec.rb'] }
59
+
60
+ before do
61
+ spec_paths.each_with_index do |spec_path, index|
62
+ Timecop.freeze(now) do
63
+ tracker.spec_path = spec_path
64
+ tracker.start_timer
65
+ end
66
+
67
+ seconds = index + 1
68
+ Timecop.freeze(now+seconds) do
69
+ tracker.stop_timer
70
+ end
71
+ end
72
+ end
73
+
74
+ it { expect(tracker.global_time).to eql 3.0 }
75
+ it do
76
+ expect(tracker.files).to eql({
77
+ 'a_spec.rb' => 1.0,
78
+ 'b_spec.rb' => 2.0,
79
+ })
80
+ end
81
+
82
+ context '#reset!' do
83
+ before { tracker.reset! }
84
+ it_behaves_like 'default trakcer attributes'
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Knapsack do
4
+ describe '.tracker' do
5
+ subject { described_class.tracker }
6
+
7
+ it { should be_a Knapsack::Tracker }
8
+ it { expect(subject.object_id).to eql described_class.tracker.object_id }
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ require 'timecop'
2
+ Timecop.safe_mode = true
3
+
4
+ require 'codeclimate-test-reporter'
5
+ CodeClimate::TestReporter.start
6
+
7
+ require 'knapsack'
8
+
9
+ RSpec.configure do |config|
10
+ config.order = :random
11
+ config.mock_with :rspec do |mocks|
12
+ mocks.syntax = :expect
13
+ mocks.verify_partial_doubles = true
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Fast 1' do
4
+ it {}
5
+ end
6
+
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Fast 2' do
4
+ it {}
5
+ it {}
6
+ end
7
+
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Fast 3' do
4
+ it {}
5
+ it {}
6
+ it {}
7
+ end
8
+
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Fast 4' do
4
+ it {}
5
+ it {}
6
+ it {}
7
+ it {}
8
+ end
9
+
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Fast 5' do
4
+ it {}
5
+ it {}
6
+ it {}
7
+ it {}
8
+ it {}
9
+ end
10
+
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Fast 6' do
4
+ it {}
5
+ it {}
6
+ it {}
7
+ it {}
8
+ it {}
9
+ it {}
10
+ end
11
+
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Slow A' do
4
+ it { sleep 1 }
5
+ it { sleep 0.1 }
6
+ it { sleep 0.5 }
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Slow B' do
4
+ it { sleep 2 }
5
+ it { sleep 0.2 }
6
+ it { sleep 1 }
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Slow C' do
4
+ it { sleep 0.8 }
5
+ it { sleep 0.1 }
6
+ it { sleep 0.1 }
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Slow D' do
4
+ it { sleep 1 }
5
+ it { sleep 1 }
6
+ it { sleep 2 }
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Slow E' do
4
+ it { sleep 1 }
5
+ it { sleep 0.9 }
6
+ it { sleep 0.5 }
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Slow F' do
4
+ it { sleep 0.1 }
5
+ it { sleep 0.2 }
6
+ it { sleep 0.3 }
7
+ end
@@ -0,0 +1,14 @@
1
+ require 'knapsack'
2
+ Knapsack.tracker.config({
3
+ enable_time_offset_warning: true,
4
+ time_offset_warning: 5
5
+ })
6
+ Knapsack::Adapters::Rspec.bind
7
+
8
+ RSpec.configure do |config|
9
+ config.order = :random
10
+ config.mock_with :rspec do |mocks|
11
+ mocks.syntax = :expect
12
+ mocks.verify_partial_doubles = true
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: knapsack
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - ArturT
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '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
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 3.0.0
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '3.0'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 3.0.0
61
+ - !ruby/object:Gem::Dependency
62
+ name: timecop
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: codeclimate-test-reporter
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ description: Parallel specs across CI server nodes based on each spec file's time
90
+ execution. It generates spec time execution report and uses it for further test
91
+ runs.
92
+ email:
93
+ - arturtrzop@gmail.com
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files: []
97
+ files:
98
+ - ".gitignore"
99
+ - ".rspec"
100
+ - ".travis.yml"
101
+ - Gemfile
102
+ - LICENSE.txt
103
+ - README.md
104
+ - Rakefile
105
+ - knapsack.gemspec
106
+ - knapsack_report.json
107
+ - lib/knapsack.rb
108
+ - lib/knapsack/adapters/base.rb
109
+ - lib/knapsack/adapters/rspec.rb
110
+ - lib/knapsack/presenter.rb
111
+ - lib/knapsack/report.rb
112
+ - lib/knapsack/tracker.rb
113
+ - lib/knapsack/version.rb
114
+ - spec/knapsack/tracker_spec.rb
115
+ - spec/knapsack_spec.rb
116
+ - spec/spec_helper.rb
117
+ - spec_examples/fast/1_spec.rb
118
+ - spec_examples/fast/2_spec.rb
119
+ - spec_examples/fast/3_spec.rb
120
+ - spec_examples/fast/4_spec.rb
121
+ - spec_examples/fast/5_spec.rb
122
+ - spec_examples/fast/6_spec.rb
123
+ - spec_examples/slow/a_spec.rb
124
+ - spec_examples/slow/b_spec.rb
125
+ - spec_examples/slow/c_spec.rb
126
+ - spec_examples/slow/d_spec.rb
127
+ - spec_examples/slow/e_spec.rb
128
+ - spec_examples/slow/f_spec.rb
129
+ - spec_examples/spec_helper.rb
130
+ homepage: https://github.com/ArturT/knapsack
131
+ licenses:
132
+ - MIT
133
+ metadata: {}
134
+ post_install_message:
135
+ rdoc_options: []
136
+ require_paths:
137
+ - lib
138
+ required_ruby_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ requirements: []
149
+ rubyforge_project:
150
+ rubygems_version: 2.2.2
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: Parallel specs across CI server nodes based on each spec file's time execution.
154
+ test_files:
155
+ - spec/knapsack/tracker_spec.rb
156
+ - spec/knapsack_spec.rb
157
+ - spec/spec_helper.rb