sugar-high 0.3.3 → 0.3.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.3.4
@@ -1,4 +1,5 @@
1
1
  require 'sugar-high/kind_of'
2
+ require 'sugar-high/path'
2
3
 
3
4
  class Array
4
5
  def to_symbols option=nil
@@ -7,9 +8,27 @@ class Array
7
8
  res.select_labels.map(&:to_s).map(&:to_sym)
8
9
  end
9
10
 
10
- def to_strings option=nil
11
+ def to_strings
11
12
  self.flatten.select_labels.map(&:to_s)
12
13
  end
14
+
15
+ def to_filenames
16
+ self.to_strings.map(&:underscore)
17
+ end
18
+
19
+
20
+ def to_paths
21
+ self.map(&:path)
22
+ end
23
+
24
+ def file_join
25
+ File.join(*self.flatten)
26
+ end
27
+
28
+ def to_files
29
+ self.map{|fp| fp.path.to_file }
30
+ self.extend FilesArray
31
+ end
13
32
 
14
33
  def none?
15
34
  self.flatten.compact.empty?
@@ -17,7 +36,15 @@ class Array
17
36
 
18
37
  def flat_uniq
19
38
  self.flatten.compact.uniq
20
- end
39
+ end
40
+ end
41
+
42
+ module FilesArray
43
+ def delete_all!
44
+ self.each do |f|
45
+ f.delete! if f.kind_of?(File)
46
+ end
47
+ end
21
48
  end
22
49
 
23
50
  class NilClass
@@ -4,17 +4,7 @@ require 'sugar-high/path'
4
4
  require 'sugar-high/regexp'
5
5
  require 'sugar-high/string'
6
6
 
7
- class File
8
- def self.delete! name
9
- return nil if !File.exist?(name)
10
- File.delete name
11
- end
12
-
13
- def self.delete_file! name
14
- return nil if !File.file?(name)
15
- File.delete name
16
- end
17
-
7
+ class File
18
8
  def self.blank? file_name
19
9
  raise ArgumentError, "Filename argument must not be blank" if file_name.blank?
20
10
  raise ArgumentError, "There is no file at: #{file_name}" if !File.file?(file_name)
@@ -24,174 +14,87 @@ class File
24
14
  def blank?
25
15
  File.zero?(self.path)
26
16
  end
27
-
28
- def self.overwrite path, content=nil, &block
29
- File.open(path, 'w') do |f|
30
- f.puts content ||= yield
31
- end
32
- end
33
17
 
34
- def self.append path, content=nil, &block
35
- File.open(path, 'a') do |f|
36
- f.puts content ||= yield
37
- end
38
- end
39
-
40
- def self.remove_from file_name, content=nil, &block
41
- content ||= yield
42
- replace_content_from file_name, :content => content, :with => '', &block
18
+ def self.has_content? file_name, content_matcher, &block
19
+ File.new(file_name).has_content? content_matcher, &block
43
20
  end
44
-
45
- # replaces content found at replacement_expr with content resulting from yielding block
46
- # File.replace_content_from 'myfile.txt', where => /HelloWorld/, with => 'GoodBye'
47
- def self.replace_content_from file_name, options = {}, &block
48
- replacement_expr = options[:where] || options[:content]
49
- new_content = options[:with]
50
21
 
51
- replacement_expr = case replacement_expr
52
- when Regexp
53
- replacement_expr
54
- when String
55
- /#{Regexp.escape(replacement_expr)}/
56
- else
57
- raise ArgumentError, "Content to be replaced must be specified as either a String or Regexp in a :where or :content option"
22
+ def has_content? content_matcher = nil, &block
23
+ content_matcher ||= yield
24
+ begin
25
+ content_matcher = content_matcher.to_regexp
26
+ rescue
27
+ raise ArgumentError, "Content match must be specified as either a String or Regexp"
58
28
  end
29
+ !(self.read =~ content_matcher).nil?
30
+ end
59
31
 
60
- # get existing file content
61
- content = File.read file_name
62
-
63
- # return nil if no mathing replacement found
64
- return nil if !(content =~ replacement_expr)
65
-
66
- new_content ||= yield if block
67
-
68
- raise ArgumentError, "Content to be replaced with must be specified as a :with option or as a block" if !new_content
69
-
70
- # remove content that matches expr, by replacing with empty
71
- mutated_content = content.gsub replacement_expr, new_content
72
-
73
- # write mutated content as new file
74
- File.overwrite file_name, mutated_content
75
-
76
- true # signal success!
32
+ def read_content options = {}, &block
33
+ File.read_from self.path, options, &block
77
34
  end
35
+ alias_method :with_content, :read_content
78
36
 
37
+ class << self
79
38
 
