retest 1.5.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce75120a1212540c1e510e4fd3d28e505f68d79e4e557b48e34cfda769d35613
4
- data.tar.gz: ff2a3cc3644ce392adb38d8a87ffea711bbc6baaeb20f70099b2c0771cce3cf6
3
+ metadata.gz: 357f54e47d0b81d02f32e097cc6a0ed43b850a144bd3d368cd1a29d8d7db9b8a
4
+ data.tar.gz: e60ae5e97ffb0a75a4c75792d0ff04e8d79a3daab5ad8eaf30a300ce6ad0a858
5
5
  SHA512:
6
- metadata.gz: 6741101b8345dfcba37002b1265d6ed5170c8b82eccc8a143b20a7fb77d196f05b9c4b4af142a7fed62952aa5251769523243c997884334cc8a3d484f93f3207
7
- data.tar.gz: 3c4f2484eb2400a47d35c22a33f6db47ede1e0fc401dccdede644114f90bc2765f1e1e6df5b2fea7e761d77983a863f2c917cfb5afd71ffabd89e884f1ad85c6
6
+ metadata.gz: c33d9188ecedb9b19b73b9bd0c0f7e88096d94101aa1e213dae692c6e1fe6b431f081fa7da19fcadaef1fc8984e7e7167e7f0ea269fc055a0d773afa228d6c19
7
+ data.tar.gz: 3901346f228ce16d193407fcd47cabadad28989e5d32c4d89d59bbf3344871021033b340663d634e1b3dc4478dc7e479be7351a7a7b546ba914b7de06add19c3
@@ -23,6 +23,8 @@ jobs:
23
23
  - 2.5
24
24
  - 2.6
25
25
  - 2.7
26
+ - '3.0'
27
+ - 3.1
26
28
  include:
27
29
  - os: macos-latest
28
30
  ruby: 2.5
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.6.6
1
+ 2.7.5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- retest (1.5.0)
4
+ retest (1.6.0)
5
5
  listen (~> 3.2)
6
6
  string-similarity (~> 2.1)
7
7
  tty-option (~> 0.1)
@@ -10,13 +10,13 @@ GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
12
  byebug (11.1.3)
13
- ffi (1.15.4)
14
- listen (3.7.0)
13
+ ffi (1.15.5)
14
+ listen (3.7.1)
15
15
  rb-fsevent (~> 0.10, >= 0.10.3)
16
16
  rb-inotify (~> 0.9, >= 0.9.10)
17
- minitest (5.14.1)
17
+ minitest (5.15.0)
18
18
  rake (12.3.3)
19
- rb-fsevent (0.11.0)
19
+ rb-fsevent (0.11.1)
20
20
  rb-inotify (0.10.1)
21
21
  ffi (~> 1.0)
22
22
  string-similarity (2.1.0)
data/README.md CHANGED
@@ -6,7 +6,8 @@ Retest is a small command-line tool to help you refactor code by watching a file
6
6
 
7
7
  ## Demo
8
8
 
9
- ![demo](https://alexbarret.com/images/external/retest-demo-26bcad04.gif)
9
+
10
+ https://user-images.githubusercontent.com/7149034/153734043-1d136f27-5c24-4676-868b-0fde76016b13.mp4
10
11
 
11
12
  ## Installation
12
13
 
@@ -36,7 +37,11 @@ Example:
36
37
 
37
38
  In this example, the feature spec `spec/features/posts_spec.rb` will be tested after any ruby file is updated.
38
39
 
39
- #### 2. Run a dynamic command
40
+ #### 2. Run a dynamic command with placeholders
41
+
42
+ Retest provides few placeholders to help you run a command after every file change. The placeholders can be used on their own or together.
43
+
44
+ 1. `<test>` placeholder
40
45
 
41
46
  You can use the placeholder `<test>` to tell the gem where to put the test file path in your command. When a file is changed, the gem will find its matching test and run the test command with it.
42
47
 
@@ -45,6 +50,16 @@ Example:
45
50
  $ retest 'bin/rails test <test>'
46
51
 
47
52
  In this example, if `app/models/post.rb` is changed then retest will run `bin/rails test test/models/post_test.rb`
53
+
54
+ 2. `<changed>` placeholder
55
+
56
+ You can use the placeholder `<changed>` to tell the gem where to put the changed file path in your command. When a file is changed, the gem will run the command with it.
57
+
58
+ Example:
59
+
60
+ $ retest 'rubocop <changed>'
61
+
62
+ In this example, if `app/models/post.rb` is changed then retest will run `rubocop app/models/post.rb`
48
63
 
49
64
  #### 3. Run a dynamic command with shortcuts
50
65
 
data/bin/debug CHANGED
@@ -16,6 +16,10 @@ end
16
16
  repository = Retest::Repository.new(files: Retest::VersionControl.files)
17
17
  command = Retest::Command.for_options(options)
18
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)
19
23
 
