file-find 0.1.0 → 0.1.1

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.
Files changed (4) hide show
  1. data/CHANGES +8 -1
  2. data/lib/file/find.rb +26 -13
  3. data/test/tc_find.rb +6 -4
  4. metadata +2 -2
data/CHANGES CHANGED
@@ -1,2 +1,9 @@
1
+ == 0.1.1 - 25-Apr-2007
2
+ * The default for name is now '*', i.e. everything.
3
+ * Fixed a bug where directories were not matched. Thanks go to Leslie Viljoen
4
+ for the spot.
5
+ * The size option now accepts strings with comparable operators. For example,
6
+ you can now look for files greater than 400 bytes with the string "> 400".
7
+
1
8
  == 0.1.0 - 24-Apr-2007
2
- * Initial release
9
+ * Initial release
@@ -2,7 +2,7 @@ require 'date'
2
2
 
3
3
  class File::Find
4
4
  # The version of this package
5
- VERSION = '0.1.0'
5
+ VERSION = '0.1.1'
6
6
 
7
7
  # :stopdoc:
8
8
  VALID_OPTIONS = %w/
@@ -62,11 +62,14 @@ class File::Find
62
62
  attr_accessor :inum
63
63
 
64
64
  # The name pattern used to limit file searches. The patterns that are legal
65
- # for Dir.glob are legal here.
65
+ # for Dir.glob are legal here. The default is '*', i.e. everything.
66
66
  #
67
67
  attr_accessor :name
68
68
 
69
- # Limits searches to files that match the size, in bytes.
69
+ # If the value passed is an integer, this option limits searches to files
70
+ # that match the size, in bytes, exactly. If a string is passed, you can
71
+ # use the standard comparable operators to match files, e.g. ">= 200" would
72
+ # limit searches to files greater than or equal to 200 bytes.
70
73
  #
71
74
  attr_accessor :size
72
75
 
@@ -89,13 +92,13 @@ class File::Find
89
92
  @group = nil
90
93
  @follow = true
91
94
  @inum = nil
92
- @name = nil
93
95
  @size = nil
94
96
  @user = nil
95
97
 
96
98
  validate_and_set_options(options) unless options.empty?
97
99
 
98
100
  @path ||= Dir.pwd
101
+ @name ||= '*'
99
102
  end
100
103
 
101
104
  # Executes the find based on the rules you set for the File::Find object.
@@ -126,14 +129,15 @@ class File::Find
126
129
  retry
127
130
  end
128
131
 
132
+ glob = File.join(File.dirname(file), @name)
133
+ next unless Dir[glob].include?(file)
134
+
129
135
  # Add directories back onto the list of paths to search unless
130
136
  # they've already been added.
131
137
  #
132
- # TODO: Add depth handling.
133
138
  if stat_info.directory?
134
139
  unless paths.include?(file)
135
140
  paths << file
136
- next
137
141
  end
138
142
  end
139
143
 
@@ -163,14 +167,23 @@ class File::Find
163
167
  end
164
168
  end
165
169
 
166
- if @name
167
- glob = File.join(File.dirname(file), @name)
168
- next unless Dir[glob].include?(file)
169
- end
170
-
171
- # TODO: Allow more flexible syntax here, e.g. "> 1024".
170
+ # Allow plain numbers, or strings for comparison operators.
172
171
  if @size
173
- next unless stat_info.size == @size
172
+ if @size.is_a?(String)
173
+ regex = /^([><=]+)\s*?(\d+)$/
174
+ match = regex.match(@size)
175
+
176
+ if match.nil? || match.captures.include?(nil)
177
+ raise ArgumentError, "invalid size string: '#{@size}'"
178
+ end
179
+
180
+ operator = match.captures.first.strip
181
+ number = match.captures.last.strip.to_i
182
+
183
+ next unless stat_info.size.send(operator, number)
184
+ else
185
+ next unless stat_info.size == @size
186
+ end
174
187
  end
175
188
 
176
189
  if @user
@@ -1,11 +1,9 @@
1
1
  ######################################################################
2
2
  # tc_find.rb
3
3
  #
4
- # Test case for the File::Find package.
4
+ # Test case for the File::Find package. You should run this via the
5
+ # 'rake test' task.
5
6
  ######################################################################
6
- Dir.chdir '..' if File.basename(Dir.pwd) == 'test'
7
- $:.unshift File.join(Dir.pwd, 'lib')
8
-
9
7
  require 'test/unit'
10
8
  require 'fileutils'
11
9
  require 'file/find'
@@ -23,6 +21,10 @@ class TC_File_Find < Test::Unit::TestCase
23
21
  @rule1 = File::Find.new(:name => '*.rb')
24
22
  end
25
23
 
24
+ def test_version
25
+ assert_equal('0.1.1', File::Find::VERSION)
26
+ end
27
+
26
28
  def test_path
27
29
  assert_respond_to(@rule1, :path)
28
30
  assert_respond_to(@rule1, :path=)
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: file-find
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2007-04-24 00:00:00 -06:00
6
+ version: 0.1.1
7
+ date: 2007-04-25 00:00:00 -06:00
8
8
  summary: A better way to find files
9
9
  require_paths:
10
10
  - lib