automateit 0.70923 → 0.70928
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/CHANGES.txt +9 -0
- data/Rakefile +22 -4
- data/TODO.txt +0 -2
- data/TUTORIAL.txt +1 -0
- data/bin/aifield +7 -3
- data/bin/aitag +11 -5
- data/bin/automateit +15 -5
- data/examples/basic/recipes/install.rb +35 -27
- data/lib/automateit.rb +1 -0
- data/lib/automateit/cli.rb +7 -2
- data/lib/automateit/constants.rb +0 -3
- data/lib/automateit/download_manager.rb +46 -0
- data/lib/automateit/edit_manager.rb +32 -9
- data/lib/automateit/interpreter.rb +7 -3
- data/lib/automateit/plugin/manager.rb +2 -6
- data/lib/automateit/root.rb +3 -0
- data/lib/automateit/shell_manager.rb +45 -2
- data/lib/automateit/shell_manager/base_link.rb +1 -1
- data/lib/automateit/shell_manager/portable.rb +41 -13
- data/lib/automateit/tag_manager.rb +67 -3
- data/lib/tempster.rb +27 -16
- data/spec/integration/download_spec.rb +44 -0
- data/spec/integration/edit_manager_spec.rb +52 -0
- data/spec/integration/shell_manager_spec.rb +145 -18
- data/spec/integration/template_manager_erb_spec.rb +18 -1
- data/spec/integration/tempster_spec.rb +65 -0
- data/spec/unit/edit_manager_spec.rb +49 -5
- data/spec/unit/plugins_spec.rb +40 -4
- metadata +9 -2
- metadata.gz.sig +0 -0
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
|
2
|
+
|
3
|
+
describe "AutomateIt::EditManager for files" do
|
4
|
+
before :all do
|
5
|
+
@a = AutomateIt.new(:verbosity => Logger::WARN)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should make a backup if editing a file" do
|
9
|
+
@a.mktempdircd do
|
10
|
+
target = "myfile"
|
11
|
+
@a.render(:text => "Whatever", :to => target)
|
12
|
+
entries = Dir.entries(".").select{|t| t =~ /^#{target}/}
|
13
|
+
entries.size.should == 1
|
14
|
+
|
15
|
+
@a.edit(:file => target) do
|
16
|
+
append "Hello"
|
17
|
+
end.should be_true
|
18
|
+
|
19
|
+
entries = Dir.entries(".").select{|t| t =~ /^#{target}/}
|
20
|
+
entries.size.should == 2
|
21
|
+
File.size(entries[0]).should_not == File.size(entries[1])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should not make a backup if not editing a file" do
|
26
|
+
@a.mktempdircd do
|
27
|
+
target = "myfile"
|
28
|
+
@a.render(:text => "Whatever", :to => target)
|
29
|
+
entries = Dir.entries(".").select{|t| t =~ /^#{target}/}
|
30
|
+
entries.size.should == 1
|
31
|
+
|
32
|
+
@a.edit(:file => target) do
|
33
|
+
end.should be_false
|
34
|
+
|
35
|
+
entries = Dir.entries(".").select{|t| t =~ /^#{target}/}
|
36
|
+
entries.size.should == 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should not make a backup for a newly created file" do
|
41
|
+
@a.mktempdircd do
|
42
|
+
target = "myfile"
|
43
|
+
|
44
|
+
@a.edit(:file => target, :create => true) do
|
45
|
+
append "Hello"
|
46
|
+
end.should be_true
|
47
|
+
|
48
|
+
entries = Dir.entries(".").select{|t| t =~ /^#{target}/}
|
49
|
+
entries.size.should == 1
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -5,6 +5,10 @@ describe AutomateIt::ShellManager, :shared => true do
|
|
5
5
|
@a = AutomateIt.new(:verbosity => Logger::WARN)
|
6
6
|
@m = @a.shell_manager
|
7
7
|
end
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
@a.preview = false
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
describe AutomateIt::ShellManager, " with sh and which" do
|
@@ -42,6 +46,60 @@ end
|
|
42
46
|
describe AutomateIt::ShellManager, " in general" do
|
43
47
|
it_should_behave_like "AutomateIt::ShellManager"
|
44
48
|
|
49
|
+
it "should backup a file (backup)" do
|
50
|
+
@m.mktempdircd do
|
51
|
+
source = "myfile"
|
52
|
+
@m.touch(source)
|
53
|
+
|
54
|
+
target = @m.backup(source)
|
55
|
+
|
56
|
+
target.should_not be_nil
|
57
|
+
target.should_not == source
|
58
|
+
File.exists?(target).should be_true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should backup a directory with files (backup)" do
|
63
|
+
@m.mktempdircd do
|
64
|
+
dir = "mydir"
|
65
|
+
file = File.join(dir, "myfile")
|
66
|
+
@m.mkdir(dir)
|
67
|
+
@m.touch(file)
|
68
|
+
|
69
|
+
target_dir = @m.backup(dir)
|
70
|
+
|
71
|
+
target_dir.should_not be_nil
|
72
|
+
target_dir.should_not == dir
|
73
|
+
File.exists?(target_dir).should be_true
|
74
|
+
File.directory?(target_dir).should be_true
|
75
|
+
|
76
|
+
target_file = File.join(target_dir, File.basename(file))
|
77
|
+
File.exists?(target_file).should be_true
|
78
|
+
File.directory?(target_file).should be_false
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should backup multiple files and directories (backup)" do
|
83
|
+
@m.mktempdircd do
|
84
|
+
@m.mkdir_p("foo/bar/baz")
|
85
|
+
@m.touch("foo/bar/baz/feh")
|
86
|
+
@m.mkdir_p("foo/bar/qux")
|
87
|
+
@m.touch("foo/bar/qux/meh")
|
88
|
+
@m.mkdir_p("qux/foo/bar")
|
89
|
+
@m.touch("qux/foo/bar/bah")
|
90
|
+
|
91
|
+
results = @m.backup("foo", "qux")
|
92
|
+
results.should_not be_blank
|
93
|
+
|
94
|
+
results[0].should =~ %r{#{File::SEPARATOR}foo\..+\.bak$}
|
95
|
+
File.exists?(results[0]+"/bar/baz/feh")
|
96
|
+
File.exists?(results[0]+"/bar/baz/meh")
|
97
|
+
|
98
|
+
results[1].should =~ %r{#{File::SEPARATOR}qux\..+\.bak$}
|
99
|
+
File.exists?(results[1]+"/foo/bar/bah")
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
45
103
|
it "should change directories (cd)" do
|
46
104
|
before = Dir.pwd
|
47
105
|
target = Pathname.new("/").expand_path.to_s
|
@@ -60,6 +118,38 @@ describe AutomateIt::ShellManager, " in general" do
|
|
60
118
|
Dir.pwd.should == before
|
61
119
|
end
|
62
120
|
|
121
|
+
it "should change back to a directory when there's an error (cd)" do
|
122
|
+
before = Dir.pwd
|
123
|
+
target = Pathname.new("/").expand_path.to_s
|
124
|
+
lambda {
|
125
|
+
@m.cd(target) do
|
126
|
+
raise "42"
|
127
|
+
end
|
128
|
+
}.should raise_error("42")
|
129
|
+
Dir.pwd.should == before
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should fail to change to a non-existend directory (cd)" do
|
133
|
+
lambda{ @m.cd("qweljkrusfauweqr") }.should raise_error(Errno::ENOENT)
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should not fail to change to a non-existent directory in preview mode (cd)" do
|
137
|
+
@m.preview = true
|
138
|
+
@m.cd("qweljkrusfauweqr").should_not be_nil
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should return if there's an error when pretending to cd into a non-existent directory in preview mode (cd)" do
|
142
|
+
@m.preview = true
|
143
|
+
before = Dir.pwd
|
144
|
+
lambda {
|
145
|
+
@m.cd("qweljkrusfauweqr") do
|
146
|
+
Dir.pwd.should == before
|
147
|
+
raise "42"
|
148
|
+
end
|
149
|
+
}.should raise_error("42")
|
150
|
+
Dir.pwd.should == before
|
151
|
+
end
|
152
|
+
|
63
153
|
it "should locate the current directory (pwd)" do
|
64
154
|
@m.pwd.should == Dir.pwd
|
65
155
|
end
|
@@ -76,6 +166,26 @@ describe AutomateIt::ShellManager, " in general" do
|
|
76
166
|
end
|
77
167
|
end
|
78
168
|
|
169
|
+
it "should create a directory and cd into it (mkdir)" do
|
170
|
+
@m.mktempdircd do
|
171
|
+
target = "foo"
|
172
|
+
@m.mkdir(target) do |path|
|
173
|
+
path.should == target
|
174
|
+
File.basename(Dir.pwd).should == target
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
it "should fail to cd into multiple created directories (mkdir)" do
|
180
|
+
@m.mktempdircd do
|
181
|
+
lambda {
|
182
|
+
@m.mkdir(%w(foo bar baz)) do |path|
|
183
|
+
violated
|
184
|
+
end
|
185
|
+
}.should raise_error(ArgumentError)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
79
189
|
it "should create nested directories when needed (mkdir_p)" do
|
80
190
|
@m.mktempdircd do
|
81
191
|
target = "foo/bar/baz"
|
@@ -98,6 +208,20 @@ describe AutomateIt::ShellManager, " in general" do
|
|
98
208
|
end
|
99
209
|
end
|
100
210
|
|
211
|
+
it "should create a temporary file (mktemp)" do
|
212
|
+
@m.mktempdir do
|
213
|
+
item = nil
|
214
|
+
@m.mktemp do |path|
|
215
|
+
item = path
|
216
|
+
File.exists?(item).should be_true
|
217
|
+
end
|
218
|
+
File.exists?(item).should be_false
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
#it "should create a temporary directory (mktempdir)"
|
223
|
+
#it "should create a temporary directory and cd into it (mktempdircd)"
|
224
|
+
|
101
225
|
it "should install a file to a file (install)" do
|
102
226
|
@m.mktempdircd do
|
103
227
|
source = "foo"
|
@@ -188,10 +312,6 @@ describe AutomateIt::ShellManager, " in general" do
|
|
188
312
|
end
|
189
313
|
end
|
190
314
|
|
191
|
-
# TODO implement umask spec
|
192
|
-
|
193
|
-
# TODO implement gap
|
194
|
-
|
195
315
|
it "should move files (mv)" do
|
196
316
|
@m.mktempdircd do
|
197
317
|
file1 = "foo"
|
@@ -252,6 +372,25 @@ describe AutomateIt::ShellManager, " in general" do
|
|
252
372
|
end
|
253
373
|
end
|
254
374
|
|
375
|
+
it "should create files and change their timestamps (touch)" do
|
376
|
+
@m.mktempdircd do
|
377
|
+
target = "foo"
|
378
|
+
File.exists?(target).should be_false
|
379
|
+
|
380
|
+
@m.touch(target)
|
381
|
+
File.exists?(target).should be_true
|
382
|
+
before = File.mtime(target)
|
383
|
+
|
384
|
+
@m.touch(target)
|
385
|
+
after = File.mtime(target)
|
386
|
+
before.should <= after
|
387
|
+
end
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
describe AutomateIt::ShellManager, " when managing modes" do
|
392
|
+
it_should_behave_like "AutomateIt::ShellManager"
|
393
|
+
|
255
394
|
unless INTERPRETER.shell_manager.provides_mode?
|
256
395
|
puts "NOTE: Can't check permission modes on this platform, #{__FILE__}"
|
257
396
|
else
|
@@ -288,22 +427,10 @@ describe AutomateIt::ShellManager, " in general" do
|
|
288
427
|
@m.chmod_R(mode, dir).should be_false
|
289
428
|
end
|
290
429
|
end
|
291
|
-
end
|
292
430
|
|
293
|
-
|
294
|
-
@m.mktempdircd do
|
295
|
-
target = "foo"
|
296
|
-
File.exists?(target).should be_false
|
297
|
-
|
298
|
-
@m.touch(target)
|
299
|
-
File.exists?(target).should be_true
|
300
|
-
before = File.mtime(target)
|
301
|
-
|
302
|
-
@m.touch(target)
|
303
|
-
after = File.mtime(target)
|
304
|
-
before.should <= after
|
305
|
-
end
|
431
|
+
#it "should set the default mask (umask)" # TODO
|
306
432
|
end
|
433
|
+
|
307
434
|
end
|
308
435
|
|
309
436
|
describe AutomateIt::ShellManager, " when managing permissions" do
|
@@ -9,7 +9,11 @@ describe "AutomateIt::TemplateManager::ERB" do
|
|
9
9
|
@d.available?.should be_true
|
10
10
|
end
|
11
11
|
|
12
|
-
|
12
|
+
before(:each) do
|
13
|
+
@a.preview = false
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should set file's mode when rendering" do
|
13
17
|
@a.mktempdircd do
|
14
18
|
source = "foo"
|
15
19
|
target = "bar"
|
@@ -28,4 +32,17 @@ describe "AutomateIt::TemplateManager::ERB" do
|
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
35
|
+
|
36
|
+
it "should fail to render non-existent file" do
|
37
|
+
@a.mktempdircd do
|
38
|
+
lambda { @a.render(:file => "foo", :to => "bar") }.should raise_error(Errno::ENOENT)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not raise error with non-existent file in preview mode" do
|
43
|
+
@a.mktempdircd do
|
44
|
+
@a.preview = true
|
45
|
+
@a.render(:file => "foo", :to => "bar").should be_true
|
46
|
+
end
|
47
|
+
end
|
31
48
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
|
2
|
+
|
3
|
+
describe Tempster do
|
4
|
+
it "should create a temporary file" do
|
5
|
+
result = nil
|
6
|
+
begin
|
7
|
+
result = Tempster.mktemp(:verbose => false)
|
8
|
+
File.exists?(result).should be_true
|
9
|
+
ensure
|
10
|
+
File.unlink(result) if result
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should create a temporary file and remove it with a block" do
|
15
|
+
result = nil
|
16
|
+
begin
|
17
|
+
Tempster.mktemp(:verbose => false) do |path|
|
18
|
+
result = path
|
19
|
+
File.exists?(result).should be_true
|
20
|
+
end
|
21
|
+
File.exists?(result).should be_false
|
22
|
+
ensure
|
23
|
+
File.unlink(result) if result and File.exists?(result)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should create a temporary directory" do
|
28
|
+
result = nil
|
29
|
+
begin
|
30
|
+
result = Tempster.mktempdir(:verbose => false)
|
31
|
+
File.directory?(result).should be_true
|
32
|
+
ensure
|
33
|
+
Dir.rmdir(result) if result
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should create a temporary directory and remove it with a block" do
|
38
|
+
result = nil
|
39
|
+
begin
|
40
|
+
Tempster.mktempdir(:verbose => false) do |path|
|
41
|
+
result = path
|
42
|
+
File.directory?(result).should be_true
|
43
|
+
end
|
44
|
+
File.directory?(result).should be_false
|
45
|
+
ensure
|
46
|
+
Dir.rmdir(result) if result and File.directory?(result)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should create a temporary directory, cd into it and remove it with a block" do
|
51
|
+
result = nil
|
52
|
+
previous = Dir.pwd
|
53
|
+
begin
|
54
|
+
Tempster.mktempdircd(:verbose => false) do |path|
|
55
|
+
result = path
|
56
|
+
File.directory?(result).should be_true
|
57
|
+
Dir.pwd.should_not == previous
|
58
|
+
end
|
59
|
+
File.directory?(result).should be_false
|
60
|
+
Dir.pwd.should == previous
|
61
|
+
ensure
|
62
|
+
Dir.rmdir(result) if result and File.directory?(result)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -21,12 +21,18 @@ describe "AutomateIt::EditManager for strings" do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
it "should find
|
24
|
+
it "should find if buffer contains lines by regexp" do
|
25
25
|
@a.edit(:text => @input) do
|
26
26
|
contains?(/This/).should == true
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
it "should find if buffer contains lines by string" do
|
31
|
+
@a.edit(:text => @input) do
|
32
|
+
contains?("This").should == true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
30
36
|
it "should prepend lines to the top" do
|
31
37
|
output = @a.edit(:text => @input) do
|
32
38
|
prepend "PREPEND"
|
@@ -117,7 +123,7 @@ describe "AutomateIt::EditManager for strings" do
|
|
117
123
|
end
|
118
124
|
|
119
125
|
it "should raise exceptions for invalid methods" do
|
120
|
-
lambda {
|
126
|
+
lambda {
|
121
127
|
@a.edit(:text => @input) do
|
122
128
|
qwoiuerjzxiuo
|
123
129
|
end
|
@@ -138,7 +144,7 @@ describe "AutomateIt::EditManager for files" do
|
|
138
144
|
it "should edit a file" do
|
139
145
|
File.should_receive(:read).with(@filename).and_return(@input)
|
140
146
|
File.should_receive(:open).with(@filename, "w+").and_return(true)
|
141
|
-
result = @a.edit(:file => @filename) do
|
147
|
+
result = @a.edit(:file => @filename, :backup => false) do
|
142
148
|
append "APPEND"
|
143
149
|
end
|
144
150
|
result.should be_true
|
@@ -146,7 +152,7 @@ describe "AutomateIt::EditManager for files" do
|
|
146
152
|
|
147
153
|
it "should not rewrite an unchanged file" do
|
148
154
|
File.should_receive(:read).with(@filename).and_return(@input)
|
149
|
-
result = @a.edit(:file => @filename) do
|
155
|
+
result = @a.edit(:file => @filename, :backup => false) do
|
150
156
|
# Do nothing
|
151
157
|
end
|
152
158
|
result.should be_false
|
@@ -154,9 +160,47 @@ describe "AutomateIt::EditManager for files" do
|
|
154
160
|
|
155
161
|
it "should default to editing a file" do
|
156
162
|
File.should_receive(:read).with(@filename).and_return(@input)
|
157
|
-
result = @a.edit(@filename) do
|
163
|
+
result = @a.edit(@filename, :backup => false) do
|
164
|
+
# Do nothing
|
165
|
+
end
|
166
|
+
result.should be_false
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should fail to editing non-existent file" do
|
170
|
+
lambda {
|
171
|
+
@a.edit(@filename) do
|
172
|
+
# Do nothing
|
173
|
+
end
|
174
|
+
}.should raise_error(Errno::ENOENT)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe "AutomateIt::EditManager for files in preview mode" do
|
179
|
+
before(:all) do
|
180
|
+
@a = AutomateIt.new(:verbosity => Logger::WARN)
|
181
|
+
@a.preview = true
|
182
|
+
@filename = "input"
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should not fail to editing a non-existent file" do
|
186
|
+
@a.edit(@filename) do
|
187
|
+
# Do nothing
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
it "should not fail when reading a non-existent file" do
|
192
|
+
result = @a.edit(@filename, :backup => false) do
|
158
193
|
# Do nothing
|
159
194
|
end
|
160
195
|
result.should be_false
|
161
196
|
end
|
197
|
+
|
198
|
+
it "should not write changes" do
|
199
|
+
File.should_receive(:exists?).any_number_of_times.with(@filename).and_return(true)
|
200
|
+
File.should_receive(:read).with(@filename).and_return(@input)
|
201
|
+
result = @a.edit(:file => @filename, :backup => false) do
|
202
|
+
append "APPEND"
|
203
|
+
end
|
204
|
+
result.should be_true
|
205
|
+
end
|
162
206
|
end
|