retest 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 357f54e47d0b81d02f32e097cc6a0ed43b850a144bd3d368cd1a29d8d7db9b8a
4
- data.tar.gz: e60ae5e97ffb0a75a4c75792d0ff04e8d79a3daab5ad8eaf30a300ce6ad0a858
3
+ metadata.gz: 21de32982072708c695512ab52031d4eccfd6efbd0d7f464b71723f42be7101d
4
+ data.tar.gz: 987a1e9b14fc4df355a68aae5f3234499ace34b2419a2fb7bc6607326f3c58f9
5
5
  SHA512:
6
- metadata.gz: c33d9188ecedb9b19b73b9bd0c0f7e88096d94101aa1e213dae692c6e1fe6b431f081fa7da19fcadaef1fc8984e7e7167e7f0ea269fc055a0d773afa228d6c19
7
- data.tar.gz: 3901346f228ce16d193407fcd47cabadad28989e5d32c4d89d59bbf3344871021033b340663d634e1b3dc4478dc7e479be7351a7a7b546ba914b7de06add19c3
6
+ metadata.gz: 7efb10c87d677fe3fbe1a2922d5991aaa770269f4ad9f226d5087b96a0cb9486f43b6a53f70efd2a3149a6bc8467b9c7e5e28bd55d945a7dda7258ee6cd3c3e8
7
+ data.tar.gz: 5df599fad13aff034cec088012f760dc863e362f64cb8c0aa525885ffc80ef74ca547f823e354f397a7d52275a21627ccd59f0c221d00164f4e10f863c79c228
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- retest (1.6.0)
4
+ retest (1.7.0)
5
5
  listen (~> 3.2)
6
6
  string-similarity (~> 2.1)
7
7
  tty-option (~> 0.1)
data/bin/debug CHANGED
@@ -1,36 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "retest"
5
4
  require "byebug"
6
5
 
7
- $stdout.sync = true
8
-
9
- options = Retest::Options.new(ARGV)
10
-
11
- if options.help?
12
- $stdout.puts options.help
13
- return
14
- end
15
-
16
- repository = Retest::Repository.new(files: Retest::VersionControl.files)
17
- command = Retest::Command.for_options(options)
18
- runner = Retest::Runners.runner_for(command.to_s)
19
- sounds = Retest::Sounds.for(options)
20
-
21
- sounds.play(:tests_pass)
22
- runner.add_observer(sounds)
23
-
24
- program = Retest::Program.new(
25
- extension: options.extension,
26
- repository: repository,
27
- command: command,
28
- runner: runner
29
- )
30
-
31
- if options.params[:diff]
32
- program.diff(options.params[:diff])
33
- else
34
- program.start # not blocking
35
- sleep
36
- end
6
+ eval(File.read("exe/retest"))
data/exe/retest CHANGED
@@ -16,11 +16,10 @@ command = Retest::Command.for_options(options)
16
16
  runner = Retest::Runners.runner_for(command.to_s)
17
17
  sounds = Retest::Sounds.for(options)
18
18
 
19
- sounds.play(:tests_pass)
19
+ sounds.play(:start)
20
20
  runner.add_observer(sounds)
21
21
 
