retest 0.8.2 → 0.9.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: 6e058f016e23d459435e738ff0cf3406d65e39b5a504e19abfe3df6dcc695376
4
- data.tar.gz: f8c6039063902c21e3b5917dc768b46abdf599c14368984892ba41624565ede0
3
+ metadata.gz: 8df33036507fe29259ef99ac9fa574fdece9af4e69911f21125a1c4bbad7778c
4
+ data.tar.gz: a4bb2606b7373fb304638125be08d94c79a5dfb5e324cbf433848730cf08abe6
5
5
  SHA512:
6
- metadata.gz: 67b0d493529e376e1a0f439c618f3e0c8f208ad9ba7ea64c023d15d09fbd641f54106d6ece13be8941a586a924285d23e89940da5e271a559ba17286d33c0214
7
- data.tar.gz: d880ee6039b6d0f11a6e420df26cf56358ed74291939717bc4e0db51db8c4b6e829e1bceee58af8490a9b506020c57cc0d4cde6fc7cde889691c61c5787a8956
6
+ metadata.gz: ba3f7823d9789965dbd44d92ac40aeb1f6d3dd9f35f6e634f317949adf72ba672abb231f4603acfe1da2c766d3158da81ca1c538868ab8be8955bfdf443651b0
7
+ data.tar.gz: 74f1a43fc0b23d48bd9a7cdd53c8a57206cbf9cc3546f1a6d2d0609d7f837744f1f74162ced9f57661f6008237b039f32ba2454289d839314ecfae5bc4ce011f
@@ -46,6 +46,8 @@ jobs:
46
46
  - ruby-app
47
47
  - rails-app
48
48
  - hanami-app
49
+ - rspec-rails
50
+ - rspec-ruby
49
51
  steps:
50
52
  - uses: actions/checkout@v2
51
53
  - name: Set up Ruby
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- retest (0.8.2)
4
+ retest (0.9.0)
5
5
  listen (~> 3.2)
6
6
  string-similarity (~> 2.1)
7
7
  tty-option (~> 0.1)
@@ -10,7 +10,7 @@ GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
12
  byebug (11.1.3)
13
- ffi (1.14.2)
13
+ ffi (1.15.0)
14
14
  listen (3.4.1)
15
15
  rb-fsevent (~> 0.10, >= 0.10.3)
16
16
  rb-inotify (~> 0.9, >= 0.9.10)
data/README.md CHANGED
@@ -2,29 +2,46 @@
2
2
 
3
3
  Retest is a small command-line tool to help you refactor code by watching a file change and running its matching spec. Designed to be dev-centric and project independent, it can be used on the fly. No Gemfile updates, no commits to a repo or configuration files required to start refactoring. Works with every Ruby projects (at least that is the end goal)
4
4
 
