rspeed 0.3.0 → 0.6.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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -0
  3. data/README.md +10 -7
  4. data/lib/generators/rspeed/install_generator.rb +1 -1
  5. data/lib/rspeed.rb +9 -7
  6. data/lib/rspeed/database.rb +11 -0
  7. data/lib/rspeed/differ.rb +55 -0
  8. data/lib/rspeed/env.rb +39 -0
  9. data/lib/rspeed/extension.rb +3 -2
  10. data/lib/rspeed/logger.rb +13 -0
  11. data/lib/rspeed/observer.rb +21 -6
  12. data/lib/rspeed/redis.rb +72 -0
  13. data/lib/rspeed/runner.rb +4 -15
  14. data/lib/rspeed/splitter.rb +24 -97
  15. data/lib/rspeed/variable.rb +30 -0
  16. data/lib/rspeed/version.rb +1 -1
  17. data/spec/common_helper.rb +10 -0
  18. data/spec/fixtures/1_spec.rb +9 -0
  19. data/spec/fixtures/2_spec.rb +5 -0
  20. data/spec/fixtures/empty.rb +4 -0
  21. data/spec/models/rspeed/database/result_spec.rb +17 -0
  22. data/spec/models/rspeed/differ/actual_data_spec.rb +20 -0
  23. data/spec/models/rspeed/differ/actual_files_spec.rb +20 -0
  24. data/spec/models/rspeed/differ/added_data_spec.rb +19 -0
  25. data/spec/models/rspeed/differ/diff_spec.rb +51 -0
  26. data/spec/models/rspeed/differ/removed_data_spec.rb +20 -0
  27. data/spec/models/rspeed/differ/removed_time_spec.rb +14 -0
  28. data/spec/models/rspeed/env/app_spec.rb +17 -0
  29. data/spec/models/rspeed/env/db_spec.rb +17 -0
  30. data/spec/models/rspeed/env/host_spec.rb +17 -0
  31. data/spec/models/rspeed/env/pipe_spec.rb +19 -0
  32. data/spec/models/rspeed/env/pipes_spec.rb +19 -0
  33. data/spec/models/rspeed/env/port_spec.rb +17 -0
  34. data/spec/models/rspeed/env/rspeed_spec.rb +43 -0
  35. data/spec/models/rspeed/env/spec_path_spec.rb +19 -0
  36. data/spec/models/rspeed/observer/after_spec.rb +5 -5
  37. data/spec/models/rspeed/observer/after_suite_spec.rb +35 -0
  38. data/spec/models/rspeed/observer/before_spec.rb +0 -2
  39. data/spec/models/rspeed/observer/before_suite_spec.rb +18 -6
  40. data/spec/models/rspeed/redis/clean_spec.rb +20 -0
  41. data/spec/models/rspeed/redis/client_spec.rb +7 -0
  42. data/spec/models/rspeed/redis/destroy_spec.rb +21 -0
  43. data/spec/models/rspeed/redis/get_spec.rb +11 -0
  44. data/spec/models/rspeed/redis/keys_spec.rb +13 -0
  45. data/spec/models/rspeed/redis/list_spec.rb +19 -0
  46. data/spec/models/rspeed/redis/profiles_content_spec.rb +19 -0
  47. data/spec/models/rspeed/redis/result_spec.rb +13 -0
  48. data/spec/models/rspeed/redis/set_spec.rb +11 -0
  49. data/spec/models/rspeed/redis/specs_finished_spec.rb +19 -0
  50. data/spec/models/rspeed/redis/specs_initiated_spec.rb +13 -0
  51. data/spec/models/rspeed/runner/run_spec.rb +73 -0
  52. data/spec/models/rspeed/splitter/append_spec.rb +8 -28
  53. data/spec/models/rspeed/splitter/consolidate_spec.rb +23 -0
  54. data/spec/models/rspeed/splitter/first_pipe_spec.rb +4 -8
  55. data/spec/models/rspeed/splitter/need_warm_question_spec.rb +35 -0
  56. data/spec/models/rspeed/splitter/pipe_files_spec.rb +21 -0
  57. data/spec/models/rspeed/splitter/split_spec.rb +32 -34
  58. data/spec/models/rspeed/variable/append_app_name_spec.rb +33 -0
  59. data/spec/models/rspeed/variable/key_spec.rb +15 -0
  60. data/spec/models/rspeed/variable/pipe_spec.rb +23 -0
  61. data/spec/models/rspeed/variable/pipes_pattern_spec.rb +5 -0
  62. data/spec/models/rspeed/variable/profile_pattern_spec.rb +5 -0
  63. data/spec/models/rspeed/variable/profile_spec.rb +23 -0
  64. data/spec/models/rspeed/variable/result_spec.rb +19 -0
  65. data/spec/spec_helper.rb +27 -0
  66. data/spec/support/common.rb +13 -0
  67. data/spec/support/coverage.rb +14 -0
  68. data/spec/support/env_mock.rb +3 -0
  69. data/spec/support/fakeredis.rb +3 -0
  70. metadata +160 -26
  71. data/spec/models/rspeed/splitter/destroy_spec.rb +0 -33
  72. data/spec/models/rspeed/splitter/diff_spec.rb +0 -29
  73. data/spec/models/rspeed/splitter/get_spec.rb +0 -76
  74. data/spec/models/rspeed/splitter/keys_spec.rb +0 -33
  75. data/spec/models/rspeed/splitter/last_pipe_spec.rb +0 -21
  76. data/spec/models/rspeed/splitter/pipe_spec.rb +0 -21
  77. data/spec/models/rspeed/splitter/pipes_spec.rb +0 -27
  78. data/spec/models/rspeed/splitter/rename_spec.rb +0 -18
  79. data/spec/models/rspeed/splitter/result_spec.rb +0 -19
  80. data/spec/models/rspeed/splitter/save_spec.rb +0 -57
  81. data/spec/rails_helper.rb +0 -43
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#destroy' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before do
11
- redis.set 'rspeed', '{}'
12
- redis.set 'rspeed_1', '{}'
13
- redis.set 'rspeed_2', '{}'
14
- end
15
-
16
- it 'destroys via wildcard' do
17
- splitter.destroy 'rspeed_*'
18
-
19
- expect(splitter.keys('*')).to eq %w[rspeed]
20
- end
21
-
22
- it 'destroys via single name' do
23
- splitter.destroy 'rspeed'
24
-
25
- expect(splitter.keys('*')).to eq %w[rspeed_1 rspeed_2]
26
- end
27
-
28
- it 'destroys default partner when no pattern is given' do
29
- splitter.destroy
30
-
31
- expect(splitter.keys('*')).to eq %w[rspeed]
32
- end
33
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#diff' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before do
11
- redis.lpush 'rspeed', { file: '1_spec.rb', time: 1 }.to_json
12
- redis.lpush 'rspeed', { file: '2_spec.rb', time: 2 }.to_json
13
- redis.lpush 'rspeed', { file: '3_spec.rb', time: 3 }.to_json
14
-
15
- allow(Dir).to receive(:[]).with('./spec/**/*_spec.rb').and_return %w[
16
- 2_spec.rb
17
- 3_spec.rb
18
- 4_spec.rb
19
- ]
20
- end
21
-
22
- it 'removes removed specs and adds new spec and keeps keeped specs based on rspeed key values' do
23
- expect(splitter.diff).to eq [
24
- { file: '3_spec.rb', time: 3 },
25
- { file: '2_spec.rb', time: 2 },
26
- { file: '4_spec.rb', time: 0 },
27
- ]
28
- end
29
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#get' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- context 'when wildcard pattern is given' do
11
- before do
12
- redis.set 'rspeed_1', { files: [[1, '1_spec.rb'], [2, '2_spec.rb']], number: 0, total: 3 }.to_json
13
- redis.set 'rspeed_2', { files: [[3, '3_spec.rb']], number: 1, total: 3 }.to_json
14
- end
15
-
16
- it 'returns all values' do
17
- expect(splitter.get('rspeed_*')).to eq [
18
- {
19
- 'files' => [[1, '1_spec.rb'], [2, '2_spec.rb']],
20
- 'number' => 0,
21
- 'total' => 3
22
- },
23
-
24
- {
25
- 'files' => [[3, '3_spec.rb']],
26
- 'number' => 1,
27
- 'total' => 3
28
- }
29
- ]
30
- end
31
- end
32
-
33
- context 'when normal pattern is given' do
34
- before do
35
- redis.set 'pattern', { files: [[1, '1_spec.rb'], [2, '2_spec.rb']], number: 0, total: 3 }.to_json
36
- end
37
-
38
- it 'returns all values from that key' do
39
- expect(splitter.get('pattern')).to eq [
40
- {
41
- 'files' => [[1, '1_spec.rb'], [2, '2_spec.rb']],
42
- 'number' => 0,
43
- 'total' => 3
44
- }
45
- ]
46
- end
47
- end
48
-
49
- context 'when pattern is rspeed' do
50
- before do
51
- redis.lpush 'rspeed', { file: '1_spec.rb', time: 1 }.to_json
52
- redis.lpush 'rspeed', { file: '2_spec.rb', time: 2 }.to_json
53
- end
54
-
55
- it 'executes the right fetch method' do
56
- expect(splitter.get('rspeed')).to eq [
57
- '{"file":"2_spec.rb","time":2}',
58
- '{"file":"1_spec.rb","time":1}'
59
- ]
60
- end
61
- end
62
-
63
- context 'when pattern is rspeed_tmp' do
64
- before do
65
- redis.lpush 'rspeed_tmp', { file: '1_spec.rb', time: 1 }.to_json
66
- redis.lpush 'rspeed_tmp', { file: '2_spec.rb', time: 2 }.to_json
67
- end
68
-
69
- it 'executes the right fetch method' do
70
- expect(splitter.get('rspeed_tmp')).to eq [
71
- '{"file":"2_spec.rb","time":2}',
72
- '{"file":"1_spec.rb","time":1}'
73
- ]
74
- end
75
- end
76
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '.keys' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- context 'with default config' do
11
- before do
12
- redis.set 'rspeed_1', 'value_1'
13
- redis.set 'rspeed_2', 'value_2'
14
- redis.set 'rspeed_3', 'value_3'
15
- end
16
-
17
- it 'shows keys' do
18
- expect(splitter.keys).to eq %w[rspeed_1 rspeed_2 rspeed_3]
19
- end
20
- end
21
-
22
- context 'with custom key' do
23
- before do
24
- redis.set 'custom_key_1', 'value_1'
25
- redis.set 'custom_key_2', 'value_2'
26
- redis.set 'custom_key_3', 'value_3'
27
- end
28
-
29
- it 'shows keys' do
30
- expect(splitter.keys('custom_key_*')).to eq %w[custom_key_1 custom_key_2 custom_key_3]
31
- end
32
- end
33
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '.last_pipe?' do
6
- subject(:splitter) { described_class.new }
7
-
8
- before { allow(splitter).to receive(:pipes).and_return 3 }
9
-
10
- context 'when pipe env is equal pipes env' do
11
- before { allow(splitter).to receive(:pipe).and_return 3 }
12
-
13
- it { expect(splitter.last_pipe?).to eq true }
14
- end
15
-
16
- context 'when pipe env not equal pipes env' do
17
- before { allow(splitter).to receive(:pipe).and_return 2 }
18
-
19
- it { expect(splitter.last_pipe?).to eq false }
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#pipe' do
6
- subject(:splitter) { described_class.new }
7
-
8
- context 'when pipe env is given' do
9
- before { ENV['RSPEED_PIPE'] = '2' }
10
-
11
- it 'returns the number of the current pipe' do
12
- expect(splitter.pipe).to eq 2
13
- end
14
- end
15
-
16
- context 'when pipe env is not given' do
17
- it 'returns 1' do
18
- expect(splitter.pipe).to eq 1
19
- end
20
- end
21
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#pipes' do
6
- subject(:splitter) { described_class.new }
7
-
8
- context 'when has no result' do
9
- before { allow(splitter).to receive(:result?).and_return(false) }
10
-
11
- it 'the number of pipes is adjusted to one' do
12
- expect(splitter.pipes).to eq 1
13
- end
14
- end
15
-
16
- context 'when has result' do
17
- before do
18
- allow(splitter).to receive(:result?).and_return(true)
19
-
20
- ENV['RSPEED_PIPES'] = '2'
21
- end
22
-
23
- it 'is used the given value on env' do
24
- expect(splitter.pipes).to eq 2
25
- end
26
- end
27
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#rename' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before { redis.lpush 'rspeed_tmp', { file: '1_spec.rb', time: 1.0 }.to_json }
11
-
12
- it 'renames the key' do
13
- splitter.rename
14
-
15
- expect(redis.lrange('rspeed_tmp', 0, -1)).to eq []
16
- expect(redis.lrange('rspeed', 0, -1)).to eq ['{"file":"1_spec.rb","time":1.0}']
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '#result?' do
6
- subject(:splitter) { described_class.new }
7
-
8
- context 'when has no key rspeed on redis' do
9
- it { expect(splitter.result?).to eq false }
10
- end
11
-
12
- context 'when has no key rspeed on redis' do
13
- let!(:redis) { redis_object }
14
-
15
- before { redis.set 'rspeed', { files: [[1, '1_spec.rb']], number: 0, total: 1 }.to_json }
16
-
17
- it { expect(splitter.result?).to eq true }
18
- end
19
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe RSpeed::Splitter, '.save' do
6
- subject(:splitter) { described_class.new }
7
-
8
- let!(:redis) { redis_object }
9
-
10
- before do
11
- allow(splitter).to receive(:pipes).and_return(3)
12
-
13
- allow(splitter).to receive(:diff).and_return([
14
- { file: "./spec/0_2_spec.rb", time: '0.2' },
15
- { file: "./spec/0_3_spec.rb", time: '0.3' },
16
- { file: "./spec/0_4_spec.rb", time: '0.4' },
17
- { file: "./spec/0_7_spec.rb", time: '0.7' },
18
- { file: "./spec/1_1_spec.rb", time: '1.1' },
19
- { file: "./spec/1_5_spec.rb", time: '1.5' },
20
- { file: "./spec/2_0_spec.rb", time: '2.0' },
21
- ])
22
- end
23
-
24
- it 'saves the data on redis' do
25
- splitter.save
26
-
27
- expect(redis.keys('*')).to eq %w[rspeed_1 rspeed_2 rspeed_3]
28
-
29
- expect(JSON.parse(redis.get('rspeed_1'), symbolize_names: true)).to eq(
30
- files: [{ file: './spec/2_0_spec.rb', time: 2.0 }],
31
- number: 1,
32
- total: 2.0
33
- )
34
-
35
- expect(JSON.parse(redis.get('rspeed_2'), symbolize_names: true)).to eq(
36
- files: [
37
- { file: './spec/1_5_spec.rb', time: 1.5 },
38
- { file: './spec/0_4_spec.rb', time: 0.4 },
39
- { file: './spec/0_2_spec.rb', time: 0.2 }
40
- ],
41
-
42
- number: 2,
43
- total: 1.5 + 0.4 + 0.2
44
- )
45
-
46
- expect(JSON.parse(redis.get('rspeed_3'), symbolize_names: true)).to eq(
47
- files: [
48
- { file: './spec/1_1_spec.rb', time: 1.1 },
49
- { file: './spec/0_7_spec.rb', time: 0.7 },
50
- { file: './spec/0_3_spec.rb', time: 0.3 }
51
- ],
52
-
53
- number: 3,
54
- total: 1.1 + 0.7 + 0.3
55
- )
56
- end
57
- end
data/spec/rails_helper.rb DELETED
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ENV['RAILS_ENV'] ||= 'test'
4
-
5
- require 'fakeredis/rspec'
6
- require 'json'
7
- require 'pry-byebug'
8
- require 'rspec'
9
- require 'rspeed'
10
-
11
- RSpec.configure do |config|
12
- config.after do
13
- ENV.delete('RSPEED_PIPE')
14
- ENV.delete('RSPEED_PIPES')
15
- end
16
-
17
- config.disable_monkey_patching!
18
-
19
- config.order = :random
20
- config.profile_examples = 10
21
- end
22
-
23
- def clean_csv_file
24
- File.open('rspeed.csv', 'w') { |file| file.truncate(0) }
25
- end
26
-
27
- def populate_csv_file
28
- data = [
29
- '2.0,./spec/2_0_spec.rb',
30
- '1.5,./spec/1_5_spec.rb',
31
- '1.1,./spec/1_1_spec.rb',
32
- '0.7,./spec/0_7_spec.rb',
33
- '0.4,./spec/0_4_spec.rb',
34
- '0.3,./spec/0_3_spec.rb',
35
- '0.2,./spec/0_2_spec.rb'
36
- ].join("\n")
37
-
38
- File.open('rspeed.csv', 'a') { |file| file.write(data) }
39
- end
40
-
41
- def redis_object
42
- @redis_object ||= Redis.new(db: ENV['RSPEED_DB'], host: ENV['RSPEED_HOST'])
43
- end