spectator 1.2.6 → 1.2.8

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5c72941ed2f2136eca2366723b7942f51ceb7f8b
4
+ data.tar.gz: 5807a32aeb0a36890c8329376d08d8c1305bc94b
5
+ SHA512:
6
+ metadata.gz: a6309a9b3167ccc4b92b280c6637beaa3e4b07a3ffc29bfc98af9df82980644056bd0df2893807a701e8dfc7d1fbb66b0052a48cb271df9a88b52226d1a0a903
7
+ data.tar.gz: 4bdae2d7f3005dbcfa613f1cd33662855291e957dfc6969fb4ce78d4d3a83d26a88fcd140aec19c51c4a18c456cba29bc433c69a0ab82e0a9297066f8083473b
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Spectator
2
2
 
3
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/elia/spectator)
4
+
3
5
  _Test driven development red-green cycle for simple people!_
4
6
 
5
7
  ## The gist
@@ -17,29 +17,35 @@ module Spectator
17
17
  include CommandLine
18
18
  include Specs
19
19
  include Control
20
-
20
+
21
21
  def matchers
22
22
  @matchers ||= []
23
23
  end
24
-
24
+
25
25
  def queue
26
26
  @queue ||= Queue.new
27
27
  end
28
-
28
+
29
29
  def watch_paths!
30
- listener = Listen.to(Dir.pwd, :relative_paths => true)
31
- listener.filter %r{^(app|spec|lib|script)/}
32
- listener.change do |modified, added, removed|
33
- [modified, added].flatten.each { |relative| queue.push relative }
34
- end
35
- listener.start(false)
30
+ listener.start
36
31
  sleep
37
32
  end
38
-
33
+
34
+ def listener
35
+ @listener ||= begin
36
+ listener = Listen.to(Dir.pwd, :relative_paths => true)
37
+ listener = listener.filter %r{^(app|spec|lib|script)/}
38
+ listener = listener.change do |modified, added, removed|
39
+ [modified, added].flatten.each { |relative| queue.push relative }
40
+ end
41
+ end
42
+ end
43
+
44
+
39
45
  def puts *args
40
46
  print args.join("\n")+"\n"
41
47
  end
42
-
48
+
43
49
  def run_specs specs
44
50
  rules.each do |(regexp, action)|
45
51
  regexp = Regexp.new(regexp)
@@ -49,37 +55,41 @@ module Spectator
49
55
  end
50
56
  end
51
57
  end
52
-
58
+
53
59
  def wait_for_changes
54
60
  puts '--- Waiting for changes...'.cyan
55
-
61
+
56
62
  loop do
57
- sleep 0.1 while queue.empty?
58
-
63
+ sleep 0.1 while queue.empty? or interrupted?
64
+
59
65
  files = []
60
66
  queue.size.times do
61
67
  files << queue.pop
62
68
  end
63
-
69
+
64
70
  files.compact!
65
71
  redo if files.empty?
66
-
67
-
68
- specs = Set.new
69
- files.each do |file|
70
- matched = matchers.map do |matcher|
71
- file.scan(matcher).flatten.first.to_s.gsub(/\.rb$/,'')
72
- end.flatten.reject(&:empty?)
73
- specs += matched.uniq.map { |m| specs_for(m) }.flatten
74
- end
75
- rspec_files *specs.to_a
72
+
73
+ rspec_files(*specs_for(files))
74
+ end
75
+ end
76
+
77
+ def specs_for files
78
+ specs = Set.new
79
+ files = [files] unless files.respond_to? :each
80
+ files.each do |file|
81
+ matched = matchers.map do |matcher|
82
+ file.scan(matcher).flatten.first.to_s.gsub(/\.rb$/,'')
83
+ end.flatten.reject(&:empty?)
84
+ specs += matched.uniq.map { |m| specs_for_file(m) }.flatten
76
85
  end
86
+ specs.to_a
77
87
  end
78
-
88
+
79
89
  def initialize &block
80
90
  yield self if block_given?
81
-
82
-
91
+
92
+
83
93
  matchers << %r{^spec/(.*)_spec\.rb$}
