guard-jruby-rspec 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  require 'guard'
2
2
  require 'guard/guard'
3
3
  require 'guard/rspec'
4
+ require 'guard/jruby-rspec/reloaders'
4
5
 
5
6
  module Guard
6
7
  class JRubyRSpec < ::Guard::RSpec
@@ -15,7 +16,8 @@ module Guard
15
16
  :spec_paths => ["spec"],
16
17
  :spec_file_suffix => "_spec.rb",
17
18
  :run_all => {},
18
- :monitor_file => ".guard-jruby-rspec"
19
+ :monitor_file => ".guard-jruby-rspec",
20
+ :custom_reloaders => []
19
21
  }.merge(options)
20
22
  @last_failed = false
21
23
  @failed_paths = []
@@ -41,7 +43,7 @@ module Guard
41
43
 
42
44
  @inspector = Inspector.new(@options)
43
45
  @runner = Runner.new(@options)
44
-
46
+ @reloaders = set_up_reloaders(@options)
45
47
  end
46
48
 
47
49
  # Call once when guard starts
@@ -50,8 +52,14 @@ module Guard
50
52
  run_all if @options[:all_on_start]
51
53
  end
52
54
 
55
+ def run_all
56
+ unload_previous_examples
57
+ super
58
+ end
59
+
53
60
  def run_on_changes(raw_paths)
54
- reload_paths(raw_paths)
61
+ unload_previous_examples
62
+ @reloaders.reload(raw_paths)
55
63
 
56
64
  unless @custom_watchers.nil? or @custom_watchers.empty?
57
65
  paths = []
@@ -69,6 +77,13 @@ module Guard
69
77
  # Guard 1.1 renamed run_on_change to run_on_changes
70
78
  alias_method :run_on_change, :run_on_changes
71
79
 
80
+ def reload_rails(*)
81
+ if defined? ::ActionDispatch::Reloader
82
+ ActionDispatch::Reloader.cleanup!
83
+ ActionDispatch::Reloader.prepare!
84
+ end
85
+ end
86
+
72
87
  def reload_paths(paths)
73
88
  paths.reject {|p| p.end_with?(@options[:spec_file_suffix])}.each do |p|
74
89
  if File.exists?(p)
@@ -85,18 +100,30 @@ module Guard
85
100
  # end
86
101
  else
87
102
  # reload the file
88
- begin
103
+ Containment.new.protect do
89
104
  load p
90
- rescue
91
- UI.error $!.message
92
- UI.error $!.backtrace.join "\n"
93
- throw :task_has_failed
94
105
  end
95
106
  end
96
107
  end
97
108
  end
98
109
  end
99
110
 
111
+ private
112
+
113
+ def set_up_reloaders(options)
114
+ reloaders = Reloaders.new
115
+ reloader_methods = [:reload_rails, :reload_paths]
116
+ reloader_procs = reloader_methods.map { |name| method(name) }
117
+ reloader_procs += options[:custom_reloaders]
118
+ reloader_procs.each { |reloader| reloaders.register &reloader }
119
+
120
+ reloaders
121
+ end
122
+
123
+ def unload_previous_examples
124
+ ::RSpec.configuration.reset
125
+ ::RSpec.world.reset
126
+ end
100
127
  end
101
128
  end
102
129
 
@@ -0,0 +1,25 @@
1
+ module Guard
2
+ class JRubyRSpec
3
+ class Containment
4
+ def initialize(options = {})
5
+ @error_handler = options.fetch(:error_handler, method(:output_as_guard_error))
6
+ end
7
+
8
+ def protect
9
+ yield
10
+ rescue Exception => e
11
+ error_handler.call e
12
+ throw :task_has_failed
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :error_handler
18
+
19
+ def output_as_guard_error(exception)
20
+ UI.error $!.message
21
+ UI.error $!.backtrace.join "\n"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ class Reloaders
2
+ def initialize
3
+ @reloaders = []
4
+ end
5
+
6
+ # Add a reloader to be called on reload
7
+ def register(options = {}, &block)
8
+ if options[:prepend]
9
+ @reloaders.unshift block
10
+ else
11
+ @reloaders << block
12
+ end
13
+ end
14
+
15
+ def reload(paths = [])
16
+ @reloaders.each do |reloader|
17
+ reloader.call(paths)
18
+ end
19
+ end
20
+ end
@@ -1,4 +1,5 @@
1
1
  require 'rspec'
2
+ require 'guard/jruby-rspec/containment'
2
3
  require 'guard/jruby-rspec/formatters/notification_rspec'
3
4
 
4
5
  module Guard
@@ -44,13 +45,10 @@ module Guard
44
45
  # end
45
46
  else
46
47
  orig_configuration = ::RSpec.configuration
47
- begin
48
+ Containment.new.protect do
48
49
  ::RSpec::Core::Runner.run(rspec_arguments(paths, @options))
49
- rescue SyntaxError => e
50
- UI.error e.message
51
- ensure
52
- ::RSpec.instance_variable_set(:@configuration, orig_configuration)
53
50
  end
51
+ ::RSpec.instance_variable_set(:@configuration, orig_configuration)
54
52
  end
55
53
  end
56
54
 
@@ -83,7 +81,6 @@ module Guard
83
81
  def formatter_regex
84
82
  @formatter_regex ||= /(?:^|\s)(?:-f\s*|--format(?:=|\s+))([\w:]+)/
85
83
  end
86
-
87
84
  end
88
85
  end
89
86
  end
@@ -1,5 +1,5 @@
1
1
  module Guard
2
2
  module JRubyRSpecVersion
3
- VERSION = "0.1.8"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-jruby-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-16 00:00:00.000000000 Z
12
+ date: 2013-05-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: guard
@@ -68,7 +68,9 @@ extra_rdoc_files: []
68
68
  files:
69
69
  - lib/guard-jruby-rspec.rb
70
70
  - lib/guard/jruby-rspec.rb
71
+ - lib/guard/jruby-rspec/containment.rb
71
72
  - lib/guard/jruby-rspec/inspector.rb
73
+ - lib/guard/jruby-rspec/reloaders.rb
72
74
  - lib/guard/jruby-rspec/runner.rb
73
75
  - lib/guard/jruby-rspec/version.rb
74
76
  - lib/guard/jruby-rspec/formatters/notification_rspec.rb