maid 0.2.0.beta.1 → 0.2.0.beta.2
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.
- data/AUTHORS.md +7 -0
- data/ChangeLog +10 -1
- data/README.md +60 -18
- data/Vagrantfile +1 -0
- data/lib/maid/maid.rb +3 -0
- data/lib/maid/numeric_extensions.rb +2 -1
- data/lib/maid/rules.sample.rb +6 -3
- data/lib/maid/tools.rb +46 -16
- data/lib/maid/trash_migration.rb +2 -1
- data/lib/maid/user_agent.rb +2 -1
- data/lib/maid/version.rb +1 -1
- data/resources/hacker-news.png +0 -0
- data/spec/dependency_spec.rb +27 -3
- data/spec/lib/maid/tools_spec.rb +10 -2
- data/spec/lib/maid/user_agent_spec.rb +5 -5
- metadata +116 -222
data/AUTHORS.md
ADDED
data/ChangeLog
CHANGED
@@ -1,6 +1,15 @@
|
|
1
|
+
maid (0.2.0.beta.2) unstable; urgency=low
|
2
|
+
|
3
|
+
* Add more documentation to "find" and "remove" (Closes: #74)
|
4
|
+
* Add logging to `mkdir` (Closes: #75, #77)
|
5
|
+
* Updated README to include Hacker News post
|
6
|
+
* Updated AUTHORS to include new contributors
|
7
|
+
* Various development improvements
|
8
|
+
|
9
|
+
-- Benjamin Oakes <hello@benjaminoakes.com> Sun, 16 Dec 2012 00:00:00 +0000
|
10
|
+
|
1
11
|
maid (0.2.0.beta.1) unstable; urgency=low
|
2
12
|
|
3
|
-
* (Development in progress)
|
4
13
|
* Change "dir" to allow multiple paths (Closes: #64)
|
5
14
|
* Change "mkdir" to return the path of the created directory (Closes: #69)
|
6
15
|
* Various development improvements
|
data/README.md
CHANGED
@@ -2,21 +2,38 @@
|
|
2
2
|
|
3
3
|
Be lazy! Let Maid clean up after you, based on rules you define.
|
4
4
|
|
5
|
-
[Installation](https://github.com/benjaminoakes/maid#installation)
|
5
|
+
[Installation](https://github.com/benjaminoakes/maid#installation)
|
6
|
+
| [Tutorial](https://github.com/benjaminoakes/maid#tutorial)
|
7
|
+
| [Example](https://github.com/benjaminoakes/maid-example)
|
8
|
+
| [Documentation][]
|
9
|
+
| [Change Log](https://github.com/benjaminoakes/maid/blob/master/ChangeLog)
|
6
10
|
|
7
|
-
Maid keeps files from sitting around too long, untouched. Many of the downloads and
|
11
|
+
Maid keeps files from sitting around too long, untouched. Many of the downloads and temporary files you collect can
|
12
|
+
easily be categorized and handled appropriately by rules you define. Let the `maid` in your computer take care of the
|
13
|
+
easy stuff, so you can spend more of your time on what matters.
|
8
14
|
|
9
|
-
Think of it like the email filters you might already have, but for files. Worried about things happening that you don't
|
15
|
+
Think of it like the email filters you might already have, but for files. Worried about things happening that you don't
|
16
|
+
expect? Maid doesn't overwrite files and actions are logged so you can tell what happened.
|
10
17
|
|
11
|
-
Maid is inspired by the Mac OS X shareware program [Hazel](http://www.noodlesoft.com/hazel.php).
|
18
|
+
Maid is inspired by the Mac OS X shareware program [Hazel](http://www.noodlesoft.com/hazel.php). Think of Maid as
|
19
|
+
**"Hazel for hackers"**.
|
12
20
|
|
13
|
-
Your rules are defined in Ruby, so
|
21
|
+
Your rules are defined in Ruby, so simple rules are easy and difficult rules are possible. This also makes Maid a great
|
22
|
+
general-purpose **advanced file renaming tool**.
|
14
23
|
|
15
24
|
## Want to help?
|
16
25
|
|
26
|
+
This project wouldn't be where it is today without its users and contributors. Thank you! See [AUTHORS][] and the
|
27
|
+
[contributors graph][] for more info.
|
28
|
+
|
29
|
+
[authors]: https://github.com/benjaminoakes/maid/blob/master/AUTHORS.md
|
30
|
+
[contributors graph]: https://github.com/benjaminoakes/maid/graphs/contributors
|
31
|
+
|
17
32
|
### For Users
|
18
33
|
|
19
|
-
[
|
34
|
+
[
|
35
|
+
[Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)
|
36
|
+
](https://flattr.com/submit/auto?user_id=benjaminoakes&url=https://github.com/benjaminoakes/maid&title=maid&language=en_GB&tags=github&category=software)
|
20
37
|
|
21
38
|
* Participate in [beta testing](https://github.com/benjaminoakes/maid/issues/10)
|
22
39
|
* [Report an issue](https://github.com/benjaminoakes/maid/issues) (bug or feature request)
|
@@ -29,13 +46,22 @@ Your rules are defined in Ruby, so easy rules are easy and difficult rules are p
|
|
29
46
|
[](http://travis-ci.org/benjaminoakes/maid)
|
30
47
|
[](https://gemnasium.com/benjaminoakes/maid)
|
31
48
|
|
49
|
+
* Address a `TODO` or `FIXME` in the code.
|
32
50
|
* Complete an issue (easy ones [are labelled](https://github.com/benjaminoakes/maid/issues?labels=difficulty-1&page=1&state=open), and issues for future releases are [grouped by milestone](https://github.com/benjaminoakes/maid/issues/milestones)).
|
33
51
|
* **Working on an issue?** Please leave a comment so others know.
|
34
52
|
* See the [Contributing guide](https://github.com/benjaminoakes/maid/wiki/Contributing)
|
35
53
|
|
36
54
|
## Buzz
|
37
55
|
|
38
|
-
[
|
56
|
+
[
|
57
|
+

|
58
|
+
](http://news.ycombinator.com/)
|
59
|
+
|
60
|
+
[Hazel for hackers](http://news.ycombinator.com/item?id=4928605) - December 16th, 2012 (peaked at #2)
|
61
|
+
|
62
|
+
[
|
63
|
+

|
64
|
+
](http://onethingwell.org/)
|
39
65
|
|
40
66
|
[Maid](http://onethingwell.org/post/30455088809/maid) - August 29th, 2012
|
41
67
|
|
@@ -47,21 +73,25 @@ Your rules are defined in Ruby, so easy rules are easy and difficult rules are p
|
|
47
73
|
|
48
74
|
## Installation
|
49
75
|
|
50
|
-
[
|
76
|
+
[
|
77
|
+

|
78
|
+
](https://github.com/benjaminoakes/maid/issues/3)
|
51
79
|
|
52
80
|
#### Offically supported:
|
53
81
|
|
54
82
|
* **OS:** Mac OS X, Ubuntu
|
55
83
|
* **Ruby:** 1.8.7, 1.9.3 (preferred)
|
56
84
|
|
57
|
-
|
85
|
+
Some features require OS X. See the [documentation][] for more details. Other Ruby versions and Linux distributions
|
86
|
+
may work, but are not officially supported. (Contributions are welcome, however.)
|
58
87
|
|
59
88
|
### Manual Installation
|
60
89
|
|
61
90
|
First, you need Ruby:
|
62
91
|
|
63
92
|
* **Mac OS X:** Ruby 1.8.7 comes preinstalled.
|
64
|
-
* **Ubuntu:** Ruby is not preinstalled. To install Ruby 1.9.3: `sudo apt-get install ruby1.9.1 # (sic)`
|
93
|
+
* **Ubuntu:** Ruby is not preinstalled. To install Ruby 1.9.3: `sudo apt-get install ruby1.9.1 # (sic)`
|
94
|
+
([Interested in a package?](https://github.com/benjaminoakes/maid/issues/3))
|
65
95
|
|
66
96
|
Then, you can install via RubyGems. Open a terminal and run:
|
67
97
|
|
@@ -79,12 +109,15 @@ If you decide you don't want Maid installed anymore, remove it:
|
|
79
109
|
|
80
110
|
### Troubleshooting
|
81
111
|
|
82
|
-
* Having multiple Ruby versions installed can confuse things. If you're a Ruby developer, you may prefer to just
|
83
|
-
|
112
|
+
* Having multiple Ruby versions installed can confuse things. If you're a Ruby developer, you may prefer to just
|
113
|
+
`gem install maid` with your preferred setup. Ruby 1.9.3 is recommended.
|
114
|
+
* Older packages of Ruby for Ubuntu may not automatically add the RubyGems `bin` directory to your `$PATH`. Double
|
115
|
+
check your settings.
|
84
116
|
|
85
117
|
## Tutorial
|
86
118
|
|
87
|
-
In a nutshell, Maid uses "rules" to define how files are handled. Once you have rules defined, you can either test what
|
119
|
+
In a nutshell, Maid uses "rules" to define how files are handled. Once you have rules defined, you can either test what
|
120
|
+
cleaning would do (`maid clean -n`) or actually clean (`maid clean`).
|
88
121
|
|
89
122
|
To generate a [sample rules file](https://github.com/benjaminoakes/maid/blob/master/lib/maid/rules.sample.rb), run:
|
90
123
|
|
@@ -152,29 +185,38 @@ Then, this is the command to test, as well as some sample output:
|
|
152
185
|
mv "/Users/ben/Downloads/issue12.pdf" "/Users/ben/Books/"
|
153
186
|
mv "/Users/ben/Downloads/spring2011newsletter.pdf" "/Users/ben/Books/"
|
154
187
|
|
155
|
-
For help with command line usage, run `maid help`. For more
|
188
|
+
For help with command line usage, run `maid help`. For more help, please see the links at the top of this README.
|
156
189
|
|
157
190
|
### Automation
|
158
191
|
|
159
|
-
Once you get a hang for what you can do with Maid, let it do its stuff automatically throughout the day. You'll find
|
192
|
+
Once you get a hang for what you can do with Maid, let it do its stuff automatically throughout the day. You'll find
|
193
|
+
your computer stays a little tidier with as you teach it how to handle your common files.
|
160
194
|
|
161
195
|
To do this, edit your crontab in your tool of choice:
|
162
196
|
|
163
197
|
crontab -e
|
164
198
|
|
165
|
-
...and have it invoke the `maid clean` command. The `--silent` option is provided to keep this from emailing you, if
|
199
|
+
...and have it invoke the `maid clean` command. The `--silent` option is provided to keep this from emailing you, if
|
200
|
+
desired. A log of the actions taken is kept at `~/.maid/maid.log`.
|
166
201
|
|
167
202
|
Example for every day at 1am:
|
168
203
|
|
169
204
|
# minute hour day_of_month month day_of_week command_to_execute
|
170
205
|
0 1 * * * /bin/bash -li -c "maid clean --silent"
|
171
206
|
|
172
|
-
Both Mac OS X and Ubuntu support callbacks when folders are changed, and that may be a forthcoming feature in Maid.
|
207
|
+
Both Mac OS X and Ubuntu support callbacks when folders are changed, and that may be a forthcoming feature in Maid.
|
208
|
+
That said, I find `cron` to take care of most of my needs.
|
173
209
|
|
174
210
|
## Warranty
|
175
211
|
|
176
|
-
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING
|
212
|
+
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING
|
213
|
+
THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
|
214
|
+
IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
215
|
+
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU
|
216
|
+
ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
177
217
|
|
178
218
|
## License
|
179
219
|
|
180
220
|
GPLv2. See LICENSE for a copy.
|
221
|
+
|
222
|
+
[documentation]: http://rubydoc.info/gems/maid/Maid/Tools
|
data/Vagrantfile
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
Vagrant::Config.run do |config|
|
5
5
|
# See also: `script/vagrant-test`, `script/vagrant-test-all`
|
6
6
|
config.vm.box = ENV['MAID_TARGET_BOX'] || 'precise64'
|
7
|
+
config.vm.box_url = 'http://files.vagrantup.com/precise64.box' if 'precise64' == config.vm.box
|
7
8
|
|
8
9
|
config.vm.provision(:shell, :path => 'script/vagrant-provision', :args => ENV['MAID_TARGET_RUBY'] || '1.9.3')
|
9
10
|
end
|
data/lib/maid/maid.rb
CHANGED
@@ -4,6 +4,9 @@ require 'logger'
|
|
4
4
|
require 'xdg'
|
5
5
|
|
6
6
|
# Maid cleans up according to the given rules, logging what it does.
|
7
|
+
#
|
8
|
+
# TODO: Rename to something less ambiguous, e.g. "cleaning agent", "cleaner", "vacuum", etc. Having this class within
|
9
|
+
# the `Maid` module makes things confusing.
|
7
10
|
class Maid::Maid
|
8
11
|
DEFAULTS = {
|
9
12
|
:progname => 'Maid',
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Maid::NumericExtensions
|
2
|
-
# From https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/numeric/time.rb, with some
|
2
|
+
# From https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/numeric/time.rb, with some
|
3
|
+
# modifications since `active_support` ruins `Logger` by overriding its functionality.
|
3
4
|
module Time
|
4
5
|
# Enables the use of time calculations and declarations, like 45.minutes + 2.hours + 4.years.
|
5
6
|
#
|
data/lib/maid/rules.sample.rb
CHANGED
@@ -4,7 +4,8 @@
|
|
4
4
|
#
|
5
5
|
# maid clean -n
|
6
6
|
#
|
7
|
-
# **NOTE:** It's recommended you just use this as a template; if you run these rules on your machine without knowing
|
7
|
+
# **NOTE:** It's recommended you just use this as a template; if you run these rules on your machine without knowing
|
8
|
+
# what they do, you might run into unwanted results!
|
8
9
|
#
|
9
10
|
# Don't forget, it's just Ruby! You can define custom methods and use them below:
|
10
11
|
#
|
@@ -21,7 +22,8 @@
|
|
21
22
|
# * Ask me a question over email (hello@benjaminoakes.com) or Twitter (@benjaminoakes)
|
22
23
|
|
23
24
|
Maid.rules do
|
24
|
-
# **NOTE:** It's recommended you just use this as a template; if you run these rules on your machine without knowing
|
25
|
+
# **NOTE:** It's recommended you just use this as a template; if you run these rules on your machine without knowing
|
26
|
+
# what they do, you might run into unwanted results!
|
25
27
|
|
26
28
|
rule 'Linux ISOs, etc' do
|
27
29
|
trash(dir('~/Downloads/*.iso'))
|
@@ -63,7 +65,8 @@ Maid.rules do
|
|
63
65
|
# NOTE: Currently, only Mac OS X supports `downloaded_from`.
|
64
66
|
rule 'Old files downloaded while developing/testing' do
|
65
67
|
dir('~/Downloads/*').each do |path|
|
66
|
-
if downloaded_from(path).any? { |u| u.match('http://localhost') || u.match('http://staging.yourcompany.com') } &&
|
68
|
+
if downloaded_from(path).any? { |u| u.match('http://localhost') || u.match('http://staging.yourcompany.com') } &&
|
69
|
+
1.week.since?(accessed_at(path))
|
67
70
|
trash(path)
|
68
71
|
end
|
69
72
|
end
|
data/lib/maid/tools.rb
CHANGED
@@ -9,7 +9,8 @@ require 'time'
|
|
9
9
|
# * Automatically expand paths (that is, `'~/Downloads/foo.zip'` becomes `'/home/username/Downloads/foo.zip'`)
|
10
10
|
# * Respect the `noop` (`dry-run`) option if it is set
|
11
11
|
#
|
12
|
-
# Some methods are not available on all platforms. An `ArgumentError` is raised when a command is not available. See
|
12
|
+
# Some methods are not available on all platforms. An `ArgumentError` is raised when a command is not available. See
|
13
|
+
# tags such as: [Mac OS X]
|
13
14
|
module Maid::Tools
|
14
15
|
include Deprecated
|
15
16
|
|
@@ -34,19 +35,22 @@ module Maid::Tools
|
|
34
35
|
target = File.join(destination, File.basename(source))
|
35
36
|
|
36
37
|
unless File.exist?(target)
|
37
|
-
|
38
|
+
log("mv #{ source.inspect } #{ destination.inspect }")
|
38
39
|
FileUtils.mv(source, destination, @file_options)
|
39
40
|
else
|
40
|
-
|
41
|
+
warn("skipping #{ source.inspect } because #{ target.inspect } already exists")
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
45
46
|
# Move the given paths to the user's trash.
|
46
47
|
#
|
47
|
-
# The path is still moved if a file already exists in the trash with the same name. However, the current date and
|
48
|
+
# The path is still moved if a file already exists in the trash with the same name. However, the current date and
|
49
|
+
# time is appended to the filename.
|
48
50
|
#
|
49
|
-
# **Note:** the OS-native "restore" or "put back" functionality for trashed files is not currently supported. (See
|
51
|
+
# **Note:** the OS-native "restore" or "put back" functionality for trashed files is not currently supported. (See
|
52
|
+
# [issue #63](https://github.com/benjaminoakes/maid/issues/63).) However, they can be restored manually, and the Maid
|
53
|
+
# log can help assist with this.
|
50
54
|
#
|
51
55
|
# ## Options
|
52
56
|
#
|
@@ -69,13 +73,18 @@ module Maid::Tools
|
|
69
73
|
def trash(paths, options = {})
|
70
74
|
# ## Implementation Notes
|
71
75
|
#
|
72
|
-
# Trashing files correctly is surprisingly hard. What Maid ends up doing is one the easiest, most foolproof
|
76
|
+
# Trashing files correctly is surprisingly hard. What Maid ends up doing is one the easiest, most foolproof
|
77
|
+
# solutions: moving the file.
|
73
78
|
#
|
74
|
-
# Unfortunately, that means it's not possile to restore files automatically in OSX or Ubuntu. The previous location
|
79
|
+
# Unfortunately, that means it's not possile to restore files automatically in OSX or Ubuntu. The previous location
|
80
|
+
# of the file is lost.
|
75
81
|
#
|
76
|
-
# OSX support depends on AppleScript or would require a not-yet-written C extension to interface with the OS. The
|
82
|
+
# OSX support depends on AppleScript or would require a not-yet-written C extension to interface with the OS. The
|
83
|
+
# AppleScript solution is less than ideal: the user has to be logged in, Finder has to be running, and it makes the
|
84
|
+
# "trash can sound" every time a file is moved.
|
77
85
|
#
|
78
|
-
# Ubuntu makes it easy to implement, and there's a Python library for doing so (see `trash-cli`). However, there's
|
86
|
+
# Ubuntu makes it easy to implement, and there's a Python library for doing so (see `trash-cli`). However, there's
|
87
|
+
# not a Ruby equivalent yet.
|
79
88
|
|
80
89
|
expand_all(paths).each do |path|
|
81
90
|
target = File.join(@trash_path, File.basename(path))
|
@@ -98,6 +107,8 @@ module Maid::Tools
|
|
98
107
|
end
|
99
108
|
|
100
109
|
# Delete the files at the given path recursively.
|
110
|
+
#
|
111
|
+
# **NOTE**: In most cases, `trash` is a safer choice, since the files will be recoverable by retreiving them from the trash. Once you delete a file using `remove`, it's gone! Please use `trash` whenever possible and only use `remove` when necessary.
|
101
112
|
#
|
102
113
|
# ## Options
|
103
114
|
#
|
@@ -107,7 +118,7 @@ module Maid::Tools
|
|
107
118
|
#
|
108
119
|
# `:secure => boolean`
|
109
120
|
#
|
110
|
-
# Infrequently needed. See [`FileUtils.remove_entry_secure`]
|
121
|
+
# Infrequently needed. See [`FileUtils.remove_entry_secure`][fures]
|
111
122
|
#
|
112
123
|
# ## Examples
|
113
124
|
#
|
@@ -119,18 +130,21 @@ module Maid::Tools
|
|
119
130
|
#
|
120
131
|
# remove(['~/Downloads/foo.zip', '~/Downloads/bar.zip'])
|
121
132
|
# remove(dir('~/Downloads/*.zip'))
|
133
|
+
#
|
134
|
+
# [fures]: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure
|
122
135
|
def remove(paths, options = {})
|
123
136
|
expand_all(paths).each do |path|
|
124
137
|
options = @file_options.merge(options)
|
125
138
|
|
126
|
-
|
139
|
+
log("Removing #{ path.inspect }")
|
127
140
|
FileUtils.rm_r(path, options)
|
128
141
|
end
|
129
142
|
end
|
130
143
|
|
131
144
|
# Give all files matching the given glob.
|
132
145
|
#
|
133
|
-
# Note that the globs are *not* regexps (they're closer to shell globs). However, some regexp-like notation can be
|
146
|
+
# Note that the globs are *not* regexps (they're closer to shell globs). However, some regexp-like notation can be
|
147
|
+
# used, e.g. `?`, `[a-z]`, `{tgz,zip}`. For more details, see Ruby's documentation on `Dir.glob`.
|
134
148
|
#
|
135
149
|
# The matches are sorted lexically to aid in readability when using `--dry-run`.
|
136
150
|
#
|
@@ -177,7 +191,8 @@ module Maid::Tools
|
|
177
191
|
# move('~/Downloads/Pink Floyd*.mp3', mkdir('~/Music/Pink Floyd/'))
|
178
192
|
def mkdir(path, options = {})
|
179
193
|
path = expand(path)
|
180
|
-
|
194
|
+
log("mkdir -p #{ path.inspect }")
|
195
|
+
FileUtils.mkdir_p(path, options) # @file_options.merge(options))
|
181
196
|
path
|
182
197
|
end
|
183
198
|
|
@@ -191,6 +206,12 @@ module Maid::Tools
|
|
191
206
|
#
|
192
207
|
# find('~/Downloads/') # => [...]
|
193
208
|
#
|
209
|
+
# Recursing and filtering using a regular expression:
|
210
|
+
#
|
211
|
+
# find('~/Downloads/').grep(/\.pdf$/)
|
212
|
+
#
|
213
|
+
# (**Note:** It's just Ruby, so any methods in `Array` and `Enumerable` can be used.)
|
214
|
+
#
|
194
215
|
# Recursing with a block:
|
195
216
|
#
|
196
217
|
# find('~/Downloads/') do |path|
|
@@ -315,7 +336,8 @@ module Maid::Tools
|
|
315
336
|
#
|
316
337
|
# Pull and push the `git` repository at the given path.
|
317
338
|
#
|
318
|
-
# Since this is deprecated, you might also be interested in [SparkleShare](http://sparkleshare.org/), a great
|
339
|
+
# Since this is deprecated, you might also be interested in [SparkleShare](http://sparkleshare.org/), a great
|
340
|
+
# `git`-based file syncronization project.
|
319
341
|
#
|
320
342
|
# ## Examples
|
321
343
|
#
|
@@ -323,7 +345,7 @@ module Maid::Tools
|
|
323
345
|
def git_piston(path)
|
324
346
|
full_path = expand(path)
|
325
347
|
stdout = cmd("cd #{full_path.inspect} && git pull && git push 2>&1")
|
326
|
-
|
348
|
+
log("Fired git piston on #{full_path.inspect}. STDOUT:\n\n#{stdout}")
|
327
349
|
end
|
328
350
|
|
329
351
|
deprecated :git_piston, 'SparkleShare (http://sparkleshare.org/)'
|
@@ -376,11 +398,19 @@ module Maid::Tools
|
|
376
398
|
|
377
399
|
ops << '--delete' if options[:delete]
|
378
400
|
stdout = cmd("rsync #{ ops.join(' ') } #{ from.inspect } #{ to.inspect } 2>&1")
|
379
|
-
|
401
|
+
log("Fired sync from #{ from.inspect } to #{ to.inspect }. STDOUT:\n\n#{ stdout }")
|
380
402
|
end
|
381
403
|
|
382
404
|
private
|
383
405
|
|
406
|
+
def log(message)
|
407
|
+
@logger.info(message)
|
408
|
+
end
|
409
|
+
|
410
|
+
def warn(message)
|
411
|
+
@logger.warn(message)
|
412
|
+
end
|
413
|
+
|
384
414
|
def expand(path)
|
385
415
|
File.expand_path(path)
|
386
416
|
end
|
data/lib/maid/trash_migration.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# Migrate trash to correct directory on Linux due to a configuration bug in previous releases.
|
2
2
|
#
|
3
|
-
# It used to be that the default trash path was the same on every platform, so everything used to go to `~/.Trash`
|
3
|
+
# It used to be that the default trash path was the same on every platform, so everything used to go to `~/.Trash`
|
4
|
+
# regardless of OS. (For what it's worth, that used to be the correct trash path on older releases of Ubuntu.)
|
4
5
|
module Maid
|
5
6
|
module TrashMigration
|
6
7
|
class << self
|
data/lib/maid/user_agent.rb
CHANGED
@@ -2,7 +2,8 @@ require 'ohai'
|
|
2
2
|
|
3
3
|
# Version information for the host system, kind of like a browser's user agent string.
|
4
4
|
#
|
5
|
-
# This could potentially be a part of `Platform` or `VERSION` but both of those are used when building the gemspec,
|
5
|
+
# This could potentially be a part of `Platform` or `VERSION` but both of those are used when building the gemspec,
|
6
|
+
# which can't depend on other gems. FIXME: That's no longer accurate, so this could be `Platform.user_agent` instead.
|
6
7
|
module Maid::UserAgent
|
7
8
|
class << self
|
8
9
|
# This used to be called `#to_s`, but that made things difficult when testing.
|
data/lib/maid/version.rb
CHANGED
Binary file
|
data/spec/dependency_spec.rb
CHANGED
@@ -1,12 +1,27 @@
|
|
1
|
+
require 'logger'
|
1
2
|
require 'ohai'
|
3
|
+
require 'rbconfig'
|
4
|
+
require 'stringio'
|
2
5
|
require 'xdg'
|
3
6
|
|
4
7
|
# > What is Dependency Testing?
|
5
8
|
# >
|
6
|
-
# > Examines an application's requirements for pre-existing software, initial states and configuration in order to
|
9
|
+
# > Examines an application's requirements for pre-existing software, initial states and configuration in order to
|
10
|
+
# > maintain proper functionality.
|
7
11
|
# >
|
8
12
|
# > -- http://sqa.fyicenter.com/FAQ/Software-QA-Testing/What_is_Dependency_Testing_.html
|
9
13
|
describe 'Dependency expectations' do
|
14
|
+
describe Logger do
|
15
|
+
# Depending on the situation, `Logger` might have been overwritten to have a different interface. (I'm looking at you, Rails.)
|
16
|
+
it 'logs with the expected interface' do
|
17
|
+
io = StringIO.new
|
18
|
+
logger = Logger.new(io)
|
19
|
+
logger.info('my message')
|
20
|
+
logger.formatter = lambda { |_, _, _, msg| msg }
|
21
|
+
io.string.should match(/my message/)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
10
25
|
describe Ohai do
|
11
26
|
before do
|
12
27
|
@ohai = Ohai::System.new
|
@@ -27,11 +42,20 @@ describe 'Dependency expectations' do
|
|
27
42
|
end
|
28
43
|
end
|
29
44
|
|
45
|
+
describe RbConfig do
|
46
|
+
it 'identifies the host operating system' do
|
47
|
+
RbConfig::CONFIG['host_os'].should match(/[a-z]+/)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
30
51
|
describe XDG do
|
31
52
|
it 'has DATA_HOME' do
|
32
|
-
# FIXME: This test could be cleaner. We can't depend on the directory to already exist, even on systems that use
|
53
|
+
# FIXME: This test could be cleaner. We can't depend on the directory to already exist, even on systems that use
|
54
|
+
# the XDG standard. This seems safe enough for now.
|
55
|
+
#
|
56
|
+
# More info:
|
33
57
|
#
|
34
|
-
#
|
58
|
+
# * [XDG Base Directory Specification](http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html)
|
35
59
|
XDG['DATA_HOME'].to_s.should match(%r{^/.*?/\.local/share$})
|
36
60
|
end
|
37
61
|
end
|
data/spec/lib/maid/tools_spec.rb
CHANGED
@@ -163,7 +163,8 @@ module Maid
|
|
163
163
|
end
|
164
164
|
|
165
165
|
it 'lists multiple files in alphabetical order' do
|
166
|
-
# It doesn't occur with `FakeFS` as far as I can tell, but Ubuntu (and possibly OS X) can give the results out
|
166
|
+
# It doesn't occur with `FakeFS` as far as I can tell, but Ubuntu (and possibly OS X) can give the results out
|
167
|
+
# of lexical order. That makes using the `dry-run` output difficult to use.
|
167
168
|
Dir.stub(:glob) { %w(/home/foo/b.zip /home/foo/a.zip /home/foo/c.zip) }
|
168
169
|
@maid.dir('~/Downloads/*.zip').should == %w(/home/foo/a.zip /home/foo/b.zip /home/foo/c.zip)
|
169
170
|
end
|
@@ -191,6 +192,11 @@ module Maid
|
|
191
192
|
File.exist?("#@home/Downloads/Music/Pink.Floyd").should be_true
|
192
193
|
end
|
193
194
|
|
195
|
+
it 'should log the creation of the directory' do
|
196
|
+
@logger.should_receive(:info)
|
197
|
+
@maid.mkdir('~/Downlaods/Music/Pink.Floyd')
|
198
|
+
end
|
199
|
+
|
194
200
|
it 'returns the path of the created directory' do
|
195
201
|
@maid.mkdir('~/Reference/Foo').should == "#@home/Reference/Foo"
|
196
202
|
end
|
@@ -341,7 +347,9 @@ module Maid
|
|
341
347
|
end
|
342
348
|
|
343
349
|
it 'should add multiple exlcude options' do
|
344
|
-
@maid.
|
350
|
+
@maid.
|
351
|
+
should_receive(:cmd).
|
352
|
+
with(%(rsync -a -u --exclude=".git" --exclude=".rvmrc" "#@home/Downloads/" "#@home/Reference" 2>&1))
|
345
353
|
@maid.sync(@src_dir, @dst_dir, :exclude => ['.git', '.rvmrc'])
|
346
354
|
end
|
347
355
|
|
@@ -4,7 +4,7 @@ module Maid
|
|
4
4
|
describe UserAgent do
|
5
5
|
describe 'the user agent string' do
|
6
6
|
it 'is formatted with the Maid version, platform version, and Ruby version' do
|
7
|
-
|
7
|
+
system = {
|
8
8
|
'platform' => 'Unix',
|
9
9
|
'platform_version' => '1.0',
|
10
10
|
'languages' => {
|
@@ -13,14 +13,14 @@ module Maid
|
|
13
13
|
'platform' => 'pdp7',
|
14
14
|
}
|
15
15
|
}
|
16
|
-
|
16
|
+
}
|
17
17
|
|
18
|
-
|
18
|
+
system.stub(:all_plugins)
|
19
19
|
|
20
|
-
|
20
|
+
Ohai::System.stub(:new) { system }
|
21
21
|
::Maid.stub(:const_get).with(:VERSION) { '0.0.1' }
|
22
22
|
|
23
|
-
|
23
|
+
UserAgent.value.should == 'Maid/0.0.1 (Unix/1.0; Ruby/1.8.8 pdp7)'
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
metadata
CHANGED
@@ -1,280 +1,194 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: maid
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0.beta.2
|
5
5
|
prerelease: 6
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 0
|
10
|
-
- beta
|
11
|
-
- 1
|
12
|
-
version: 0.2.0.beta.1
|
13
6
|
platform: ruby
|
14
|
-
authors:
|
7
|
+
authors:
|
15
8
|
- Benjamin Oakes
|
16
9
|
autorequire:
|
17
10
|
bindir: bin
|
18
11
|
cert_chain: []
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
dependencies:
|
23
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-12-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
24
15
|
name: thor
|
25
|
-
|
26
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &18495240 !ruby/object:Gem::Requirement
|
27
17
|
none: false
|
28
|
-
requirements:
|
18
|
+
requirements:
|
29
19
|
- - ~>
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
hash: 95
|
32
|
-
segments:
|
33
|
-
- 0
|
34
|
-
- 16
|
35
|
-
- 0
|
20
|
+
- !ruby/object:Gem::Version
|
36
21
|
version: 0.16.0
|
37
22
|
type: :runtime
|
38
|
-
version_requirements: *id001
|
39
|
-
- !ruby/object:Gem::Dependency
|
40
|
-
name: deprecated
|
41
23
|
prerelease: false
|
42
|
-
|
24
|
+
version_requirements: *18495240
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: deprecated
|
27
|
+
requirement: &18494620 !ruby/object:Gem::Requirement
|
43
28
|
none: false
|
44
|
-
requirements:
|
29
|
+
requirements:
|
45
30
|
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
hash: 5
|
48
|
-
segments:
|
49
|
-
- 3
|
50
|
-
- 0
|
51
|
-
- 1
|
31
|
+
- !ruby/object:Gem::Version
|
52
32
|
version: 3.0.1
|
53
33
|
type: :runtime
|
54
|
-
version_requirements: *id002
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: maid-xdg
|
57
34
|
prerelease: false
|
58
|
-
|
35
|
+
version_requirements: *18494620
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: maid-xdg
|
38
|
+
requirement: &18493960 !ruby/object:Gem::Requirement
|
59
39
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
hash: 127
|
64
|
-
segments:
|
65
|
-
- 2
|
66
|
-
- 2
|
67
|
-
- 1
|
68
|
-
- 2
|
40
|
+
requirements:
|
41
|
+
- - =
|
42
|
+
- !ruby/object:Gem::Version
|
69
43
|
version: 2.2.1.2
|
70
44
|
type: :runtime
|
71
|
-
version_requirements: *id003
|
72
|
-
- !ruby/object:Gem::Dependency
|
73
|
-
name: ohai
|
74
45
|
prerelease: false
|
75
|
-
|
46
|
+
version_requirements: *18493960
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: ohai
|
49
|
+
requirement: &18493180 !ruby/object:Gem::Requirement
|
76
50
|
none: false
|
77
|
-
requirements:
|
51
|
+
requirements:
|
78
52
|
- - ~>
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
hash: 23
|
81
|
-
segments:
|
82
|
-
- 6
|
83
|
-
- 14
|
84
|
-
- 0
|
53
|
+
- !ruby/object:Gem::Version
|
85
54
|
version: 6.14.0
|
86
55
|
type: :runtime
|
87
|
-
version_requirements: *id004
|
88
|
-
- !ruby/object:Gem::Dependency
|
89
|
-
name: fakefs
|
90
56
|
prerelease: false
|
91
|
-
|
57
|
+
version_requirements: *18493180
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: fakefs
|
60
|
+
requirement: &18492320 !ruby/object:Gem::Requirement
|
92
61
|
none: false
|
93
|
-
requirements:
|
62
|
+
requirements:
|
94
63
|
- - ~>
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
hash: 13
|
97
|
-
segments:
|
98
|
-
- 0
|
99
|
-
- 4
|
100
|
-
- 1
|
64
|
+
- !ruby/object:Gem::Version
|
101
65
|
version: 0.4.1
|
102
66
|
type: :development
|
103
|
-
version_requirements: *id005
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: guard
|
106
67
|
prerelease: false
|
107
|
-
|
68
|
+
version_requirements: *18492320
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard
|
71
|
+
requirement: &18490420 !ruby/object:Gem::Requirement
|
108
72
|
none: false
|
109
|
-
requirements:
|
73
|
+
requirements:
|
110
74
|
- - ~>
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
hash: 11
|
113
|
-
segments:
|
114
|
-
- 1
|
115
|
-
- 5
|
116
|
-
- 4
|
75
|
+
- !ruby/object:Gem::Version
|
117
76
|
version: 1.5.4
|
118
77
|
type: :development
|
119
|
-
version_requirements: *id006
|
120
|
-
- !ruby/object:Gem::Dependency
|
121
|
-
name: guard-rspec
|
122
78
|
prerelease: false
|
123
|
-
|
79
|
+
version_requirements: *18490420
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: guard-rspec
|
82
|
+
requirement: &18475800 !ruby/object:Gem::Requirement
|
124
83
|
none: false
|
125
|
-
requirements:
|
84
|
+
requirements:
|
126
85
|
- - ~>
|
127
|
-
- !ruby/object:Gem::Version
|
128
|
-
hash: 3
|
129
|
-
segments:
|
130
|
-
- 2
|
131
|
-
- 3
|
132
|
-
- 0
|
86
|
+
- !ruby/object:Gem::Version
|
133
87
|
version: 2.3.0
|
134
88
|
type: :development
|
135
|
-
version_requirements: *id007
|
136
|
-
- !ruby/object:Gem::Dependency
|
137
|
-
name: rb-readline
|
138
89
|
prerelease: false
|
139
|
-
|
90
|
+
version_requirements: *18475800
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: rb-readline
|
93
|
+
requirement: &18474560 !ruby/object:Gem::Requirement
|
140
94
|
none: false
|
141
|
-
requirements:
|
95
|
+
requirements:
|
142
96
|
- - ~>
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
hash: 11
|
145
|
-
segments:
|
146
|
-
- 0
|
147
|
-
- 4
|
148
|
-
- 2
|
97
|
+
- !ruby/object:Gem::Version
|
149
98
|
version: 0.4.2
|
150
99
|
type: :development
|
151
|
-
version_requirements: *id008
|
152
|
-
- !ruby/object:Gem::Dependency
|
153
|
-
name: rake
|
154
100
|
prerelease: false
|
155
|
-
|
101
|
+
version_requirements: *18474560
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: rake
|
104
|
+
requirement: &18473600 !ruby/object:Gem::Requirement
|
156
105
|
none: false
|
157
|
-
requirements:
|
106
|
+
requirements:
|
158
107
|
- - ~>
|
159
|
-
- !ruby/object:Gem::Version
|
160
|
-
hash: 75
|
161
|
-
segments:
|
162
|
-
- 10
|
163
|
-
- 0
|
164
|
-
- 2
|
108
|
+
- !ruby/object:Gem::Version
|
165
109
|
version: 10.0.2
|
166
110
|
type: :development
|
167
|
-
version_requirements: *id009
|
168
|
-
- !ruby/object:Gem::Dependency
|
169
|
-
name: redcarpet
|
170
111
|
prerelease: false
|
171
|
-
|
112
|
+
version_requirements: *18473600
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: redcarpet
|
115
|
+
requirement: &18470360 !ruby/object:Gem::Requirement
|
172
116
|
none: false
|
173
|
-
requirements:
|
117
|
+
requirements:
|
174
118
|
- - ~>
|
175
|
-
- !ruby/object:Gem::Version
|
176
|
-
hash: 3
|
177
|
-
segments:
|
178
|
-
- 2
|
179
|
-
- 2
|
180
|
-
- 2
|
119
|
+
- !ruby/object:Gem::Version
|
181
120
|
version: 2.2.2
|
182
121
|
type: :development
|
183
|
-
version_requirements: *id010
|
184
|
-
- !ruby/object:Gem::Dependency
|
185
|
-
name: rspec
|
186
122
|
prerelease: false
|
187
|
-
|
123
|
+
version_requirements: *18470360
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: rspec
|
126
|
+
requirement: &18469780 !ruby/object:Gem::Requirement
|
188
127
|
none: false
|
189
|
-
requirements:
|
128
|
+
requirements:
|
190
129
|
- - ~>
|
191
|
-
- !ruby/object:Gem::Version
|
192
|
-
hash: 63
|
193
|
-
segments:
|
194
|
-
- 2
|
195
|
-
- 12
|
196
|
-
- 0
|
130
|
+
- !ruby/object:Gem::Version
|
197
131
|
version: 2.12.0
|
198
132
|
type: :development
|
199
|
-
version_requirements: *id011
|
200
|
-
- !ruby/object:Gem::Dependency
|
201
|
-
name: timecop
|
202
133
|
prerelease: false
|
203
|
-
|
134
|
+
version_requirements: *18469780
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: timecop
|
137
|
+
requirement: &18468940 !ruby/object:Gem::Requirement
|
204
138
|
none: false
|
205
|
-
requirements:
|
139
|
+
requirements:
|
206
140
|
- - ~>
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
hash: 13
|
209
|
-
segments:
|
210
|
-
- 0
|
211
|
-
- 5
|
212
|
-
- 3
|
141
|
+
- !ruby/object:Gem::Version
|
213
142
|
version: 0.5.3
|
214
143
|
type: :development
|
215
|
-
version_requirements: *id012
|
216
|
-
- !ruby/object:Gem::Dependency
|
217
|
-
name: yard
|
218
144
|
prerelease: false
|
219
|
-
|
145
|
+
version_requirements: *18468940
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: yard
|
148
|
+
requirement: &18468260 !ruby/object:Gem::Requirement
|
220
149
|
none: false
|
221
|
-
requirements:
|
150
|
+
requirements:
|
222
151
|
- - ~>
|
223
|
-
- !ruby/object:Gem::Version
|
224
|
-
hash: 57
|
225
|
-
segments:
|
226
|
-
- 0
|
227
|
-
- 8
|
228
|
-
- 3
|
152
|
+
- !ruby/object:Gem::Version
|
229
153
|
version: 0.8.3
|
230
154
|
type: :development
|
231
|
-
version_requirements: *id013
|
232
|
-
- !ruby/object:Gem::Dependency
|
233
|
-
name: rb-inotify
|
234
155
|
prerelease: false
|
235
|
-
|
156
|
+
version_requirements: *18468260
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: rb-inotify
|
159
|
+
requirement: &18466100 !ruby/object:Gem::Requirement
|
236
160
|
none: false
|
237
|
-
requirements:
|
161
|
+
requirements:
|
238
162
|
- - ~>
|
239
|
-
- !ruby/object:Gem::Version
|
240
|
-
hash: 47
|
241
|
-
segments:
|
242
|
-
- 0
|
243
|
-
- 8
|
244
|
-
- 8
|
163
|
+
- !ruby/object:Gem::Version
|
245
164
|
version: 0.8.8
|
246
165
|
type: :development
|
247
|
-
version_requirements: *id014
|
248
|
-
- !ruby/object:Gem::Dependency
|
249
|
-
name: rb-fsevent
|
250
166
|
prerelease: false
|
251
|
-
|
167
|
+
version_requirements: *18466100
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: rb-fsevent
|
170
|
+
requirement: &18465080 !ruby/object:Gem::Requirement
|
252
171
|
none: false
|
253
|
-
requirements:
|
172
|
+
requirements:
|
254
173
|
- - ~>
|
255
|
-
- !ruby/object:Gem::Version
|
256
|
-
hash: 63
|
257
|
-
segments:
|
258
|
-
- 0
|
259
|
-
- 9
|
260
|
-
- 2
|
174
|
+
- !ruby/object:Gem::Version
|
261
175
|
version: 0.9.2
|
262
176
|
type: :development
|
263
|
-
|
177
|
+
prerelease: false
|
178
|
+
version_requirements: *18465080
|
264
179
|
description: Be lazy. Let Maid clean up after you, based on rules you define.
|
265
|
-
email:
|
180
|
+
email:
|
266
181
|
- hello@benjaminoakes.com
|
267
|
-
executables:
|
182
|
+
executables:
|
268
183
|
- maid
|
269
184
|
extensions: []
|
270
|
-
|
271
185
|
extra_rdoc_files: []
|
272
|
-
|
273
|
-
files:
|
186
|
+
files:
|
274
187
|
- .gitignore
|
275
188
|
- .rspec
|
276
189
|
- .rvmrc
|
277
190
|
- .travis.yml
|
191
|
+
- AUTHORS.md
|
278
192
|
- CONTRIBUTING.md
|
279
193
|
- ChangeLog
|
280
194
|
- Gemfile
|
@@ -298,6 +212,7 @@ files:
|
|
298
212
|
- maid.gemspec
|
299
213
|
- resources/OneThingWell.png
|
300
214
|
- resources/download-for-ubuntu.png
|
215
|
+
- resources/hacker-news.png
|
301
216
|
- resources/ruby5.gif
|
302
217
|
- script/smoke-test
|
303
218
|
- script/vagrant-provision
|
@@ -314,51 +229,30 @@ files:
|
|
314
229
|
- spec/lib/maid/user_agent_spec.rb
|
315
230
|
- spec/lib/maid_spec.rb
|
316
231
|
- spec/spec_helper.rb
|
317
|
-
has_rdoc: true
|
318
232
|
homepage: http://github.com/benjaminoakes/maid
|
319
|
-
licenses:
|
233
|
+
licenses:
|
320
234
|
- GPLv2
|
321
235
|
post_install_message:
|
322
236
|
rdoc_options: []
|
323
|
-
|
324
|
-
require_paths:
|
237
|
+
require_paths:
|
325
238
|
- lib
|
326
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
239
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
327
240
|
none: false
|
328
|
-
requirements:
|
329
|
-
- -
|
330
|
-
- !ruby/object:Gem::Version
|
331
|
-
|
332
|
-
|
333
|
-
- 0
|
334
|
-
version: "0"
|
335
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
241
|
+
requirements:
|
242
|
+
- - ! '>='
|
243
|
+
- !ruby/object:Gem::Version
|
244
|
+
version: '0'
|
245
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
336
246
|
none: false
|
337
|
-
requirements:
|
338
|
-
- -
|
339
|
-
- !ruby/object:Gem::Version
|
340
|
-
hash: 25
|
341
|
-
segments:
|
342
|
-
- 1
|
343
|
-
- 3
|
344
|
-
- 1
|
247
|
+
requirements:
|
248
|
+
- - ! '>'
|
249
|
+
- !ruby/object:Gem::Version
|
345
250
|
version: 1.3.1
|
346
251
|
requirements: []
|
347
|
-
|
348
252
|
rubyforge_project: maid
|
349
|
-
rubygems_version: 1.
|
253
|
+
rubygems_version: 1.8.11
|
350
254
|
signing_key:
|
351
255
|
specification_version: 3
|
352
256
|
summary: Be lazy. Let Maid clean up after you, based on rules you define.
|
353
|
-
test_files:
|
354
|
-
|
355
|
-
- spec/lib/maid/app_spec.rb
|
356
|
-
- spec/lib/maid/maid_spec.rb
|
357
|
-
- spec/lib/maid/numeric_extensions_spec.rb
|
358
|
-
- spec/lib/maid/platform_spec.rb
|
359
|
-
- spec/lib/maid/rule_spec.rb
|
360
|
-
- spec/lib/maid/tools_spec.rb
|
361
|
-
- spec/lib/maid/trash_migration_spec.rb
|
362
|
-
- spec/lib/maid/user_agent_spec.rb
|
363
|
-
- spec/lib/maid_spec.rb
|
364
|
-
- spec/spec_helper.rb
|
257
|
+
test_files: []
|
258
|
+
has_rdoc:
|