20
24
  program = Retest::Program.new(
21
25
  extension: options.extension,
data/exe/retest CHANGED
@@ -14,6 +14,10 @@ end
14
14
  repository = Retest::Repository.new(files: Retest::VersionControl.files)
15
15
  command = Retest::Command.for_options(options)
16
16
  runner = Retest::Runners.runner_for(command.to_s)
17
+ sounds = Retest::Sounds.for(options)
18
+
19
+ sounds.play(:tests_pass)
20
+ runner.add_observer(sounds)
17
21
 
18
22
  program = Retest::Program.new(
19
23
  extension: options.extension,
@@ -76,6 +76,11 @@ module Retest
76
76
  desc "Indentify repository setup and runs appropriate command"
77
77
  end
78
78
 
79
+ flag :notify do
80
+ long "--notify"
81
+ desc "Play a sound when specs pass or fail (macOS only)"
82
+ end
83
+
79
84
  flag :help do
80
85
  short "-h"
81
86
  long "--help"
@@ -130,6 +135,10 @@ module Retest
130
135
  params[:auto]
131
136
  end
132
137
 
138
+ def notify?
139
+ params[:notify]
140
+ end
141
+
133
142
  def extension
134
143
  Regexp.new(params[:ext])
135
144
  end
@@ -4,7 +4,7 @@ module Retest
4
4
  def run(changed_file = nil, repository: nil)
5
5
  if changed_file
6
6
  puts "Changed File Selected: #{changed_file}"
7
- system command.gsub('<changed>', changed_file)
7
+ system_run command.gsub('<changed>', changed_file)
8
8
  else
9
9
  puts <<~ERROR
10
10
  404 - Test File Not Found
@@ -1,6 +1,8 @@
1
1
  module Retest
2
2
  module Runners
3
3
  class Runner
4
+ include Observable
5
+
4
6
  attr_accessor :command
5
7
  def initialize(command)
6
8
  @command = command
@@ -11,16 +13,24 @@ module Retest
11
13
  end
12
14
 
13
15
  def run(changed_file = nil, repository: nil)
14
- system command
16
+ system_run command
15
17
  end
16
18
 
17
19
  def run_all_tests(tests_string)
18
20
  puts "Test File Selected: #{tests_string}"
19
- system command.gsub('<test>', tests_string)
21
+ system_run command.gsub('<test>', tests_string)
20
22
  end
21
23
 
22
24
  def sync(added:, removed:)
23
25
  end
26
+
27
+ private
28
+
29
+ def system_run(command)
30
+ result = system(command) ? :tests_pass : :tests_fail
31
+ changed
32
+ notify_observers(result)
33
+ end
24
34
  end
25
35
  end
26
36
  end
@@ -14,7 +14,7 @@ module Retest
14
14
 
15
15
  if cached_test_file
16
16
  puts "Test File Selected: #{cached_test_file}"
17
- system command.gsub('<test>', cached_test_file)
17
+ system_run command.gsub('<test>', cached_test_file)
18
18
  else
19
19
  puts <<~ERROR
20
20
  404 - Test File Not Found
@@ -21,7 +21,7 @@ module Retest
21
21
 
22
22
  FILES
23
23
 
24
- system command
24
+ system_run command
25
25
  .gsub('<test>', cached_test_file)
26
26
  .gsub('<changed>', changed_file)
27
27
  end
@@ -0,0 +1,36 @@
1
+ module Retest
2
+ module Sounds
3
+ module_function
4
+
5
+ def for(options)
6
+ options.notify? ? MacOS.new : Mute.new
7
+ end
8
+
9
+ class Mute
10
+ def play(_)
11
+ end
12
+ alias update play
13
+ end
14
+
15
+ class MacOS
16
+ def initialize(kernel: Kernel, thread: Thread)
17
+ @kernel = kernel
18
+ @thread = thread
19
+ end
20
+
21
+ def play(sound)
22
+ args = case sound
23
+ when :tests_fail
24
+ ['afplay', '/System/Library/Sounds/Sosumi.aiff']
25
+ when :tests_pass
26
+ ['afplay', '/System/Library/Sounds/Funk.aiff']
27
+ else
28
+ raise ArgumentError.new("No sounds were found for type: #{sound}.")
29
+ end
30
+
31
+ @thread.new { @kernel.system(*args) }
32
+ end
33
+ alias update play
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Retest
2
- VERSION = "1.5.0"
2
+ VERSION = "1.6.0"
3
3
  end
data/lib/retest.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'listen'
2
2
  require 'string/similarity'
3
+ require 'observer'
3
4
 
4
5
  require "retest/version"
5
6
  require "retest/runners"
@@ -11,6 +12,7 @@ require "retest/setup"
11
12
  require "retest/command"
12
13
  require "retest/file_system"
13
14
  require "retest/program"
15
+ require "retest/sounds"
14
16
 
15
17
  module Retest
16
18
  class Error < StandardError; 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.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Barret
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-17 00:00:00.000000000 Z
11
+ date: 2022-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-similarity
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.1'
55
- description:
55
+ description:
56
56
  email:
57
57
  - alex@abletech.nz
58
58
  executables:
@@ -96,6 +96,7 @@ files:
96
96
  - lib/retest/runners/test_runner.rb
97
97
  - lib/retest/runners/variable_runner.rb
98
98
  - lib/retest/setup.rb
99
+ - lib/retest/sounds.rb
99
100
  - lib/retest/test_options.rb
100
101
  - lib/retest/version.rb
101
102
  - lib/retest/version_control.rb
@@ -108,7 +109,7 @@ licenses:
108
109
  metadata:
109
110
  homepage_uri: https://github.com/AlexB52/retest
110
111
  source_code_uri: https://github.com/AlexB52/retest
111
- post_install_message:
112
+ post_install_message:
112
113
  rdoc_options: []
113
114
  require_paths:
114
115
  - lib
@@ -123,8 +124,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  - !ruby/object:Gem::Version
124
125
  version: '0'
125
126
  requirements: []
126
- rubygems_version: 3.0.3
127
- signing_key:
127
+ rubygems_version: 3.1.6
128
+ signing_key:
128
129
  specification_version: 4
129
130
  summary: A simple command line tool to watch file change and run its matching spec.
130
131
  test_files: []