22
22
  program = Retest::Program.new(
23
- extension: options.extension,
24
23
  repository: repository,
25
24
  command: command,
26
25
  runner: runner
@@ -28,7 +27,21 @@ program = Retest::Program.new(
28
27
 
29
28
  if options.params[:diff]
30
29
  program.diff(options.params[:diff])
31
- else
32
- program.start # not blocking
33
- sleep
30
+ return
34
31
  end
32
+
33
+ # Main action
34
+
35
+ $stdout.puts "Launching Retest..."
36
+ Listen.to('.', only: options.extension, relative: true) do |modified, added, removed|
37
+ begin
38
+ program.run(modified, added, removed)
39
+ rescue => e
40
+ $stdout.puts "Something went wrong: #{e.message}"
41
+ end
42
+ end.start
43
+ $stdout.puts "Ready to refactor! You can make file changes now"
44
+
45
+ # not blocking
46
+
47
+ sleep
@@ -19,14 +19,13 @@ module Retest
19
19
  def_delegators :options, :params, :full_suite?, :auto?
20
20
 
21
21
  attr_accessor :options, :setup
22
- def initialize(options: Options.new, setup: Setup.new, output_stream: STDOUT)
22
+ def initialize(options: Options.new, setup: Setup.new, stdout: $stdout)
23
23
  @options = options
24
24
  @setup = setup
25
- @output_stream = output_stream
25
+ @stdout = stdout
26
26
  end
27
27
 
28
28
  def command
29
- return default_command if auto?
30
29
  options_command || default_command
31
30
  end
32
31
 
@@ -52,7 +51,7 @@ module Retest
52
51
  end
53
52
 
54
53
  def default_command
55
- @output_stream.puts "Setup identified: [#{type.upcase}]. Using command: '#{setup_command}'"
54
+ @stdout.puts "Setup identified: [#{type.upcase}]. Using command: '#{setup_command}'"
56
55
  setup_command
57
56
  end
58
57
 
@@ -13,13 +13,18 @@ module Retest
13
13
 
14
14
  example <<~EOS
15
15
  Runs a matching rails test after a file change
16
- $ retest 'bundle exec rails test <test>'
16
+ $ retest 'bin/rails test <test>'
17
17
  $ retest --rails
18
18
  EOS
19
19
 
20
+ example <<~EOS
21
+ Runs rubocop and matching rails test after a file change
22
+ $ retest 'rubocop <changed> && bin/rails test <test>'
23
+ EOS
24
+
20
25
  example <<~EOS
21
26
  Runs all rails tests after a file change
22
- $ retest 'bundle exec rails test'
27
+ $ retest 'bin/rails test'
23
28
  $ retest --rails --all
24
29
  EOS
25
30
 
@@ -31,19 +36,17 @@ module Retest
31
36
  example <<~EOS
32
37
  Let retest identify which command to run
33
38
  $ retest
34
- $ retest --auto
35
39
  EOS
36
40
 
37
41
  example <<~EOS
38
42
  Let retest identify which command to run for all tests
39
43
  $ retest --all
40
- $ retest --auto --all
41
44
  EOS
42
45
 
43
46
  example <<~EOS
44
47
  Run a sanity check on changed files from a branch
48
+ $ retest --diff main
45
49
  $ retest --diff origin/main --rails
46
- $ retest --diff main --auto
47
50
  EOS
48
51
  end
49
52
 
@@ -51,7 +54,7 @@ module Retest
51
54
  optional
52
55
  desc <<~EOS
53
56
  The test command to rerun when a file changes.
54
- Use <test> placeholder to tell retest where to put the matching spec.
57
+ Use <test> or <changed> placeholders to tell retest where to reference the matching spec or the changed file in the command.
55
58
  EOS
56
59
  end
57
60
 
@@ -71,11 +74,6 @@ module Retest
71
74
  desc "Run all the specs of a specificied ruby setup"
72
75
  end
73
76
 
74
- flag :auto do
75
- long "--auto"
76
- desc "Indentify repository setup and runs appropriate command"
77
- end
78
-
79
77
  flag :notify do
80
78
  long "--notify"
81
79
  desc "Play a sound when specs pass or fail (macOS only)"
@@ -130,11 +128,6 @@ module Retest
130
128
  params[:all]
131
129
  end
132
130
 
133
- def auto?
134
- return true if no_options_passed?
135
- params[:auto]
136
- end
137
-
138
131
  def notify?
139
132
  params[:notify]
140
133
  end
@@ -142,11 +135,5 @@ module Retest
142
135
  def extension
143
136
  Regexp.new(params[:ext])
144
137
  end
145
-
146
- private
147
-
148
- def no_options_passed?
149
- params.to_h.values.compact.uniq == ["\\.rb$", false]
150
- end
151
138
  end
152
139
  end
@@ -1,17 +1,18 @@
1
1
  module Retest
2
2
  class Program
3
- attr_accessor :runner, :repository, :command, :extension
4
- def initialize(runner: nil, repository: nil, command: nil, extension: /\.rb$/)
3
+ attr_accessor :runner, :repository, :command
4
+ def initialize(runner: nil, repository: nil, command: nil)
5
5
  @runner = runner
6
6
  @repository = repository
7
7
  @command = command
8
- @extension = extension
9
8
  end
10
9
 
11
- def start
12
- puts "Launching Retest..."
13
- build.start
14
- puts "Ready to refactor! You can make file changes now"
10
+ def run(modified, added, removed)
11
+ repository.sync(added: added, removed: removed)
12
+ runner.sync(added: added, removed: removed)
13
+ system('clear 2>/dev/null') || system('cls 2>/dev/null')
14
+
15
+ runner.run (modified + added).first, repository: repository
15
16
  end
16
17
 
17
18
  def diff(branch)
@@ -24,21 +25,5 @@ module Retest
24
25
  puts "Running tests..."
25
26
  runner.run_all_tests command.format_batch(test_files)
26
27
  end
27
-
28
- private
29
-
30
- def build
31
- Listen.to('.', only: extension, relative: true) do |modified, added, removed|
32
- begin
33
- repository.sync(added: added, removed: removed)
34
- runner.sync(added: added, removed: removed)
35
- system('clear 2>/dev/null') || system('cls 2>/dev/null')
36
-
37
- runner.run (modified + added).first, repository: repository
38
- rescue => e
39
- puts "Something went wrong: #{e.message}"
40
- end
41
- end
42
- end
43
28
  end
44
29
  end
@@ -1,12 +1,12 @@
1
1
  module Retest
2
2
  class Repository
3
- attr_accessor :files, :cache, :input_stream, :output_stream
3
+ attr_accessor :files, :cache, :stdin, :stdout
4
4
 
5
- def initialize(files: [], cache: {}, input_stream: nil, output_stream: nil)
6
- @cache = cache
7
- @files = files
8
- @input_stream = input_stream || STDIN
9
- @output_stream = output_stream|| STDOUT
5
+ def initialize(files: [], cache: {}, stdin: $stdin, stdout: $stdout)
6
+ @cache = cache
7
+ @files = files
8
+ @stdin = stdin
9
+ @stdout = stdout
10
10
  end
11
11
 
12
12
  def find_test(path)
@@ -61,7 +61,7 @@ module Retest
61
61
  end
62
62
 
63
63
  def ask_question(tests)
64
- output_stream.puts(<<~QUESTION)
64
+ stdout.puts(<<~QUESTION)
65
65
  We found few tests matching: #{@path}
66
66
  #{list_options(tests)}
67
67
 
@@ -77,7 +77,7 @@ module Retest
77
77
  end
78
78
 
79
79
  def get_input
80
- input_stream.gets.chomp.to_i
80
+ stdin.gets.chomp.to_i
81
81
  end
82
82
  end
83
83
  end
@@ -3,10 +3,10 @@ module Retest
3
3
  class ChangeRunner < Runner
4
4
  def run(changed_file = nil, repository: nil)
5
5
  if changed_file
6
- puts "Changed File Selected: #{changed_file}"
6
+ log("Changed File Selected: #{changed_file}")
7
7
  system_run command.gsub('<changed>', changed_file)
8
8
  else
9
- puts <<~ERROR
9
+ log(<<~ERROR)
10
10
  404 - Test File Not Found
11
11
  Retest could not find a changed file to run.
12
12
  ERROR
@@ -3,8 +3,9 @@ module Retest
3
3
  class Runner
4
4
  include Observable
5
5
 
6
- attr_accessor :command
7
- def initialize(command)
6
+ attr_accessor :command, :stdout
7
+ def initialize(command, stdout: $stdout)
8
+ @stdout = stdout
8
9
  @command = command
9
10
  end
10
11
 
@@ -17,7 +18,7 @@ module Retest
17
18
  end
18
19
 
19
20
  def run_all_tests(tests_string)
20
- puts "Test File Selected: #{tests_string}"
21
+ log("Test File Selected: #{tests_string}")
21
22
  system_run command.gsub('<test>', tests_string)
22
23
  end
23
24
 
@@ -31,6 +32,10 @@ module Retest
31
32
  changed
32
33
  notify_observers(result)
33
34
  end
35
+
36
+ def log(message)
37
+ stdout.puts(message)
38
+ end
34
39
  end
35
40
  end
36
41
  end
@@ -13,10 +13,10 @@ module Retest
13
13
  self.cached_test_file = repository.find_test(changed_file)
14
14
 
15
15
  if cached_test_file
16
- puts "Test File Selected: #{cached_test_file}"
16
+ log("Test File Selected: #{cached_test_file}")
17
17
  system_run command.gsub('<test>', cached_test_file)
18
18
  else
19
- puts <<~ERROR
19
+ log(<<~ERROR)
20
20
  404 - Test File Not Found
21
21
  Retest could not find a matching test file to run.
22
22
  ERROR
@@ -14,9 +14,9 @@ module Retest
14
14
 
15
15
  return print_test_file_not_found unless cached_test_file
16
16
 
17
- puts(<<~FILES)
17
+ log(<<~FILES)
18
18
  Files Selected:
19
- - file: #{changed_file}
19
+ - changed: #{changed_file}
20
20
  - test: #{cached_test_file}
21
21
 
22
22
  FILES
@@ -33,7 +33,7 @@ module Retest
33
33
  private
34
34
 
35
35
  def print_test_file_not_found
36
- puts <<~ERROR
36
+ log(<<~ERROR)
37
37
  404 - Test File Not Found
38
38
  Retest could not find a matching test file to run.
39
39
  ERROR
data/lib/retest/sounds.rb CHANGED
@@ -24,6 +24,8 @@ module Retest
24
24
  ['afplay', '/System/Library/Sounds/Sosumi.aiff']
25
25
  when :tests_pass
26
26
  ['afplay', '/System/Library/Sounds/Funk.aiff']
27
+ when :start
28
+ ['afplay', '/System/Library/Sounds/Blow.aiff']
27
29
  else
28
30
  raise ArgumentError.new("No sounds were found for type: #{sound}.")
29
31
  end
@@ -33,4 +35,20 @@ module Retest
33
35
  alias update play
34
36
  end
35
37
  end
36
- end
38
+ end
39
+
40
+ # List of Mac Audio Files:
41
+ # afplay /System/Library/Sounds/Basso.aiff
42
+ # afplay /System/Library/Sounds/Bottle.aiff
43
+ # afplay /System/Library/Sounds/Funk.aiff
44
+ # afplay /System/Library/Sounds/Hero.aiff
45
+ # afplay /System/Library/Sounds/Ping.aiff
46
+ # afplay /System/Library/Sounds/Purr.aiff
47
+ # afplay /System/Library/Sounds/Submarine.aiff
48
+ # afplay /System/Library/Sounds/Blow.aiff
49
+ # afplay /System/Library/Sounds/Frog.aiff
50
+ # afplay /System/Library/Sounds/Glass.aiff
51
+ # afplay /System/Library/Sounds/Morse.aiff
52
+ # afplay /System/Library/Sounds/Pop.aiff
53
+ # afplay /System/Library/Sounds/Sosumi.aiff
54
+ # afplay /System/Library/Sounds/Tink.aiff
@@ -1,3 +1,3 @@
1
1
  module Retest
2
- VERSION = "1.6.0"
2
+ VERSION = "1.7.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: 1.6.0
4
+ version: 1.7.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: 2022-04-04 00:00:00.000000000 Z
11
+ date: 2022-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-similarity