maid 0.6.0.alpha.1 → 0.6.0.alpha.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/.ruby-version +1 -1
- data/.travis.yml +5 -3
- data/ChangeLog +3 -0
- data/Guardfile +1 -2
- data/README.md +21 -1
- data/Rakefile +7 -5
- data/lib/maid.rb +4 -1
- data/lib/maid/app.rb +19 -0
- data/lib/maid/maid.rb +26 -13
- data/lib/maid/repeat.rb +24 -0
- data/lib/maid/rule.rb +2 -2
- data/lib/maid/rule_container.rb +22 -0
- data/lib/maid/tools.rb +0 -15
- data/lib/maid/version.rb +1 -1
- data/lib/maid/watch.rb +30 -0
- data/maid.gemspec +8 -5
- data/script/vagrant-provision +3 -14
- data/spec/lib/maid/maid_spec.rb +34 -0
- data/spec/lib/maid/tools_spec.rb +3 -3
- metadata +75 -139
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.5
|
data/.travis.yml
CHANGED
data/ChangeLog
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
maid (0.6.0) unstable; urgency=low
|
2
2
|
|
3
|
+
* Started official support for Ruby 2.1.1, 2.1.2, 2.1.3. Tentative support
|
4
|
+
for Ruby 2.2.0.
|
3
5
|
* Jayson Rhynas: Add Safari download detection to "downloading?" (Closes: #121)
|
4
6
|
* Pedro Lambert: Add support for Rake tasks defined by Maid (Closes: #68, #123)
|
7
|
+
* Jurriaan Pruis: Add daemon mode and repeat support (Closes: #126)
|
5
8
|
|
6
9
|
-- Benjamin Oakes <hello@benjaminoakes.com> TODO
|
7
10
|
|
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -85,7 +85,7 @@ Modern Ruby versions and Unix-like operating systems should work, but only OS X
|
|
85
85
|
Offically supported:
|
86
86
|
|
87
87
|
* **OS:** Mac OS X, Ubuntu
|
88
|
-
* **Ruby:** 1.9.3+ (2.0.
|
88
|
+
* **Ruby:** 1.9.3+ (2.0.x or 2.1.x are preferred)
|
89
89
|
|
90
90
|
Some features require OS X. See the [documentation][] for more details.
|
91
91
|
|
@@ -209,6 +209,26 @@ Example for every day at 1am:
|
|
209
209
|
|
210
210
|
# minute hour day_of_month month day_of_week command_to_execute
|
211
211
|
0 1 * * * /bin/bash -li -c "maid clean --force --silent"
|
212
|
+
|
213
|
+
### Running as a daemon
|
214
|
+
To run Maid as a daemon you first have to specify watch/repeat rules.
|
215
|
+
|
216
|
+
They are defined like this:
|
217
|
+
```ruby
|
218
|
+
repeat '1s' do
|
219
|
+
rule 'This rule will run every second' do
|
220
|
+
# some task
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
watch '/home/user/Downloads' do
|
225
|
+
rule 'This rule will run on every change to the downloads directory' do
|
226
|
+
# another task
|
227
|
+
end
|
228
|
+
end
|
229
|
+
```
|
230
|
+
|
231
|
+
To run the daemon run `maid daemon`
|
212
232
|
|
213
233
|
### Rake Tasks
|
214
234
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'bundler'
|
2
|
-
require 'maid'
|
3
2
|
require 'rake'
|
4
3
|
require 'rspec/core/rake_task'
|
5
4
|
require 'yard'
|
@@ -8,17 +7,20 @@ task :default => :spec
|
|
8
7
|
|
9
8
|
Bundler::GemHelper.install_tasks
|
10
9
|
RSpec::Core::RakeTask.new(:spec)
|
11
|
-
YARD::Rake::YardocTask.new
|
10
|
+
YARD::Rake::YardocTask.new(:doc)
|
12
11
|
|
13
12
|
task :console do
|
14
13
|
sh('irb -I lib -r maid')
|
15
14
|
end
|
16
15
|
|
17
|
-
|
16
|
+
require 'maid'
|
17
|
+
|
18
|
+
Maid::Rake::Task.new(:clean) do
|
18
19
|
# Clean up Rubinius-compilied Ruby
|
19
20
|
trash(dir('**/*.rbc'))
|
20
21
|
|
21
|
-
# Get rid of
|
22
|
+
# Get rid of generated files
|
23
|
+
trash('doc')
|
22
24
|
trash('pkg')
|
23
|
-
|
25
|
+
trash('tmp')
|
24
26
|
end
|
data/lib/maid.rb
CHANGED
@@ -5,6 +5,7 @@ Deprecated.set_action(:warn)
|
|
5
5
|
# Must be in this order:
|
6
6
|
require 'maid/version'
|
7
7
|
require 'maid/tools'
|
8
|
+
require 'maid/rule_container'
|
8
9
|
require 'maid/maid'
|
9
10
|
|
10
11
|
# Alphabetical:
|
@@ -16,6 +17,8 @@ require 'maid/rake/task'
|
|
16
17
|
require 'maid/rule'
|
17
18
|
require 'maid/trash_migration'
|
18
19
|
require 'maid/user_agent'
|
20
|
+
require 'maid/watch'
|
21
|
+
require 'maid/repeat'
|
19
22
|
|
20
23
|
module Maid
|
21
24
|
class << self
|
@@ -29,7 +32,7 @@ module Maid
|
|
29
32
|
|
30
33
|
# Define rules for the Maid instance.
|
31
34
|
def rules(&block)
|
32
|
-
@instance.
|
35
|
+
@instance.instance_exec(&block)
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
data/lib/maid/app.rb
CHANGED
@@ -57,6 +57,25 @@ class Maid::App < Thor
|
|
57
57
|
|
58
58
|
say "Sample rules created at #{ path.inspect }", :green
|
59
59
|
end
|
60
|
+
|
61
|
+
desc 'daemon', 'Runs the watch/repeat rules in a daemon'
|
62
|
+
method_option :rules, :type => :string, :aliases => %w(-r)
|
63
|
+
method_option :silent, :type => :boolean, :aliases => %w(-s)
|
64
|
+
def daemon
|
65
|
+
maid = Maid::Maid.new(maid_options(options))
|
66
|
+
|
67
|
+
if Maid::TrashMigration.needed?
|
68
|
+
migrate_trash
|
69
|
+
return
|
70
|
+
end
|
71
|
+
|
72
|
+
unless options.silent?
|
73
|
+
say "Logging actions to #{ maid.log_device.inspect }"
|
74
|
+
end
|
75
|
+
|
76
|
+
maid.load_rules
|
77
|
+
maid.daemonize
|
78
|
+
end
|
60
79
|
|
61
80
|
no_tasks do
|
62
81
|
def maid_options(options)
|
data/lib/maid/maid.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'logger'
|
3
|
-
|
4
3
|
require 'xdg'
|
5
4
|
|
6
5
|
# Maid cleans up according to the given rules, logging what it does.
|
@@ -8,6 +7,7 @@ require 'xdg'
|
|
8
7
|
# TODO: Rename to something less ambiguous, e.g. "cleaning agent", "cleaner", "vacuum", etc. Having this class within
|
9
8
|
# the `Maid` module makes things confusing.
|
10
9
|
class Maid::Maid
|
10
|
+
include Maid::RuleContainer
|
11
11
|
DEFAULTS = {
|
12
12
|
:progname => 'Maid',
|
13
13
|
|
@@ -20,7 +20,7 @@ class Maid::Maid
|
|
20
20
|
:file_options => { :noop => false }, # for `FileUtils`
|
21
21
|
}.freeze
|
22
22
|
|
23
|
-
attr_reader :file_options, :logger, :log_device, :
|
23
|
+
attr_reader :file_options, :logger, :log_device, :rules_path, :trash_path, :watches, :repeats
|
24
24
|
include ::Maid::Tools
|
25
25
|
|
26
26
|
# Make a new Maid, setting up paths for the log and trash.
|
@@ -52,6 +52,8 @@ class Maid::Maid
|
|
52
52
|
FileUtils.mkdir_p(File.expand_path('~/.maid'))
|
53
53
|
FileUtils.mkdir_p(@trash_path)
|
54
54
|
|
55
|
+
@watches = []
|
56
|
+
@repeats = []
|
55
57
|
@rules = []
|
56
58
|
end
|
57
59
|
|
@@ -82,20 +84,31 @@ class Maid::Maid
|
|
82
84
|
rescue LoadError => e
|
83
85
|
STDERR.puts e.message
|
84
86
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
@rules << ::Maid::Rule.new(description, instructions)
|
87
|
+
|
88
|
+
def watch(path, &rules)
|
89
|
+
@watches << ::Maid::Watch.new(self, path, &rules)
|
89
90
|
end
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
91
|
+
|
92
|
+
def repeat(timestring, &rules)
|
93
|
+
@repeats << ::Maid::Repeat.new(self, timestring, &rules)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Daemonizes the process by starting all watches and repeats and joining
|
97
|
+
# the threads of the schedulers/watchers
|
98
|
+
def daemonize
|
99
|
+
if @watches.empty? && @repeats.empty?
|
100
|
+
STDERR.puts 'Cannot run daemon. Nothing to watch or repeat.'
|
101
|
+
else
|
102
|
+
all = @watches + @repeats
|
103
|
+
all.each(&:run)
|
104
|
+
trap("SIGINT") do
|
105
|
+
all.each(&:stop)
|
106
|
+
exit!
|
107
|
+
end
|
108
|
+
sleep
|
96
109
|
end
|
97
110
|
end
|
98
|
-
|
111
|
+
|
99
112
|
# Run a shell command.
|
100
113
|
#--
|
101
114
|
# Delegates to `Kernel.\``. Made primarily for testing other commands and some error handling.
|
data/lib/maid/repeat.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rufus-scheduler'
|
2
|
+
class Maid::Repeat
|
3
|
+
include Maid::RuleContainer
|
4
|
+
|
5
|
+
attr_reader :timestring, :scheduler, :logger
|
6
|
+
|
7
|
+
def initialize(maid, timestring, &rules)
|
8
|
+
@maid = maid
|
9
|
+
@logger = maid.logger # TODO: Maybe it's better to create seperate loggers?
|
10
|
+
@scheduler = Rufus::Scheduler.singleton
|
11
|
+
@timestring = timestring
|
12
|
+
initialize_rules(&rules)
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
unless rules.empty?
|
17
|
+
@scheduler.repeat(timestring) { follow_rules }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def stop
|
22
|
+
@scheduler.shutdown(:join) # Join the work threads
|
23
|
+
end
|
24
|
+
end
|
data/lib/maid/rule.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Maid::RuleContainer
|
2
|
+
attr_reader :rules
|
3
|
+
|
4
|
+
# initialize_rules
|
5
|
+
def initialize_rules(&rules)
|
6
|
+
@rules ||= []
|
7
|
+
instance_exec(&rules)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Register a rule with a description and instructions (lambda function).
|
11
|
+
def rule(description, &instructions)
|
12
|
+
@rules << ::Maid::Rule.new(description, instructions)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Follow all registered rules.
|
16
|
+
def follow_rules(*args)
|
17
|
+
@rules.each do |rule|
|
18
|
+
@logger.info("Rule: #{ rule.description }") unless @logger.nil?
|
19
|
+
rule.follow(*args)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/maid/tools.rb
CHANGED
@@ -685,19 +685,4 @@ module Maid::Tools
|
|
685
685
|
clean = raw[1, raw.length - 2]
|
686
686
|
clean.split(/,\s+/).map { |s| t = s.strip; t[1, t.length - 2] }
|
687
687
|
end
|
688
|
-
|
689
|
-
# ---
|
690
|
-
# Something @benjaminoakes wrote:
|
691
|
-
|
692
|
-
# Maid.rules do
|
693
|
-
# dir('*-2012.pdf').each do |p|
|
694
|
-
# move(p, normalize_date(p))
|
695
|
-
# end
|
696
|
-
# end
|
697
|
-
|
698
|
-
def normalize_date(path)
|
699
|
-
basename = File.basename(path, '.pdf')
|
700
|
-
latent_date = Date.strptime(basename, '%m-%d-%Y')
|
701
|
-
latent_date.strftime('%Y.%m.%d.pdf')
|
702
|
-
end
|
703
688
|
end
|
data/lib/maid/version.rb
CHANGED
data/lib/maid/watch.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'listen'
|
2
|
+
class Maid::Watch
|
3
|
+
include Maid::RuleContainer
|
4
|
+
|
5
|
+
attr_reader :path, :listener, :logger
|
6
|
+
|
7
|
+
def initialize(maid, path, &rules)
|
8
|
+
@maid = maid
|
9
|
+
@logger = maid.logger # TODO: Maybe it's better to create seperate loggers?
|
10
|
+
@path = File.expand_path(path)
|
11
|
+
initialize_rules(&rules)
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
unless rules.empty?
|
16
|
+
@listener = Listen.to(path) do |modified, added, removed|
|
17
|
+
follow_rules(modified, added, removed)
|
18
|
+
end
|
19
|
+
@listener.start
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def stop
|
24
|
+
@listener.stop
|
25
|
+
end
|
26
|
+
|
27
|
+
def join
|
28
|
+
@listener.thread.join unless @listener.nil? || @listener.paused?
|
29
|
+
end
|
30
|
+
end
|
data/maid.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
s.rubyforge_project = 'maid'
|
17
17
|
|
18
|
-
s.required_ruby_version =
|
18
|
+
s.required_ruby_version = '>= 1.9.3'
|
19
19
|
|
20
20
|
# Strategy: if possible, use ranges (so there are fewer chances of version conflicts)
|
21
21
|
s.add_dependency('escape', '>= 0.0.1', '< 0.1.0') # Used for better Ruby 1.8.7 support, could be replaced with `Shellwords`
|
@@ -24,6 +24,9 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.add_dependency('mime-types', '~> 2.0')
|
25
25
|
s.add_dependency('rubyzip', '~> 1.1.0')
|
26
26
|
s.add_dependency('xdg', '~> 2.2.3') # previous versions had bugs
|
27
|
+
s.add_dependency('listen', '~> 2.7.9')
|
28
|
+
s.add_dependency('rufus-scheduler', '~> 3.0.6')
|
29
|
+
|
27
30
|
# TODO: use one of these two gems instead of `mdfind`. **But** They have to work on Linux as well.
|
28
31
|
#
|
29
32
|
# s.add_dependency('mac-spotlight', '~> 0.0.4')
|
@@ -31,10 +34,10 @@ Gem::Specification.new do |s|
|
|
31
34
|
|
32
35
|
# Strategy: specific versions (since they're just for development)
|
33
36
|
s.add_development_dependency('fakefs', '~> 0.4.2')
|
34
|
-
s.add_development_dependency('guard', '~> 2.
|
35
|
-
s.add_development_dependency('guard-rspec', '~> 4.
|
36
|
-
s.add_development_dependency('rake', '~> 10.
|
37
|
-
s.add_development_dependency('redcarpet', '~> 3.
|
37
|
+
s.add_development_dependency('guard', '~> 2.6.1')
|
38
|
+
s.add_development_dependency('guard-rspec', '~> 4.3.1')
|
39
|
+
s.add_development_dependency('rake', '~> 10.3.2')
|
40
|
+
s.add_development_dependency('redcarpet', '~> 3.1.2') # Soft dependency of `yard`
|
38
41
|
s.add_development_dependency('rspec', '>= 2.14', '< 3.0')
|
39
42
|
s.add_development_dependency('timecop', '~> 0.7.0')
|
40
43
|
s.add_development_dependency('yard', '~> 0.8.4')
|
data/script/vagrant-provision
CHANGED
@@ -22,14 +22,11 @@ function install-pkg-if-ruby {
|
|
22
22
|
fi
|
23
23
|
}
|
24
24
|
|
25
|
-
sudo apt-get update
|
26
|
-
sudo apt-get install -y python-software-properties
|
27
|
-
sudo add-apt-repository -y ppa:brightbox/ruby-ng
|
28
25
|
sudo apt-get update
|
29
26
|
|
30
|
-
## Dependencies
|
31
|
-
|
32
|
-
install-pkg-if-ruby '1.9.3' 'ruby1.9.1'
|
27
|
+
# ## Dependencies
|
28
|
+
# Installs `ruby 1.9.3p0`
|
29
|
+
install-pkg-if-ruby '1.9.3' 'ruby1.9.1'
|
33
30
|
install-pkg-if-ruby 'jruby' 'jruby'
|
34
31
|
|
35
32
|
# ## Development dependencies
|
@@ -41,14 +38,6 @@ install-pkg 'make'
|
|
41
38
|
install-pkg 'libffi-dev'
|
42
39
|
install-pkg-if-ruby '1.9.3' 'ruby1.9.1-dev'
|
43
40
|
|
44
|
-
# # wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz
|
45
|
-
# wget 'http://192.168.0.1:3000/serv/Software/Source/ruby-2.1.1.tar.gz'
|
46
|
-
# tar xvfz ruby-2.1.1.tar.gz
|
47
|
-
# cd ruby-2.1.1
|
48
|
-
# ./configure
|
49
|
-
# make
|
50
|
-
# sudo make install
|
51
|
-
|
52
41
|
sudo gem install bundler
|
53
42
|
cd /vagrant
|
54
43
|
bundle install
|
data/spec/lib/maid/maid_spec.rb
CHANGED
@@ -176,6 +176,40 @@ module Maid
|
|
176
176
|
expect(@maid.rules.first.description).to eq('description')
|
177
177
|
end
|
178
178
|
end
|
179
|
+
|
180
|
+
describe '#watch' do
|
181
|
+
before do
|
182
|
+
@maid = Maid.new
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'adds a watch to the list of watches' do
|
186
|
+
expect(@maid.watches.length).to eq(0)
|
187
|
+
|
188
|
+
@maid.watch('watch_dir') do
|
189
|
+
'instructions'
|
190
|
+
end
|
191
|
+
|
192
|
+
expect(@maid.watches.length).to eq(1)
|
193
|
+
expect(@maid.watches.first.path).to eq(File.expand_path('watch_dir'))
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '#repeat' do
|
198
|
+
before do
|
199
|
+
@maid = Maid.new
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'adds a repeat to the list of repeats' do
|
203
|
+
expect(@maid.repeats.length).to eq(0)
|
204
|
+
|
205
|
+
@maid.repeat('1s') do
|
206
|
+
'instructions'
|
207
|
+
end
|
208
|
+
|
209
|
+
expect(@maid.repeats.length).to eq(1)
|
210
|
+
expect(@maid.repeats.first.timestring).to eq('1s')
|
211
|
+
end
|
212
|
+
end
|
179
213
|
|
180
214
|
describe '#follow_rules' do
|
181
215
|
it 'follows each rule' do
|
data/spec/lib/maid/tools_spec.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
# Workaround for Ruby 2.1.0, remove after https://github.com/defunkt/fakefs/pull/209 is released
|
5
|
-
if RUBY_VERSION
|
5
|
+
if RUBY_VERSION =~ /2\.[12]\.\d/
|
6
6
|
module FakeFS
|
7
7
|
class Dir
|
8
8
|
def self.entries(dirname, opts = {})
|
@@ -359,7 +359,7 @@ module Maid
|
|
359
359
|
end
|
360
360
|
|
361
361
|
it "returns an array of all the files' names when no block is given" do
|
362
|
-
expect(@maid.find(@dir)).to
|
362
|
+
expect(@maid.find(@dir)).to match_array([@dir_expand_path, @file_expand_path])
|
363
363
|
end
|
364
364
|
end
|
365
365
|
|
@@ -590,7 +590,7 @@ module Maid
|
|
590
590
|
dupes = @maid.newest_dupes_in(file_fixtures_glob)
|
591
591
|
|
592
592
|
basenames = dupes.flatten.map { |p| File.basename(p) }
|
593
|
-
expect(basenames).to
|
593
|
+
expect(basenames).to match_array(%w(bar.zip 1.zip))
|
594
594
|
end
|
595
595
|
end
|
596
596
|
|
metadata
CHANGED
@@ -1,30 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.0.alpha.2
|
4
5
|
prerelease: 6
|
5
|
-
version: 0.6.0.alpha.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Benjamin Oakes
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-12-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
type: :runtime
|
16
|
-
prerelease: false
|
17
15
|
name: escape
|
18
|
-
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
|
-
requirements:
|
21
|
-
- - ! '>='
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.1
|
24
|
-
- - <
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.0
|
27
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &19806060 !ruby/object:Gem::Requirement
|
28
17
|
none: false
|
29
18
|
requirements:
|
30
19
|
- - ! '>='
|
@@ -33,11 +22,12 @@ dependencies:
|
|
33
22
|
- - <
|
34
23
|
- !ruby/object:Gem::Version
|
35
24
|
version: 0.1.0
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
25
|
type: :runtime
|
38
26
|
prerelease: false
|
27
|
+
version_requirements: *19806060
|
28
|
+
- !ruby/object:Gem::Dependency
|
39
29
|
name: thor
|
40
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirement: &19804940 !ruby/object:Gem::Requirement
|
41
31
|
none: false
|
42
32
|
requirements:
|
43
33
|
- - ! '>='
|
@@ -46,173 +36,133 @@ dependencies:
|
|
46
36
|
- - <
|
47
37
|
- !ruby/object:Gem::Version
|
48
38
|
version: 1.0.0
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
|
-
requirements:
|
52
|
-
- - ! '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.14.0
|
55
|
-
- - <
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version: 1.0.0
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
39
|
type: :runtime
|
60
40
|
prerelease: false
|
41
|
+
version_requirements: *19804940
|
42
|
+
- !ruby/object:Gem::Dependency
|
61
43
|
name: deprecated
|
62
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirement: &19803580 !ruby/object:Gem::Requirement
|
63
45
|
none: false
|
64
46
|
requirements:
|
65
47
|
- - ~>
|
66
48
|
- !ruby/object:Gem::Version
|
67
49
|
version: 3.0.0
|
68
|
-
version_requirements: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
|
-
requirements:
|
71
|
-
- - ~>
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: 3.0.0
|
74
|
-
- !ruby/object:Gem::Dependency
|
75
50
|
type: :runtime
|
76
51
|
prerelease: false
|
52
|
+
version_requirements: *19803580
|
53
|
+
- !ruby/object:Gem::Dependency
|
77
54
|
name: mime-types
|
78
|
-
requirement: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
|
-
requirements:
|
81
|
-
- - ~>
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '2.0'
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
requirement: &19803040 !ruby/object:Gem::Requirement
|
85
56
|
none: false
|
86
57
|
requirements:
|
87
58
|
- - ~>
|
88
59
|
- !ruby/object:Gem::Version
|
89
60
|
version: '2.0'
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
61
|
type: :runtime
|
92
62
|
prerelease: false
|
63
|
+
version_requirements: *19803040
|
64
|
+
- !ruby/object:Gem::Dependency
|
93
65
|
name: rubyzip
|
94
|
-
requirement: !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
|
-
requirements:
|
97
|
-
- - ~>
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: 1.1.0
|
100
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirement: &19802100 !ruby/object:Gem::Requirement
|
101
67
|
none: false
|
102
68
|
requirements:
|
103
69
|
- - ~>
|
104
70
|
- !ruby/object:Gem::Version
|
105
71
|
version: 1.1.0
|
106
|
-
- !ruby/object:Gem::Dependency
|
107
72
|
type: :runtime
|
108
73
|
prerelease: false
|
74
|
+
version_requirements: *19802100
|
75
|
+
- !ruby/object:Gem::Dependency
|
109
76
|
name: xdg
|
110
|
-
requirement: !ruby/object:Gem::Requirement
|
77
|
+
requirement: &19801280 !ruby/object:Gem::Requirement
|
111
78
|
none: false
|
112
79
|
requirements:
|
113
80
|
- - ~>
|
114
81
|
- !ruby/object:Gem::Version
|
115
82
|
version: 2.2.3
|
116
|
-
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: *19801280
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: listen
|
88
|
+
requirement: &19800320 !ruby/object:Gem::Requirement
|
117
89
|
none: false
|
118
90
|
requirements:
|
119
91
|
- - ~>
|
120
92
|
- !ruby/object:Gem::Version
|
121
|
-
version: 2.
|
122
|
-
|
123
|
-
type: :development
|
93
|
+
version: 2.7.9
|
94
|
+
type: :runtime
|
124
95
|
prerelease: false
|
125
|
-
|
126
|
-
|
96
|
+
version_requirements: *19800320
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rufus-scheduler
|
99
|
+
requirement: &19786680 !ruby/object:Gem::Requirement
|
127
100
|
none: false
|
128
101
|
requirements:
|
129
102
|
- - ~>
|
130
103
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
132
|
-
|
104
|
+
version: 3.0.6
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: *19786680
|
108
|
+
- !ruby/object:Gem::Dependency
|
109
|
+
name: fakefs
|
110
|
+
requirement: &19785940 !ruby/object:Gem::Requirement
|
133
111
|
none: false
|
134
112
|
requirements:
|
135
113
|
- - ~>
|
136
114
|
- !ruby/object:Gem::Version
|
137
115
|
version: 0.4.2
|
138
|
-
- !ruby/object:Gem::Dependency
|
139
116
|
type: :development
|
140
117
|
prerelease: false
|
118
|
+
version_requirements: *19785940
|
119
|
+
- !ruby/object:Gem::Dependency
|
141
120
|
name: guard
|
142
|
-
requirement: !ruby/object:Gem::Requirement
|
121
|
+
requirement: &19785300 !ruby/object:Gem::Requirement
|
143
122
|
none: false
|
144
123
|
requirements:
|
145
124
|
- - ~>
|
146
125
|
- !ruby/object:Gem::Version
|
147
|
-
version: 2.
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
none: false
|
150
|
-
requirements:
|
151
|
-
- - ~>
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: 2.2.2
|
154
|
-
- !ruby/object:Gem::Dependency
|
126
|
+
version: 2.6.1
|
155
127
|
type: :development
|
156
128
|
prerelease: false
|
129
|
+
version_requirements: *19785300
|
130
|
+
- !ruby/object:Gem::Dependency
|
157
131
|
name: guard-rspec
|
158
|
-
requirement: !ruby/object:Gem::Requirement
|
159
|
-
none: false
|
160
|
-
requirements:
|
161
|
-
- - ~>
|
162
|
-
- !ruby/object:Gem::Version
|
163
|
-
version: 4.2.1
|
164
|
-
version_requirements: !ruby/object:Gem::Requirement
|
132
|
+
requirement: &19784740 !ruby/object:Gem::Requirement
|
165
133
|
none: false
|
166
134
|
requirements:
|
167
135
|
- - ~>
|
168
136
|
- !ruby/object:Gem::Version
|
169
|
-
version: 4.
|
170
|
-
- !ruby/object:Gem::Dependency
|
137
|
+
version: 4.3.1
|
171
138
|
type: :development
|
172
139
|
prerelease: false
|
140
|
+
version_requirements: *19784740
|
141
|
+
- !ruby/object:Gem::Dependency
|
173
142
|
name: rake
|
174
|
-
requirement: !ruby/object:Gem::Requirement
|
175
|
-
none: false
|
176
|
-
requirements:
|
177
|
-
- - ~>
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
version: 10.1.0
|
180
|
-
version_requirements: !ruby/object:Gem::Requirement
|
143
|
+
requirement: &19784140 !ruby/object:Gem::Requirement
|
181
144
|
none: false
|
182
145
|
requirements:
|
183
146
|
- - ~>
|
184
147
|
- !ruby/object:Gem::Version
|
185
|
-
version: 10.
|
186
|
-
- !ruby/object:Gem::Dependency
|
148
|
+
version: 10.3.2
|
187
149
|
type: :development
|
188
150
|
prerelease: false
|
151
|
+
version_requirements: *19784140
|
152
|
+
- !ruby/object:Gem::Dependency
|
189
153
|
name: redcarpet
|
190
|
-
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirement: &19783380 !ruby/object:Gem::Requirement
|
191
155
|
none: false
|
192
156
|
requirements:
|
193
157
|
- - ~>
|
194
158
|
- !ruby/object:Gem::Version
|
195
|
-
version: 3.
|
196
|
-
version_requirements: !ruby/object:Gem::Requirement
|
197
|
-
none: false
|
198
|
-
requirements:
|
199
|
-
- - ~>
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: 3.0.0
|
202
|
-
- !ruby/object:Gem::Dependency
|
159
|
+
version: 3.1.2
|
203
160
|
type: :development
|
204
161
|
prerelease: false
|
162
|
+
version_requirements: *19783380
|
163
|
+
- !ruby/object:Gem::Dependency
|
205
164
|
name: rspec
|
206
|
-
requirement: !ruby/object:Gem::Requirement
|
207
|
-
none: false
|
208
|
-
requirements:
|
209
|
-
- - ! '>='
|
210
|
-
- !ruby/object:Gem::Version
|
211
|
-
version: '2.14'
|
212
|
-
- - <
|
213
|
-
- !ruby/object:Gem::Version
|
214
|
-
version: '3.0'
|
215
|
-
version_requirements: !ruby/object:Gem::Requirement
|
165
|
+
requirement: &19782360 !ruby/object:Gem::Requirement
|
216
166
|
none: false
|
217
167
|
requirements:
|
218
168
|
- - ! '>='
|
@@ -221,70 +171,53 @@ dependencies:
|
|
221
171
|
- - <
|
222
172
|
- !ruby/object:Gem::Version
|
223
173
|
version: '3.0'
|
224
|
-
- !ruby/object:Gem::Dependency
|
225
174
|
type: :development
|
226
175
|
prerelease: false
|
176
|
+
version_requirements: *19782360
|
177
|
+
- !ruby/object:Gem::Dependency
|
227
178
|
name: timecop
|
228
|
-
requirement: !ruby/object:Gem::Requirement
|
229
|
-
none: false
|
230
|
-
requirements:
|
231
|
-
- - ~>
|
232
|
-
- !ruby/object:Gem::Version
|
233
|
-
version: 0.7.0
|
234
|
-
version_requirements: !ruby/object:Gem::Requirement
|
179
|
+
requirement: &19781640 !ruby/object:Gem::Requirement
|
235
180
|
none: false
|
236
181
|
requirements:
|
237
182
|
- - ~>
|
238
183
|
- !ruby/object:Gem::Version
|
239
184
|
version: 0.7.0
|
240
|
-
- !ruby/object:Gem::Dependency
|
241
185
|
type: :development
|
242
186
|
prerelease: false
|
187
|
+
version_requirements: *19781640
|
188
|
+
- !ruby/object:Gem::Dependency
|
243
189
|
name: yard
|
244
|
-
requirement: !ruby/object:Gem::Requirement
|
190
|
+
requirement: &19780960 !ruby/object:Gem::Requirement
|
245
191
|
none: false
|
246
192
|
requirements:
|
247
193
|
- - ~>
|
248
194
|
- !ruby/object:Gem::Version
|
249
195
|
version: 0.8.4
|
250
|
-
version_requirements: !ruby/object:Gem::Requirement
|
251
|
-
none: false
|
252
|
-
requirements:
|
253
|
-
- - ~>
|
254
|
-
- !ruby/object:Gem::Version
|
255
|
-
version: 0.8.4
|
256
|
-
- !ruby/object:Gem::Dependency
|
257
196
|
type: :development
|
258
197
|
prerelease: false
|
198
|
+
version_requirements: *19780960
|
199
|
+
- !ruby/object:Gem::Dependency
|
259
200
|
name: rb-inotify
|
260
|
-
requirement: !ruby/object:Gem::Requirement
|
261
|
-
none: false
|
262
|
-
requirements:
|
263
|
-
- - ~>
|
264
|
-
- !ruby/object:Gem::Version
|
265
|
-
version: 0.9.0
|
266
|
-
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
requirement: &19780280 !ruby/object:Gem::Requirement
|
267
202
|
none: false
|
268
203
|
requirements:
|
269
204
|
- - ~>
|
270
205
|
- !ruby/object:Gem::Version
|
271
206
|
version: 0.9.0
|
272
|
-
- !ruby/object:Gem::Dependency
|
273
207
|
type: :development
|
274
208
|
prerelease: false
|
209
|
+
version_requirements: *19780280
|
210
|
+
- !ruby/object:Gem::Dependency
|
275
211
|
name: rb-fsevent
|
276
|
-
requirement: !ruby/object:Gem::Requirement
|
277
|
-
none: false
|
278
|
-
requirements:
|
279
|
-
- - ~>
|
280
|
-
- !ruby/object:Gem::Version
|
281
|
-
version: 0.9.2
|
282
|
-
version_requirements: !ruby/object:Gem::Requirement
|
212
|
+
requirement: &19779560 !ruby/object:Gem::Requirement
|
283
213
|
none: false
|
284
214
|
requirements:
|
285
215
|
- - ~>
|
286
216
|
- !ruby/object:Gem::Version
|
287
217
|
version: 0.9.2
|
218
|
+
type: :development
|
219
|
+
prerelease: false
|
220
|
+
version_requirements: *19779560
|
288
221
|
description: ! 'Be lazy: let Maid clean up after you. Think of it as "Hazel for hackers".'
|
289
222
|
email:
|
290
223
|
- hello@benjaminoakes.com
|
@@ -316,12 +249,15 @@ files:
|
|
316
249
|
- lib/maid/platform.rb
|
317
250
|
- lib/maid/rake/single_rule.rb
|
318
251
|
- lib/maid/rake/task.rb
|
252
|
+
- lib/maid/repeat.rb
|
319
253
|
- lib/maid/rule.rb
|
254
|
+
- lib/maid/rule_container.rb
|
320
255
|
- lib/maid/rules.sample.rb
|
321
256
|
- lib/maid/tools.rb
|
322
257
|
- lib/maid/trash_migration.rb
|
323
258
|
- lib/maid/user_agent.rb
|
324
259
|
- lib/maid/version.rb
|
260
|
+
- lib/maid/watch.rb
|
325
261
|
- maid.gemspec
|
326
262
|
- resources/OneThingWell.png
|
327
263
|
- resources/download-for-ubuntu.png
|
@@ -371,7 +307,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
371
307
|
version: 1.3.1
|
372
308
|
requirements: []
|
373
309
|
rubyforge_project: maid
|
374
|
-
rubygems_version: 1.8.
|
310
|
+
rubygems_version: 1.8.11
|
375
311
|
signing_key:
|
376
312
|
specification_version: 3
|
377
313
|
summary: ! 'Be lazy: let Maid clean up after you. Think of it as "Hazel for hackers".'
|