84
94
  matchers << %r{^(?:app|lib|script)/(.*)(?:\.rb|\.\w+|)$}
85
95
 
@@ -89,9 +99,9 @@ module Spectator
89
99
  watch_paths!
90
100
  end
91
101
  end
92
-
93
-
94
-
102
+
103
+
104
+
95
105
  def self.run
96
106
  Runner.new
97
107
  end
@@ -1,3 +1,5 @@
1
+ require 'thread'
2
+
1
3
  module Spectator
2
4
  module Control
3
5
  def exit
@@ -13,28 +15,67 @@ module Spectator
13
15
 
14
16
  def trap_int!
15
17
  # Ctrl-C
16
-
17
18
  @interrupted ||= false
19
+ @signal_queue = []
20
+ @signals_handler = Thread.new do
21
+ loop do
22
+ sleep(0.3)
23
+ if signal_queue.any?
24
+ listener.pause
25
+ ask_what_to_do!
26
+ listener.unpause
27
+ Thread.pass
28
+ signal_queue.shift
29
+ end
30
+ end
31
+ end
18
32
 
19
33
  Signal.trap('INT') do
34
+ abort! if exiting?
35
+ start_exit if interrupted?
36
+ signal_queue << :int
20
37
  puts ' (Interrupted with CTRL+C)'.red
21
- if @interrupted
22
- @exiting ? abort! : exit
23
- else
24
- @interrupted = true
25
- print '--- What to do now? (q=quit, a=all-specs): '.yellow
26
- $stdout.flush
27
- case STDIN.gets.chomp.strip.downcase
28
- when 'q'; @interrupted = false; exit
29
- when 'a'; @interrupted = false; rspec_all
30
- else
31
- @interrupted = false
32
- puts '--- Bad input, ignored.'.yellow
33
- end
34
- puts '--- Waiting for changes...'.cyan
38
+ end
39
+ end
40
+
41
+ attr_reader :signal_queue
42
+
43
+
44
+ private
45
+
46
+ def interrupted?
47
+ signal_queue.any?
48
+ end
49
+
50
+ def ask_what_to_do!
51
+ if @exiting
52
+ abort!
53
+ else
54
+ answer = ask('--- What to do now? (q=quit, a=all-specs): ')
55
+ case answer
56
+ when 'q' then start_exit
57
+ when 'a' then rspec_all
58
+ else puts '--- Bad input, ignored.'.yellow
35
59
  end
60
+ puts '--- Waiting for changes...'.cyan
36
61
  end
37
62
  end
38
-
63
+
64
+ def start_exit
65
+ return if exiting?
66
+ @exiting = true
67
+ exit
68
+ end
69
+
70
+ def exiting?
71
+ @exiting
72
+ end
73
+
74
+ def ask question
75
+ print question.yellow
76
+ $stdout.flush
77
+ STDIN.gets.chomp.strip.downcase
78
+ end
79
+
39
80
  end
40
81
  end
@@ -32,7 +32,7 @@ module Spectator
32
32
  rspec files.join(' ')
33
33
  end
34
34
 
35
- def specs_for(path)
35
+ def specs_for_file(path)
36
36
  print "--- Searching specs for #{path.inspect}...".yellow
37
37
  specs = match_specs path, Dir['spec/**/*_spec.rb']
38
38
  puts specs.empty? ? ' nothing found.'.red : " #{specs.size} matched.".green
@@ -1,3 +1,3 @@
1
1
  module Spectator
2
- VERSION = '1.2.6'
2
+ VERSION = '1.2.8'
3
3
  end
@@ -19,10 +19,11 @@ Gem::Specification.new do |s|
19
19
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
20
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
21
  s.require_paths = %w[lib]
22
-
23
- s.add_dependency 'listen'
24
- s.add_dependency 'term-ansicolor'
25
- s.add_dependency 'notify'
22
+
23
+ s.add_dependency 'listen', '~> 1.3.0'
24
+ s.add_dependency 'term-ansicolor', '~> 1.2.2'
25
+ s.add_dependency 'notify', '~> 0.5.2'
26
+
26
27
  s.add_development_dependency 'rake', '~> 0.9'
