rspec-preloader-hanami 1.3.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b211e665a58a3dc5b8a466dbc731cf92b837afb24b40fa6d505e92c9ddeaa61c
4
+ data.tar.gz: 88918a9a2566a412b429b857c42d1ddc43e1b63570de8722b30efa5503dd760c
5
+ SHA512:
6
+ metadata.gz: 15353dd1e396d38b4d73332176d6de6b5a73b8872d11f0d63784f70dfd710de82f9720f6a7465fce3887db8fa5f8058e44cad76b5aa19cc6fe7ff4be174c59df
7
+ data.tar.gz: f1a4f780ceddefedeaae475e17886d6b27fbb3c2baeb0f41324e7a03c68ab8b0b78518b021ba0f829e250531a77b438df4cc78731bf22a9779f1bd1692c5cdfb
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/rspec_preloader"
4
+
5
+ RspecPreloader.run(ARGV)
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/rspec_preloader"
4
+
5
+ RspecPreloader.run_client(ARGV)
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/rspec_preloader"
4
+
5
+ RspecPreloader.run_server
@@ -0,0 +1,15 @@
1
+ require 'drb/drb'
2
+ require_relative 'server'
3
+
4
+ class RspecPreloader
5
+ class Client
6
+
7
+ def self.run(rspec_arguments)
8
+ DRb.start_service
9
+
10
+ rspec_runner = DRbObject.new_with_uri(SERVER_URI)
11
+ rspec_runner.run_rspec(rspec_arguments, STDERR, STDOUT)
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,37 @@
1
+ require "readline"
2
+ require_relative "spec_runner"
3
+
4
+ class RspecPreloader
5
+ class CommandLine
6
+ def self.run(rspec_arguments = [''])
7
+ new(rspec_arguments).run
8
+ end
9
+
10
+ def initialize(rspec_arguments)
11
+ @rspec_arguments = rspec_arguments
12
+ end
13
+
14
+ def run
15
+ first_run
16
+ command_line_loop
17
+ end
18
+
19
+ private
20
+
21
+ def first_run
22
+ return if @rspec_arguments == ""
23
+ Readline::HISTORY << @rspec_arguments.join(" ")
24
+ SpecRunner.run_rspec(@rspec_arguments)
25
+ end
26
+
27
+ def command_line_loop
28
+ loop do
29
+ rspec_arguments = Readline.readline("rspec > ", true)
30
+ break if [nil, "exit"].include?(rspec_arguments)
31
+ rspec_arguments_array = rspec_arguments.chomp.split(" ")
32
+ SpecRunner.run_rspec(rspec_arguments_array)
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,40 @@
1
+ class FileSelector
2
+ def self.updated_source_files
3
+ new.updated_source_files
4
+ end
5
+
6
+ def updated_source_files
7
+ all_updated_files.select do |filename|
8
+ filename.start_with?('app/', 'lib/', 'apps/', 'config/')
9
+ end.select do |filename|
10
+ filename.end_with?('.rb')
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def all_updated_files
17
+ file_statuses_and_names.select do |file_status_and_name|
18
+ updated_files_statuses.include? file_status_and_name.first
19
+ end
20
+ .map(&:last)
21
+ end
22
+
23
+ def updated_files_statuses
24
+ ['M', 'MM', 'A', '??']
25
+ end
26
+
27
+ def file_statuses_and_names
28
+ git_status_lines.map do |git_status_line|
29
+ git_status_line.split(' ')
30
+ end
31
+ end
32
+
33
+ def git_status_lines
34
+ git_status.split("\n")
35
+ end
36
+
37
+ def git_status
38
+ `git status --porcelain`
39
+ end
40
+ end
@@ -0,0 +1,16 @@
1
+ require 'drb/drb'
2
+
3
+ class RspecPreloader
4
+
5
+ SERVER_URI = "druby://localhost:8787"
6
+
7
+ class Server
8
+
9
+ $SAFE = 1 # disable eval() and friends
10
+
11
+ def self.run
12
+ DRb.start_service(SERVER_URI, SpecRunner)
13
+ DRb.thread.join
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,40 @@
1
+ require "rspec/core"
2
+ require_relative "file_selector"
3
+
4
+ class RspecPreloader
5
+ class SpecRunner
6
+
7
+ def self.run_rspec(rspec_arguments_array, std_err = STDERR, std_out = STDOUT)
8
+ new(rspec_arguments_array, std_err, std_out).run_rspec
9
+ end
10
+
11
+ def initialize(rspec_arguments_array, std_err, std_out)
12
+ @rspec_arguments = rspec_arguments_array
13
+ @std_err = std_err
14
+ @std_out = std_out
15
+ end
16
+
17
+ def run_rspec
18
+ pid = fork do
19
+ load_updated_files
20
+ run_specs(@rspec_arguments)
21
+ end
22
+ Process.wait(pid)
23
+ end
24
+
25
+ private
26
+
27
+ def load_updated_files
28
+ FileSelector.updated_source_files.each do |file|
29
+ load file
30
+ end
31
+ end
32
+
33
+ def run_specs(arguments_array)
34
+ # NOTE: Hack to allow subsequent spec runner invocations to work
35
+ arguments_array.reject! { |arg| ['bundle', 'exec', 'rspec-preloader', 'rspec'].include?(arg) }
36
+ RSpec::Core::Runner.run(arguments_array, @std_err, @std_out)
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,41 @@
1
+ require_relative "rspec_preloader/command_line"
2
+ require_relative "rspec_preloader/server"
3
+ require_relative "rspec_preloader/client"
4
+
5
+ class RspecPreloader
6
+
7
+ def self.run(rspec_arguments = nil)
8
+ setup
9
+ CommandLine.run(rspec_arguments)
10
+ end
11
+
12
+ def self.run_server
13
+ setup
14
+ Server.run
15
+ end
16
+
17
+ def self.run_client(rspec_arguments)
18
+ Client.run(rspec_arguments)
19
+ end
20
+
21
+ private
22
+
23
+ def self.setup
24
+ trap_int_signal
25
+ load_spec_helper
26
+ end
27
+
28
+ def self.trap_int_signal
29
+ trap("INT") do
30
+ puts "Shutting down rspec-preloader"
31
+ exit
32
+ end
33
+ end
34
+
35
+ def self.load_spec_helper
36
+ print "Loading spec_helper..."
37
+ require "#{Dir.pwd}/spec/spec_helper"
38
+ puts "done."
39
+ end
40
+
41
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rspec-preloader-hanami
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Victor Mours
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Life is too short to be waiting for your tests to load.
56
+ email: victor.mours@gmail.com
57
+ executables:
58
+ - rspec-preloader
59
+ - rspec-preloader-server
60
+ - rspec-preloader-client
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - bin/rspec-preloader
65
+ - bin/rspec-preloader-client
66
+ - bin/rspec-preloader-server
67
+ - lib/rspec_preloader.rb
68
+ - lib/rspec_preloader/client.rb
69
+ - lib/rspec_preloader/command_line.rb
70
+ - lib/rspec_preloader/file_selector.rb
71
+ - lib/rspec_preloader/server.rb
72
+ - lib/rspec_preloader/spec_runner.rb
73
+ homepage: https://github.com/Kaligo/rspec-preloader
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubygems_version: 3.1.4
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Start Rspec instantly (forked to handle Hanami apps)
96
+ test_files: []