80
- def self.read_from file_name, options = {}, &block
81
- raise ArgumentError, "File to read from not found or not a file: #{file_name}" if !File.file? file_name
82
- content = File.read file_name
39
+ def read_from file_name, options = {}, &block
40
+ raise ArgumentError, "File to read from not found or not a file: #{file_name}" if !File.file? file_name
41
+ content = File.read file_name
83
42
 
84
- if options[:before]
85
- begin
86
- regexp = options[:before].to_regexp
87
- index = content.match(regexp).offset_before
88
- content = content[0..index]
89
- rescue
90
- raise ArgumentError, ":before option must be a string or regular expression, was : #{options[:before]}"
43
+ if options[:before]
44
+ begin
45
+ regexp = options[:before].to_regexp
46
+ index = content.match(regexp).offset_before
47
+ content = content[0..index]
48
+ rescue
49
+ raise ArgumentError, ":before option must be a string or regular expression, was : #{options[:before]}"
50
+ end
51
+ end
52
+
53
+ if options[:after]
54
+ begin
55
+ regexp = options[:after].to_regexp
56
+ index = content.match(regexp).offset_after
57
+ content = content[index..-1]
58
+ rescue
59
+ raise ArgumentError, ":after option must be a string or regular expression, was : #{options[:after]}"
60
+ end
91
61
  end
92
- end
93
-
94
- if options[:after]
95
- begin
96
- regexp = options[:after].to_regexp
97
- index = content.match(regexp).offset_after
98
- content = content[index..-1]
99
- rescue
100
- raise ArgumentError, ":after option must be a string or regular expression, was : #{options[:after]}"
101
- end
62
+ yield content if block
63
+ content
102
64
  end
103
- yield content if block
104
- content
65
+ alias_method :read_content_from, :read_from
66
+ alias_method :with_content_from, :read_from
105
67
  end
68
+ end
106
69
 
107
- def self.remove_content_from file_name, options = {}, &block
108
- replace_content_from file_name, options.merge(:with => ''), &block
109
- end
110
-
111
- # TODO: Needs spec
112
-
113
- # insert_into 'my_file.txt', :after => 'Blip', :content => 'Hello
114
- # insert_into 'my_file.txt', 'Hello', :after => 'Blip'
115
- # insert_into 'my_file.txt', :after => 'Blip' do
116
- # 'Hello'
117
- # end
70
+ class String
71
+ def as_filename
72
+ self.underscore
73
+ end
118
74
 
