rego 1.0.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +5 -5
- data/bin/rego +160 -40
- data/lib/rego.rb +3 -2
- data/rego.gemspec +10 -3
- metadata +20 -9
data/README
CHANGED
@@ -23,21 +23,21 @@ EXAMPLES
|
|
23
23
|
|
24
24
|
# say hai whenever the file foo.txt changes
|
25
25
|
#
|
26
|
-
~> rego echo hai
|
26
|
+
~> rego foo.txt -- echo hai
|
27
27
|
|
28
28
|
# say hai whenever any file (recursively) in bar changes
|
29
29
|
#
|
30
|
-
~> rego
|
30
|
+
~> rego ./bar/ -- echo hai
|
31
31
|
|
32
32
|
# echo *the file that changed* when any file (recursively) in bar changes
|
33
33
|
#
|
34
|
-
~> rego echo "@ was changed"
|
34
|
+
~> rego ./bar/ -- echo "@ was changed"
|
35
35
|
|
36
36
|
# run a specific test whenever anything in lib, test, app, or config changes
|
37
37
|
#
|
38
|
-
~> rego ruby -Itest ./test/units/foo_test.rb --name teh_test
|
38
|
+
~> rego {lib,test,app,config} -- ruby -Itest ./test/units/foo_test.rb --name teh_test
|
39
39
|
|
40
40
|
# run a specific test whenever it, or your app, has changed
|
41
41
|
#
|
42
|
-
~> rego ruby -Itest @
|
42
|
+
~> rego ./test -- ruby -Itest @
|
43
43
|
|
data/bin/rego
CHANGED
@@ -18,26 +18,26 @@ Main {
|
|
18
18
|
|
19
19
|
### gem install rego
|
20
20
|
|
21
|
-
|
21
|
+
|
22
22
|
# say hai whenever the file foo.txt changes
|
23
23
|
#
|
24
|
-
~> rego echo hai
|
24
|
+
~> rego foo.txt -- echo hai
|
25
25
|
|
26
|
-
# say hai whenever any file (recursively) in bar changes
|
26
|
+
# say hai whenever any file (recursively) in bar changes
|
27
27
|
#
|
28
|
-
~> rego
|
28
|
+
~> rego ./bar/ -- echo hai
|
29
29
|
|
30
|
-
# echo *the file that changed* when any file (recursively) in bar changes
|
30
|
+
# echo *the file that changed* when any file (recursively) in bar changes
|
31
31
|
#
|
32
|
-
~> rego echo "@ was changed"
|
32
|
+
~> rego ./bar/ -- echo "@ was changed"
|
33
33
|
|
34
34
|
# run a specific test whenever anything in lib, test, app, or config changes
|
35
35
|
#
|
36
|
-
~> rego ruby -Itest ./test/units/foo_test.rb --name teh_test
|
36
|
+
~> rego {lib,test,app,config} -- ruby -Itest ./test/units/foo_test.rb --name teh_test
|
37
37
|
|
38
38
|
# run a specific test whenever it, or your app, has changed
|
39
39
|
#
|
40
|
-
~> rego ruby -Itest @
|
40
|
+
~> rego ./test -- ruby -Itest @
|
41
41
|
__
|
42
42
|
|
43
43
|
def run
|
@@ -47,34 +47,39 @@ Main {
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def parse_the_command_line
|
50
|
-
pos =
|
50
|
+
pos = argv.index('--')
|
51
51
|
|
52
52
|
=begin
|
53
53
|
if pos
|
54
|
-
@command =
|
55
|
-
@paths =
|
54
|
+
@command = argv[0...pos].join(' ')
|
55
|
+
@paths = argv[pos + 1 .. -1]
|
56
56
|
else
|
57
|
-
@command =
|
57
|
+
@command = argv[0..-1].join(' ')
|
58
58
|
@paths = []
|
59
59
|
end
|
60
60
|
=end
|
61
61
|
if pos
|
62
|
-
@paths =
|
63
|
-
@command =
|
62
|
+
@paths = argv[0 ... pos]
|
63
|
+
@command = argv[pos + 1 .. -1].join(' ')
|
64
64
|
else
|
65
65
|
@paths = []
|
66
|
-
@command =
|
66
|
+
@command = argv[0..-1].join(' ')
|
67
67
|
end
|
68
68
|
@command = 'echo @' if @paths.empty?
|
69
|
-
@paths = %w[.] if @paths.empty?
|
69
|
+
@paths = %w[ app lib test config a.rb Rakefile ] if @paths.empty?
|
70
70
|
|
71
71
|
@paths.map!{|path| test(?d, path) ? [path, Dir.glob(File.join(path, '**/**'))] : path}
|
72
72
|
@paths.flatten!
|
73
73
|
@paths.compact!
|
74
74
|
@paths.uniq!
|
75
75
|
@paths.map! do |path|
|
76
|
-
|
76
|
+
begin
|
77
|
+
Pathname.new(path).realpath.to_s
|
78
|
+
rescue Object
|
79
|
+
nil
|
80
|
+
end
|
77
81
|
end
|
82
|
+
@paths.compact!
|
78
83
|
end
|
79
84
|
|
80
85
|
def print_a_summary_of_watched_files
|
@@ -85,22 +90,24 @@ Main {
|
|
85
90
|
end
|
86
91
|
|
87
92
|
def loop_watching_files_and_running_commands
|
88
|
-
directories = []
|
89
|
-
files = []
|
93
|
+
@directories = []
|
94
|
+
@files = []
|
95
|
+
|
90
96
|
@paths.each do |path|
|
91
97
|
if test(?d, path)
|
92
|
-
directories.push(path)
|
98
|
+
@directories.push(path)
|
93
99
|
else
|
94
|
-
files.push(path)
|
95
|
-
directories.push(File.dirname(path))
|
100
|
+
@files.push(path)
|
101
|
+
@directories.push(File.dirname(path))
|
96
102
|
end
|
97
103
|
end
|
98
|
-
|
99
|
-
|
104
|
+
|
105
|
+
@directories.uniq!
|
106
|
+
@files.uniq!
|
100
107
|
|
101
108
|
stats = {}
|
102
109
|
|
103
|
-
files.each do |file|
|
110
|
+
@files.each do |file|
|
104
111
|
begin
|
105
112
|
stats[file] = File.stat(file)
|
106
113
|
rescue
|
@@ -108,28 +115,54 @@ Main {
|
|
108
115
|
end
|
109
116
|
end
|
110
117
|
|
111
|
-
fsevent = FSEvent.new
|
112
|
-
|
113
118
|
n = '0'
|
114
119
|
line = '#' * 42
|
115
120
|
$running = false
|
116
121
|
|
117
|
-
rego =
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
122
|
+
rego =
|
123
|
+
proc do |*args|
|
124
|
+
path = args.shift
|
125
|
+
cmd = path ? @command.gsub(/@/, path) : @command
|
126
|
+
|
127
|
+
puts line
|
128
|
+
|
129
|
+
say("# rego.#{ n } @ #{ Time.now.strftime('%H:%M:%S') } - #{ cmd }", :color => :magenta)
|
130
|
+
puts
|
131
|
+
|
132
|
+
system(cmd)
|
133
|
+
puts
|
134
|
+
|
135
|
+
say("# rego.#{ n } @ #{ Time.now.strftime('%H:%M:%S') } - #{ $?.exitstatus }", :color => :yellow)
|
136
|
+
puts
|
137
|
+
|
138
|
+
n.succ!
|
139
|
+
end
|
129
140
|
|
130
141
|
rego[ false ]
|
131
142
|
|
132
|
-
|
143
|
+
begin
|
144
|
+
Listen.to!(*@directories, :latency => 0.1) do |modified, added, removed|
|
145
|
+
[modified, added, removed].flatten.compact.uniq.each do |path|
|
146
|
+
rego[path]
|
147
|
+
end
|
148
|
+
end
|
149
|
+
rescue SignalException
|
150
|
+
STDERR.reopen('/dev/null', 'w+')
|
151
|
+
exit(42)
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
=begin
|
156
|
+
fsevent = FSEvent.new
|
157
|
+
|
158
|
+
fsevent.watch(
|
159
|
+
@directories,
|
160
|
+
:latency => 0.00042,
|
161
|
+
:no_defer => true,
|
162
|
+
:file_events => true,
|
163
|
+
:watch_root => true,
|
164
|
+
:since_when => 0
|
165
|
+
) do |*args|
|
133
166
|
unless $running
|
134
167
|
$running = true
|
135
168
|
|
@@ -160,11 +193,98 @@ Main {
|
|
160
193
|
end
|
161
194
|
|
162
195
|
fsevent.run
|
196
|
+
=end
|
163
197
|
end
|
164
198
|
}
|
165
199
|
|
166
200
|
|
167
201
|
BEGIN {
|
202
|
+
# setup a child process to catch signals and brutally shut down the parent as
|
203
|
+
# a monkey-patch to listen/rb-fsevent's busted ctrl-c handling...
|
204
|
+
#
|
205
|
+
unless((pid = fork))
|
206
|
+
ppid = Process.ppid
|
207
|
+
|
208
|
+
begin
|
209
|
+
trap('SIGINT'){
|
210
|
+
%w(
|
211
|
+
SIGTERM SIGINT SIGQUIT SIGKILL
|
212
|
+
).each do |signal|
|
213
|
+
|
214
|
+
begin
|
215
|
+
Process.kill("-#{ signal }", ppid)
|
216
|
+
rescue Object
|
217
|
+
nil
|
218
|
+
end
|
219
|
+
|
220
|
+
sleep(rand)
|
221
|
+
end
|
222
|
+
}
|
223
|
+
|
224
|
+
loop do
|
225
|
+
Process.kill(0, ppid)
|
226
|
+
sleep(1)
|
227
|
+
end
|
228
|
+
rescue Object => e
|
229
|
+
exit!(0)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
ANSI = {
|
234
|
+
:clear => "\e[0m",
|
235
|
+
:reset => "\e[0m",
|
236
|
+
:erase_line => "\e[K",
|
237
|
+
:erase_char => "\e[P",
|
238
|
+
:bold => "\e[1m",
|
239
|
+
:dark => "\e[2m",
|
240
|
+
:underline => "\e[4m",
|
241
|
+
:underscore => "\e[4m",
|
242
|
+
:blink => "\e[5m",
|
243
|
+
:reverse => "\e[7m",
|
244
|
+
:concealed => "\e[8m",
|
245
|
+
:black => "\e[30m",
|
246
|
+
:red => "\e[31m",
|
247
|
+
:green => "\e[32m",
|
248
|
+
:yellow => "\e[33m",
|
249
|
+
:blue => "\e[34m",
|
250
|
+
:magenta => "\e[35m",
|
251
|
+
:cyan => "\e[36m",
|
252
|
+
:white => "\e[37m",
|
253
|
+
:on_black => "\e[40m",
|
254
|
+
:on_red => "\e[41m",
|
255
|
+
:on_green => "\e[42m",
|
256
|
+
:on_yellow => "\e[43m",
|
257
|
+
:on_blue => "\e[44m",
|
258
|
+
:on_magenta => "\e[45m",
|
259
|
+
:on_cyan => "\e[46m",
|
260
|
+
:on_white => "\e[47m"
|
261
|
+
}
|
262
|
+
|
263
|
+
module Kernel
|
264
|
+
private
|
265
|
+
def say(phrase, *args)
|
266
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
267
|
+
options[:color] = args.shift.to_s.to_sym unless args.empty?
|
268
|
+
keys = options.keys
|
269
|
+
keys.each{|key| options[key.to_s.to_sym] = options.delete(key)}
|
270
|
+
|
271
|
+
color = options[:color]
|
272
|
+
bold = options.has_key?(:bold)
|
273
|
+
|
274
|
+
parts = [phrase]
|
275
|
+
|
276
|
+
if STDOUT.tty?
|
277
|
+
parts.unshift(ANSI[color]) if color
|
278
|
+
parts.unshift(ANSI[:bold]) if bold
|
279
|
+
parts.push(ANSI[:clear]) if parts.size > 1
|
280
|
+
end
|
281
|
+
|
282
|
+
method = options[:method] || :puts
|
283
|
+
|
284
|
+
send(method, parts.join)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
168
288
|
require 'pathname'
|
169
289
|
this = Pathname.new(__FILE__).realpath.to_s
|
170
290
|
bindir = File.dirname(this)
|
data/lib/rego.rb
CHANGED
@@ -3,7 +3,7 @@ require 'pathname'
|
|
3
3
|
require 'yaml'
|
4
4
|
|
5
5
|
module Rego
|
6
|
-
Version = '1.
|
6
|
+
Version = '1.2.0' unless defined?(Version)
|
7
7
|
|
8
8
|
def version
|
9
9
|
Rego::Version
|
@@ -12,7 +12,8 @@ module Rego
|
|
12
12
|
def dependencies
|
13
13
|
{
|
14
14
|
'main' => [ 'main' , ' >= 4.8.1' ] ,
|
15
|
-
'rb-fsevent' => [ 'rb-fsevent' , ' >= 0.4.3.1' ]
|
15
|
+
#'rb-fsevent' => [ 'rb-fsevent' , ' >= 0.4.3.1' ] ,
|
16
|
+
'listen' => [ 'listen' , ' >= 1.0.2' ] ,
|
16
17
|
}
|
17
18
|
end
|
18
19
|
|
data/rego.gemspec
CHANGED
@@ -3,13 +3,20 @@
|
|
3
3
|
|
4
4
|
Gem::Specification::new do |spec|
|
5
5
|
spec.name = "rego"
|
6
|
-
spec.version = "1.
|
6
|
+
spec.version = "1.2.0"
|
7
7
|
spec.platform = Gem::Platform::RUBY
|
8
8
|
spec.summary = "rego"
|
9
9
|
spec.description = "description: rego kicks the ass"
|
10
10
|
|
11
11
|
spec.files =
|
12
|
-
["README",
|
12
|
+
["README",
|
13
|
+
"Rakefile",
|
14
|
+
"bin",
|
15
|
+
"bin/rego",
|
16
|
+
"lib",
|
17
|
+
"lib/rego.rb",
|
18
|
+
"rego.gemspec",
|
19
|
+
"~"]
|
13
20
|
|
14
21
|
spec.executables = ["rego"]
|
15
22
|
|
@@ -20,7 +27,7 @@ Gem::Specification::new do |spec|
|
|
20
27
|
|
21
28
|
spec.add_dependency(*["main", " >= 4.8.1"])
|
22
29
|
|
23
|
-
spec.add_dependency(*["
|
30
|
+
spec.add_dependency(*["listen", " >= 1.0.2"])
|
24
31
|
|
25
32
|
|
26
33
|
spec.extensions.push(*[])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rego
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: main
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,18 +21,28 @@ dependencies:
|
|
21
21
|
version: 4.8.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 4.8.1
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement:
|
31
|
+
name: listen
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
31
36
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.
|
37
|
+
version: 1.0.2
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.2
|
36
46
|
description: ! 'description: rego kicks the ass'
|
37
47
|
email: ara.t.howard@gmail.com
|
38
48
|
executables:
|
@@ -65,8 +75,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
75
|
version: '0'
|
66
76
|
requirements: []
|
67
77
|
rubyforge_project: codeforpeople
|
68
|
-
rubygems_version: 1.8.
|
78
|
+
rubygems_version: 1.8.23
|
69
79
|
signing_key:
|
70
80
|
specification_version: 3
|
71
81
|
summary: rego
|
72
82
|
test_files: []
|
83
|
+
has_rdoc:
|