snooper 2.1.5 → 2.1.6

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
  SHA1:
3
- metadata.gz: 460124dd221c156c48505c20d5a7fe2019177626
4
- data.tar.gz: 9c4cf277e780feb3f6b44897472ed864976745c2
3
+ metadata.gz: 6f26141250e0dd9dbaca8220c7b6c43c56efd87e
4
+ data.tar.gz: 7778c3ee706a99d9dbd0e01c9dbb5606fec11c00
5
5
  SHA512:
6
- metadata.gz: 96316e289f3ef96311c2069127aa3da5abab27ea5eee7447a42eaded86c7909ad3814e4afb078010edd5802cbe1f3ff05b62920e4829d574d820fb9065ead992
7
- data.tar.gz: d4f0ac8ff369de89231dad62288e52fd36e3c04d34e4cc6a8d9a166c2b13b25d0c42f83e7d57b093944e4bee3015848969a639c1504e22f55f6d0e241cf92858
6
+ metadata.gz: a8eac98c5bc31e785dd73bd93171b3d6d9122bd1c33141c4ec3bb2eca4db4186eff521123d9a6c9cd3eaa118cf40ef45d8eb8156eeee5f803b7a5c9be58aa96c
7
+ data.tar.gz: 9d3aec46e183dc6670450db660d5e41a3b1d02c6668cdb2d97bf368f96424fc00c2376d8ddb06cc93c15df2041fe6afe992df53bad426e048e2f3c6b0e16dc89
@@ -35,6 +35,22 @@ end
35
35
 
36
36
  options = Snooper::Options.parse ARGV
37
37
 
38
+ if options.command == 'init'
39
+ require 'fileutils'
40
+
41
+ target = File.join Dir.pwd, ".snooper.yaml"
42
+ if File.exists? target
43
+ fatal_error "Configuration file '#{target}' already exists"
44
+ end
45
+
46
+ source = File.expand_path "../../data/_snooper.yaml", __FILE__
47
+
48
+ puts "Creating Snooper configuration file '#{target}'"
49
+ FileUtils::Verbose::cp source, target
50
+
51
+ exit 0
52
+ end
53
+
38
54
  if options.config_path.nil?
39
55
  fatal_error "couldn't find a config file. Did you miss a `--config=`?"
40
56
  end
@@ -0,0 +1,56 @@
1
+ # Snooper is open source! - see LICENSE.md in source distributions for
2
+ # details. This file is released into the public domain and may be
3
+ # included in any software distribution, both commercial and non-comercial.
4
+ ---
5
+ ## Snooper Configuration File
6
+
7
+ ## Base directory
8
+ #
9
+ # relative to this configuration file. All paths are relative to this directory.
10
+ base_path: .
11
+
12
+ ## Command to execute
13
+ #
14
+ # When changes are noticed. This command is run in `base_path:`.
15
+ command: >
16
+ echo Edit '`command:`' in .snooper.yaml to change the command
17
+ that is run.
18
+
19
+ ## Paths to Watch
20
+ #
21
+ # Resticts the paths in which changes are watched for. Add just the
22
+ # places you want to monitor here to prevent temporary files or build
23
+ # files triggering re-tests if you don't want them.
24
+ #paths: [bin, test, lib]
25
+
26
+ ## Filters
27
+ #
28
+ # Restricts the types of files that trigger a re-test. If a file path
29
+ # matches any of these regular expressions then the command is
30
+ # executed.
31
+ filters:
32
+ # - \.rb$ # Ruby files
33
+ # - \.h$ # C/C++ header files
34
+ # - \.cpp$ # C++ files
35
+ # - \.c$ # C files
36
+ # - \.py$ # Python files
37
+
38
+ ## Force Polling
39
+ #
40
+ # Use this setting to overide the normal file system watcher and use
41
+ # the polling mode. This may be required for some file system types or
42
+ # when working with some kinds of shared folders.
43
+ # force_poll: true
44
+
45
+ ## Hooks
46
+ #
47
+ # Hooks allow special commands to be performed on a sub-set of the
48
+ # changes. They can be used to re-build specific files or run
49
+ # specialised test cases.
50
+ hooks:
51
+ - pattern: \.snooper\.yaml$
52
+ command: >
53
+ echo The snooper config file was edited!. Look at the '`hooks:`'
54
+ section in the snooper config file to see how to run command on a
55
+ subset of changes like this one is.
56
+ ...
@@ -16,7 +16,6 @@ module Snooper
16
16
 
