rspec-preloader-hanami 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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: []