27
28
  s.add_development_dependency 'bundler', '~> 1.0'
28
29
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spectator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
5
- prerelease:
4
+ version: 1.2.8
6
5
  platform: ruby
7
6
  authors:
8
7
  - Elia
@@ -10,63 +9,78 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2012-07-05 00:00:00.000000000 Z
12
+ date: 2013-08-27 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: listen
17
- requirement: &70338823216840 !ruby/object:Gem::Requirement
18
- none: false
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  requirements:
20
- - - ! '>='
18
+ - - ~>
21
19
  - !ruby/object:Gem::Version
22
- version: '0'
20
+ version: 1.3.0
23
21
  type: :runtime
24
22
  prerelease: false
25
- version_requirements: *70338823216840
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: 1.3.0
26
28
  - !ruby/object:Gem::Dependency
27
29
  name: term-ansicolor
28
- requirement: &70338823216280 !ruby/object:Gem::Requirement
29
- none: false
30
+ requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
- - - ! '>='
32
+ - - ~>
32
33
  - !ruby/object:Gem::Version
33
- version: '0'
34
+ version: 1.2.2
34
35
  type: :runtime
35
36
  prerelease: false
36
- version_requirements: *70338823216280
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 1.2.2
37
42
  - !ruby/object:Gem::Dependency
38
43
  name: notify
39
- requirement: &70338823215640 !ruby/object:Gem::Requirement
40
- none: false
44
+ requirement: !ruby/object:Gem::Requirement
41
45
  requirements:
42
- - - ! '>='
46
+ - - ~>
43
47
  - !ruby/object:Gem::Version
44
- version: '0'
48
+ version: 0.5.2
45
49
  type: :runtime
46
50
  prerelease: false
47
- version_requirements: *70338823215640
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.5.2
48
56
  - !ruby/object:Gem::Dependency
49
57
  name: rake
50
- requirement: &70338823214580 !ruby/object:Gem::Requirement
51
- none: false
58
+ requirement: !ruby/object:Gem::Requirement
52
59
  requirements:
53
60
  - - ~>
54
61
  - !ruby/object:Gem::Version
55
62
  version: '0.9'
56
63
  type: :development
57
64
  prerelease: false
58
- version_requirements: *70338823214580
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '0.9'
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: bundler
61
- requirement: &70338823213940 !ruby/object:Gem::Requirement
62
- none: false
72
+ requirement: !ruby/object:Gem::Requirement
63
73
  requirements:
64
74
  - - ~>
65
75
  - !ruby/object:Gem::Version
66
76
  version: '1.0'
67
77
  type: :development
68
78
  prerelease: false
69
- version_requirements: *70338823213940
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: '1.0'
70
84
  description: Watches specs for a Ruby (1.8 or 1.9) or Rails (2 or 3) project
71
85
  email:
72
86
  - elia@schito.me
@@ -90,27 +104,25 @@ files:
90
104
  homepage: ''
91
105
  licenses:
92
106
  - MIT
107
+ metadata: {}
93
108
  post_install_message:
94
109
  rdoc_options: []
95
110
  require_paths:
96
111
  - lib
97
112
  required_ruby_version: !ruby/object:Gem::Requirement
98
- none: false
99
113
  requirements:
100
- - - ! '>='
114
+ - - '>='
101
115
  - !ruby/object:Gem::Version
102
116
  version: '0'
103
117
  required_rubygems_version: !ruby/object:Gem::Requirement
104
- none: false
105
118
  requirements:
106
- - - ! '>='
119
+ - - '>='
107
120
  - !ruby/object:Gem::Version
108
121
  version: '0'
109
122
  requirements: []
110
123
  rubyforge_project: rspec-rails-watchr
111
- rubygems_version: 1.8.17
124
+ rubygems_version: 2.0.3
112
125
  signing_key:
113
- specification_version: 3
126
+ specification_version: 4
114
127
  summary: Watches specs for a Ruby or Rails project
115
128
  test_files: []
116
- has_rdoc: