Class: Pho::FileManagement::AbstractFileManager
- Inherits:
-
Object
- Object
- Pho::FileManagement::AbstractFileManager
- Defined in:
- lib/pho/file_management.rb
Direct Known Subclasses
Constant Summary collapse
- OK =
"ok"- FAIL =
"fail"- TRACKING_DIR =
".pho"
Instance Attribute Summary collapse
-
#dir ⇒ Object
readonly
Returns the value of attribute dir.
-
#store(recursive = false) ⇒ Object
readonly
Store all files that match the file name in directory.
Instance Method Summary collapse
-
#changed?(file) ⇒ Boolean
Has this file changed (i.e have a newer mtime) than its tracking file Allows files that have been updated in a collection to be easily identified New files (i.e untracked) are always considered to be changed.
- #changed_files(recursive = false) ⇒ Object
-
#failures(recursive = false) ⇒ Object
List failures.
- #get_fail_file_for(filename) ⇒ Object
- #get_ok_file_for(filename) ⇒ Object
-
#initialize(store, dir, ok_suffix = OK, fail_suffix = FAIL) ⇒ AbstractFileManager
constructor
A new instance of AbstractFileManager.
-
#new_files(recursive = false) ⇒ Object
List any new files in the directory.
-
#reset(recursive = false) ⇒ Object
Reset the directory to clear out any previous statuses.
-
#retry_failures(recursive = false) ⇒ Object
Retry anything known to have failed.
- #store_changes(recursive = false) ⇒ Object
-
#stored?(file) ⇒ Boolean
returns true if there is a fail or ok file, false otherwise.
- #stored_files(recursive = false) ⇒ Object
-
#successes(recursive = false) ⇒ Object
List successes.
-
#summary(recursive = false) ⇒ Object
Summarize the state of the collection to the provided IO object Creates a simple report.
Constructor Details
#initialize(store, dir, ok_suffix = OK, fail_suffix = FAIL) ⇒ AbstractFileManager
14 15 16 17 18 19 |
# File 'lib/pho/file_management.rb', line 14 def initialize(store, dir, ok_suffix=OK, fail_suffix=FAIL) @store = store @dir = dir @ok_suffix = ok_suffix @fail_suffix = fail_suffix end |
Instance Attribute Details
#dir ⇒ Object (readonly)
Returns the value of attribute dir.
7 8 9 |
# File 'lib/pho/file_management.rb', line 7 def dir @dir end |
#store(recursive = false) ⇒ Object (readonly)
Store all files that match the file name in directory
22 23 24 |
# File 'lib/pho/file_management.rb', line 22 def store @store end |
Instance Method Details
#changed?(file) ⇒ Boolean
Has this file changed (i.e have a newer mtime) than its tracking file Allows files that have been updated in a collection to be easily identified New files (i.e untracked) are always considered to be changed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/pho/file_management.rb', line 82 def changed?(file) if !stored?(file) return true end ok_file = get_ok_file_for(file) fail_file = get_fail_file_for(file) f = File.new(file) if ( ( File.exists?(ok_file) && f.stat.mtime > File.new(ok_file).stat.mtime ) or ( File.exists?(fail_file) && f.stat.mtime > File.new(fail_file).stat.mtime ) ) return true end return false end |
#changed_files(recursive = false) ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/pho/file_management.rb', line 106 def changed_files(recursive=false) changed = Array.new list(recursive).each do |file| changed << file if changed?(file) end return changed end |
#failures(recursive = false) ⇒ Object
List failures
124 125 126 127 128 129 130 |
# File 'lib/pho/file_management.rb', line 124 def failures(recursive=false) fails = Array.new list(recursive).each do |file| fails << file if File.exists?( get_fail_file_for(file) ) end return fails end |
#get_fail_file_for(filename) ⇒ Object
152 153 154 155 156 157 |
# File 'lib/pho/file_management.rb', line 152 def get_fail_file_for(filename) relative_path = filename.gsub(@dir, "") base = File.basename(filename) relative_path = relative_path.gsub(base, "#{TRACKING_DIR}/#{base}") return "#{@dir}#{relative_path}.#{@fail_suffix}" end |
#get_ok_file_for(filename) ⇒ Object
159 160 161 162 163 164 |
# File 'lib/pho/file_management.rb', line 159 def get_ok_file_for(filename) relative_path = filename.gsub(@dir, "") base = File.basename(filename) relative_path = relative_path.gsub(base, "#{TRACKING_DIR}/#{base}") return "#{@dir}#{relative_path}.#{@ok_suffix}" end |
#new_files(recursive = false) ⇒ Object
List any new files in the directory
115 116 117 118 119 120 121 |
# File 'lib/pho/file_management.rb', line 115 def new_files(recursive=false) newfiles = Array.new list(recursive).each do |file| newfiles << file if !stored?(file) end return newfiles end |
#reset(recursive = false) ⇒ Object
Reset the directory to clear out any previous statuses
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/pho/file_management.rb', line 55 def reset(recursive=false) if recursive pattern = "**/#{TRACKING_DIR}/*" else pattern = "/#{TRACKING_DIR}/*" end Dir.glob( File.join(@dir, "#{pattern}.#{@fail_suffix}") ).each do |file| File.delete(file) end Dir.glob( File.join(@dir, "#{pattern}.#{@ok_suffix}") ).each do |file| File.delete(file) end end |
#retry_failures(recursive = false) ⇒ Object
Retry anything known to have failed
31 32 33 34 35 36 37 38 39 |
# File 'lib/pho/file_management.rb', line 31 def retry_failures(recursive=false) retries = failures(recursive) retries.each do |filename| File.delete( get_fail_file_for(filename) ) #store it file = File.new(filename) store_file(file, filename) end end |
#store_changes(recursive = false) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/pho/file_management.rb', line 41 def store_changes(recursive=false) changes = changed_files(recursive) changes.each do |filename| #cleanup tracking files f = get_fail_file_for(filename) File.delete( f ) if File.exists?(f) f = get_ok_file_for(filename) File.delete( f ) if File.exists?(f) file = File.new(filename) store_file(file, filename) end end |
#stored?(file) ⇒ Boolean
returns true if there is a fail or ok file, false otherwise
70 71 72 73 74 75 76 77 |
# File 'lib/pho/file_management.rb', line 70 def stored?(file) ok_file = get_ok_file_for(file) fail_file = get_fail_file_for(file) if ( File.exists?(ok_file) or File.exists?(fail_file) ) return true end return false end |
#stored_files(recursive = false) ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/pho/file_management.rb', line 98 def stored_files(recursive=false) stored = Array.new list(recursive).each do |file| stored << file if stored?(file) end return stored end |
#successes(recursive = false) ⇒ Object
List successes
133 134 135 136 137 138 139 |
# File 'lib/pho/file_management.rb', line 133 def successes(recursive=false) successes = Array.new list(recursive).each do |file| successes << file if File.exists?( get_ok_file_for(file) ) end return successes end |
#summary(recursive = false) ⇒ Object
Summarize the state of the collection to the provided IO object Creates a simple report
143 144 145 146 147 148 149 150 |
# File 'lib/pho/file_management.rb', line 143 def summary(recursive=false) failures = failures(recursive) successes = successes(recursive) newfiles = new_files(recursive) total = failures.size + successes.size + newfiles.size summary = "#{@dir} #{recursive ? " and sub-directories" : ""} contains #{total} files: #{successes.size} stored, #{failures.size} failed, #{newfiles.size} new" return summary end |