5
- ## Why?
6
- It is advised to be one `cmd + z` away from green tests when refactoring. This means running tests after every line change. Let Retest rerun your tests after every file change you make.
7
-
8
- Retest gem is meant to be simple and follow testing conventions encountered in Ruby projects. Give it a go you can uninstall it easily. If you think the matching pattern could be improved please raise an issue.
9
-
10
- For fully fledged solutions, some cli tools already exists: [autotest](https://github.com/grosser/autotest), [guard](https://github.com/guard/guard), [zentest](https://github.com/seattlerb/zentest)
5
+ ## Demo
11
6
 
12
7
  ![demo](https://alexbarret.com/images/external/retest-demo-26bcad04.gif)
13
8
 
14
9
  ## Installation
15
10
 
16
- Install it on your machine with:
11
+ Install it on your machine without adding it on a Gemfile:
17
12
 
18
13
  $ gem install retest
19
- $ retest 'bundle exec rspec <test>'
20
14
 
21
15
  ## Usage
22
16
 
23
- Launch `retest` in your terminal after accessing your ruby project folder.
17
+ Launch `retest` in your terminal after accessing your ruby repository.
18
+
19
+ You can pass the test command surrounded by quotes and use the placeholder `<test>` to tell `retest` where to put test file in your command. Example:
24
20
 
25
- Pass the test command surrounded by quotes. Use the placeholder `<test>` in your command to tell `retest` where to put the path of the test file in your command. Example: `retest 'bundle exec rspec <test>'`. When a file is changed `retest` will find its matching test and run it.
21
+ $ retest 'bundle exec rspec <test>'
22
+
23
+ When a file is changed, the gem will find its matching test and run the test command with it.
24
+
25
+ Few shortcut flags exist to avoid writing the full test command.
26
+
27
+ $ retest --rspec
28
+ $ retest --rails
29
+ $ retest --rake --all
30
+
31
+ Finally let retest automatically find your ruby setup and run the appropriate command using:
26
32
 
27
- Learn more by running `retest -h`
33
+ $ retest
34
+ $ retest --auto
35
+ $ retest --auto --all
36
+
37
+ The gem works as follows:
38
+
39
+ * When a file is changed, retest will run its matching test.
40
+ * When a test files is changed, retest will run the test file.
41
+ * When multiple matching test files are found, retest asks you to confirm the file and save the answer.
42
+ * When a test file is not found, retest runs the last run command or throw a 404.
43
+
44
+ See more example with `retest -h`
28
45
 
29
46
  ```
30
47
  Usage: retest [OPTIONS] [COMMAND]
@@ -35,10 +52,11 @@ Arguments:
35
52
  COMMAND The test command to rerun when a file changes.
36
53
  Use <test> placeholder to tell retest where to put the matching
37
54
  spec.
38
-
55
+
39
56
 
40
57
  Options:
41
58
  --all Run all the specs of a specificied ruby setup
59
+ --auto Indentify repository setup and runs appropriate command
42
60
  -h, --help Print usage
43
61
  --rails Shortcut for 'bundle exec rails test <test>'
44
62
  --rake Shortcut for 'bundle exec rake test TEST=<test>'
@@ -56,16 +74,24 @@ Examples:
56
74
 
57
75
  Runs a hardcoded command after a file change
58
76
  $ retest 'ruby lib/bottles_test.rb'
77
+
78
+ Let retest identify which command to run
79
+ $ retest
80
+ $ retest --auto
81
+
82
+ Let retest identify which command to run for all tests
83
+ $ retest --all
84
+ $ retest --auto --all
59
85
  ```
60
86
 
61
- The gem works as follows:
87
+ ## Why?
88
+ It is advised to be one `cmd + z` away from green tests when refactoring. This means running tests after every line change. Let Retest rerun your tests after every file change you make.
62
89
 
63
- * When a file is changed, retest will run its matching file test.
64
- * When a test file is changed, retest will run the file test.
65
- * When multiple matching test files are found, retest asks you to confirm the file and save the answer.
66
- * When a test file is not found, retest runs the last run command or throw a 404.
90
+ Retest gem is meant to be simple and follow testing conventions encountered in Ruby projects. Give it a go you can uninstall it easily. If you think the matching pattern could be improved please raise an issue.
91
+
92
+ For fully fledged solutions, some cli tools already exists: [autotest](https://github.com/grosser/autotest), [guard](https://github.com/guard/guard), [zentest](https://github.com/seattlerb/zentest)
67
93
 
68
- ### Docker
94
+ ## Docker
69
95
 
70
96
  Retest works in Docker too. You can install the gem and launch retest in your container while refactoring.
71
97
  ```bash
@@ -74,7 +100,7 @@ $ gem install retest
74
100
  $ retest 'bundle exec rails test <test>'
75
101
  ```
76
102
 
77
- ### Disclaimer
103
+ ## Disclaimer
78
104
  * If an error comes in try using `bundle exec` like so: `$ retest 'bundle exec rake test <test>'`
79
105
  * Aliases saved on ~/.bashrc or ~/.zshrc cannot be run that way with the `retest` command
80
106
 
@@ -93,8 +119,6 @@ Retest supports ruby 2.4 and above.
93
119
  - [x] Rails
94
120
  - [x] Ad-hoc scripts
95
121
  - [x] Hanami
96
- - [ ] Sinatra
97
- - [ ] Cuba? Padrino?
98
122
  - [ ] Handle other languages: Elixir, Node, Python, PHP
99
123
  - [ ] Aliases from oh-my-zsh and bash profiles?
100
124
 
data/bin/debug ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "retest"
5
+ require "byebug"
6
+
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
+ Retest.start(options.command) # not blocking
17
+
18
+ sleep
data/bin/test/hanami-app CHANGED
@@ -3,4 +3,6 @@
3
3
  bundle install
4
4
  bundle exec rake build
5
5
  ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/hanami-app/retest.gem
6
- docker-compose -f features/hanami-app/docker-compose.yml up --build
6
+ docker-compose -f features/hanami-app/docker-compose.yml build
7
+ docker-compose -f features/hanami-app/docker-compose.yml run retest sh bin/test_setup
8
+ docker-compose -f features/hanami-app/docker-compose.yml up --exit-code-from retest
data/bin/test/rails-app CHANGED
@@ -3,4 +3,4 @@
3
3
  bundle install
4
4
  bundle exec rake build
5
5
  ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/rails-app/retest.gem
6
- docker-compose -f features/rails-app/docker-compose.yml up --build
6
+ docker-compose -f features/rails-app/docker-compose.yml up --build --exit-code-from retest
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+
3
+ bundle install
4
+ bundle exec rake build
5
+ ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/rspec-rails/retest.gem
6
+ docker-compose -f features/rspec-rails/docker-compose.yml up --build --exit-code-from retest
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+
3
+ bundle install
4
+ bundle exec rake build
5
+ ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/rspec-ruby/retest.gem
6
+ docker-compose -f features/rspec-ruby/docker-compose.yml up --build --exit-code-from retest
data/bin/test/ruby-app CHANGED
@@ -3,4 +3,4 @@
3
3
  bundle install
4
4
  bundle exec rake build
5
5
  ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/ruby-app/retest.gem
6
- docker-compose -f features/ruby-app/docker-compose.yml up --build
6
+ docker-compose -f features/ruby-app/docker-compose.yml up --build --exit-code-from retest
data/lib/retest.rb CHANGED
@@ -7,6 +7,7 @@ require "retest/repository"
7
7
  require "retest/test_options"
8
8
  require "retest/options"
9
9
  require "retest/version_control"
10
+ require "retest/setup"
10
11
 
11
12
  module Retest
12
13
  class Error < StandardError; end
@@ -8,7 +8,6 @@ module Retest
8
8
  RAILS_COMMAND = "bundle exec rails test <test>"
9
9
  RAKE_COMMAND = "bundle exec rake test TEST=<test>"
10
10
  RUBY_COMMAND = "bundle exec ruby <test>"
11
- NO_COMMAND = "echo You have no command assigned"
12
11
 
13
12
  ALL_RAKE_COMMAND = "bundle exec rake test"
14
13
  ALL_RAILS_COMMAND = "bundle exec rails test"
@@ -37,6 +36,18 @@ module Retest
37
36
  Runs a hardcoded command after a file change
38
37
  $ retest 'ruby lib/bottles_test.rb'
39
38
  EOS
39
+
40
+ example <<~EOS
41
+ Let retest identify which command to run
42
+ $ retest
43
+ $ retest --auto
44
+ EOS
45
+
46
+ example <<~EOS
47
+ Let retest identify which command to run for all tests
48
+ $ retest --all
49
+ $ retest --auto --all
50
+ EOS
40
51
  end
41
52
 
42
53
  argument :command do
@@ -52,6 +63,11 @@ module Retest
52
63
  desc "Run all the specs of a specificied ruby setup"
53
64
  end
54
65
 
66
+ flag :auto do
67
+ long "--auto"
68
+ desc "Indentify repository setup and runs appropriate command"
69
+ end
70
+
55
71
  flag :help do
56
72
  short "-h"
57
73
  long "--help"
@@ -84,21 +100,21 @@ module Retest
84
100
  new(args).command
85
101
  end
86
102
 
87
- def initialize(args = [])
103
+ def initialize(args = [], output_stream: STDOUT, setup: Setup)
88
104
  self.args = args
105
+ @output_stream = output_stream
106
+ @setup = setup
89
107
  end
90
108
 
91
109
  def command
92
- if params[:rspec]
93
- params[:all] ? ALL_RSPEC_COMMAND : RSPEC_COMMAND
94
- elsif params[:rake]
95
- params[:all] ? ALL_RAKE_COMMAND : RAKE_COMMAND
96
- elsif params[:rails]
97
- params[:all] ? ALL_RAILS_COMMAND : RAILS_COMMAND
98
- elsif params[:ruby]
99
- params[:all] ? NO_COMMAND : RUBY_COMMAND
100
- else
101
- params[:command] || NO_COMMAND
110
+ return params[:command] if params[:command]
111
+
112
+ if params[:rspec] then rspec_command
113
+ elsif params[:rake] then rake_command
114
+ elsif params[:rails] then rails_command
115
+ elsif params[:ruby] then ruby_command
116
+ elsif params[:auto] then default_command
117
+ else default_command
102
118
  end
103
119
  end
104
120
 
@@ -110,5 +126,46 @@ module Retest
110
126
  def help?
111
127
  params[:help]
112
128
  end
129
+
130
+ private
131
+
132
+ def full_suite?
133
+ params[:all]
134
+ end
135
+
136
+ def default_command
137
+ choose_command @setup.type, command_for(@setup.type)
138
+ end
139
+
140
+ def command_for(type)
141
+ case type
142
+ when :rspec then rspec_command
143
+ when :rails then rails_command
144
+ when :rake then rake_command
145
+ when :ruby then ruby_command
146
+ else ruby_command
147
+ end
148
+ end
149
+
150
+ def choose_command(type, command)
151
+ @output_stream.puts "Setup identified: [#{type.upcase}]. Using command: '#{command}'"
152
+ command
153
+ end
154
+
155
+ def rspec_command
156
+ full_suite? ? ALL_RSPEC_COMMAND : RSPEC_COMMAND
157
+ end
158
+
159
+ def rails_command
160
+ full_suite? ? ALL_RAILS_COMMAND : RAILS_COMMAND
161
+ end
162
+
163
+ def rake_command
164
+ full_suite? ? ALL_RAKE_COMMAND : RAKE_COMMAND
165
+ end
166
+
167
+ def ruby_command
168
+ RUBY_COMMAND
169
+ end
113
170
  end
114
171
  end
@@ -17,14 +17,14 @@ module Retest
17
17
  end
18
18
 
19
19
  def add(added)
20
- return if added && added.empty?
20
+ return if added&.empty?
21
21
 
22
22
  files.push(*added)
23
23
  files.sort!
24
24
  end
25
25
 
26
26
  def remove(removed)
27
- return if removed && removed.empty?
27
+ return if removed&.empty?
28
28
 
29
29
  if removed.is_a?(Array)
30
30
  removed.each { |file| files.delete(file) }
@@ -0,0 +1,45 @@
1
+ module Retest
2
+ class Setup
3
+ def self.type
4
+ new.type
5
+ end
6
+
7
+ def type
8
+ @type ||= begin
9
+ return :ruby unless has_gemfile?
10
+
11
+ if rspec?
12
+ :rspec
13
+ elsif rails?
14
+ :rails
15
+ elsif rake?
16
+ :rake
17
+ else
18
+ :ruby
19
+ end
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def has_gemfile?
26
+ File.exist? 'Gemfile'
27
+ end
28
+
29
+ def rspec?
30
+ has_gem? 'rspec'
31
+ end
32
+
33
+ def rails?
34
+ File.exist? 'bin/rails'
35
+ end
36
+
37
+ def rake?
38
+ has_gem? 'rake'
39
+ end
40
+
41
+ def has_gem?(gem_name)
42
+ !`cat Gemfile | grep #{gem_name}`.empty?
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module Retest
2
- VERSION = "0.8.2"
2
+ VERSION = "0.9.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.8.2
4
+ version: 0.9.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: 2021-03-11 00:00:00.000000000 Z
11
+ date: 2021-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-similarity
@@ -70,15 +70,19 @@ files:
70
70
  - README/demo.gif
71
71
  - Rakefile
72
72
  - bin/console
73
+ - bin/debug
73
74
  - bin/setup
74
75
  - bin/test/hanami-app
75
76
  - bin/test/rails-app
77
+ - bin/test/rspec-rails
78
+ - bin/test/rspec-ruby
76
79
  - bin/test/ruby-app
77
80
  - exe/retest
78
81
  - lib/retest.rb
79
82
  - lib/retest/options.rb
80
83
  - lib/retest/repository.rb
81
84
  - lib/retest/runner.rb
85
+ - lib/retest/setup.rb
82
86
  - lib/retest/test_options.rb
83
87
  - lib/retest/version.rb
84
88
  - lib/retest/version_control.rb