rspec-interactive 0.9.9 → 0.9.12

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: c87a284feb4bf76bac68cda8cbe5703a66f04a856c8e2aed9e27d30b89e2654e
4
- data.tar.gz: 9336d2bff3ba1973921f8d7ba6a36d88bc11d4acd1c2b2ee86d7c47cb58d0356
3
+ metadata.gz: d723a8386eb4ed50df0bde9d90efacb2a8d6472f06faefa711afca46bdd87ae5
4
+ data.tar.gz: 79c582d886cc31909d7f43c46ec5f9cfffdc8d8f3f9371e85d4e15d496c9cf43
5
5
  SHA512:
6
- metadata.gz: 36afe559f97bc7cdee9e6833655f23e6092004b800e53beed28099afb8db6ce5511bc8177c9cc648ffc0a558bd221ca2ff13c5ff44e76132c20af99b30281fda
7
- data.tar.gz: '097084b7f1fec026f08433a8d12d56997b83a8deb8852026fc04dc1f3e7ec5410433e0758b374724cb2b5450f7b5be4e4db2d9953241a7bbd703f610f032e6ef'
6
+ metadata.gz: d2bf91dd9111564260b331113842d0fc39991908f8e7707a91589ce6ddaee5ece21916f1aee89c70719cbb0da7854b668dca998f4caa17f488d6f8097e705d81
7
+ data.tar.gz: 3d24e2e9c3b7b17f87dd56252346b94e78da69abf023889d23b8e89258c8970ad239aebb91f6e507d0dd441a252636240147d70fcfb7a4a0fe93259be6a22fea
data/Gemfile.lock CHANGED
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-interactive (0.9.8)
5
- listen
4
+ rspec-interactive (0.9.11)
6
5
  pry
7
6
  rspec-core
8
7
  rspec-teamcity (= 1.0.0)
@@ -14,9 +13,6 @@ GEM
14
13
  diff-lcs (1.4.4)
15
14
  ffi (1.15.5)
16
15
  ffi (1.15.5-java)
17
- listen (3.7.1)
18
- rb-fsevent (~> 0.10, >= 0.10.3)
19
- rb-inotify (~> 0.9, >= 0.9.10)
20
16
  method_source (1.0.0)
21
17
  pry (0.14.1)
22
18
  coderay (~> 1.1)
@@ -25,9 +21,6 @@ GEM
25
21
  coderay (~> 1.1)
26
22
  method_source (~> 1.0)
27
23
  spoon (~> 0.0)
28
- rb-fsevent (0.11.1)
29
- rb-inotify (0.10.1)
30
- ffi (~> 1.0)
31
24
  rspec (3.9.0)
32
25
  rspec-core (~> 3.9.0)
33
26
  rspec-expectations (~> 3.9.0)
@@ -5,7 +5,7 @@ require 'rspec-interactive'
5
5
 
6
6
  @options = {
7
7
  server: true,
8
- server_port: RSpec::Interactive::DEFAULT_PORT
8
+ port: RSpec::Interactive::DEFAULT_PORT
9
9
  }
10
10
 
11
11
  parser = OptionParser.new do |opts|
@@ -26,4 +26,4 @@ parser = OptionParser.new do |opts|
26
26
 
27
27
  end.parse!
28
28
 
29
- RSpec::Interactive.start(config_file: @options[:config_file], server: @options[:server], port: @options[:server_port])
29
+ RSpec::Interactive.start(config_file: @options[:config_file], server: @options[:server], port: @options[:port])
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Interactive
5
- VERSION = "0.9.9"
5
+ VERSION = "0.9.12"
6
6
  end
7
7
  end
@@ -1,8 +1,9 @@
1
+ require 'find'
1
2
  require 'json'
2
- require 'listen'
3
3
  require 'pry'
4
4
  require 'readline'
5
5
  require 'rspec/core'
6
+ require 'set'
6
7
  require 'shellwords'
7
8
  require 'socket'
8
9
  require 'teamcity/spec/runner/formatter/teamcity/formatter'
@@ -47,7 +48,6 @@ module RSpec
47
48
  @history_file = history_file
48
49
  @updated_files = []
49
50
  @stty_save = %x`stty -g`.chomp
50
- @file_change_mutex = Mutex.new
51
51
  @rspec_mutex = Mutex.new
52
52
  @output_stream = output_stream
53
53
  @input_stream = input_stream
@@ -60,12 +60,19 @@ module RSpec
60
60
  check_rails
61
61
  maybe_trap_interrupt
62
62
  configure_pry
63
+ configure_watched_files
63
64
 
64
65
  @startup_thread = Thread.start do
65
66
  Thread.current.report_on_exception = false
67
+
66
68
  if server
67
69
  @server_thread = Thread.start do
68
- server = TCPServer.new port
70
+ begin
71
+ server = TCPServer.new port
72
+ rescue StandardError => e
73
+ log_exception(@output_stream, e)
74
+ exit 1
75
+ end
69
76
 