17
17
  require 'listen'
18
18
  require 'colored'
19
- require 'terminfo'
20
19
 
21
20
  ##
22
21
  # Public: Create a new source code spy
@@ -117,6 +116,21 @@ module Snooper
117
116
  res
118
117
  end
119
118
 
119
+ @terminal_width = nil
120
+
121
+ ## Internal: Get the Terminal Width
122
+ #
123
+ # Returns the width of the terminal, if one is connected, in characters
124
+ def term_width
125
+ return @@terminal_width unless @terminal_width == nil
126
+ begin
127
+ require 'terminfo'
128
+ @@terminal_width = TermInfo.screen_width - 1
129
+ rescue
130
+ @@terminal_width = 79
131
+ end
132
+ end
133
+
120
134
  ##
121
135
  # Internal: Prettify a status line
122
136
  #
@@ -131,7 +145,7 @@ module Snooper
131
145
  # Returns the prettified String.
132
146
  def statusbar(message, time=nil)
133
147
  message << " (#{time.round(3)}s)" if time
134
- message = message.to_s.center TermInfo.screen_width - 1
148
+ message = message.to_s.center term_width
135
149
  block_given? ? yield(message) : message
136
150
  end
137
151
 
@@ -144,20 +158,30 @@ module Snooper
144
158
  #
145
159
  # Returns the result of the listener
146
160
  def run
161
+ evq = Queue.new
162
+
147
163
  if @config.file_path
148
164
  dir = File.dirname @config.file_path