119
- def self.insert_into file_name, *args, &block
120
- options = last_option args
121
- content = Insert.content options, *args, &block
122
-
123
- file = File.new(file_name)
124
- return nil if !File.exist?(file)
125
-
126
- # already inserted?
127
- return nil if content.blank? || (file.read =~ /#{content}/)
128
-
129
- place, marker = if options[:before]
130
- [ :before, options[:before] ]
131
- elsif options[:before_last]
132
- [ :before_last, options[:before_last] ]
133
- else
134
- [ :after, options[:after] ]
135
- end
136
-
137
-
138
- marker = Insert.get_marker marker
139
-
140
- return nil if !(File.new(file.path).read =~ /#{marker}/)
141
-
142
- Mutate.mutate_file file.path, marker, place do
143
- content
144
- end
145
- end
146
-
147
- module Insert
148
- def self.get_marker marker
149
- marker = case marker
150
- when String
151
- Regexp.escape(marker)
152
- when Regexp
153
- marker.source
154
- end
155
- end
75
+ def valid_file_command?
76
+ self.to_sym.valid_file_command?
77
+ end
78
+ end
156
79
 
157
- def self.content options = {}, *args, &block
158
- case args.first
159
- when String
160
- args.first
161
- when Hash
162
- options[:content] || (yield if block)
163
- else
164
- return yield if block
165
- raise ArgumentError, "You must supply content to insert, either as a String before the options hash, a :content option or a block"
166
- end
167
- end
168
- end
80
+ class Symbol
81
+ def as_filename
82
+ self.to_s.underscore
83
+ end
84
+
85
+ def valid_file_command?
86
+ [:read, :remove, :delete].include? self
87
+ end
88
+ end
169
89
 
170
- module Mutate
171
- def self.mutate_file file, marker, place, &block
172
- raise ArgumentError, "You must define a replacement marker for a :before, :before_last or :after key" if !marker
173
-
174
- if place == :before_last
175
- content = File.read(file)
176
- content = content.insert_before_last yield, marker
177
- File.open(file, 'wb') { |file| file.write(content) }
178
- return
179
- end
180
-
181
- replace_in_file file, /(#{marker})/mi do |match|
182
- place == :after ? "#{match}\n #{yield}" : "#{yield}\n #{match}"
183
- end
184
- end
185
-
186
- def self.replace_in_file(path, regexp, *args, &block)
187
- content = File.read(path).gsub(regexp, *args, &block)
188
- File.open(path, 'wb') { |file| file.write(content) }
189
- end
190
- end
191
- end
90
+ class NilClass
91
+ def valid_file_command?
92
+ false
93
+ end
94
+ end
192
95
 
193
96
  class Array
194
97
  def file_names ext = '*'
195
- self.map{|a| a.gsub( /(.*)\//, '').gsub(/\.#{Regexp.escape(ext)}/, '')}
98
+ self.map{|a| a.gsub( /(.*)\//, '').gsub(/\.#{Regexp.escape(ext.to_s)}/, '')}
196
99
  end
197
100
  end
@@ -0,0 +1,193 @@
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
+
8
+ class File
9
+ class << self
10
+ def delete! name
11
+ return nil if !File.exist?(name)
12
+ File.delete name
13
+ end
14
+ alias_method :delete_file!, :delete!
15
+ end
16
+
17
+ def delete!
18
+ File.delete(self.path)
19
+ end
20
+ alias_method :delete_file!, :delete!
21
+
22
+
23
+ def overwrite content=nil, &block
24
+ File.overwrite self.path, content, &block
25
+ end
26
+
27
+ def self.overwrite file, content=nil, &block
28
+ filepath = case file
29
+ when PathString, String
30
+ file
31
+ when File
32
+ file.path
33
+ else
34
+ raise ArgumentError, "Expected first argument to be a File instance or a path indicating file to overwrite"
35
+ end
36
+ File.open(filepath, 'w') do |f|
37
+ f.puts content ||= yield
38
+ end
39
+ end
40
+
41
+ def append content=nil, &block
42
+ File.append self.path, content, &block
43
+ end
44
+
45
+ def self.append path, content=nil, &block
46
+ File.open(path, 'a') do |f|
47
+ f.puts content ||= yield
48
+ end
49
+ end
50
+
51
+ def remove_content options=nil, &block
52
+ opt_str = case options
53
+ when String
54
+ options
55
+ when Hash
56
+ content = options[:content] || options[:where]
57
+ raise ArgumentError, "Bad :content value in Hash" if !content || content.strip.empty?
58
+ content.strip
59
+ else
60
+ raise ArgumentError, "non-block argument must be either String or Hash with a :content option" if !block
61
+ end
62
+ content = block ? yield : opt_str
63
+ File.remove_content_from self.path, :content => content, :with => '', &block
64
+ end
65
+ alias_method :remove, :remove_content
66
+
67
+ def self.remove_from file_name, content=nil, &block
68
+ content ||= yield
69
+ replace_content_from file_name, :content => content, :with => '', &block
70
+ end
71
+
72
+ def self.remove_content_from file_name, options = {}, &block
73
+ replace_content_from file_name, options.merge(:with => ''), &block
74
+ end
75
+
76
+ def replace_content options = {}, &block
77
+ File.replace_content_from self.path, options, &block
78
+ end
79
+
80
+ # replaces content found at replacement_expr with content resulting from yielding block
81
+ # File.replace_content_from 'myfile.txt', where => /HelloWorld/, with => 'GoodBye'
82
+ def self.replace_content_from file_name, options = {}, &block
83
+ replacement_expr = options[:where] || options[:content]
84
+ new_content = options[:with]
85
+
86
+ begin
87
+ replacement_expr = replacement_expr.to_regexp
88
+ rescue
89
+ raise ArgumentError, "Content to be replaced must be specified as either a String or Regexp in a :where or :content option"
90
+ end
91
+
92
+ # get existing file content
93
+ content = File.read file_name
94
+
95
+ # return nil if no mathing replacement found
96
+ return nil if !(content =~ replacement_expr)
97
+
98
+ new_content ||= yield if block
99
+
100
+ raise ArgumentError, "Content to be replaced with must be specified as a :with option or as a block" if !new_content
101
+
102
+ # remove content that matches expr, by replacing with empty
103
+ mutated_content = content.gsub replacement_expr, new_content
104
+
105
+ # write mutated content as new file
106
+ File.overwrite file_name, mutated_content
107
+
108
+ true # signal success!
109
+ end
110
+
111
+ def insert *args, &block
112
+ File.insert_into self.path, *args, &block
113
+ end
114
+
115
+ # insert_into 'my_file.txt', :after => 'Blip', :content => 'Hello
116
+ # insert_into 'my_file.txt', 'Hello', :after => 'Blip'
117
+ # insert_into 'my_file.txt', :after => 'Blip' do
118
+ # 'Hello'
119
+ # end
120
+ def self.insert_into file_name, *args, &block
121
+ options = last_option args
122
+ content = Insert.content options, *args, &block
123
+
124
+ file = File.new(file_name)
125
+ return nil if !File.exist?(file)
126
+
127
+ # already inserted?
128
+ return nil if content.blank?
129
+ return nil if !options[:repeat] && (file.read =~ /#{Regexp.escape(content.to_s)}/)
130
+
131
+ place, marker = if options[:before]
132
+ [ :before, options[:before] ]
133
+ elsif options[:before_last]
134
+ [ :before_last, options[:before_last] ]
135
+ else
136
+ [ :after, options[:after] ]
137
+ end
138
+
139
+
140
+ marker = Insert.get_marker marker
141
+
142
+ return nil if !(File.new(file.path).read =~ /#{Regexp.escape(marker.to_s)}/)
143
+
144
+ Mutate.mutate_file file.path, marker, place do
145
+ content
146
+ end
147
+ end
148
+
149
+ module Insert
150
+ def self.get_marker marker
151
+ marker = case marker
152
+ when String
153
+ Regexp.escape(marker)
154
+ when Regexp
155
+ marker.source
156
+ end
157
+ end
158
+
159
+ def self.content options = {}, *args, &block
160
+ case args.first
161
+ when String
162
+ args.first
163
+ when Hash
164
+ options[:content] || (yield if block)
165
+ else
166
+ return yield if block
167
+ raise ArgumentError, "You must supply content to insert, either as a String before the options hash, a :content option or a block"
168
+ end
169
+ end
170
+ end
171
+
172
+ module Mutate
173
+ def self.mutate_file file, marker, place, &block
174
+ raise ArgumentError, "You must define a replacement marker for a :before, :before_last or :after key" if !marker
175
+
176
+ if place == :before_last
177
+ content = File.read(file)
178
+ content = content.insert_before_last yield, marker
179
+ File.open(file, 'wb') { |file| file.write(content) }
180
+ return
181
+ end
182
+
183
+ replace_in_file file, /(#{Regexp.escape(marker.to_s)})/mi do |match|
184
+ place == :after ? "#{match}\n #{yield}" : "#{yield}\n #{match}"
185
+ end
186
+ end
187
+
188
+ def self.replace_in_file(path, regexp, *args, &block)
189
+ content = File.read(path).gsub(regexp, *args, &block)
190
+ File.open(path, 'wb') { |file| file.write(content) }
191
+ end
192
+ end
193
+ end
@@ -5,21 +5,47 @@ class String
5
5
  end
6
6
 
7
7
  module PathString
8
+ def to_file option=nil
9
+ raise ArgumentError, "File doesn't exist" if option == :raise && !File.directory?(self)
10
+ File.new(self) if File.file? self
11
+ end
12
+ alias_method :file, :to_file
13
+ alias_method :new_file, :to_file
14
+
15
+ def to_dir option=nil
16
+ raise ArgumentError, "Dir doesn't exist" if option == :raise && !File.directory?(self)
17
+ Dir.new(self) if File.directory? self
18
+ end
19
+ alias_method :new_dir, :to_dir
20
+ alias_method :dir, :to_dir
21
+
22
+ def to_symlink new_path #, option=nil
23
+ # raise ArgumentError, "New link location doesn't exist" if option == :raise && !File.exist?(new_path)
24
+ File.symlink(self, new_path)
25
+ end
26
+ alias_method :new_symlink, :to_symlink
27
+ alias_method :symlink, :to_symlink
28
+
8
29
  def exists?
9
30
  File.exist? self
10
31
  end
32
+ alias_method :there?, :exists?
11
33
 
12
34
  def file?
13
35
  File.file? self
14
36
  end
37
+ alias_method :is_file?, :file?
15
38
 
16
39
  def dir?
17
40
  File.directory? self
18
41
  end
42
+ alias_method :is_dir?, :dir?
43
+ alias_method :directory?, :dir
19
44
 
20
45
  def symlink?
21
46
  File.symlink? self
22
47
  end
48
+ alias_method :is_symlink?, :symlink?
23
49
 
24
50
  def up lv
25
51
  ('../' * lv) + self
@@ -11,7 +11,7 @@ class String
11
11
  raise ArgumentException, "last argument is the marker and must be a String, Symbol or even Hash with a :marker option pointing to the marker (String or Symbol)"
12
12
  end
13
13
 
14
- marker = Regexp.escape(marker.reverse)
14
+ marker = Regexp.escape(marker.to_s.reverse)
15
15
  nl = Regexp.escape("\n")
16
16
  # puts self
17
17
  # puts "marker: #{marker}"
@@ -1,6 +1,4 @@
1
1
  class Abc
2
2
  def begin
3
3
  end
4
-
5
4
  end
6
-
@@ -0,0 +1 @@
1
+ Find this line right here!
@@ -1,25 +1,85 @@
1
1
  require 'spec_helper'
2
- require 'sugar-high/file'
2
+ require 'sugar-high/file_mutate'
3
3
 
4
4
  describe "SugarHigh::File" do
5
5
  let(:empty_file) { fixture_file 'empty.txt' }
6
6
  let(:non_empty_file) { fixture_file 'non-empty.txt'}
7
7
  let(:class_file) { fixture_file 'class_file.rb'}
8
8
  let(:replace_file) { fixture_file 'file.txt' }
9
+ let(:file_to_delete) { fixture_file 'file_to_delete.txt' }
10
+
11
+ after do
12
+ File.overwrite class_file do
13
+ %q{class Abc
14
+ def begin
15
+ end
16
+ end}
17
+ end
18
+ end
9
19
 
10
20
  before :each do
11
21
  File.delete replace_file if File.file?(replace_file)
12
22
  end
13
23
 
24
+ describe '#delete! (class)' do
25
+ it 'should delete file' do
26
+ File.overwrite(file_to_delete) do
27
+ 'Delete this!'
28
+ end
29
+ File.delete! file_to_delete
30
+ File.exist?(file_to_delete).should be_false
31
+ end
32
+ end
33
+
34
+ describe '#delete_file! (class)' do
35
+ it 'should delete file' do
36
+ File.overwrite(file_to_delete) do
37
+ 'Delete this!'
38
+ end
39
+ File.delete_file! file_to_delete
40
+ File.exist?(file_to_delete).should be_false
41
+ end
42
+ end
43
+
44
+ describe '#delete! (instance)' do
45
+ it 'should delete file' do
46
+ File.overwrite(file_to_delete) do
47
+ 'Delete this!'
48
+ end
49
+ File.new(file_to_delete).delete!
50
+ File.exist?(file_to_delete).should be_false
51
+ end
52
+ end
53
+
54
+ describe '#delete_file! (instance)' do
55
+ it 'should delete file' do
56
+ File.overwrite(file_to_delete) do
57
+ 'Delete this!'
58
+ end
59
+ File.new(file_to_delete).delete_file!
60
+ File.exist?(file_to_delete).should be_false
61
+ end
62
+ end
63
+
14
64
  describe '#append with :content option' do
15
65
  let(:append_file) { fixture_file 'file.txt' }
16
66
 
17
- it "should remove content from existing file" do
67
+ it 'should append content to existing file - class method' do
18
68
  File.overwrite(append_file) do
19
69
  'Hello You'
20
70
  end
21
71
  File.append append_file, :content => 'Appended'
22
- content = File.read(replace_file)
72
+ content = File.read(append_file)
73
+ content.should match /Hello You/
74
+ content.should match /Appended/
75
+ end
76
+
77
+ it 'should append content to existing file - instance method' do
78
+ File.overwrite(append_file) do
79
+ 'Hello You'
80
+ end
81
+ File.new(append_file).append :content => 'Appended'
82
+ content = File.read(append_file)
23
83
  content.should match /Hello You/
24
84
  content.should match /Appended/
25
85
  end
@@ -28,7 +88,7 @@ describe "SugarHigh::File" do
28
88
  describe '#append with block' do
29
89
  let(:append_file) { fixture_file 'file.txt' }
30
90
 
31
- it "should remove content from existing file" do
91
+ it "should append content to existing file using block arg - class method" do
32
92
  File.overwrite(append_file) do
33
93
  'Hello You'
34
94
  end
@@ -39,61 +99,106 @@ describe "SugarHigh::File" do
39
99
  content.should match /Hello You/
40
100
  content.should match /Appended/
41
101
  end
42
- end
43
-
44
102
 
103
+ it "should append content to existing file using block arg - instance method" do
104
+ File.overwrite(append_file) do
105
+ 'Hello You'
106
+ end
107
+ File.new(append_file).append do
108
+ 'Appended'
109
+ end
110
+ content = File.read(replace_file)
111
+ content.should match /Hello You/
112
+ content.should match /Appended/
113
+ end
114
+ end
115
+
116
+
45
117
  describe '#replace_content_from' do
46
118
  let(:replace_file) { fixture_file 'file.txt' }
47
119
 
48
- it "should remove content from existing file" do
120
+ it "should replace content from existing file - class method" do
49
121
  File.overwrite(replace_file) do
50
122
  'Hello You'
51
123
  end
52
124
  File.replace_content_from replace_file, :where => 'You', :with => 'Me'
53
125
  File.read(replace_file).should_not match /You/
54
126
  end
55
- end
56
127
 
57
- describe '#remove_content_from with :where option' do
58
- let(:replace_file) { fixture_file 'file.txt' }
128
+ it 'should remove content from existing file - instance method #replace_content' do
129
+ File.overwrite(replace_file) do
130
+ 'Hello You'
131
+ end
132
+ File.new(replace_file).replace_content :where => 'You', :with => 'Me'
133
+ File.read(replace_file).should_not match /You/
134
+ end
135
+ end
59
136
 
60
- it "should remove content from existing file" do
137
+ describe '#remove_content_from with :where option' do
138
+ let(:replace_file) { fixture_file 'file.txt' }
139
+
140
+ it "should remove content from existing file - class method" do
61
141
  File.overwrite(replace_file) do
62
142
  'Hello You'
63
143
  end
64
144
  File.remove_content_from replace_file, :where => 'You'
65
145
  File.read(replace_file).should_not match /You/
66
146
  end
67
- end
68
147
 
148
+ it "should remove content from existing file - instance method #remove_content" do
149
+ File.overwrite(replace_file) do
150
+ 'Hello You'
151
+ end
152
+ File.new(replace_file).remove_content :where => 'You'
153
+ File.read(replace_file).should_not match /You/
154
+ end
155
+
156
+ end
157
+
69
158
  describe '#remove_content_from with :content option' do
70
159
  let(:replace_file) { fixture_file 'file.txt' }
71
160
 
72
- it "should remove content from existing file" do
161
+ it "should remove content from existing file - class method" do
73
162
  File.overwrite(replace_file) do
74
163
  'Hello You'
75
164
  end
76
165
  File.remove_content_from replace_file, :content => 'You'
77
166
  File.read(replace_file).should_not match /You/
78
167
  end
79
- end
80
168
 
169
+ it "should remove content from existing file - instance method #remove_content" do
170
+ File.overwrite(replace_file) do
171
+ 'Hello You'
172
+ end
173
+ File.new(replace_file).remove_content 'You'
174
+ File.read(replace_file).should_not match /You/
175
+ end
176
+ end
177
+
81
178
  describe '#remove_from with String/Regexp argument that is content to remove' do
82
179
  let(:replace_file) { fixture_file 'file.txt' }
83
180
 
84
- it "should remove content from existing file" do
181
+ it "should remove content from existing file - class method" do
85
182
  File.overwrite(replace_file) do
86
183
  'Hello You'
87
184
  end
88
185
  File.remove_from replace_file, 'You'
89
186
  File.read(replace_file).should_not match /You/
90
187
  end
188
+
189
+ it "should remove content from existing file - instance method #remove" do
190
+ File.overwrite(replace_file) do
191
+ 'Hello You'
192
+ end
193
+ File.new(replace_file).remove_content 'You'
194
+ File.read(replace_file).should_not match /You/
195
+ end
91
196
  end
92
-
197
+
93
198
  describe '#remove_from with block argument that is content to remove' do
94
199
  let(:replace_file) { fixture_file 'file.txt' }
95
200
 
96
- it "should remove content from existing file" do
201
+ it "should remove content from existing file - class method" do
97
202
  File.overwrite(replace_file) do
98
203
  'Hello You'
99
204
  end
@@ -102,22 +207,32 @@ describe "SugarHigh::File" do
102
207
  end
103
208
  File.read(replace_file).should_not match /You/
104
209
  end
105
- end
106
-
107
210
 
211
+ it "should remove content from existing file - instance method #remove" do
212
+ File.overwrite(replace_file) do
213
+ 'Hello You'
214
+ end
215
+ File.new(replace_file).remove do
216
+ 'You'
217
+ end
218
+ File.read(replace_file).should_not match /You/
219
+ end
220
+ end
221
+
222
+
108
223
  describe '#insert_into' do
109
224
  let(:insertion_file) { fixture_file 'insertion.txt' }
110
-
225
+
111
226
  before :each do
112
227
  File.overwrite(insertion_file) do
113
228
  'Goodbye'
114
229
  end
115
230
  end
116
-
231
+
117
232
  after :each do
118
233
  File.delete insertion_file if File.file?(insertion_file)
119
234
  end
120
-
235
+
121
236
  it "should insert Hello before Goodbye using a block as content" do
122
237
  File.insert_into insertion_file, :before => 'Goodbye' do
123
238
  'Hello'
@@ -125,23 +240,31 @@ describe "SugarHigh::File" do
125
240
  File.read(insertion_file).should match /Hello\s+Goodbye/
126
241
  end
127
242
 
243
+ it "should insert Hello before Goodbye using a block as content - instance method #insert" do
244
+ File.new(insertion_file).insert :before => 'Goodbye' do
245
+ 'Hello'
246
+ end
247
+ File.read(insertion_file).should match /Hello\s+Goodbye/
248
+ end
249
+
250
+
128
251
  it "should insert Hello before Goodbye using a content string arg" do
129
252
  File.insert_into insertion_file, "Hello ", :before => 'Goodbye'
130
253
  File.read(insertion_file).should match /Hello\s+Goodbye/
131
254
  end
132
-
255
+
133
256
  it "should insert Hello before Goodbye using a :content option" do
134
257
  File.insert_into insertion_file, :content => 'Hello', :before => 'Goodbye'
135
258
  File.read(insertion_file).should match /Hello\s+Goodbye/
136
259
  end
137
-
260
+
138
261
  it "should insert Hello before Goodbye using a block as content to insert" do
139
262
  File.insert_into insertion_file, :before => 'Goodbye' do
140
263
  'Hello'
141
264
  end
142
265
  File.read(insertion_file).should match /Hello\s+Goodbye/
143
266
  end
144
-
267
+
145
268
  it "should insert Hello after Goodbye using a :with option and a Regexp for the after expression" do
146
269
  File.insert_into insertion_file, :content => ' Hello', :after => /Goodbye/
147
270
  File.read(insertion_file).should match /Goodbye\s+Hello/
@@ -153,5 +276,21 @@ describe "SugarHigh::File" do
153
276
  File.read(class_file).should match /end\s+# Hello\s+end/
154
277
  File.remove_content_from class_file, :content => ' # Hello'
155
278
  end
156
- end
279
+
280
+ it "should insert Hello before last end statement but don't repeat" do
281
+ File.insert_into class_file, :content => ' # Hello', :before_last => 'end', :repeat => true
282
+ puts File.read(class_file)
283
+ File.read(class_file).should match /end\s+# Hello\s+end/
284
+ File.remove_content_from class_file, :content => ' # Hello'
285
+ end
286
+
287
+ it "should insert Hello before last end statement - block" do
288
+ File.insert_into class_file, :before_last => 'end' do
289
+ ' # Hello'
290
+ end
291
+ puts File.read(class_file)
292
+ File.read(class_file).should match /end\s+# Hello\s+end/
293
+ File.remove_content_from class_file, :content => ' # Hello'
294
+ end
295
+ end
157
296
  end
@@ -1,17 +1,19 @@
1
1
  require 'spec_helper'
2
2
  require 'sugar-high/file'
3
+ require 'sugar-high/file_mutate'
3
4
 
4
5
  describe "SugarHigh" do
5
6
  describe "File" do
6
7
  let(:empty_file) { fixture_file 'empty.txt' }
7
8
  let(:non_empty_file) { fixture_file 'non-empty.txt'}
8
9
  let(:replace_file) { fixture_file 'file.txt' }
10
+ let(:search_file) { fixture_file 'search_file.txt' }
9
11
 
10
12
  before :each do
11
13
  File.delete replace_file if File.file?(replace_file)
12
14
  end
13
15
 
14
- describe '#self.blank' do
16
+ describe '#self.blank?' do
15
17
  it "should return true for an empty file" do
16
18
  File.blank?(empty_file).should be_true
17
19
  end
@@ -21,7 +23,7 @@ describe "SugarHigh" do
21
23
  end
22
24
  end
23
25
 
24
- describe '#blank' do
26
+ describe '#blank?' do
25
27
  it "should return true for an empty file" do
26
28
  File.new(empty_file).blank?.should be_true
27
29
  end
@@ -30,54 +32,95 @@ describe "SugarHigh" do
30
32
  File.new(non_empty_file).blank?.should_not be_true
31
33
  end
32
34
  end
33
- end
34
-
35
- describe '#file_names' do
36
- let(:replace_file) { fixture_file 'file.txt' }
37
-
38
- before :each do
39
- File.delete replace_file if File.file?(replace_file)
40
- end
41
-
42
- it "should return all file names of an array of paths to files" do
43
- expr = fixtures_dir + '/*.txt'
44
- Dir.glob(expr).file_names('txt').should == ['empty', 'non-empty']
45
- end
46
- end
47
35
 
48
- describe '#read_from' do
49
- let(:non_empty_file) { fixture_file 'non-empty.txt' }
50
-
51
- it "should read all the content into a block" do
52
- File.read_from non_empty_file do |content|
53
- content.should match /blip/
54
- content.should match /blup/
36
+ describe '#has_content?' do
37
+ it "should find content in file using String argument" do
38
+ File.overwrite(search_file) do
39
+ 'Find this line right here!'
40
+ end
41
+ File.has_content?(search_file, 'line right').should be_true
42
+ File.has_content?(search_file, 'line left').should be_false
55
43
  end
56
- end
57
44
 
58
- it "should read all the content before a given marker" do
59
- content = File.read_from non_empty_file, :before => 'blap'
60
- content.should match /blip/
61
- content.should_not match /blap/
45
+ it "should find content in file using Regexp argument" do
46
+ File.overwrite(search_file) do
47
+ 'Find this line right here!'
48
+ end
49
+ File.has_content?(search_file, /line right/).should be_true
50
+ File.has_content?(search_file, /line left/).should be_false
51
+ end
62
52
  end
53
+
54
+ describe '#read_from' do
63
55
 
64
- it "should read all the content after a given marker" do
65
- content = File.read_from non_empty_file, :after => 'blap'
66
- content.should match /blup/
67
- content.should_not match /blap/
68
- end
56
+ it "should read all the content into a block" do
57
+ File.read_from non_empty_file do |content|
58
+ content.should match /blip/
59
+ content.should match /blup/
60
+ end
61
+ end
69
62
 
70
- it "should read all the content before a given marker into a block" do
71
- File.read_from non_empty_file, :before => 'blap' do |content|
63
+ it "should read all the content before a given marker" do
64
+ content = File.read_from non_empty_file, :before => 'blap'
72
65
  content.should match /blip/
73
- content.should_not match /blap/
66
+ content.should_not match /blap/
74
67
  end
75
- end
76
68
 
77
- it "should read all the content after a given marker into a block" do
78
- File.read_from non_empty_file, :after => 'blap' do |content|
69
+ it "should read all the content after a given marker" do
70
+ content = File.read_from non_empty_file, :after => 'blap'
79
71
  content.should match /blup/
80
- content.should_not match /blap/
72
+ content.should_not match /blap/
73
+ end
74
+
75
+ it "should read all the content before a given marker into a block" do
76
+ File.read_from non_empty_file, :before => 'blap' do |content|
77
+ content.should match /blip/
78
+ content.should_not match /blap/
79
+ end
80
+ end
81
+
82
+ it "should read all the content after a given marker into a block" do
83
+ File.read_from non_empty_file, :after => 'blap' do |content|
84
+ content.should match /blup/
85
+ content.should_not match /blap/
86
+ end
87
+ end
88
+ end
89
+
90
+ describe '#read_content (instance)' do
91
+ let(:non_empty_file) { fixture_file 'non-empty.txt' }
92
+
93
+ it "should read all the content into a block" do
94
+ File.new(non_empty_file).read_content do |content|
95
+ content.should match /blip/
96
+ content.should match /blup/
97
+ end
98
+ end
99
+ end
100
+
101
+ describe '#read_from (class)' do
102
+ let(:non_empty_file) { fixture_file 'non-empty.txt' }
103
+
104
+ it "should read all the content into a block" do
105
+ File.read_from(non_empty_file) do |content|
106
+ content.should match /blip/
107
+ content.should match /blup/
108
+ end
109
+ end
110
+ end
111
+ end
112
+
113
+ describe "Array" do
114
+ describe '#file_names' do
115
+ let(:replace_file) { fixture_file 'file.txt' }
116
+
117
+ before :each do
118
+ File.delete replace_file if File.file?(replace_file)
119
+ end
120
+
121
+ it "should return all file names of an array of paths to files" do
122
+ expr = fixtures_dir + '/*.txt'
123
+ Dir.glob(expr).file_names('txt').should include('empty', 'non-empty')
81
124
  end
82
125
  end
83
126
  end
data/sugar-high.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sugar-high}
8
- s.version = "0.3.3"
8
+ s.version = "0.3.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = %q{2011-01-07}
12
+ s.date = %q{2011-01-18}
13
13
  s.description = %q{More Ruby sugar - inspired by the 'zuker' project}
14
14
  s.email = %q{kmandrup@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "lib/sugar-high/array.rb",
30
30
  "lib/sugar-high/blank.rb",
31
31
  "lib/sugar-high/file.rb",
32
+ "lib/sugar-high/file_mutate.rb",
32
33
  "lib/sugar-high/hash.rb",
33
34
  "lib/sugar-high/includes.rb",
34
35
  "lib/sugar-high/kind_of.rb",
@@ -44,6 +45,7 @@ Gem::Specification.new do |s|
44
45
  "spec/fixtures/class_file.rb",
45
46
  "spec/fixtures/empty.txt",
46
47
  "spec/fixtures/non-empty.txt",
48
+ "spec/fixtures/search_file.txt",
47
49
  "spec/spec_helper.rb",
48
50
  "spec/sugar-high/alias_spec.rb",
49
51
  "spec/sugar-high/arguments_spec.rb",
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 3
9
- version: 0.3.3
8
+ - 4
9
+ version: 0.3.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kristian Mandrup
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-07 00:00:00 +01:00
17
+ date: 2011-01-18 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -84,6 +84,7 @@ files:
84
84
  - lib/sugar-high/array.rb
85
85
  - lib/sugar-high/blank.rb
86
86
  - lib/sugar-high/file.rb
87
+ - lib/sugar-high/file_mutate.rb
87
88
  - lib/sugar-high/hash.rb
88
89
  - lib/sugar-high/includes.rb
89
90
  - lib/sugar-high/kind_of.rb
@@ -99,6 +100,7 @@ files:
99
100
  - spec/fixtures/class_file.rb
100
101
  - spec/fixtures/empty.txt
101
102
  - spec/fixtures/non-empty.txt
103
+ - spec/fixtures/search_file.txt
102
104
  - spec/spec_helper.rb
103
105
  - spec/sugar-high/alias_spec.rb
104
106
  - spec/sugar-high/arguments_spec.rb