file_mutate 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/LICENSE.txt +20 -0
- data/README.textile +49 -0
- data/Rakefile +28 -0
- data/VERSION +1 -0
- data/file_mutate.gemspec +97 -0
- data/lib/file_mutate.rb +2 -0
- data/lib/file_mutate/append_content.rb +16 -0
- data/lib/file_mutate/delete.rb +28 -0
- data/lib/file_mutate/insert_content.rb +61 -0
- data/lib/file_mutate/mutate.rb +56 -0
- data/lib/file_mutate/overwrite_content.rb +16 -0
- data/lib/file_mutate/remove_content.rb +32 -0
- data/lib/file_mutate/replace_content.rb +44 -0
- data/lib/file_mutation.rb +46 -0
- data/spec/file_mutate/append_content_spec.rb +59 -0
- data/spec/file_mutate/delete_spec.rb +46 -0
- data/spec/file_mutate/insert_before_last_spec.rb +54 -0
- data/spec/file_mutate/insert_content_spec.rb +110 -0
- data/spec/file_mutate/overwrite_content_spec.rb +78 -0
- data/spec/file_mutate/remove_content_spec.rb +108 -0
- data/spec/file_mutate/replace_content_spec.rb +32 -0
- data/spec/fixtures/application_file.rb +6 -0
- data/spec/fixtures/class_file.rb +40 -0
- data/spec/fixtures/class_file.txt +0 -0
- data/spec/fixtures/content_file.txt +1 -0
- data/spec/fixtures/empty.txt +0 -0
- data/spec/fixtures/file.txt +1 -0
- data/spec/fixtures/non-empty.txt +3 -0
- data/spec/fixtures/routes_file.rb +97 -0
- data/spec/fixtures/search_file.txt +1 -0
- data/spec/spec_helper.rb +14 -0
- metadata +183 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
module FileMutate
|
2
|
+
module ReplaceContent
|
3
|
+
def replace_content options = {}, &block
|
4
|
+
File.replace_content_from self.path, options, &block
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
# replaces content found at replacement_expr with content resulting from yielding block
|
9
|
+
# File.replace_content_from 'myfile.txt', where => /HelloWorld/, with => 'GoodBye'
|
10
|
+
def replace_content_from file_name, options = {}, &block
|
11
|
+
replacement_expr = options[:where] || options[:content]
|
12
|
+
new_content = options[:with]
|
13
|
+
|
14
|
+
begin
|
15
|
+
replacement_expr = replacement_expr.to_regexp
|
16
|
+
rescue
|
17
|
+
raise ArgumentError, "Content to be replaced must be specified as either a String or Regexp in a :where or :content option"
|
18
|
+
end
|
19
|
+
|
20
|
+
file = get_file file_name
|
21
|
+
|
22
|
+
# get existing file content
|
23
|
+
content = file.read
|
24
|
+
|
25
|
+
# return nil if no mathing replacement found
|
26
|
+
return nil if !(content =~ replacement_expr)
|
27
|
+
|
28
|
+
new_content ||= yield if block
|
29
|
+
|
30
|
+
raise ArgumentError, "Content to be replaced with must be specified as a :with option or as a block" if !new_content
|
31
|
+
|
32
|
+
# remove content that matches expr, by replacing with empty
|
33
|
+
mutated_content = content.gsub replacement_expr, new_content
|
34
|
+
|
35
|
+
# write mutated content as new file
|
36
|
+
file.overwrite mutated_content
|
37
|
+
|
38
|
+
true # signal success!
|
39
|
+
end
|
40
|
+
alias_method :replace_content_in, :replace_content_from
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'sugar-high/blank'
|
2
|
+
require 'sugar-high/arguments'
|
3
|
+
require 'sugar-high/path'
|
4
|
+
require 'sugar-high/regexp'
|
5
|
+
require 'sugar-high/string'
|
6
|
+
require 'sugar-high/file'
|
7
|
+
require 'sugar-high/array'
|
8
|
+
require 'sweetloader'
|
9
|
+
|
10
|
+
require 'active_support/inflector'
|
11
|
+
|
12
|
+
class Module
|
13
|
+
def file_mutate name
|
14
|
+
if name == :all
|
15
|
+
FileMutate.add_all self
|
16
|
+
return
|
17
|
+
end
|
18
|
+
FileMutate.add_mutate_exts self, [:mutate, name]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module FileMutate
|
23
|
+
autoload_modules :Mutate, :Delete, :AppendContent, :InsertContent
|
24
|
+
autoload_modules :OverwriteContent, :RemoveContent, :ReplaceContent
|
25
|
+
|
26
|
+
def self.mutate_apis
|
27
|
+
[:delete, :mutate, :append_content, :insert_content, :overwrite_content, :remove_content, :replace_content]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.add_all clazz
|
31
|
+
add_mutate_exts clazz, mutate_apis
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.add_mutate_exts clazz, *names
|
35
|
+
names.flat_uniq!
|
36
|
+
unknowns = (names - mutate_apis)
|
37
|
+
raise ArgumentError, "Unknown FileMutate APIs: #{unknowns}, must be one of: #{mutate_apis}" if !unknowns.empty?
|
38
|
+
names.each do |api|
|
39
|
+
ns = "FileMutate::#{api.to_s.camelize}"
|
40
|
+
begin
|
41
|
+
clazz.send :include, ns.constantize
|
42
|
+
clazz.extend "#{ns}::ClassMethods".constantize
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
File.file_mutate :append_content
|
3
|
+
|
4
|
+
describe FileMutate do
|
5
|
+
let(:empty_file) { fixture_file 'empty.txt' }
|
6
|
+
let(:replace_file) { fixture_file 'file.txt' }
|
7
|
+
|
8
|
+
describe '#append with :content option' do
|
9
|
+
let(:append_file) { fixture_file 'file.txt' }
|
10
|
+
|
11
|
+
it 'should append content to existing file - class method' do
|
12
|
+
File.overwrite(append_file) do
|
13
|
+
'Hello You'
|
14
|
+
end
|
15
|
+
File.append append_file, :content => 'Appended'
|
16
|
+
content = File.read(append_file)
|
17
|
+
content.should match /Hello You/
|
18
|
+
content.should match /Appended/
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should append content to existing file - instance method' do
|
22
|
+
File.overwrite(append_file) do
|
23
|
+
'Hello You'
|
24
|
+
end
|
25
|
+
File.new(append_file).append :content => 'Appended'
|
26
|
+
content = File.read(append_file)
|
27
|
+
content.should match /Hello You/
|
28
|
+
content.should match /Appended/
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#append with block' do
|
33
|
+
let(:append_file) { fixture_file 'file.txt' }
|
34
|
+
|
35
|
+
it "should append content to existing file using block arg - class method" do
|
36
|
+
File.overwrite(append_file) do
|
37
|
+
'Hello You'
|
38
|
+
end
|
39
|
+
File.append append_file do
|
40
|
+
'Appended'
|
41
|
+
end
|
42
|
+
content = File.read(replace_file)
|
43
|
+
content.should match /Hello You/
|
44
|
+
content.should match /Appended/
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should append content to existing file using block arg - instance method" do
|
48
|
+
File.overwrite(append_file) do
|
49
|
+
'Hello You'
|
50
|
+
end
|
51
|
+
File.new(append_file).append do
|
52
|
+
'Appended'
|
53
|
+
end
|
54
|
+
content = File.read(replace_file)
|
55
|
+
content.should match /Hello You/
|
56
|
+
content.should match /Appended/
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
File.file_mutate :delete
|
3
|
+
|
4
|
+
describe FileMutate do
|
5
|
+
let(:file_to_delete) { fixture_file 'file_to_delete.txt' }
|
6
|
+
|
7
|
+
describe '#delete! (class)' do
|
8
|
+
it 'should delete file' do
|
9
|
+
File.overwrite(file_to_delete) do
|
10
|
+
'Delete this!'
|
11
|
+
end
|
12
|
+
File.delete! file_to_delete
|
13
|
+
File.exist?(file_to_delete).should be_false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#delete_file! (class)' do
|
18
|
+
it 'should delete file' do
|
19
|
+
File.overwrite(file_to_delete) do
|
20
|
+
'Delete this!'
|
21
|
+
end
|
22
|
+
File.delete_file! file_to_delete
|
23
|
+
File.exist?(file_to_delete).should be_false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#delete! (instance)' do
|
28
|
+
it 'should delete file' do
|
29
|
+
File.overwrite(file_to_delete) do
|
30
|
+
'Delete this!'
|
31
|
+
end
|
32
|
+
File.new(file_to_delete).delete!
|
33
|
+
File.exist?(file_to_delete).should be_false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#delete_file! (instance)' do
|
38
|
+
it 'should delete file' do
|
39
|
+
File.overwrite(file_to_delete) do
|
40
|
+
'Delete this!'
|
41
|
+
end
|
42
|
+
File.new(file_to_delete).delete_file!
|
43
|
+
File.exist?(file_to_delete).should be_false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
File.file_mutate :insert_content
|
3
|
+
|
4
|
+
describe FileMutate do
|
5
|
+
let(:empty_file) { fixture_file 'empty.txt' }
|
6
|
+
let(:class_file) { fixture_file 'class_file.rb'}
|
7
|
+
let(:routes_file) { fixture_file 'routes_file.rb' }
|
8
|
+
let(:app_file) { fixture_file 'application_file.rb' }
|
9
|
+
|
10
|
+
describe '#insert_into' do
|
11
|
+
let(:insertion_file) { fixture_file 'insertion.txt' }
|
12
|
+
before :each do
|
13
|
+
File.overwrite(insertion_file) do
|
14
|
+
'Goodbye'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
after :each do
|
19
|
+
File.delete insertion_file if File.file?(insertion_file)
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe '#insert before last' do
|
24
|
+
context ':content option and :before_last option' do
|
25
|
+
it "should insert Hello before last end statement" do
|
26
|
+
File.insert_into class_file, :content => ' # Hello', :before_last => 'end'
|
27
|
+
puts File.read(class_file)
|
28
|
+
File.read(class_file).should match /end\s+# Hello\s+end/
|
29
|
+
File.remove_content_from class_file, :content => ' # Hello'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context ':content option and :before_last option and repeat=true' do
|
34
|
+
it "should insert Hello before last end statement but don't repeat" do
|
35
|
+
File.insert_into class_file, :content => ' # Hello', :before_last => 'end', :no_repeat => true
|
36
|
+
puts File.read(class_file)
|
37
|
+
File.read(class_file).should match /end\s+# Hello\s+end/
|
38
|
+
File.remove_content_from class_file, :content => ' # Hello'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'block content and :before_last' do
|
43
|
+
it "should insert Hello before last end statement" do
|
44
|
+
File.insert_into class_file, :before_last => 'end' do
|
45
|
+
' # Hello'
|
46
|
+
end
|
47
|
+
puts File.read(class_file)
|
48
|
+
File.read(class_file).should match /end\s+# Hello\s+end/
|
49
|
+
File.remove_content_from class_file, :content => ' # Hello'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
File.file_mutate :insert_content
|
3
|
+
|
4
|
+
describe FileMutate do
|
5
|
+
let(:empty_file) { fixture_file 'empty.txt' }
|
6
|
+
let(:class_file) { fixture_file 'class_file.rb'}
|
7
|
+
let(:routes_file) { fixture_file 'routes_file.rb' }
|
8
|
+
let(:app_file) { fixture_file 'application_file.rb' }
|
9
|
+
|
10
|
+
describe '#insert_into' do
|
11
|
+
let(:insertion_file) { fixture_file 'insertion.txt' }
|
12
|
+
|
13
|
+
before :each do
|
14
|
+
File.overwrite(insertion_file) do
|
15
|
+
'Goodbye'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
after :each do
|
20
|
+
File.delete insertion_file if File.file?(insertion_file)
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'File object as target' do
|
24
|
+
it "should insert Hello before Goodbye" do
|
25
|
+
ins_file = File.new(insertion_file)
|
26
|
+
ins_file.read_content.should match /Goodbye/
|
27
|
+
|
28
|
+
ins_file.has_content?('Goodbye').should be_true
|
29
|
+
|
30
|
+
File.insert_into ins_file, :before => 'Goodbye' do
|
31
|
+
'Hello'
|
32
|
+
end
|
33
|
+
ins_file.read_content.should match /Hello\s+Goodbye/
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'content as block argument' do
|
37
|
+
it "should insert Hello before Goodbye" do
|
38
|
+
File.insert_into insertion_file, :before => 'Goodbye' do
|
39
|
+
'Hello'
|
40
|
+
end
|
41
|
+
File.read(insertion_file).should match /Hello\s+Goodbye/
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#insert instance method' do
|
47
|
+
context 'content as block argument' do
|
48
|
+
it "should insert Hello before Goodbye" do
|
49
|
+
File.new(insertion_file).insert :before => 'Goodbye' do
|
50
|
+
'Hello'
|
51
|
+
end
|
52
|
+
File.read(insertion_file).should match /Hello\s+Goodbye/
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'content as String argument' do
|
57
|
+
it "should insert Hello before Goodbye using a content string arg" do
|
58
|
+
File.insert_into insertion_file, "Hello ", :before => 'Goodbye'
|
59
|
+
File.read(insertion_file).should match /Hello\s+Goodbye/
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'using a :content option' do
|
64
|
+
it "should insert Hello before Goodbye" do
|
65
|
+
File.insert_into insertion_file, :content => 'Hello', :before => 'Goodbye'
|
66
|
+
File.read(insertion_file).should match /Hello\s+Goodbye/
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe 'insert after' do
|
71
|
+
context 'Regexp for the :after expression' do
|
72
|
+
it "should insert Hello after Goodbye using a :content option" do
|
73
|
+
File.insert_into insertion_file, :content => ' Hello', :after => /Goodbye/
|
74
|
+
File.read(insertion_file).should match /Goodbye\s+Hello/
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should work with an escaped Regexp matching" do
|
78
|
+
pattern = Regexp.escape('::Application.initialize!')
|
79
|
+
File.insert_into app_file, :after => /\w+#{pattern}/ do
|
80
|
+
'hello'
|
81
|
+
end
|
82
|
+
File.read(app_file).should match /hello/
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'routes file - String path' do
|
89
|
+
it "should insert devise routes statement as first route statement" do
|
90
|
+
File.insert_into routes_file, :after => 'routes.draw do' do
|
91
|
+
'devise :users'
|
92
|
+
end
|
93
|
+
# puts File.read(routes_file)
|
94
|
+
File.read(routes_file).should match /routes.draw\s+do\s+devise :users/
|
95
|
+
File.remove_content_from routes_file, :content => 'devise :users'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context 'routes file - File obj' do
|
100
|
+
it "should insert devise routes statement as first route statement" do
|
101
|
+
File.insert_into File.new(routes_file), :after => 'routes.draw do' do
|
102
|
+
'devise :users'
|
103
|
+
end
|
104
|
+
# puts File.read(routes_file)
|
105
|
+
File.read(routes_file).should match /routes.draw\s+do\s+devise :users/
|
106
|
+
File.remove_content_from routes_file, :content => 'devise :users'
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
File.file_mutate :overwrite_content
|
3
|
+
|
4
|
+
describe FileMutate do
|
5
|
+
let(:empty_file) { fixture_file 'empty.txt' }
|
6
|
+
let(:non_empty_file) { fixture_file 'non-empty.txt' }
|
7
|
+
let(:content_file) { fixture_file 'content_file.txt' }
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
File.overwrite(content_file) do
|
11
|
+
'Goodbye'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'File #overwrite class method' do
|
16
|
+
describe '#overwrite with block arg' do
|
17
|
+
context 'empty file' do
|
18
|
+
let (:content) { 'Overwritten!!!' }
|
19
|
+
|
20
|
+
it 'should overwrite empty file' do
|
21
|
+
File.overwrite content_file do
|
22
|
+
content
|
23
|
+
end
|
24
|
+
cf = File.new(content_file)
|
25
|
+
cf.has_content?(content).should be_true
|
26
|
+
cf.delete!
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'non-empty file' do
|
31
|
+
let (:content) { 'Overwritten!!!' }
|
32
|
+
|
33
|
+
it 'should overwrite file content with new content, erasing the old' do
|
34
|
+
File.overwrite content_file do
|
35
|
+
content
|
36
|
+
end
|
37
|
+
|
38
|
+
new_content = "New content"
|
39
|
+
File.overwrite content_file do
|
40
|
+
new_content
|
41
|
+
end
|
42
|
+
|
43
|
+
cf = File.new(content_file)
|
44
|
+
cf.has_content?(content).should be_false
|
45
|
+
cf.has_content?(new_content).should be_true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#overwrite! (instance)' do
|
51
|
+
let (:content) { 'Overwritten!!!' }
|
52
|
+
|
53
|
+
describe '#overwrite with block argument' do
|
54
|
+
it 'should overwrite empty file' do
|
55
|
+
cf = File.new(content_file)
|
56
|
+
cf.overwrite do
|
57
|
+
content
|
58
|
+
end
|
59
|
+
cf.has_content?(content).should be_true
|
60
|
+
File.delete! content_file
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#overwrite using :with option arg' do
|
65
|
+
it 'should overwrite file content with new content, erasing the old' do
|
66
|
+
cf = File.new(content_file)
|
67
|
+
cf.overwrite :with => content
|
68
|
+
|
69
|
+
new_content = "New content"
|
70
|
+
cf.overwrite :with => new_content
|
71
|
+
|
72
|
+
cf.has_content?(content).should be_false
|
73
|
+
cf.has_content?(new_content).should be_true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
File.file_mutate :remove_content
|
3
|
+
|
4
|
+
describe FileMutate do
|
5
|
+
let(:empty_file) { fixture_file 'empty.txt' }
|
6
|
+
let(:non_empty_file) { fixture_file 'non-empty.txt'}
|
7
|
+
let(:class_file) { fixture_file 'class_file.rb'}
|
8
|
+
let(:replace_file) { fixture_file 'file.txt' }
|
9
|
+
let(:file_to_delete) { fixture_file 'file_to_delete.txt' }
|
10
|
+
let(:routes_file) { fixture_file 'routes_file.rb' }
|
11
|
+
let(:app_file) { fixture_file 'application_file.rb' }
|
12
|
+
|
13
|
+
describe '#remove_content_from with :where option' do
|
14
|
+
let(:replace_file) { fixture_file 'file.txt' }
|
15
|
+
|
16
|
+
it "should remove content from existing file - class method" do
|
17
|
+
File.overwrite(replace_file) do
|
18
|
+
'Hello You'
|
19
|
+
end
|
20
|
+
File.remove_content_from replace_file, :where => 'You'
|
21
|
+
File.read(replace_file).should_not match /You/
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should remove content from existing file - instance method #remove_content" do
|
25
|
+
File.overwrite(replace_file) do
|
26
|
+
'Hello You'
|
27
|
+
end
|
28
|
+
File.new(replace_file).remove_content :where => 'You'
|
29
|
+
File.read(replace_file).should_not match /You/
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#remove_content_from with :content option' do
|
35
|
+
let(:replace_file) { fixture_file 'file.txt' }
|
36
|
+
|
37
|
+
it "should remove content from existing file - class method" do
|
38
|
+
File.overwrite(replace_file) do
|
39
|
+
'Hello You'
|
40
|
+
end
|
41
|
+
File.remove_content_from replace_file, :content => 'You'
|
42
|
+
File.read(replace_file).should_not match /You/
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should remove content from existing file - instance method #remove_content" do
|
46
|
+
File.overwrite(replace_file) do
|
47
|
+
'Hello You'
|
48
|
+
end
|
49
|
+
File.new(replace_file).remove_content 'You'
|
50
|
+
File.read(replace_file).should_not match /You/
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#remove_from with String/Regexp argument that is content to remove' do
|
55
|
+
let(:replace_file) { fixture_file 'file.txt' }
|
56
|
+
|
57
|
+
it "should remove content from existing file - class method" do
|
58
|
+
File.overwrite(replace_file) do
|
59
|
+
'Hello You'
|
60
|
+
end
|
61
|
+
File.remove_from replace_file, 'You'
|
62
|
+
File.read(replace_file).should_not match /You/
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should remove content from existing file - instance method #remove" do
|
66
|
+
File.overwrite(replace_file) do
|
67
|
+
'Hello You'
|
68
|
+
end
|
69
|
+
File.new(replace_file).remove_content 'You'
|
70
|
+
File.read(replace_file).should_not match /You/
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#remove_from with block argument that is content to remove' do
|
75
|
+
let(:replace_file) { fixture_file 'file.txt' }
|
76
|
+
|
77
|
+
it "should work using File object as target" do
|
78
|
+
fr = File.new replace_file
|
79
|
+
File.overwrite(fr) do
|
80
|
+
'Hello You'
|
81
|
+
end
|
82
|
+
File.remove_from fr do
|
83
|
+
'You'
|
84
|
+
end
|
85
|
+
File.read(fr).should_not match /You/
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should remove content from existing file - class method" do
|
89
|
+
File.overwrite(replace_file) do
|
90
|
+
'Hello You'
|
91
|
+
end
|
92
|
+
File.remove_from replace_file do
|
93
|
+
'You'
|
94
|
+
end
|
95
|
+
File.read(replace_file).should_not match /You/
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should remove content from existing file - instance method #remove" do
|
99
|
+
File.overwrite(replace_file) do
|
100
|
+
'Hello You'
|
101
|
+
end
|
102
|
+
File.new(replace_file).remove do
|
103
|
+
'You'
|
104
|
+
end
|
105
|
+
File.read(replace_file).should_not match /You/
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|