149
165
  filter = %r{#{File.basename @config.file_path}$}
150
- Listen.to dir, relative_paths: false, filter: filter do |*args|
166
+ @cfg_listener = Listen.to dir do |*args|
151
167
  next unless args.reduce(&:+).include? @config.file_path
152
- puts statusbar "Re-loading Config File...", &:yellow
153
- @listener.stop if @listener
168
+ if @listener
169
+ puts statusbar "Re-loading Config File...", &:yellow
170
+ @listener.stop
171
+ evq.push true
172
+ end
154
173
  end
174
+ @cfg_listener.start
155
175
  end
156
176
 
177
+ # on C-c tell all listeners to stop
178
+ Signal.trap "INT", "DEFAULT"
179
+
157
180
  # loop forever listening, each time the above block causes the listener
158
181
  # to stop it will re-start listening with the new config.
159
182
  while true
160
183
  do_listening
184
+ break unless evq.pop
161
185
  @config.reload
162
186
  end
163
187
  end
@@ -179,12 +203,14 @@ module Snooper
179
203
 
180
204
  # Force a change to start with
181
205
  run_command
182
-
206
+
183
207
  params = {
184
208
  latency: 0.5,
185
- only: @config.filters, ignore: @config.ignored,
186
209
  }
187
210
 
211
+ params[:only] = Regexp.new(@config.filters.join("|")) unless @config.filters.empty?
212
+ params[:ignore] = Regexp.new(@config.ignored.join("|")) unless @config.ignored.empty?
213
+
188
214
  if @config.force_poll
189
215
  params[:latency] = @config.force_poll
190
216
  params[:force_poll] = true
@@ -194,9 +220,7 @@ module Snooper
194
220
  self.on_change *args
195
221
  end
196
222
 
197
- t = @listener.start
198
- Signal.trap("INT", "DEFAULT")
199
- t.join
223
+ @listener.start
200
224
  end
201
225
  end
202
226
 
@@ -10,5 +10,5 @@ module Snooper
10
10
  #
11
11
  # This should conform to SemVer. If this is changed it should be the only
12
12
  # thing that changes in the comit.
13
- VERSION = '2.1.5'
13
+ VERSION = '2.1.6'
14
14
  end
@@ -95,7 +95,7 @@
95
95
 
96
96
  <h2 id="FORMAT">FORMAT</h2>
97
97
 
98
- <p><a class="man-ref" href="snooper.1.html">snooper<span class="s">(1)</span></a> expects a YAML document of key-value pairs; each pair specifies an
98
+ <p><span class="man-ref">snooper<span class="s">(1)</span></span> expects a YAML document of key-value pairs; each pair specifies an
99
99
  option. Unknown options are ignored. Options that can contain a list of values
100
100
  may also be given a single value.</p>
101
101
 
@@ -164,7 +164,7 @@ as the global <code>command:</code> key.</p></dd>
164
164
 
165
165
  <h2 id="SEE-ALSO">SEE ALSO</h2>
166
166
 
167
- <p><a class="man-ref" href="snooper.1.html">snooper<span class="s">(1)</span></a></p>
167
+ <p><span class="man-ref">snooper<span class="s">(1)</span></span></p>
168
168
 
169
169
  <h2 id="AUTHORS">AUTHORS</h2>
170
170
 
@@ -9,6 +9,9 @@
9
9
  .SH "SYNOPSIS"
10
10
  \fBsnooper\fR \fIoptions\fR [\fIcommand_line\fR]*
11
11
  .
12
+ .br
13
+ \fBsnooper\fR init
14
+ .
12
15
  .SH "DESCRIPTION"
13
16
  \fBSnooper\fR is a lightweight test automation tool, it monitors files and folders while you work and re\-runs your tests when you change something\. Snooper doesn\'t care what language you\'re using or what framework you are testing with, it\'s all configureable\.
14
17
  .
@@ -27,6 +30,10 @@ Force polling, optionally setting the frequency\. Polling frequency is measured
27
30
  \fIcommand_line\fR
28
31
  One or more \fIcommand_line\fRs to execute when source files change\. Overides any commands specified in the configuration file\.
29
32
  .
33
+ .TP
34
+ \fBinit\fR
35
+ Create a new \fB\.snooper\.yaml\fR configuration file in the current working directory\. Use this to quickly add snooper support to a project\.
36
+ .
30
37
  .SH "EXAMPLES"
31
38
  \fB$ snooper\fR
32
39
  .
@@ -93,7 +93,8 @@
93
93
 
94
94
  <h2 id="SYNOPSIS">SYNOPSIS</h2>
95
95
 
96
- <p><code>snooper</code> <var>options</var> [<var>command_line</var>]*</p>
96
+ <p><code>snooper</code> <var>options</var> [<var>command_line</var>]*<br />
97
+ <code>snooper</code> init</p>
97
98
 
98
99
  <h2 id="DESCRIPTION">DESCRIPTION</h2>
99
100
 
@@ -104,18 +105,23 @@ testing with, it's all configureable.</p>
104
105
 
105
106
  <h2 id="OPTIONS">OPTIONS</h2>
106
107
 
107
- <p>Most configuration takes place in the <a class="man-ref" href="snooper-config.7.html">snooper-config<span class="s">(7)</span></a> file. You can however
108
+ <p>Most configuration takes place in the <span class="man-ref">snooper-config<span class="s">(7)</span></span> file. You can however
108
109
  override the command that is run. This is useful if you are only working on a
109
110
  subsection of a project that has it's own tests.</p>
110
111
 
111
112
  <dl>
112
113
  <dt><code>-c</code>, <code>--config</code> <var>configfile</var></dt><dd><p>Specify the configuration file to use. The default is <code>.snooper.yaml</code> in the
113
114
  current directory, or any of it's parent directories.</p></dd>
114
- <dt><code>-p</code>, <code>--poll</code> [<var>frequency</var>]</dt><dd><p>Force polling, optionally setting the frequency. Polling frequency is measured in seconds. Use this if there seem to be bugs in your builtin OS file
115
- notification system. <em>Warning</em>: using this option may slow down snooper's
116
- reaction to file changes and increase resource usage.</p></dd>
115
+ <dt><code>-p</code>, <code>--poll</code> [<var>frequency</var>]</dt><dd><p>Force polling, optionally setting the frequency. Polling frequency
116
+ is measured in seconds. Use this if there seem to be bugs in your
117
+ builtin OS file notification system. <em>Warning</em>: using this option
118
+ may slow down snooper's reaction to file changes and increase
119
+ resource usage.</p></dd>
117
120
  <dt><var>command_line</var></dt><dd><p>One or more <var>command_line</var>s to execute when source files change. Overides any
118
121
  commands specified in the configuration file.</p></dd>
122
+ <dt class="flush"><code>init</code></dt><dd><p>Create a new <code>.snooper.yaml</code> configuration file in the current
123
+ working directory. Use this to quickly add snooper support to a
124
+ project.</p></dd>
119
125
  </dl>
120
126
 
121
127
 
@@ -136,7 +142,7 @@ when files change.</p>
136
142
 
137
143
  <h2 id="SEE-ALSO">SEE ALSO</h2>
138
144
 
139
- <p><a class="man-ref" href="snooper-config.7.html">snooper-config<span class="s">(7)</span></a></p>
145
+ <p><span class="man-ref">snooper-config<span class="s">(7)</span></span></p>
140
146
 
141
147
  <h2 id="AUTHORS">AUTHORS</h2>
142
148
 
@@ -3,7 +3,8 @@ snooper(1) -- Spy on Tests
3
3
 
4
4
  ## SYNOPSIS
5
5
 
6
- `snooper` <options> [<command_line>]*
6
+ `snooper` <options> [<command_line>]*
7
+ `snooper` init
7
8
 
8
9
  ## DESCRIPTION
9
10
 
@@ -23,14 +24,21 @@ subsection of a project that has it's own tests.
23
24
  current directory, or any of it's parent directories.
24
25
 
25
26
  * `-p`, `--poll` [<frequency>]:
26
- Force polling, optionally setting the frequency. Polling frequency is measured in seconds. Use this if there seem to be bugs in your builtin OS file
27
- notification system. _Warning_: using this option may slow down snooper's
28
- reaction to file changes and increase resource usage.
27
+ Force polling, optionally setting the frequency. Polling frequency
28
+ is measured in seconds. Use this if there seem to be bugs in your
29
+ builtin OS file notification system. _Warning_: using this option
30
+ may slow down snooper's reaction to file changes and increase
31
+ resource usage.
29
32
 
30
33
  * <command_line>:
31
34
  One or more <command_line>s to execute when source files change. Overides any
32
35
  commands specified in the configuration file.
33
36
 
37
+ * `init`:
38
+ Create a new `.snooper.yaml` configuration file in the current
39
+ working directory. Use this to quickly add snooper support to a
40
+ project.
41
+
34
42
  ## EXAMPLES
35
43
 
36
44
  `$ snooper`
@@ -53,4 +61,3 @@ snooper-config(7)
53
61
  ## AUTHORS
54
62
 
55
63
  Will Speak (@willspeak)
56
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snooper
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5
4
+ version: 2.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Will Speak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-07 00:00:00.000000000 Z
11
+ date: 2014-12-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored
@@ -90,6 +90,7 @@ files:
90
90
  - man/snooper.1
91
91
  - man/snooper.1.html
92
92
  - man/snooper.1.ronn
93
+ - data/_snooper.yaml
93
94
  - LICENCE.md
94
95
  - README.md
95
96
  homepage: http://github.com/iwillspeak/snooper