stowaway 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
data/TODO.txt CHANGED
@@ -4,6 +4,5 @@
4
4
  the files that were only partially matched on name.
5
5
  * ignore vendor folder
6
6
  * ignore spec folder
7
- * move appropriate sweeper tests to matcher
7
+ * DRY options.rb
8
8
  * specify runner.rb
9
- * clean up it's dependencies
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 1
4
- :patch: 9
4
+ :patch: 10
5
5
  :build:
data/bin/stowaway CHANGED
@@ -1,5 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'lib/stowaway/runner'
4
- runner = Stowaway::Runner.new(ARGV)
4
+
5
+ options = Stowaway::Options.new(ARGV)
6
+ locator = Stowaway::Locator.new(options.file_types)
7
+ sweeper = Stowaway::Sweeper.new
8
+ runner = Stowaway::Runner.new(options, locator, sweeper)
5
9
  runner.run
@@ -4,29 +4,22 @@ require_relative 'file'
4
4
  module Stowaway
5
5
  class Locator
6
6
  include FSHelpyHelp
7
-
7
+
8
8
  def initialize(extensions)
9
9
  @extensions = extensions
10
10
  @ignore = [/^\./]
11
11
  end
12
-
13
- def type?(file)
14
- @extensions.each do |e|
15
- return true if file.match(/#{e}$/)
16
- end
17
- false
18
- end
19
-
12
+
20
13
  def find_all(path, files = [])
21
14
  @root = path if @root.nil?
22
15
 
23
16
  dir = Dir.new(path)
24
-
17
+
25
18
  dir.each do |f|
26
19
  next if ignore?(f)
27
-
20
+
28
21
  file = File.join(dir.path, f)
29
-
22
+
30
23
  if File.directory?(file)
31
24
  find_all file, files
32
25
  elsif type?(f)
@@ -35,6 +28,12 @@ module Stowaway
35
28
  end
36
29
  files
37
30
  end
38
-
31
+
32
+ def type?(file)
33
+ @extensions.each do |e|
34
+ return true if file.match(/#{e}$/)
35
+ end
36
+ false
37
+ end
39
38
  end
40
39
  end
@@ -8,34 +8,41 @@ module Stowaway
8
8
 
9
9
  def initialize(argv)
10
10
  @file_types = DEFAULT_FILE_TYPES
11
- parse(argv)
12
- @path = argv[0]
11
+ @argv = argv
12
+ parse
13
13
  end
14
14
 
15
15
  private
16
+ def parse
17
+ OptionParser.new do |opts|
18
+ opts.banner = "Usage: stowaway [ options ] path/to/site"
16
19
 
17
- def parse(argv)
18
- OptionParser.new do |opts|
19
- opts.banner = "Usage: stowaway [ options ] path/to/site"
20
-
21
- opts.on("-t", "--types <TYPES>", String, "File types to search for (ex: .jpg .gif)") do |ext|
22
- @file_types = ext.split(' ')
23
- end
20
+ parse_types(opts)
21
+ parse_help(opts)
24
22
 
25
- opts.on("-h", "--help", "Show this message") do
26
- puts opts
27
- exit
28
- end
29
-
30
23
  begin
31
- argv = ["-h"] if argv.empty?
32
- opts.parse!(argv)
24
+ @argv = ["-h"] if @argv.empty?
25
+ opts.parse!(@argv)
33
26
  rescue OptionParser::ParseError => e
34
27
  STDERR.puts e.message, "\n", opts
35
28
  exit(-1)
36
29
  end
37
-
30
+
31
+ @path = @argv[0]
38
32
  end
39
33
  end
40
- end
34
+
35
+ def parse_types opts
36
+ opts.on("-t", "--types <TYPES>", String, "File types to search for (ex: .jpg .gif)") do |ext|
37
+ @file_types = ext.split(' ')
38
+ end
39
+ end
40
+
41
+ def parse_help opts
42
+ opts.on("-h", "--help", "Show this message") do
43
+ puts opts
44
+ exit
45
+ end
46
+ end
47
+ end
41
48
  end
@@ -5,19 +5,18 @@ require_relative 'sweeper'
5
5
  module Stowaway
6
6
  class Runner
7
7
 
8
- def initialize(argv)
9
- @options = Options.new(argv)
8
+ def initialize(options, locator, sweeper)
9
+ @options = options
10
+ @locator = locator
11
+ @sweeper = sweeper
10
12
  end
11
13
 
12
14
  def run
15
+ path = @options.path
13
16
  print "\nLocating files ... "
14
- locator = Stowaway::Locator.new(@options.file_types)
15
- files = locator.find_all @options.path
16
- @total = files.length
17
- p "#{@total} files located"
18
-
19
- fs = Stowaway::Sweeper.new files
20
- respond fs.sweep @options.path
17
+ files = @locator.find_all(path)
18
+ print "#{files.length} files located\n"
19
+ respond @sweeper.sweep(path, files)
21
20
  end
22
21
 
23
22
  private
@@ -5,18 +5,24 @@ require_relative "file"
5
5
  require "ostruct"
6
6
 
7
7
  module Stowaway
8
+
9
+ # Sweeper will sweep through a directory recursively (path) and try to find
10
+ # references to files in the array of FileObjs passed in as the second
11
+ # parameter.
12
+
8
13
  class Sweeper
9
14
  include FSHelpyHelp
10
15
 
11
- def initialize(files, status = Status.new, matcher = Matcher.new, ext_to_ignore = [])
12
- @result = OpenStruct.new({ :files => files, :name_only_matches => []})
16
+ def initialize(status = Status.new, matcher = Matcher.new, ext_to_ignore = [])
13
17
  @status = status
14
18
  @matcher = matcher
15
19
  @ignore = ext_to_ignore || []
16
20
  @ignore += [/^\.|\.jpg$|\.jpeg$|\.gif$|\.png$|\.ico$|\.bmp$/i]
17
21
  end
18
22
 
19
- def sweep(path)
23
+ def sweep(path, files=nil)
24
+ @result ||= OpenStruct.new({ :files => files, :name_only_matches => []})
25
+
20
26
  dir = Dir.new(path)
21
27
 
22
28
  dir.each do |f|
@@ -6,59 +6,58 @@ require "lib/stowaway/matcher"
6
6
  describe Stowaway::Sweeper do
7
7
 
8
8
  def sweeper(ignore = nil)
9
- @sweeper ||= Stowaway::Sweeper.new(@files, @status_mock, Stowaway::Matcher.new, ignore)
9
+ @sweeper ||= Stowaway::Sweeper.new(@status_mock, Stowaway::Matcher.new, ignore)
10
10
  end
11
11
 
12
12
  before(:each) do
13
- @files = []
14
13
  @status_mock = mock("status_mock", :null_object => true)
15
14
  end
16
15
 
17
16
  it "should remove files when a reference to the file is found in source" do
18
- @files << Stowaway::FileObj.new("/fake/path1/button.jpg")
19
- sweeper.sweep("spec/data")
20
- @files.should be_empty
17
+ files = [Stowaway::FileObj.new("/fake/path1/button.jpg")]
18
+ sweeper.sweep("spec/data", files)
19
+ files.should be_empty
21
20
  end
22
21
 
23
22
  it "should return an OpenStruct with the result of the sweeping" do
24
- result = sweeper.sweep("spec/data")
23
+ result = sweeper.sweep("spec/data", [])
25
24
  result.files.should be_an_instance_of Array
26
25
  result.name_only_matches.should be_an_instance_of Array
27
26
  end
28
27
 
29
28
  it "should not sweep through ignored file types" do
30
- @files << Stowaway::FileObj.new("/fake/path1/button.jpg")
31
- sweeper([/^\.|\.rb$|\.txt$/]).sweep("spec/data")
32
- @files.length.should == 1
29
+ files = [Stowaway::FileObj.new("/fake/path1/button.jpg")]
30
+ sweeper([/^\.|\.rb$|\.txt$/]).sweep("spec/data", files)
31
+ files.length.should == 1
33
32
  end
34
33
 
35
34
  it "should output a message when sweeping through a file" do
36
35
  @status_mock.should_receive(:out).with("Sweeping: spec/data/testfile1.txt").once
37
- sweeper([/^\.|\.rb$|testfile2/]).sweep("spec/data")
36
+ sweeper([/^\.|\.rb$|testfile2/]).sweep("spec/data", [])
38
37
  end
39
38
 
40
39
  it "should flush the output after sweeping through a file" do
41
40
  @status_mock.should_receive(:flush).once
42
- sweeper([/^\.|\.rb$|testfile2/]).sweep("spec/data")
41
+ sweeper([/^\.|\.rb$|testfile2/]).sweep("spec/data", [])
43
42
  end
44
43
 
45
44
  it "should files of the same name but with different paths as last resort" do
46
- @files << Stowaway::FileObj.new("/fake/path1/button.jpg")
47
- @files << Stowaway::FileObj.new("/fake/path2/button.jpg")
48
- sweeper([/^\.|\.rb$/]).sweep("spec/data")
49
- @files.should be_empty
45
+ files = [Stowaway::FileObj.new("/fake/path1/button.jpg"),
46
+ Stowaway::FileObj.new("/fake/path2/button.jpg")]
47
+ sweeper([/^\.|\.rb$/]).sweep("spec/data", files)
48
+ files.should be_empty
50
49
  end
51
50
 
52
- it "should add a file matched on name only to an array of partially matched files" do
53
- @files << Stowaway::FileObj.new("/missing/button.jpg")
54
- sweeper([/^\.|\.rb$/]).sweep("spec/data").should have(1).name_only_matches
51
+ it "should add a file to an array of partially matched files when matched on name only" do
52
+ files = [Stowaway::FileObj.new("/missing/button.jpg")]
53
+ sweeper([/^\.|\.rb$/]).sweep("spec/data", files).should have(1).name_only_matches
55
54
  end
56
55
 
57
56
  it "should not remove files that were not found" do
58
- @files << Stowaway::FileObj.new("/a/stowaway.txt")
59
- sweeper([/^\.|\.rb$/]).sweep("spec/data")
60
- @files.should_not be_empty
61
- @files.first.fullpath.should == "/a/stowaway.txt"
57
+ files = [Stowaway::FileObj.new("/a/stowaway.txt")]
58
+ sweeper([/^\.|\.rb$/]).sweep("spec/data", files)
59
+ files.should_not be_empty
60
+ files.first.fullpath.should == "/a/stowaway.txt"
62
61
  end
63
62
 
64
63
  end
data/spec/runner_spec.rb CHANGED
@@ -2,7 +2,29 @@ require 'spec/spec_helper'
2
2
  require 'lib/stowaway/runner'
3
3
 
4
4
  describe Stowaway::Runner do
5
- it "should be tested :)" do
6
-
5
+
6
+ before(:each) do
7
+ @argv = []
8
+ end
9
+
10
+ def runner
11
+ options = Stowaway::Options.new(@argv)
12
+ locator = Stowaway::Locator.new(options.file_types)
13
+ sweeper = Stowaway::Sweeper.new
14
+ @runner ||= Stowaway::Runner.new(options, locator, sweeper)
15
+ end
16
+
17
+ it "should notify user that file location has begun" do
18
+ @argv << "."
19
+ runner.should_receive(:print).with("\nLocating files ... ")
20
+ runner.should_receive(:print).any_number_of_times
21
+ runner.run
22
+ end
23
+
24
+ it "should notify user of the total number of files that were found" do
25
+ @argv << "."
26
+ runner.should_receive(:print).with("0 files located\n").any_number_of_times
27
+ runner.should_receive(:print).any_number_of_times
28
+ runner.run
7
29
  end
8
- end
30
+ end
data/stowaway.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{stowaway}
8
- s.version = "0.1.9"
8
+ s.version = "0.1.10"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Emilio Cavazos"]
12
- s.date = %q{2010-02-21}
12
+ s.date = %q{2010-02-23}
13
13
  s.default_executable = %q{stowaway}
14
14
  s.email = %q{ejcavazos@gmail.com}
15
15
  s.executables = ["stowaway"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stowaway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emilio Cavazos
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-21 00:00:00 -08:00
12
+ date: 2010-02-23 00:00:00 -08:00
13
13
  default_executable: stowaway
14
14
  dependencies: []
15
15