maid 0.2.1 → 0.2.2.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/ChangeLog +9 -0
- data/Guardfile +0 -2
- data/README.md +2 -2
- data/lib/maid.rb +1 -0
- data/lib/maid/tools.rb +23 -14
- data/lib/maid/version.rb +1 -1
- data/maid.gemspec +15 -12
- data/spec/lib/maid/tools_spec.rb +10 -6
- metadata +64 -55
data/.travis.yml
CHANGED
data/ChangeLog
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
maid (0.2.2.beta.1) unstable; urgency=low
|
2
|
+
|
3
|
+
* Added better documentation (Closes: #91)
|
4
|
+
* Safely escape shell commands (Closes: #70)
|
5
|
+
* Made gem version dependencies less strict
|
6
|
+
* Started experimental Ruby 2.0 support
|
7
|
+
|
8
|
+
-- Benjamin Oakes <hello@benjaminoakes.com> Sun, 17 Feb 2013 00:00:00 +0000
|
9
|
+
|
1
10
|
maid (0.2.1) stable; urgency=low
|
2
11
|
|
3
12
|
* Fix YARD generation for http://rubydoc.info/. (Otherwise identical to
|
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
Be lazy! Let Maid clean up after you, based on rules you define.
|
4
4
|
|
5
|
-
[Installation](
|
6
|
-
| [Tutorial](
|
5
|
+
[Installation](#installation)
|
6
|
+
| [Tutorial](#tutorial)
|
7
7
|
| [Example](https://github.com/benjaminoakes/maid-example)
|
8
8
|
| [User Community](https://github.com/benjaminoakes/maid/wiki)
|
9
9
|
| [Documentation][]
|
data/lib/maid.rb
CHANGED
data/lib/maid/tools.rb
CHANGED
@@ -12,6 +12,7 @@ require 'time'
|
|
12
12
|
# Some methods are not available on all platforms. An `ArgumentError` is raised when a command is not available. See
|
13
13
|
# tags such as: [Mac OS X]
|
14
14
|
module Maid::Tools
|
15
|
+
# For showing deprecation notices
|
15
16
|
include Deprecated
|
16
17
|
|
17
18
|
# Move from `sources` to `destination`
|
@@ -35,10 +36,10 @@ module Maid::Tools
|
|
35
36
|
target = File.join(destination, File.basename(source))
|
36
37
|
|
37
38
|
unless File.exist?(target)
|
38
|
-
log("mv #{ source
|
39
|
+
log("mv #{ sh_escape(source) } #{ sh_escape(destination) }")
|
39
40
|
FileUtils.mv(source, destination, @file_options)
|
40
41
|
else
|
41
|
-
warn("skipping #{ source
|
42
|
+
warn("skipping #{ sh_escape(source) } because #{ sh_escape(target) } already exists")
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
@@ -136,7 +137,7 @@ module Maid::Tools
|
|
136
137
|
expand_all(paths).each do |path|
|
137
138
|
options = @file_options.merge(options)
|
138
139
|
|
139
|
-
log("Removing #{ path
|
140
|
+
log("Removing #{ sh_escape(path) }")
|
140
141
|
FileUtils.rm_r(path, options)
|
141
142
|
end
|
142
143
|
end
|
@@ -164,6 +165,10 @@ module Maid::Tools
|
|
164
165
|
# dir(%w(~/Downloads/*.zip ~/Dropbox/*.zip))
|
165
166
|
# dir('~/{Downloads,Dropbox}/*.zip')
|
166
167
|
#
|
168
|
+
# Recursing into subdirectories (see also: `find`):
|
169
|
+
#
|
170
|
+
# dir('~/Music/**/*.m4a')
|
171
|
+
#
|
167
172
|
def dir(globs)
|
168
173
|
expand_all(globs).
|
169
174
|
map { |glob| Dir.glob(glob) }.
|
@@ -192,7 +197,7 @@ module Maid::Tools
|
|
192
197
|
# move('~/Downloads/Pink Floyd*.mp3', mkdir('~/Music/Pink Floyd/'))
|
193
198
|
def mkdir(path, options = {})
|
194
199
|
path = expand(path)
|
195
|
-
log("mkdir -p #{ path
|
200
|
+
log("mkdir -p #{ sh_escape(path) }")
|
196
201
|
FileUtils.mkdir_p(path, @file_options.merge(options))
|
197
202
|
path
|
198
203
|
end
|
@@ -239,7 +244,7 @@ module Maid::Tools
|
|
239
244
|
#
|
240
245
|
# locate('foo.zip') # => ['/a/foo.zip', '/b/foo.zip']
|
241
246
|
def locate(name)
|
242
|
-
cmd("mdfind -name #{ name
|
247
|
+
cmd("mdfind -name #{ sh_escape(name) }").split("\n")
|
243
248
|
end
|
244
249
|
|
245
250
|
# [Mac OS X] Use Spotlight metadata to determine the site from which a file was downloaded.
|
@@ -248,7 +253,7 @@ module Maid::Tools
|
|
248
253
|
#
|
249
254
|
# downloaded_from('foo.zip') # => ['http://www.site.com/foo.zip', 'http://www.site.com/']
|
250
255
|
def downloaded_from(path)
|
251
|
-
raw = cmd("mdls -raw -name kMDItemWhereFroms #{ path
|
256
|
+
raw = cmd("mdls -raw -name kMDItemWhereFroms #{ sh_escape(path) }")
|
252
257
|
clean = raw[1, raw.length - 2]
|
253
258
|
clean.split(/,\s+/).map { |s| t = s.strip; t[1, t.length - 2] }
|
254
259
|
end
|
@@ -259,7 +264,7 @@ module Maid::Tools
|
|
259
264
|
#
|
260
265
|
# duration_s('foo.mp3') # => 235.705
|
261
266
|
def duration_s(path)
|
262
|
-
cmd("mdls -raw -name kMDItemDurationSeconds #{ path
|
267
|
+
cmd("mdls -raw -name kMDItemDurationSeconds #{ sh_escape(path) }").to_f
|
263
268
|
end
|
264
269
|
|
265
270
|
# List the contents of a zip file.
|
@@ -268,7 +273,7 @@ module Maid::Tools
|
|
268
273
|
#
|
269
274
|
# zipfile_contents('foo.zip') # => ['foo/foo.exe', 'foo/README.txt']
|
270
275
|
def zipfile_contents(path)
|
271
|
-
raw = cmd("unzip -Z1 #{ path
|
276
|
+
raw = cmd("unzip -Z1 #{ sh_escape(path) }")
|
272
277
|
raw.split("\n")
|
273
278
|
end
|
274
279
|
|
@@ -280,7 +285,7 @@ module Maid::Tools
|
|
280
285
|
#
|
281
286
|
# disk_usage('foo.zip') # => 136
|
282
287
|
def disk_usage(path)
|
283
|
-
raw = cmd("du -s #{ path
|
288
|
+
raw = cmd("du -s #{ sh_escape(path) }")
|
284
289
|
# FIXME: This reports in kilobytes, but should probably report in bytes.
|
285
290
|
usage_kb = raw.split(/\s+/).first.to_i
|
286
291
|
|
@@ -345,8 +350,8 @@ module Maid::Tools
|
|
345
350
|
# git_piston('~/code/projectname')
|
346
351
|
def git_piston(path)
|
347
352
|
full_path = expand(path)
|
348
|
-
stdout = cmd("cd #{full_path
|
349
|
-
log("Fired git piston on #{full_path
|
353
|
+
stdout = cmd("cd #{ sh_escape(full_path) } && git pull && git push 2>&1")
|
354
|
+
log("Fired git piston on #{ sh_escape(full_path) }. STDOUT:\n\n#{ stdout }")
|
350
355
|
end
|
351
356
|
|
352
357
|
deprecated :git_piston, 'SparkleShare (http://sparkleshare.org/)'
|
@@ -394,16 +399,20 @@ module Maid::Tools
|
|
394
399
|
ops << '-n' if @file_options[:noop]
|
395
400
|
|
396
401
|
Array(options[:exclude]).each do |path|
|
397
|
-
ops << "--exclude=#{ path
|
402
|
+
ops << "--exclude=#{ sh_escape(path) }"
|
398
403
|
end
|
399
404
|
|
400
405
|
ops << '--delete' if options[:delete]
|
401
|
-
stdout = cmd("rsync #{ ops.join(' ') } #{ from
|
402
|
-
log("Fired sync from #{ from
|
406
|
+
stdout = cmd("rsync #{ ops.join(' ') } #{ sh_escape(from) } #{ sh_escape(to) } 2>&1")
|
407
|
+
log("Fired sync from #{ sh_escape(from) } to #{ sh_escape(to) }. STDOUT:\n\n#{ stdout }")
|
403
408
|
end
|
404
409
|
|
405
410
|
private
|
406
411
|
|
412
|
+
def sh_escape(array)
|
413
|
+
Escape.shell_command(Array(array))
|
414
|
+
end
|
415
|
+
|
407
416
|
def log(message)
|
408
417
|
@logger.info(message)
|
409
418
|
end
|
data/lib/maid/version.rb
CHANGED
data/maid.gemspec
CHANGED
@@ -16,26 +16,29 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.rubyforge_project = 'maid'
|
18
18
|
|
19
|
-
|
20
|
-
s.add_dependency('
|
21
|
-
s.add_dependency('
|
22
|
-
s.add_dependency('
|
23
|
-
s.
|
24
|
-
s.
|
25
|
-
|
26
|
-
|
27
|
-
s.add_development_dependency('
|
19
|
+
# Strategy: if possible, use ranges (so there are fewer chances of version conflicts)
|
20
|
+
s.add_dependency('escape', '>= 0.0.1', '< 0.1.0') # Used for better Ruby 1.8.7 support
|
21
|
+
s.add_dependency('thor', '>= 0.14.0', '< 0.18.0')
|
22
|
+
s.add_dependency('deprecated', '~> 3.0.0')
|
23
|
+
s.add_dependency('ohai', '>= 6.14.0', '< 6.17.0')
|
24
|
+
s.add_dependency('xdg', '~> 2.2.3') # previous versions had bugs
|
25
|
+
|
26
|
+
# Strategy: specific versions (since they're just for development)
|
27
|
+
s.add_development_dependency('fakefs', '~> 0.4.2')
|
28
|
+
s.add_development_dependency('guard', '~> 1.6.2')
|
29
|
+
s.add_development_dependency('guard-rspec', '~> 2.4.0')
|
30
|
+
s.add_development_dependency('rake', '~> 10.0.3')
|
28
31
|
s.add_development_dependency('redcarpet', '~> 2.2.2') # Soft dependency of `yard`
|
29
32
|
s.add_development_dependency('rspec', '~> 2.12.0')
|
30
|
-
s.add_development_dependency('timecop', '~> 0.5.
|
31
|
-
s.add_development_dependency('yard', '~> 0.8.
|
33
|
+
s.add_development_dependency('timecop', '~> 0.5.9.1')
|
34
|
+
s.add_development_dependency('yard', '~> 0.8.4')
|
32
35
|
|
33
36
|
# In Vagrant, polling won't cross over the OS boundary if you develop in the host OS but run your tests in the
|
34
37
|
# guest. One way around this is to force polling instead:
|
35
38
|
#
|
36
39
|
# bundle exec guard --force-polling
|
37
40
|
#
|
38
|
-
s.add_development_dependency('rb-inotify', '~> 0.
|
41
|
+
s.add_development_dependency('rb-inotify', '~> 0.9.0')
|
39
42
|
s.add_development_dependency('rb-fsevent', '~> 0.9.2')
|
40
43
|
|
41
44
|
s.files = `git ls-files`.split("\n")
|
data/spec/lib/maid/tools_spec.rb
CHANGED
@@ -196,6 +196,10 @@ module Maid
|
|
196
196
|
it 'lists files in directories when using regexp-like glob patterns' do
|
197
197
|
@maid.dir('~/{Desktop,Downloads}/*.zip').should == [@other_file, @file]
|
198
198
|
end
|
199
|
+
|
200
|
+
it 'lists files in directories when using recursive glob patterns' do
|
201
|
+
@maid.dir('~/**/*.zip').should == [@other_file, @file]
|
202
|
+
end
|
199
203
|
end
|
200
204
|
end
|
201
205
|
|
@@ -334,7 +338,7 @@ module Maid
|
|
334
338
|
end
|
335
339
|
|
336
340
|
it 'should pull and push the given git repository, logging the action' do
|
337
|
-
@maid.should_receive(:cmd).with(%(cd
|
341
|
+
@maid.should_receive(:cmd).with(%(cd #@home/code/projectname && git pull && git push 2>&1))
|
338
342
|
@logger.should_receive(:info)
|
339
343
|
@maid.git_piston('~/code/projectname')
|
340
344
|
end
|
@@ -347,7 +351,7 @@ module Maid
|
|
347
351
|
end
|
348
352
|
|
349
353
|
it 'should sync the expanded paths, retaining backslash' do
|
350
|
-
@maid.should_receive(:cmd).with(%(rsync -a -u
|
354
|
+
@maid.should_receive(:cmd).with(%(rsync -a -u #@home/Downloads/ #@home/Reference 2>&1))
|
351
355
|
@maid.sync(@src_dir, @dst_dir)
|
352
356
|
end
|
353
357
|
|
@@ -357,25 +361,25 @@ module Maid
|
|
357
361
|
end
|
358
362
|
|
359
363
|
it 'should have no options' do
|
360
|
-
@maid.should_receive(:cmd).with(%(rsync
|
364
|
+
@maid.should_receive(:cmd).with(%(rsync #@home/Downloads/ #@home/Reference 2>&1))
|
361
365
|
@maid.sync(@src_dir, @dst_dir, :archive => false, :update => false)
|
362
366
|
end
|
363
367
|
|
364
368
|
it 'should add all options' do
|
365
|
-
@maid.should_receive(:cmd).with(%(rsync -a -v -u -m --exclude
|
369
|
+
@maid.should_receive(:cmd).with(%(rsync -a -v -u -m --exclude=.git --delete #@home/Downloads/ #@home/Reference 2>&1))
|
366
370
|
@maid.sync(@src_dir, @dst_dir, :archive => true, :update => true, :delete => true, :verbose => true, :prune_empty => true, :exclude => '.git')
|
367
371
|
end
|
368
372
|
|
369
373
|
it 'should add multiple exlcude options' do
|
370
374
|
@maid.
|
371
375
|
should_receive(:cmd).
|
372
|
-
with(%(rsync -a -u --exclude
|
376
|
+
with(%(rsync -a -u --exclude=.git --exclude=.rvmrc #@home/Downloads/ #@home/Reference 2>&1))
|
373
377
|
@maid.sync(@src_dir, @dst_dir, :exclude => ['.git', '.rvmrc'])
|
374
378
|
end
|
375
379
|
|
376
380
|
it 'should add noop option' do
|
377
381
|
@maid.file_options[:noop] = true
|
378
|
-
@maid.should_receive(:cmd).with(%(rsync -a -u -n
|
382
|
+
@maid.should_receive(:cmd).with(%(rsync -a -u -n #@home/Downloads/ #@home/Reference 2>&1))
|
379
383
|
@maid.sync(@src_dir, @dst_dir)
|
380
384
|
end
|
381
385
|
end
|
metadata
CHANGED
@@ -1,52 +1,72 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.1
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.2.beta.1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Benjamin Oakes
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: escape
|
16
|
+
requirement: &7714060 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.0.1
|
22
|
+
- - <
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.1.0
|
25
|
+
type: :runtime
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: *7714060
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: thor
|
16
|
-
requirement: &
|
30
|
+
requirement: &7704680 !ruby/object:Gem::Requirement
|
17
31
|
none: false
|
18
32
|
requirements:
|
19
|
-
- -
|
33
|
+
- - ! '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 0.14.0
|
36
|
+
- - <
|
20
37
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
38
|
+
version: 0.18.0
|
22
39
|
type: :runtime
|
23
40
|
prerelease: false
|
24
|
-
version_requirements: *
|
41
|
+
version_requirements: *7704680
|
25
42
|
- !ruby/object:Gem::Dependency
|
26
43
|
name: deprecated
|
27
|
-
requirement: &
|
44
|
+
requirement: &7703240 !ruby/object:Gem::Requirement
|
28
45
|
none: false
|
29
46
|
requirements:
|
30
47
|
- - ~>
|
31
48
|
- !ruby/object:Gem::Version
|
32
|
-
version: 3.0.
|
49
|
+
version: 3.0.0
|
33
50
|
type: :runtime
|
34
51
|
prerelease: false
|
35
|
-
version_requirements: *
|
52
|
+
version_requirements: *7703240
|
36
53
|
- !ruby/object:Gem::Dependency
|
37
54
|
name: ohai
|
38
|
-
requirement: &
|
55
|
+
requirement: &7702440 !ruby/object:Gem::Requirement
|
39
56
|
none: false
|
40
57
|
requirements:
|
41
|
-
- -
|
58
|
+
- - ! '>='
|
42
59
|
- !ruby/object:Gem::Version
|
43
60
|
version: 6.14.0
|
61
|
+
- - <
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 6.17.0
|
44
64
|
type: :runtime
|
45
65
|
prerelease: false
|
46
|
-
version_requirements: *
|
66
|
+
version_requirements: *7702440
|
47
67
|
- !ruby/object:Gem::Dependency
|
48
68
|
name: xdg
|
49
|
-
requirement: &
|
69
|
+
requirement: &7701440 !ruby/object:Gem::Requirement
|
50
70
|
none: false
|
51
71
|
requirements:
|
52
72
|
- - ~>
|
@@ -54,65 +74,54 @@ dependencies:
|
|
54
74
|
version: 2.2.3
|
55
75
|
type: :runtime
|
56
76
|
prerelease: false
|
57
|
-
version_requirements: *
|
77
|
+
version_requirements: *7701440
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: fakefs
|
60
|
-
requirement: &
|
80
|
+
requirement: &7700740 !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
64
84
|
- !ruby/object:Gem::Version
|
65
|
-
version: 0.4.
|
85
|
+
version: 0.4.2
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements: *
|
88
|
+
version_requirements: *7700740
|
69
89
|
- !ruby/object:Gem::Dependency
|
70
90
|
name: guard
|
71
|
-
requirement: &
|
91
|
+
requirement: &7700040 !ruby/object:Gem::Requirement
|
72
92
|
none: false
|
73
93
|
requirements:
|
74
94
|
- - ~>
|
75
95
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.
|
96
|
+
version: 1.6.2
|
77
97
|
type: :development
|
78
98
|
prerelease: false
|
79
|
-
version_requirements: *
|
99
|
+
version_requirements: *7700040
|
80
100
|
- !ruby/object:Gem::Dependency
|
81
101
|
name: guard-rspec
|
82
|
-
requirement: &
|
102
|
+
requirement: &7699300 !ruby/object:Gem::Requirement
|
83
103
|
none: false
|
84
104
|
requirements:
|
85
105
|
- - ~>
|
86
106
|
- !ruby/object:Gem::Version
|
87
|
-
version: 2.
|
107
|
+
version: 2.4.0
|
88
108
|
type: :development
|
89
109
|
prerelease: false
|
90
|
-
version_requirements: *
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: rb-readline
|
93
|
-
requirement: &9998740 !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
|
-
requirements:
|
96
|
-
- - ~>
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: 0.4.2
|
99
|
-
type: :development
|
100
|
-
prerelease: false
|
101
|
-
version_requirements: *9998740
|
110
|
+
version_requirements: *7699300
|
102
111
|
- !ruby/object:Gem::Dependency
|
103
112
|
name: rake
|
104
|
-
requirement: &
|
113
|
+
requirement: &7698640 !ruby/object:Gem::Requirement
|
105
114
|
none: false
|
106
115
|
requirements:
|
107
116
|
- - ~>
|
108
117
|
- !ruby/object:Gem::Version
|
109
|
-
version: 10.0.
|
118
|
+
version: 10.0.3
|
110
119
|
type: :development
|
111
120
|
prerelease: false
|
112
|
-
version_requirements: *
|
121
|
+
version_requirements: *7698640
|
113
122
|
- !ruby/object:Gem::Dependency
|
114
123
|
name: redcarpet
|
115
|
-
requirement: &
|
124
|
+
requirement: &7697940 !ruby/object:Gem::Requirement
|
116
125
|
none: false
|
117
126
|
requirements:
|
118
127
|
- - ~>
|
@@ -120,10 +129,10 @@ dependencies:
|
|
120
129
|
version: 2.2.2
|
121
130
|
type: :development
|
122
131
|
prerelease: false
|
123
|
-
version_requirements: *
|
132
|
+
version_requirements: *7697940
|
124
133
|
- !ruby/object:Gem::Dependency
|
125
134
|
name: rspec
|
126
|
-
requirement: &
|
135
|
+
requirement: &7687280 !ruby/object:Gem::Requirement
|
127
136
|
none: false
|
128
137
|
requirements:
|
129
138
|
- - ~>
|
@@ -131,43 +140,43 @@ dependencies:
|
|
131
140
|
version: 2.12.0
|
132
141
|
type: :development
|
133
142
|
prerelease: false
|
134
|
-
version_requirements: *
|
143
|
+
version_requirements: *7687280
|
135
144
|
- !ruby/object:Gem::Dependency
|
136
145
|
name: timecop
|
137
|
-
requirement: &
|
146
|
+
requirement: &7686480 !ruby/object:Gem::Requirement
|
138
147
|
none: false
|
139
148
|
requirements:
|
140
149
|
- - ~>
|
141
150
|
- !ruby/object:Gem::Version
|
142
|
-
version: 0.5.
|
151
|
+
version: 0.5.9.1
|
143
152
|
type: :development
|
144
153
|
prerelease: false
|
145
|
-
version_requirements: *
|
154
|
+
version_requirements: *7686480
|
146
155
|
- !ruby/object:Gem::Dependency
|
147
156
|
name: yard
|
148
|
-
requirement: &
|
157
|
+
requirement: &7685980 !ruby/object:Gem::Requirement
|
149
158
|
none: false
|
150
159
|
requirements:
|
151
160
|
- - ~>
|
152
161
|
- !ruby/object:Gem::Version
|
153
|
-
version: 0.8.
|
162
|
+
version: 0.8.4
|
154
163
|
type: :development
|
155
164
|
prerelease: false
|
156
|
-
version_requirements: *
|
165
|
+
version_requirements: *7685980
|
157
166
|
- !ruby/object:Gem::Dependency
|
158
167
|
name: rb-inotify
|
159
|
-
requirement: &
|
168
|
+
requirement: &7685520 !ruby/object:Gem::Requirement
|
160
169
|
none: false
|
161
170
|
requirements:
|
162
171
|
- - ~>
|
163
172
|
- !ruby/object:Gem::Version
|
164
|
-
version: 0.
|
173
|
+
version: 0.9.0
|
165
174
|
type: :development
|
166
175
|
prerelease: false
|
167
|
-
version_requirements: *
|
176
|
+
version_requirements: *7685520
|
168
177
|
- !ruby/object:Gem::Dependency
|
169
178
|
name: rb-fsevent
|
170
|
-
requirement: &
|
179
|
+
requirement: &7685040 !ruby/object:Gem::Requirement
|
171
180
|
none: false
|
172
181
|
requirements:
|
173
182
|
- - ~>
|
@@ -175,7 +184,7 @@ dependencies:
|
|
175
184
|
version: 0.9.2
|
176
185
|
type: :development
|
177
186
|
prerelease: false
|
178
|
-
version_requirements: *
|
187
|
+
version_requirements: *7685040
|
179
188
|
description: Be lazy. Let Maid clean up after you, based on rules you define. Think
|
180
189
|
of it as "Hazel for hackers".
|
181
190
|
email:
|
@@ -247,9 +256,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
247
256
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
257
|
none: false
|
249
258
|
requirements:
|
250
|
-
- - ! '
|
259
|
+
- - ! '>'
|
251
260
|
- !ruby/object:Gem::Version
|
252
|
-
version:
|
261
|
+
version: 1.3.1
|
253
262
|
requirements: []
|
254
263
|
rubyforge_project: maid
|
255
264
|
rubygems_version: 1.8.11
|