rspec-interactive 0.7.0 → 0.7.1
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 +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +4 -1
- data/README.md +30 -3
- data/lib/rspec-interactive.rb +26 -18
- data/lib/rspec-interactive/config.rb +7 -1
- data/lib/rspec-interactive/refresh_command.rb +22 -0
- data/lib/rspec-interactive/version.rb +1 -1
- data/scripts/release.sh +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad5fba3e662512b5cce97181a4495493a2a4c04a302e616a02a8b8ab71361cd8
|
4
|
+
data.tar.gz: 28d14de9e9e05607adc35f5a03823cb11f9f93f87252316e3c6ee16d2655d9ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00f3ddf1f4e82d8a2590bb6b899ddacd470a7473c1aa32038b82cadd0ac664be5b8b86d96b13160cd8182f18d9a25843b948d694fa98cf6363fc49632c05b9b2
|
7
|
+
data.tar.gz: 8368023eb258fcd9df41b7497ca16112733f7a9513dc7a0830967652d52c5faec4ad61d613c9b9d5141945a0312db6a53a7981564cc76532befe512d0e4a3dbf
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rspec-interactive (0.
|
4
|
+
rspec-interactive (0.7.0)
|
5
5
|
listen
|
6
6
|
pry
|
7
7
|
rspec-core
|
@@ -36,5 +36,8 @@ DEPENDENCIES
|
|
36
36
|
rspec-expectations
|
37
37
|
rspec-interactive!
|
38
38
|
|
39
|
+
RUBY VERSION
|
40
|
+
ruby 3.0.0p0
|
41
|
+
|
39
42
|
BUNDLED WITH
|
40
43
|
2.2.17
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# RSpec Interactive
|
2
2
|
|
3
|
-
|
3
|
+
A Pry console capable of running specs.
|
4
4
|
|
5
5
|
## Installation & Configuration
|
6
6
|
|
@@ -17,7 +17,7 @@ RSpec::Interactive.configure do |config|
|
|
17
17
|
# Directories to watch for file changes. When a file changes, it will be reloaded like `load 'path/to/file'`.
|
18
18
|
config.watch_dirs += ["app", "lib", "config"]
|
19
19
|
|
20
|
-
# This block is invoked on startup. RSpec configuration must happen here so that it can be reloaded before each test run.
|
20
|
+
# This block is invoked on startup. RSpec configuration must happen here so that it can be cached and reloaded before each test run.
|
21
21
|
config.configure_rspec do
|
22
22
|
require './spec/spec_helper.rb'
|
23
23
|
end
|
@@ -26,6 +26,13 @@ RSpec::Interactive.configure do |config|
|
|
26
26
|
config.on_class_load do |clazz|
|
27
27
|
clazz.clear_validators! if clazz < ApplicationRecord
|
28
28
|
end
|
29
|
+
|
30
|
+
# Invoked before each invocation of RSpec. Can also be manually invoked by typing `refresh` in the console.
|
31
|
+
# Any modified/added files will be loaded via `load` before invoking.
|
32
|
+
config.refresh do
|
33
|
+
FactoryBot.reload
|
34
|
+
Rails.application.reloader.reload!
|
35
|
+
end
|
29
36
|
end
|
30
37
|
```
|
31
38
|
|
@@ -35,6 +42,27 @@ Update `.gitignore`
|
|
35
42
|
echo '.rspec_interactive_history' >> .gitignore
|
36
43
|
```
|
37
44
|
|
45
|
+
### A Note About FactoryBot
|
46
|
+
|
47
|
+
It is not possible to reload a file containing FactoryBot factory definitions via `load` because FactoryBot does not allow factories to be redefined. Be carefule not to add any directories to `watch_dirs` which contain factory definitions. Instead, you should configure the location of your factories like the following in your `spec_helper.rb`:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
FactoryBot.definition_file_paths = %w(spec/factories)
|
51
|
+
FactoryBot.find_definitions
|
52
|
+
```
|
53
|
+
|
54
|
+
Then add the following to your RSpec Interactive config
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
RSpec::Interactive.configure do |config|
|
58
|
+
config.refresh do
|
59
|
+
FactoryBot.reload
|
60
|
+
end
|
61
|
+
end
|
62
|
+
```
|
63
|
+
|
64
|
+
This will cause factories to be reloaded before each test run and also whenever the `refresh` command is invoked in the console.
|
65
|
+
|
38
66
|
## Usage
|
39
67
|
|
40
68
|
Optionally, specify a config file with `--config <config-file>`. Optionally, specify arguments to an initial RSpec invocation with `--initial-rspec-args <initial-rspec-args>`.
|
@@ -80,7 +108,6 @@ Run multiple specs:
|
|
80
108
|
```shell
|
81
109
|
[6] pry(main)> rspec examples/passing_spec.rb examples/failing_spec.rb
|
82
110
|
```
|
83
|
-
|
84
111
|
Debug a spec (use `exit` to resume while debugging):
|
85
112
|
|
86
113
|
```shell
|
data/lib/rspec-interactive.rb
CHANGED
@@ -9,6 +9,7 @@ require 'rspec-interactive/runner'
|
|
9
9
|
require 'rspec-interactive/config'
|
10
10
|
require 'rspec-interactive/rspec_config_cache'
|
11
11
|
require 'rspec-interactive/input_completer'
|
12
|
+
require 'rspec-interactive/refresh_command'
|
12
13
|
require 'rspec-interactive/rspec_command'
|
13
14
|
|
14
15
|
module RSpec
|
@@ -38,12 +39,12 @@ module RSpec
|
|
38
39
|
load config_file if config_file
|
39
40
|
|
40
41
|
check_rails
|
41
|
-
start_file_watcher
|
42
42
|
trap_interrupt
|
43
43
|
configure_pry
|
44
44
|
|
45
45
|
@init_thread = Thread.start {
|
46
46
|
@config_cache.record_configuration { @configuration.configure_rspec.call }
|
47
|
+
start_file_watcher
|
47
48
|
}
|
48
49
|
|
49
50
|
if initial_rspec_args
|
@@ -88,7 +89,7 @@ module RSpec
|
|
88
89
|
return if @configuration.watch_dirs.empty?
|
89
90
|
|
90
91
|
# Only polling seems to work in Docker.
|
91
|
-
@listener = Listen.to(*@configuration.watch_dirs, only: /\.rb$/, force_polling: true) do |modified, added
|
92
|
+
@listener = Listen.to(*@configuration.watch_dirs, only: /\.rb$/, force_polling: true) do |modified, added|
|
92
93
|
@mutex.synchronize do
|
93
94
|
@updated_files.concat(added + modified)
|
94
95
|
end
|
@@ -112,24 +113,10 @@ module RSpec
|
|
112
113
|
Pry.config.history_file = @history_file
|
113
114
|
end
|
114
115
|
|
115
|
-
def self.
|
116
|
-
if @init_thread&.alive?
|
117
|
-
@init_thread.join
|
118
|
-
@init_thread = nil
|
119
|
-
end
|
120
|
-
|
121
|
-
parsed_args = args.flat_map do |arg|
|
122
|
-
if arg.match(/[\*\?\[]/)
|
123
|
-
glob = Dir.glob(arg)
|
124
|
-
glob.empty? ? [arg] : glob
|
125
|
-
else
|
126
|
-
[arg]
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
116
|
+
def self.refresh
|
130
117
|
@mutex.synchronize do
|
131
118
|
@updated_files.uniq.each do |filename|
|
132
|
-
@output_stream.puts "
|
119
|
+
@output_stream.puts "changed: #{filename}"
|
133
120
|
trace = TracePoint.new(:class) do |tp|
|
134
121
|
@configuration.on_class_load.call(tp.self)
|
135
122
|
end
|
@@ -140,9 +127,30 @@ module RSpec
|
|
140
127
|
end
|
141
128
|
@updated_files.clear
|
142
129
|
end
|
130
|
+
@configuration.refresh.call
|
131
|
+
end
|
132
|
+
|
133
|
+
def self.rspec(args)
|
134
|
+
parsed_args = args.flat_map do |arg|
|
135
|
+
if arg.match(/[\*\?\[]/)
|
136
|
+
glob = Dir.glob(arg)
|
137
|
+
glob.empty? ? [arg] : glob
|
138
|
+
else
|
139
|
+
[arg]
|
140
|
+
end
|
141
|
+
end
|
143
142
|
|
143
|
+
# Initialize the runner before waiting for the init thread so that the interrupt
|
144
|
+
# handler will cancel the RSpec invocation rather than kill the app.
|
144
145
|
@runner = RSpec::Interactive::Runner.new(parsed_args)
|
145
146
|
|
147
|
+
if @init_thread&.alive?
|
148
|
+
@init_thread.join
|
149
|
+
@init_thread = nil
|
150
|
+
end
|
151
|
+
|
152
|
+
refresh
|
153
|
+
|
146
154
|
# Stop saving history in case a new Pry session is started for debugging.
|
147
155
|
Pry.config.history_save = false
|
148
156
|
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Interactive
|
3
3
|
class Configuration
|
4
|
-
attr_accessor :watch_dirs, :configure_rspec, :on_class_load
|
4
|
+
attr_accessor :watch_dirs, :configure_rspec, :on_class_load, :refresh
|
5
5
|
|
6
6
|
def initialize
|
7
7
|
@watch_dirs = []
|
8
8
|
@configure_rspec = proc {}
|
9
9
|
@on_class_load = proc {}
|
10
|
+
@refresh = proc {}
|
10
11
|
end
|
11
12
|
|
12
13
|
def configure_rspec(&block)
|
@@ -18,6 +19,11 @@ module RSpec
|
|
18
19
|
return @on_class_load unless block
|
19
20
|
@on_class_load = block
|
20
21
|
end
|
22
|
+
|
23
|
+
def refresh(&block)
|
24
|
+
return @refresh unless block
|
25
|
+
@refresh = block
|
26
|
+
end
|
21
27
|
end
|
22
28
|
end
|
23
29
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RSpec::Interactive
|
4
|
+
class RefreshCommand < Pry::ClassCommand
|
5
|
+
match 'refresh'
|
6
|
+
description "Load any files in watched directories which have changed since the last refresh or rspec invocation."
|
7
|
+
|
8
|
+
banner <<-BANNER
|
9
|
+
Usage: refresh
|
10
|
+
BANNER
|
11
|
+
|
12
|
+
command_options(
|
13
|
+
:keep_retval => false
|
14
|
+
)
|
15
|
+
|
16
|
+
def process
|
17
|
+
RSpec::Interactive.refresh
|
18
|
+
end
|
19
|
+
|
20
|
+
Pry::Commands.add_command(::RSpec::Interactive::RefreshCommand)
|
21
|
+
end
|
22
|
+
end
|
data/scripts/release.sh
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-interactive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Dower
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-core
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/rspec-interactive.rb
|
79
79
|
- lib/rspec-interactive/config.rb
|
80
80
|
- lib/rspec-interactive/input_completer.rb
|
81
|
+
- lib/rspec-interactive/refresh_command.rb
|
81
82
|
- lib/rspec-interactive/rspec_command.rb
|
82
83
|
- lib/rspec-interactive/rspec_config_cache.rb
|
83
84
|
- lib/rspec-interactive/runner.rb
|