jamis-fuzzy_file_finder 1.0.0 → 1.0.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.
@@ -1,14 +1,14 @@
1
1
 
2
- # Gem::Specification for Fuzzy_file_finder-1.0.0
2
+ # Gem::Specification for Fuzzy_file_finder-1.0.1
3
3
  # Originally generated by Echoe
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = %q{fuzzy_file_finder}
7
- s.version = "1.0.0"
7
+ s.version = "1.0.1"
8
8
 
9
9
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
10
  s.authors = ["Jamis Buck"]
11
- s.date = %q{2008-10-09}
11
+ s.date = %q{2008-10-11}
12
12
  s.description = %q{an implementation of TextMate's cmd-T search functionality}
13
13
  s.email = %q{jamis@jamisbuck.org}
14
14
  s.extra_rdoc_files = ["lib/fuzzy_file_finder.rb", "README.rdoc"]
@@ -31,3 +31,26 @@ Gem::Specification.new do |s|
31
31
  else
32
32
  end
33
33
  end
34
+
35
+
36
+ # # Original Rakefile source (requires the Echoe gem):
37
+ #
38
+ # begin
39
+ # require 'echoe'
40
+ # rescue LoadError
41
+ # abort "You'll need to have `echoe' installed to use Net::SSH's Rakefile"
42
+ # end
43
+ #
44
+ # require './lib/fuzzy_file_finder'
45
+ # version = FuzzyFileFinder::Version::STRING.dup
46
+ # if ENV['SNAPSHOT'].to_i == 1
47
+ # version << "." << Time.now.utc.strftime("%Y%m%d%H%M%S")
48
+ # end
49
+ #
50
+ # Echoe.new('fuzzy_file_finder', version) do |p|
51
+ # p.author = "Jamis Buck"
52
+ # p.email = "jamis@jamisbuck.org"
53
+ # p.summary = "an implementation of TextMate's cmd-T search functionality"
54
+ #
55
+ # p.rdoc_pattern = /^(lib|README.rdoc)/
56
+ # end
@@ -37,7 +37,7 @@ class FuzzyFileFinder
37
37
  module Version
38
38
  MAJOR = 1
39
39
  MINOR = 0
40
- TINY = 0
40
+ TINY = 1
41
41
  STRING = [MAJOR, MINOR, TINY].join(".")
42
42
  end
43
43
 
@@ -88,24 +88,29 @@ class FuzzyFileFinder
88
88
  end
89
89
  end
90
90
 
91
- # The root of the directory tree to search.
92
- attr_reader :root
91
+ # The roots directory trees to search.
92
+ attr_reader :roots
93
93
 
94
94
  # The maximum number of files and directories (combined).
95
95
  attr_reader :ceiling
96
96
 
97
- # The number of directories beneath +root+
97
+ # The number of directories beneath all +roots+
98
98
  attr_reader :directory_count
99
99
 
100
- # The number of files beneath +root+
100
+ # The number of files beneath all +roots+
101
101
  attr_reader :file_count
102
102
 
103
103
  # Initializes a new FuzzyFileFinder. This will scan the
104
104
  # given +directory+, using +ceiling+ as the maximum number
105
105
  # of entries to scan. If there are more than +ceiling+ entries
106
106
  # a TooManyEntries exception will be raised.
107
- def initialize(directory=".", ceiling=10_000)
108
- @root = Directory.new(directory)
107
+ def initialize(directories=['.'], ceiling=10_000)
108
+ directories = directories.any? ? directories : ['.']
109
+
110
+ # expand any paths with ~
111
+ root_dirnames = directories.map { |d| File.expand_path(d) }.select { |d| File.directory?(d) }
112
+
113
+ @roots = root_dirnames.map { |d| Directory.new(d) }
109
114
  @ceiling = ceiling
110
115
  rescan!
111
116
  end
@@ -114,10 +119,10 @@ class FuzzyFileFinder
114
119
  # you'll need to call this to force the finder to be aware of
115
120
  # the changes.
116
121
  def rescan!
117
- root.children.clear
122
+ roots.each { |r| r.children.clear }
118
123
  @file_count = 0
119
124
  @directory_count = 0
120
- follow_tree(root.name, root)
125
+ roots.each { |r| follow_tree(r.name, r) }
121
126
  end
122
127
 
123
128
  # Takes the given +pattern+ (which must be a string) and searches
@@ -168,7 +173,9 @@ class FuzzyFileFinder
168
173
  file_regex_raw = "^(.*?)" << make_pattern(file_name_part) << "(.*)$"
169
174
  file_regex = Regexp.new(file_regex_raw, Regexp::IGNORECASE)
170
175
 
171
- do_search(path_regex, path_parts.length, file_regex, root, &block)
176
+ roots.each do |root|
177
+ do_search(path_regex, path_parts.length, file_regex, root, &block)
178
+ end
172
179
  end
173
180
 
174
181
  # Takes the given +pattern+ (which must be a string, formatted as
@@ -185,7 +192,7 @@ class FuzzyFileFinder
185
192
 
186
193
  # Displays the finder object in a sane, non-explosive manner.
187
194
  def inspect #:nodoc:
188
- "#<%s:0x%x root=%s, files=%d, directories=%d>" % [self.class.name, object_id, root.name.inspect, file_count, directory_count]
195
+ "#<%s:0x%x roots=%s, files=%d, directories=%d>" % [self.class.name, object_id, roots.map { |r| r.name.inspect }.join(", "), file_count, directory_count]
189
196
  end
190
197
 
191
198
  private
@@ -285,10 +292,13 @@ class FuzzyFileFinder
285
292
  path_match_score = 1
286
293
  end
287
294
 
295
+ # determine whether +under+ is one of our root objects or not
296
+ is_root = roots.any? { |root| root == under }
297
+
288
298
  # For each child of the directory, search under subdirectories, or
289
299
  # match files.
290
300
  under.children.each do |entry|
291
- full = under == root ? entry.name : File.join(under.name, entry.name)
301
+ full = is_root ? entry.name : File.join(under.name, entry.name)
292
302
  if entry.directory?
293
303
  do_search(path_regex, path_segments, file_regex, entry, &block)
294
304
  elsif (path_regex.nil? || path_match) && file_match = entry.name.match(file_regex)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jamis-fuzzy_file_finder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamis Buck
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-09 00:00:00 -07:00
12
+ date: 2008-10-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15