Class: File::Visitor
- Inherits:
-
Object
- Object
- File::Visitor
- 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
-
#filters ⇒ Object
readonly
Returns the value of attribute filters.
-
#visit_dot_dir ⇒ Object
Returns the value of attribute visit_dot_dir.
Instance Method Summary collapse
-
#add_filter(*args, &block) ⇒ Object
3 ways to register filter.
- #dir_list(dir) ⇒ Object
- #file_list(dir) ⇒ Object
-
#initialize ⇒ Visitor
constructor
A new instance of Visitor.
- #target?(path) ⇒ Boolean
- #visit(dir, &handler) ⇒ Object
- #visit_dir(dir, &handler) ⇒ Object
Constructor Details
#initialize ⇒ Visitor
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
#filters ⇒ Object (readonly)
Returns the value of attribute filters.
9 10 11 |
# File 'lib/file/visitor.rb', line 9 def filters @filters end |
#visit_dot_dir ⇒ Object
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
-
built-in filter filter.add_filter(:mtime, :passed, 30, :days)
-
custom filter filter.add_filter(my_filter) (my_filter must implements match?(path) method)
-
block filter filter.add_filter do |path|
# filter operationsend
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
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 |