maid 0.5.0 → 0.6.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.ruby-version +1 -1
- data/.travis.yml +6 -1
- data/AUTHORS.md +2 -0
- data/ChangeLog +10 -0
- data/README.md +25 -1
- data/Rakefile +10 -0
- data/lib/maid/rake/single_rule.rb +34 -0
- data/lib/maid/rake/task.rb +38 -0
- data/lib/maid/tools.rb +35 -16
- data/lib/maid/version.rb +1 -1
- data/lib/maid.rb +2 -0
- data/maid.gemspec +4 -4
- data/script/vagrant-provision +14 -3
- data/spec/dependency_spec.rb +10 -10
- data/spec/lib/maid/app_spec.rb +32 -32
- data/spec/lib/maid/maid_spec.rb +56 -56
- data/spec/lib/maid/numeric_extensions_spec.rb +10 -10
- data/spec/lib/maid/platform_spec.rb +7 -7
- data/spec/lib/maid/rake/single_rule_spec.rb +93 -0
- data/spec/lib/maid/rake/task_spec.rb +51 -0
- data/spec/lib/maid/rule_spec.rb +2 -2
- data/spec/lib/maid/tools_spec.rb +134 -131
- data/spec/lib/maid/trash_migration_spec.rb +9 -9
- data/spec/lib/maid/user_agent_spec.rb +1 -1
- data/spec/lib/maid_spec.rb +10 -9
- data/spec/spec_helper.rb +4 -4
- metadata +158 -62
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.1.2
|
data/.travis.yml
CHANGED
data/AUTHORS.md
CHANGED
@@ -3,6 +3,7 @@ In alphabetical order:
|
|
3
3
|
* Benjamin Oakes (@benjaminoakes)
|
4
4
|
* Bradley Smith (@bradleyd)
|
5
5
|
* Graham Siener (@gsiener)
|
6
|
+
* Jayson Rhynas (@jayrhynas)
|
6
7
|
* John Colvin (@JohnColvin)
|
7
8
|
* Justin Hileman (@bobthecow)
|
8
9
|
* Larry Lv (@larrylv)
|
@@ -11,5 +12,6 @@ In alphabetical order:
|
|
11
12
|
* Mark Jaquith (@markjaquith)
|
12
13
|
* Mikael Hultgren (@blomma)
|
13
14
|
* Mu Ye (@yemutex)
|
15
|
+
* Pedro Lambert (@p-lambert)
|
14
16
|
* Shiro Hazuki (@HazukiShiro)
|
15
17
|
* Vladimir Agafonkin (@mourner)
|
data/ChangeLog
CHANGED
@@ -1,5 +1,15 @@
|
|
1
|
+
maid (0.6.0) unstable; urgency=low
|
2
|
+
|
3
|
+
* Jayson Rhynas: Add Safari download detection to "downloading?" (Closes: #121)
|
4
|
+
* Pedro Lambert: Add support for Rake tasks defined by Maid (Closes: #68, #123)
|
5
|
+
|
6
|
+
-- Benjamin Oakes <hello@benjaminoakes.com> TODO
|
7
|
+
|
1
8
|
maid (0.5.0) stable; urgency=low
|
2
9
|
|
10
|
+
* Stats! { 'collaborators' => 13, 'downloads' => 9570, 'forks' => 38,
|
11
|
+
'open_issues' => 28, 'closed_issues' => 86, 'stars' => 722,
|
12
|
+
'users_sharing_rules' => 25 }
|
3
13
|
* Started official support Ruby 2.1.0 (Closes: #114)
|
4
14
|
* Shiro Hazuki (public domain code): New utility methods: "dir_safe",
|
5
15
|
"downloading?" (Closes: #107)
|
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.0 or 2.1.
|
88
|
+
* **Ruby:** 1.9.3+ (2.0.0, 2.1.0, or 2.1.1 are preferred)
|
89
89
|
|
90
90
|
Some features require OS X. See the [documentation][] for more details.
|
91
91
|
|
@@ -210,6 +210,30 @@ Example for every day at 1am:
|
|
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
212
|
|
213
|
+
### Rake Tasks
|
214
|
+
|
215
|
+
Maid includes helpers that make file managment easier. You may find them useful if you need to automate tasks in your Ruby projects. This is available via support for Maid-based Rake tasks:
|
216
|
+
|
217
|
+
```ruby
|
218
|
+
# File: Rakefile
|
219
|
+
require 'maid'
|
220
|
+
|
221
|
+
Maid::Rake::Task.new :clean do
|
222
|
+
# Clean up Rubinius-compilied Ruby
|
223
|
+
trash(dir('**/*.rbc'))
|
224
|
+
end
|
225
|
+
```
|
226
|
+
|
227
|
+
In fact, the Maid project uses Maid in [its Rakefile](https://github.com/benjaminoakes/maid/blob/master/Rakefile).
|
228
|
+
|
229
|
+
You can also provide a custom description:
|
230
|
+
|
231
|
+
```ruby
|
232
|
+
Maid::Rake::Task.new clean_torrents: [:dependency], description: 'Clean Torrents' do
|
233
|
+
trash(dir('~/Downloads/*.torrent'))
|
234
|
+
end
|
235
|
+
```
|
236
|
+
|
213
237
|
## Warranty
|
214
238
|
|
215
239
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'bundler'
|
2
|
+
require 'maid'
|
2
3
|
require 'rake'
|
3
4
|
require 'rspec/core/rake_task'
|
4
5
|
require 'yard'
|
@@ -12,3 +13,12 @@ YARD::Rake::YardocTask.new
|
|
12
13
|
task :console do
|
13
14
|
sh('irb -I lib -r maid')
|
14
15
|
end
|
16
|
+
|
17
|
+
Maid::Rake::Task.new :clean do
|
18
|
+
# Clean up Rubinius-compilied Ruby
|
19
|
+
trash(dir('**/*.rbc'))
|
20
|
+
|
21
|
+
# Get rid of old rubygems packages
|
22
|
+
trash('pkg')
|
23
|
+
mkdir('pkg')
|
24
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Maid
|
2
|
+
module Rake
|
3
|
+
class SingleRule
|
4
|
+
attr_writer :maid_instance
|
5
|
+
attr_reader :name, :task
|
6
|
+
|
7
|
+
def initialize(name, task)
|
8
|
+
@name = name
|
9
|
+
@task = task
|
10
|
+
end
|
11
|
+
|
12
|
+
def clean
|
13
|
+
maid_instance.clean
|
14
|
+
end
|
15
|
+
|
16
|
+
def maid_instance
|
17
|
+
@maid_instance ||= ::Maid::Maid.new(rules_path: '/dev/null')
|
18
|
+
end
|
19
|
+
|
20
|
+
def define
|
21
|
+
maid_instance.rule name do
|
22
|
+
maid_instance.instance_eval(&task)
|
23
|
+
end
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
class << self
|
28
|
+
def perform(name, task)
|
29
|
+
new(name, task).define.clean
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
|
4
|
+
module Maid
|
5
|
+
module Rake
|
6
|
+
class Task < ::Rake::TaskLib
|
7
|
+
DEFAULT_DESCRIPTION = 'Maid Task'
|
8
|
+
|
9
|
+
def initialize(*args, &task)
|
10
|
+
@args = args
|
11
|
+
@task_proc = task
|
12
|
+
define
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
attr_reader :task_proc
|
18
|
+
|
19
|
+
def args
|
20
|
+
@args.reject(&:empty?)
|
21
|
+
end
|
22
|
+
|
23
|
+
def task_description
|
24
|
+
@task_description ||= begin
|
25
|
+
opts = args.detect { |arg| arg.is_a?(Hash) }
|
26
|
+
(opts && opts.delete(:description)) || DEFAULT_DESCRIPTION
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def define
|
31
|
+
desc task_description
|
32
|
+
task *args do |task|
|
33
|
+
SingleRule.perform(task.name, task_proc)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/maid/tools.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'digest/
|
1
|
+
require 'digest/sha1'
|
2
2
|
require 'find'
|
3
3
|
require 'fileutils'
|
4
4
|
require 'time'
|
@@ -28,11 +28,11 @@ module Maid::Tools
|
|
28
28
|
# Single path:
|
29
29
|
#
|
30
30
|
# move('~/Downloads/foo.zip', '~/Archive/Software/Mac OS X/')
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# Multiple paths:
|
33
33
|
#
|
34
34
|
# move(['~/Downloads/foo.zip', '~/Downloads/bar.zip'], '~/Archive/Software/Mac OS X/')
|
35
|
-
# move(dir('~/Downloads/*.zip'), '~/Archive/Software/Mac OS X/')
|
35
|
+
# move(dir('~/Downloads/*.zip'), '~/Archive/Software/Mac OS X/')
|
36
36
|
def move(sources, destination)
|
37
37
|
destination = expand(destination)
|
38
38
|
|
@@ -84,11 +84,11 @@ module Maid::Tools
|
|
84
84
|
#
|
85
85
|
# The path is still moved if a file already exists in the trash with the same name. However, the current date and
|
86
86
|
# time is appended to the filename.
|
87
|
-
#
|
87
|
+
#
|
88
88
|
# **Note:** the OS-native "restore" or "put back" functionality for trashed files is not currently supported. (See
|
89
89
|
# [issue #63](https://github.com/benjaminoakes/maid/issues/63).) However, they can be restored manually, and the Maid
|
90
90
|
# log can help assist with this.
|
91
|
-
#
|
91
|
+
#
|
92
92
|
# ## Options
|
93
93
|
#
|
94
94
|
# `:remove_over => Fixnum` (e.g. `1.gigabyte`, `1024.megabytes`)
|
@@ -102,7 +102,7 @@ module Maid::Tools
|
|
102
102
|
# Single path:
|
103
103
|
#
|
104
104
|
# trash('~/Downloads/foo.zip')
|
105
|
-
#
|
105
|
+
#
|
106
106
|
# Multiple paths:
|
107
107
|
#
|
108
108
|
# trash(['~/Downloads/foo.zip', '~/Downloads/bar.zip'])
|
@@ -146,7 +146,7 @@ module Maid::Tools
|
|
146
146
|
# Delete the files at the given path recursively.
|
147
147
|
#
|
148
148
|
# **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.
|
149
|
-
#
|
149
|
+
#
|
150
150
|
# ## Options
|
151
151
|
#
|
152
152
|
# `:force => boolean`
|
@@ -234,11 +234,11 @@ module Maid::Tools
|
|
234
234
|
dir(globs).
|
235
235
|
select { |f| File.file?(f) }
|
236
236
|
end
|
237
|
-
|
237
|
+
|
238
238
|
# Escape characters that have special meaning as a part of path global patterns.
|
239
239
|
#
|
240
240
|
# Useful when using `dir` with file names that may contain `{ } [ ]` characters.
|
241
|
-
#
|
241
|
+
#
|
242
242
|
# ## Example
|
243
243
|
#
|
244
244
|
# escape_glob('test [tmp]') # => 'test \\[tmp\\]'
|
@@ -328,7 +328,7 @@ module Maid::Tools
|
|
328
328
|
#
|
329
329
|
# See also: `dir_safe`
|
330
330
|
def downloading?(path)
|
331
|
-
chrome_downloading?(path) || firefox_downloading?(path)
|
331
|
+
!!(chrome_downloading?(path) || firefox_downloading?(path) || safari_downloading?(path))
|
332
332
|
end
|
333
333
|
|
334
334
|
# Find all duplicate files in the given globs.
|
@@ -430,7 +430,7 @@ module Maid::Tools
|
|
430
430
|
raw = cmd("du -s #{ sh_escape(path) }")
|
431
431
|
# FIXME: This reports in kilobytes, but should probably report in bytes.
|
432
432
|
usage_kb = raw.split(/\s+/).first.to_i
|
433
|
-
|
433
|
+
|
434
434
|
if usage_kb.zero?
|
435
435
|
raise "Stopping pessimistically because of unexpected value from du (#{ raw.inspect })"
|
436
436
|
else
|
@@ -493,9 +493,9 @@ module Maid::Tools
|
|
493
493
|
#
|
494
494
|
# ## Examples
|
495
495
|
#
|
496
|
-
# checksum_of('foo.zip') # => "
|
496
|
+
# checksum_of('foo.zip') # => "67258d750ca654d5d3c7b06bd2a1c792ced2003e"
|
497
497
|
def checksum_of(path)
|
498
|
-
Digest::
|
498
|
+
Digest::SHA1.hexdigest(File.read(path))
|
499
499
|
end
|
500
500
|
|
501
501
|
# @deprecated
|
@@ -521,7 +521,7 @@ module Maid::Tools
|
|
521
521
|
# The host OS must provide `rsync`. See the `rsync` man page for a detailed description.
|
522
522
|
#
|
523
523
|
# man rsync
|
524
|
-
#
|
524
|
+
#
|
525
525
|
# ## Options
|
526
526
|
#
|
527
527
|
# `:delete => boolean`
|
@@ -610,7 +610,7 @@ module Maid::Tools
|
|
610
610
|
# media_type('bar.jpg') # => "image"
|
611
611
|
def media_type(path)
|
612
612
|
type = MIME::Types.type_for(path)[0]
|
613
|
-
|
613
|
+
|
614
614
|
if type
|
615
615
|
type.media_type
|
616
616
|
end
|
@@ -634,7 +634,7 @@ module Maid::Tools
|
|
634
634
|
# where_content_type(dir('~/Downloads/*'), 'image/jpeg')
|
635
635
|
#
|
636
636
|
# ### Using Spotlight content types
|
637
|
-
#
|
637
|
+
#
|
638
638
|
# Less portable, but richer data in some cases.
|
639
639
|
#
|
640
640
|
# where_content_type(dir('~/Downloads/*'), 'public.image')
|
@@ -654,6 +654,10 @@ module Maid::Tools
|
|
654
654
|
path =~ /\.crdownload$/
|
655
655
|
end
|
656
656
|
|
657
|
+
def safari_downloading?(path)
|
658
|
+
path =~ /\.download$/
|
659
|
+
end
|
660
|
+
|
657
661
|
def sh_escape(array)
|
658
662
|
Escape.shell_command(Array(array))
|
659
663
|
end
|
@@ -681,4 +685,19 @@ module Maid::Tools
|
|
681
685
|
clean = raw[1, raw.length - 2]
|
682
686
|
clean.split(/,\s+/).map { |s| t = s.strip; t[1, t.length - 2] }
|
683
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
|
684
703
|
end
|
data/lib/maid/version.rb
CHANGED
data/lib/maid.rb
CHANGED
data/maid.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
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`
|
22
|
-
s.add_dependency('thor', '>= 0.14.0', '< 0.
|
22
|
+
s.add_dependency('thor', '>= 0.14.0', '< 1.0.0')
|
23
23
|
s.add_dependency('deprecated', '~> 3.0.0')
|
24
24
|
s.add_dependency('mime-types', '~> 2.0')
|
25
25
|
s.add_dependency('rubyzip', '~> 1.1.0')
|
@@ -32,11 +32,11 @@ Gem::Specification.new do |s|
|
|
32
32
|
# Strategy: specific versions (since they're just for development)
|
33
33
|
s.add_development_dependency('fakefs', '~> 0.4.2')
|
34
34
|
s.add_development_dependency('guard', '~> 2.2.2')
|
35
|
-
s.add_development_dependency('guard-rspec', '~> 4.
|
35
|
+
s.add_development_dependency('guard-rspec', '~> 4.2.1')
|
36
36
|
s.add_development_dependency('rake', '~> 10.1.0')
|
37
37
|
s.add_development_dependency('redcarpet', '~> 3.0.0') # Soft dependency of `yard`
|
38
|
-
s.add_development_dependency('rspec', '
|
39
|
-
s.add_development_dependency('timecop', '~> 0.
|
38
|
+
s.add_development_dependency('rspec', '>= 2.14', '< 3.0')
|
39
|
+
s.add_development_dependency('timecop', '~> 0.7.0')
|
40
40
|
s.add_development_dependency('yard', '~> 0.8.4')
|
41
41
|
|
42
42
|
# In Vagrant, polling won't cross over the OS boundary if you develop in the host OS but run your tests in the
|
data/script/vagrant-provision
CHANGED
@@ -22,11 +22,14 @@ 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
|
25
28
|
sudo apt-get update
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
install-pkg-if-ruby '1.9.3' 'ruby1.9.1'
|
30
|
+
## Dependencies
|
31
|
+
install-pkg-if-ruby '2.1.0' 'ruby2.1'
|
32
|
+
install-pkg-if-ruby '1.9.3' 'ruby1.9.1' # Installs `ruby 1.9.3p0`
|
30
33
|
install-pkg-if-ruby 'jruby' 'jruby'
|
31
34
|
|
32
35
|
# ## Development dependencies
|
@@ -38,6 +41,14 @@ install-pkg 'make'
|
|
38
41
|
install-pkg 'libffi-dev'
|
39
42
|
install-pkg-if-ruby '1.9.3' 'ruby1.9.1-dev'
|
40
43
|
|
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
|
+
|
41
52
|
sudo gem install bundler
|
42
53
|
cd /vagrant
|
43
54
|
bundle install
|
data/spec/dependency_spec.rb
CHANGED
@@ -23,31 +23,31 @@ describe 'Dependency expectations' do
|
|
23
23
|
logger = Logger.new(io)
|
24
24
|
logger.info('my message')
|
25
25
|
logger.formatter = lambda { |_, _, _, msg| msg }
|
26
|
-
io.string.
|
26
|
+
expect(io.string).to match(/my message/)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
describe MIME::Types do
|
31
31
|
it 'reports media types and sub types when given a path' do
|
32
32
|
types = MIME::Types.type_for('anything.jpg')
|
33
|
-
types.length.
|
33
|
+
expect(types.length).to eq(1)
|
34
34
|
type = types[0]
|
35
|
-
type.media_type.
|
36
|
-
type.sub_type.
|
35
|
+
expect(type.media_type).to eq('image')
|
36
|
+
expect(type.sub_type).to eq('jpeg')
|
37
37
|
end
|
38
38
|
|
39
39
|
context 'when the type is unknown' do
|
40
40
|
it 'returns []' do
|
41
41
|
types = MIME::Types.type_for('unknown.foo')
|
42
|
-
types.length.
|
43
|
-
types[0].
|
42
|
+
expect(types.length).to eq(0)
|
43
|
+
expect(types[0]).to be_nil
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
describe RbConfig do
|
49
49
|
it 'identifies the host operating system' do
|
50
|
-
RbConfig::CONFIG['host_os'].
|
50
|
+
expect(RbConfig::CONFIG['host_os']).to match(/[a-z]+/)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -59,21 +59,21 @@ describe 'Dependency expectations' do
|
|
59
59
|
# More info:
|
60
60
|
#
|
61
61
|
# * [XDG Base Directory Specification](http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html)
|
62
|
-
XDG['DATA_HOME'].to_s.
|
62
|
+
expect(XDG['DATA_HOME'].to_s).to match(%r{^/.*?/\.local/share$})
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
66
|
describe Zip::File do
|
67
67
|
it 'makes entries available with #entries' do
|
68
68
|
Zip::File.open("#@file_fixtures_path/foo.zip") do |zip_file|
|
69
|
-
zip_file.entries.map { |entry| entry.name }.
|
69
|
+
expect(zip_file.entries.map { |entry| entry.name }).to match_array(%w(README.txt foo.exe subdir/anything.txt))
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'supports UTF-8 filenames' do
|
74
74
|
# Filename is a Japanese character
|
75
75
|
Zip::File.open("#@file_fixtures_path/\343\201\225.zip") do |zip_file|
|
76
|
-
zip_file.entries.map { |entry| entry.name }.
|
76
|
+
expect(zip_file.entries.map { |entry| entry.name }).to eq(%w(anything.txt))
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
data/spec/lib/maid/app_spec.rb
CHANGED
@@ -7,7 +7,7 @@ module Maid
|
|
7
7
|
out = StringIO.new
|
8
8
|
$stdout = out
|
9
9
|
yield
|
10
|
-
|
10
|
+
out.string
|
11
11
|
ensure
|
12
12
|
$stdout = STDOUT
|
13
13
|
end
|
@@ -16,7 +16,7 @@ module Maid
|
|
16
16
|
out = StringIO.new
|
17
17
|
$stderr = out
|
18
18
|
yield
|
19
|
-
|
19
|
+
out.string
|
20
20
|
ensure
|
21
21
|
$stderr = STDERR
|
22
22
|
end
|
@@ -36,41 +36,41 @@ module Maid
|
|
36
36
|
Maid.stub(:new) { @maid }
|
37
37
|
end
|
38
38
|
|
39
|
-
it '
|
39
|
+
it 'makes a new Maid with the options' do
|
40
40
|
opts = { :foo => 'bar' }
|
41
41
|
@app.stub(:maid_options).and_return(opts)
|
42
|
-
Maid.
|
42
|
+
expect(Maid).to receive(:new).with(opts).and_return(@maid)
|
43
43
|
@app.clean
|
44
44
|
end
|
45
45
|
|
46
|
-
it '
|
47
|
-
@maid.
|
46
|
+
it 'cleans when --force is specified' do
|
47
|
+
expect(@maid).to receive(:clean)
|
48
48
|
App.start(['clean', '--force'])
|
49
49
|
end
|
50
50
|
|
51
|
-
it '
|
52
|
-
@maid.
|
53
|
-
capture_stderr { App.start(['clean']) }.
|
54
|
-
capture_stderr { App.start(['clean', '--silent']) }.
|
51
|
+
it 'issues deprecation notice when called without option, but still clean' do
|
52
|
+
expect(@maid).to receive(:clean).twice
|
53
|
+
expect(capture_stderr { App.start(['clean']) }).to match(/deprecated/)
|
54
|
+
expect(capture_stderr { App.start(['clean', '--silent']) }).to match(/deprecated/)
|
55
55
|
end
|
56
56
|
|
57
|
-
it '
|
58
|
-
capture_stdout { App.start(['clean', '--force']) }.
|
57
|
+
it 'is not silent if not given the --silent option' do
|
58
|
+
expect(capture_stdout { App.start(['clean', '--force']) }).not_to eq('')
|
59
59
|
end
|
60
60
|
|
61
|
-
it '
|
61
|
+
it 'is silent if given the --silent option' do
|
62
62
|
# TODO: It might even make sense to wrap `maid.clean` in `capture_stdout { ... }`
|
63
|
-
capture_stdout { App.start(['clean', '--noop', '--silent']) }.
|
64
|
-
capture_stdout { App.start(['clean', '--force', '--silent']) }.
|
63
|
+
expect(capture_stdout { App.start(['clean', '--noop', '--silent']) }).to eq('')
|
64
|
+
expect(capture_stdout { App.start(['clean', '--force', '--silent']) }).to eq('')
|
65
65
|
end
|
66
66
|
|
67
|
-
it '
|
68
|
-
capture_stderr { App.start(['clean', '--slient']) }.
|
69
|
-
capture_stderr { App.start(['clean', '--noop', '--slient']) }.
|
67
|
+
it 'complains about a MISSPELLED option' do
|
68
|
+
expect(capture_stderr { App.start(['clean', '--slient']) }).to match(/Unknown/)
|
69
|
+
expect(capture_stderr { App.start(['clean', '--noop', '--slient']) }).to match(/Unknown/)
|
70
70
|
end
|
71
71
|
|
72
|
-
it '
|
73
|
-
capture_stderr { App.start(['rules.rb']) }.
|
72
|
+
it 'complains about an undefined task' do
|
73
|
+
expect(capture_stderr { App.start(['rules.rb']) }).to match(/Could not find/)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -79,13 +79,13 @@ module Maid
|
|
79
79
|
@app = App.new
|
80
80
|
end
|
81
81
|
|
82
|
-
it '
|
83
|
-
@app.
|
82
|
+
it 'prints out the gem version' do
|
83
|
+
expect(@app).to receive(:say).with(VERSION)
|
84
84
|
@app.version
|
85
85
|
end
|
86
86
|
|
87
87
|
it 'is mapped as --version' do
|
88
|
-
App.start(['--version']).
|
88
|
+
expect(App.start(['--version'])).to eq(@app.version)
|
89
89
|
end
|
90
90
|
|
91
91
|
context 'with the "long" option' do
|
@@ -97,10 +97,10 @@ module Maid
|
|
97
97
|
@app.options = options
|
98
98
|
end
|
99
99
|
|
100
|
-
it '
|
100
|
+
it 'prints out the gem version' do
|
101
101
|
ua = 'Maid/0.0.1'
|
102
102
|
UserAgent.stub(:value) { ua }
|
103
|
-
@app.
|
103
|
+
expect(@app).to receive(:say).with(ua)
|
104
104
|
@app.version
|
105
105
|
end
|
106
106
|
end
|
@@ -111,17 +111,17 @@ module Maid
|
|
111
111
|
@app = App.new
|
112
112
|
end
|
113
113
|
|
114
|
-
it '
|
114
|
+
it 'logs to STDOUT for testing purposes when given noop' do
|
115
115
|
opts = @app.maid_options('noop' => true)
|
116
|
-
opts[:file_options][:noop].
|
117
|
-
opts[:logger].
|
118
|
-
opts[:log_device].
|
119
|
-
opts[:log_formatter].call(nil, nil, nil, 'hello').
|
116
|
+
expect(opts[:file_options][:noop]).to be(true)
|
117
|
+
expect(opts[:logger]).to be(false)
|
118
|
+
expect(opts[:log_device]).to eq(STDOUT)
|
119
|
+
expect(opts[:log_formatter].call(nil, nil, nil, 'hello')).to eq("hello\n")
|
120
120
|
end
|
121
121
|
|
122
|
-
it '
|
122
|
+
it 'sets the rules path when given rules' do
|
123
123
|
opts = @app.maid_options('rules' => 'maid_rules.rb')
|
124
|
-
opts[:rules_path].
|
124
|
+
expect(opts[:rules_path]).to match(/maid_rules.rb$/)
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|