70
77
  while true
71
78
  break unless client = server.accept
@@ -90,14 +97,15 @@ module RSpec
90
97
  @startup_output = StringOutput.new
91
98
  output = ThreadedOutput.new(thread_map: { Thread.current => @startup_output }, default: @output_stream)
92
99
 
100
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
93
101
  Stdio.capture(stdout: output, stderr: output) do
94
102
  @config_cache.record_configuration { @configuration.configure_rspec.call }
95
- start_file_watcher
96
103
  end
104
+ finish = Process.clock_gettime(Process::CLOCK_MONOTONIC)
105
+ @startup_duration = (finish - start).round
97
106
  end
98
107
 
99
108
  Pry.start
100
- @listener.stop if @listener
101
109
  @server_thread.exit if @server_thread
102
110
  @startup_thread.exit if @startup_thread
103
111
  0
@@ -132,18 +140,6 @@ module RSpec
132
140
  end
133
141
  end
134
142
 
135
- def self.start_file_watcher
136
- return if @configuration.watch_dirs.empty?
137
-
138
- # Only polling seems to work in Docker.
139
- @listener = Listen.to(*@configuration.watch_dirs, only: /\.rb$/, force_polling: true) do |modified, added|
140
- @file_change_mutex.synchronize do
141
- @updated_files.concat(added + modified)
142
- end
143
- end
144
- @listener.start
145
- end
146
-
147
143
  def self.configure_pry
148
144
  # Set up IO.
149
145
  Pry.config.input = Readline
@@ -158,18 +154,15 @@ module RSpec
158
154
  end
159
155
 
160
156
  def self.refresh(output: @output_stream)
161
- @file_change_mutex.synchronize do
162
- @updated_files.uniq.each do |filename|
163
- output.puts "changed: #{filename}"
164
- trace = TracePoint.new(:class) do |tp|
165
- @configuration.on_class_load.call(tp.self)
166
- end
167
- trace.enable
168
- load filename
169
- trace.disable
170
- output.puts
157
+ get_updated_files.each do |filename|
158
+ output.puts "changed: #{filename}"
159
+ trace = TracePoint.new(:class) do |tp|
160
+ @configuration.on_class_load.call(tp.self)
171
161
  end
172
- @updated_files.clear
162
+ trace.enable
163
+ load filename
164
+ trace.disable
165
+ output.puts
173
166
  end
174
167
  @configuration.refresh.call
175
168
  end
@@ -304,13 +297,23 @@ module RSpec
304
297
  def self.await_startup(output: @output_stream)
305
298
  return true unless @startup_thread
306
299
 
300
+ waited = false
307
301
  if @startup_thread.alive?
308
302
  output.puts 'waiting for configure_rspec...'
303
+ waited = true
309
304
  end
310
305
 
311
306
  begin
312
307
  @startup_thread.join
313
308
  @startup_thread = nil
309
+ if waited
310
+ if @startup_duration == 1
311
+ output.puts("configure_rspec took 1 second")
312
+ else
313
+ output.puts("configure_rspec took #{@startup_duration} seconds")
314
+ end
315
+ end
316
+
314
317
  print_startup_output(output: output)
315
318
  true
316
319
  rescue Interrupt
@@ -329,10 +332,35 @@ module RSpec
329
332
  end
330
333
 
331
334
  def self.print_startup_output(output: @output_stream)
332
- return if @startup_output.nil? || @startup_output.string.empty?
335
+ return if @startup_output.nil?
333
336
 
334
- output.puts(@startup_output.string)
337
+ unless @startup_output.string.empty?
338
+ output.puts(@startup_output.string)
339
+ end
335
340
  @startup_output = nil
336
341
  end
342
+
343
+ def self.configure_watched_files
344
+ @watched_files = get_watched_files
345
+ end
346
+
347
+ def self.get_watched_files
348
+ return Set.new if @configuration.watch_dirs.empty?
349
+ entries = Find.find(*@configuration.watch_dirs).flat_map do |file|
350
+ if FileTest.file?(file)
351
+ [[file, File.mtime(file).to_i]]
352
+ else
353
+ []
354
+ end
355
+ end
356
+ entries.to_set
357
+ end
358
+
359
+ def self.get_updated_files
360
+ new_watched_files = get_watched_files
361
+ difference = new_watched_files - @watched_files
362
+ @watched_files = new_watched_files
363
+ difference.map(&:first)
364
+ end
337
365
  end
338
366
  end
@@ -27,6 +27,5 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_dependency 'rspec-core'
29
29
  spec.add_dependency 'rspec-teamcity', '1.0.0'
30
- spec.add_dependency 'listen'
31
30
  spec.add_dependency 'pry'
32
31
  end
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.9.9
4
+ version: 0.9.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Dower
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-27 00:00:00.000000000 Z
11
+ date: 2022-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-core
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.0.0
41
- - !ruby/object:Gem::Dependency
42
- name: listen
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: pry
57
43
  requirement: !ruby/object:Gem::Requirement