retest 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ffe53d75f1b6c84ecdc5506c13a5798fba6e1c6801d816c98fec97912adf890
4
- data.tar.gz: 3fd96dfa07a53ca007474b6dcbdfb7c1c542207c46b738736594b8a72e330d4f
3
+ metadata.gz: b785b5164606d944a470b42899d1a7c6d4fa77f3d0d3a3850e4adc1e81d61db6
4
+ data.tar.gz: d722fe7580cc3f24587322ee9d0dcc47efc4bded149d59461eb7408398f78b73
5
5
  SHA512:
6
- metadata.gz: abe51dbcf57d44462117ad547d5e084973e6b3efbcf9e2a4450458e9f24b6e1f6a42e9bb1ee1ef20b48de8f42e4b3f12808765a8830432bddc94809c5705f1eb
7
- data.tar.gz: f0f018c5553e34ca7bcf10411f73b9e6008936b877454a2a90f1bca8f6fcd30d0f5c9158ae2cef71484b3faca2db68b4b43b1d53063cdcd07eae1609bd802b0a
6
+ metadata.gz: 9e7ebd3a5dd1eb6d1a09bcae184d749ac59b49cd928f845c3fcbf5d47e067e9623388167ffad4e7dc186e0aec22178444409e0da3978083107e57e7b7abcd453
7
+ data.tar.gz: f0cd1516119abcc62c4dfb73d317097dc5f57d3ed741bc7ff44455c0518646c6c4ffcf44686e6ee939053a7bd435acd72fc8d4f6653123fa2816634e7abbb5a5
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- retest (0.2.0)
4
+ retest (0.3.0)
5
5
  listen (~> 3.2)
6
6
  string-similarity (~> 2.1)
7
7
 
data/README.md CHANGED
@@ -25,7 +25,7 @@ Pass the test command surrounded with quotes. Use the placeholder `<test>` in yo
25
25
 
26
26
  ```bash
27
27
  # Let retest find the test file and replace the placeholder with the path of the test file
28
- $ retest 'bundle exec rake test <test>'
28
+ $ retest 'bundle exec rake test TEST=<test>'
29
29
  $ retest 'rails test <test>'
30
30
  $ retest 'rspec <test>'
31
31
  $ retest 'ruby <test>'
@@ -46,7 +46,7 @@ $ retest 'ruby all_tests.rb'
46
46
  Installing & launching the gem in the Docker container seem to work
47
47
  ```bash
48
48
  $ docker-compose run web bash
49
- $ gem install retests
49
+ $ gem install retest
50
50
  $ retest 'bundle exec rails test <test>'
