Class: File::Visitor

Inherits:
Object
  • Object
show all
Defined in:
lib/file/visitor.rb,
lib/file/visitor/filter.rb,
lib/file/visitor/version.rb,
lib/file/visitor/time_utils.rb

Defined Under Namespace

Modules: TimeUtils Classes: Filter, FilterDispatcher

Constant Summary collapse

FILTER_NS_BASE =
File::Visitor::Filter
VERSION =
"0.1.1"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeVisitor

Returns a new instance of Visitor.



14
15
16
17
18
# File 'lib/file/visitor.rb', line 14

def initialize
  @filters = []

  @visit_dot_dir = false
end

Instance Attribute Details

#filtersObject (readonly)

Returns the value of attribute filters.



9
10
11
# File 'lib/file/visitor.rb', line 9

def filters
  @filters
end

#visit_dot_dirObject

Returns the value of attribute visit_dot_dir.



10
11
12
# File 'lib/file/visitor.rb', line 10

def visit_dot_dir
  @visit_dot_dir
end

Instance Method Details

#add_filter(*args, &block) ⇒ Object

3 ways to register filter

  1. built-in filter filter.add_filter(:mtime, :passed, 30, :days)

  2. custom filter filter.add_filter(my_filter) (my_filter must implements match?(path) method)

  3. block filter filter.add_filter do |path|

    # filter operations
    

    end



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/file/visitor.rb', line 54

def add_filter(*args, &block)
  # 3. block filter
  if block_given?
    filter = File::Visitor::Filter::Proc.new(block)
    @filters.push(filter)
    return true
  end

  # 2. custom filter
  if (1 == args.size)
    custom_filter = args.shift
    unless (custom_filter.respond_to?(:match?))
      raise ArgumentError,
        "custom_filter must implement match?()"
    end
    @filters.push(custom_filter)
    return true
  end

  # 1. built-in filter
  filter_class = File::Visitor::FilterDispatcher.dispatch(args.shift)
  @filters.push(filter_class.new(*args))
  true
end

#dir_list(dir) ⇒ Object



34
35
36
37
38
# File 'lib/file/visitor.rb', line 34

def dir_list(dir)
  dirs = []
  visit_dir(dir) { |path| dirs << path }
  dirs
end

#file_list(dir) ⇒ Object



28
29
30
31
32
# File 'lib/file/visitor.rb', line 28

def file_list(dir)
  files = []
  visit(dir) { |path| files << path }
  files
end

#target?(path) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
82
83
84
85
86
87
# File 'lib/file/visitor.rb', line 79

def target?(path)
  # all the paths are target when no filters given
  return true unless @filters

  @filters.each do |filter|
    return false unless filter.match?(path)
  end
  true
end

#visit(dir, &handler) ⇒ Object



20
21
22
# File 'lib/file/visitor.rb', line 20

def visit(dir, &handler)
  visit_with_mode(dir, :file, &handler)
end

#visit_dir(dir, &handler) ⇒ Object



24
25
26
# File 'lib/file/visitor.rb', line 24

def visit_dir(dir, &handler)
  visit_with_mode(dir, :dir, &handler)
end