51
51
  ```
52
52
 
data/exe/retest CHANGED
@@ -8,8 +8,12 @@ puts "Launching Retest..."
8
8
  command = Retest::Command.for(ARGV.join)
9
9
 
10
10
  listener = Listen.to('.', ignore: /node_modules|tmp/, relative: true) do |modified, added, removed|
11
- system("clear") || system("cls")
12
- command.run(modified.first.strip)
11
+ if modified.any?
12
+ system("clear") || system("cls")
13
+ command.run(modified.first.strip)
14
+ end
15
+ rescue => e
16
+ puts "Something went wrong: #{e.message}"
13
17
  end
14
18
 
15
19
  listener.start # not blocking
@@ -1,21 +1,8 @@
1
1
  require "retest/version"
2
2
  require "retest/command"
3
+ require "retest/repository"
3
4
  require 'string/similarity'
4
5
 
5
6
  module Retest
6
7
  class Error < StandardError; end
7
-
8
- def find_test(path, files: nil)
9
- files
10
- .select { |file| regex(path) =~ file }
11
- .max_by { |file| String::Similarity.cosine(path, file) }
12
- end
13
-
14
- private
15
-
16
- def regex(path)
17
- extname = File.extname(path)
18
- basename = File.basename(path, extname)
19
- Regexp.new(".*#{basename}_(?:spec|test)#{extname}")
20
- end
21
8
  end
@@ -11,12 +11,11 @@ module Retest
11
11
  end
12
12
 
13
13
  class VariableCommand
14
- attr_reader :command, :files, :cache
14
+ attr_reader :command, :repository, :cached_test_file
15
15
 
16
- def initialize(command, files: nil, cache: {})
16
+ def initialize(command, repository: nil)
17
+ @repository = repository || Repository.new
17
18
  @command = command
18
- @cache = cache
19
- @files = files || default_files
20
19
  end
21
20
 
22
21
  def ==(obj)
@@ -24,34 +23,21 @@ module Retest
24
23
  end
25
24
 
26
25
  def run(file_changed)
27
- if find_test(file_changed)
28
- system command.gsub('<test>', find_test(file_changed))
26
+ if @cached_test_file = test_file(file_changed)
27
+ puts "Test File Selected: #{cached_test_file}"
28
+ system command.gsub('<test>', cached_test_file)
29
29
  else
30
30
  puts 'Could not find a file test matching'
31
31
  end
32
32
  end
33
33
 
34
- private
35
-
36
- def find_test(path)
37
- cache[path] ||= files
38
- .select { |file| regex(path) =~ file }
39
- .max_by { |file| String::Similarity.cosine(path, file) }
40
- end
41
-
42
- def regex(path)
43
- extname = File.extname(path)
44
- basename = File.basename(path, extname)
45
- Regexp.new(".*#{basename}_(?:spec|test)#{extname}")
46
- end
47
-
48
- def default_files
49
- @default_files ||= Dir.glob('**/*') - Dir.glob('{tmp,node_modules}/**/*')
34
+ def test_file(file_changed)
35
+ repository.find_test(file_changed) || cached_test_file
50
36
  end
51
37
  end
52
38
 
53
39
  HardcodedCommand = Struct.new(:command) do
54
- def run(file_changed)
40
+ def run(_)
55
41
  system command
56
42
  end
57
43
  end
@@ -0,0 +1,62 @@
1
+ module Retest
2
+ class Repository
3
+ attr_accessor :files, :cache, :input_stream, :output_stream
4
+
5
+ def initialize(files: nil, cache: {}, input_stream: nil, output_stream: nil)
6
+ @cache = cache
7
+ @files = files || default_files
8
+ @input_stream = input_stream || STDIN
9
+ @output_stream = output_stream|| STDOUT
10
+ end
11
+
12
+ def find_test(path)
13
+ cache[path] ||= select_test(path)
14
+ end
15
+
16
+ private
17
+
18
+ def select_test(path)
19
+ tests = files.select { |file| regex(path) =~ file }
20
+ .sort_by { |file| String::Similarity.levenshtein(path, file) }
21
+ .reverse
22
+
23
+ case tests.count
24
+ when 0, 1
25
+ tests.first
26
+ else
27
+ ask_question tests.first(5)
28
+ tests[get_input]
29
+ end
30
+ end
31
+
32
+ def default_files
33
+ @default_files ||= Dir.glob('**/*') - Dir.glob('{tmp,node_modules}/**/*')
34
+ end
35
+
36
+ def regex(path)
37
+ extname = File.extname(path)
38
+ basename = File.basename(path, extname)
39
+ Regexp.new(".*#{basename}_(?:spec|test)#{extname}")
40
+ end
41
+
42
+ def ask_question(tests)
43
+ output_stream.puts <<~QUESTION
44
+ We found few tests matching:
45
+ #{list_options(tests)}
46
+
47
+ Which file do you want to use?
48
+ Enter the file number now:
49
+ QUESTION
50
+ end
51
+
52
+ def list_options(tests)
53
+ tests.map.with_index do |file, index|
54
+ "[#{index}] - #{file}"
55
+ end.join("\n")
56
+ end
57
+
58
+ def get_input
59
+ input_stream.gets.chomp.to_i
60
+ end
61
+ end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module Retest
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Barret
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-03 00:00:00.000000000 Z
11
+ date: 2020-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-similarity
@@ -86,6 +86,7 @@ files:
86
86
  - exe/retest
87
87
  - lib/retest.rb
88
88
  - lib/retest/command.rb
89
+ - lib/retest/repository.rb
89
90
  - lib/retest/version.rb
90
91
  - retest.gemspec
91
92
  homepage: https://github.com/AlexB52/retest