Class: MtimeTracker
- Inherits:
-
Object
- Object
- MtimeTracker
- Defined in:
- lib/spittle/mtime_tracker.rb
Instance Method Summary collapse
- #changeset ⇒ Object
- #cleanup ⇒ Object
- #current_mtimes ⇒ Object
- #file_changed?(file) ⇒ Boolean
- #files ⇒ Object
- #fresh? ⇒ Boolean
- #has_changes? ⇒ Boolean
-
#initialize(dir, options = {}) ⇒ MtimeTracker
constructor
A new instance of MtimeTracker.
- #mtime_file ⇒ Object
- #mtimes ⇒ Object
- #read_mtimes ⇒ Object
- #reset ⇒ Object
- #update ⇒ Object
- #without_exclusions(files) ⇒ Object
Constructor Details
#initialize(dir, options = {}) ⇒ MtimeTracker
Returns a new instance of MtimeTracker.
2 3 4 5 |
# File 'lib/spittle/mtime_tracker.rb', line 2 def initialize(dir, = {}) @dir = dir @options = end |
Instance Method Details
#changeset ⇒ Object
53 54 55 |
# File 'lib/spittle/mtime_tracker.rb', line 53 def changeset files.select{|f| file_changed?(f)} end |
#cleanup ⇒ Object
7 8 9 |
# File 'lib/spittle/mtime_tracker.rb', line 7 def cleanup File.delete(mtime_file) rescue nil end |
#current_mtimes ⇒ Object
26 27 28 29 30 |
# File 'lib/spittle/mtime_tracker.rb', line 26 def current_mtimes @current ||= files.inject({}) do |map, f| map[f] = File.mtime(f).to_i; map end end |
#file_changed?(file) ⇒ Boolean
32 33 34 |
# File 'lib/spittle/mtime_tracker.rb', line 32 def file_changed?(file) mtimes[file] != current_mtimes[file] end |
#files ⇒ Object
15 16 17 18 |
# File 'lib/spittle/mtime_tracker.rb', line 15 def files return @files if @files @files = without_exclusions(Dir.glob(@dir + "/**/*")) end |
#fresh? ⇒ Boolean
11 12 13 |
# File 'lib/spittle/mtime_tracker.rb', line 11 def fresh? not File.exists?(mtime_file) end |
#has_changes? ⇒ Boolean
57 58 59 |
# File 'lib/spittle/mtime_tracker.rb', line 57 def has_changes? not changeset.empty? end |
#mtime_file ⇒ Object
61 62 63 |
# File 'lib/spittle/mtime_tracker.rb', line 61 def mtime_file @dir + "/.mtimes" end |
#mtimes ⇒ Object
36 37 38 39 40 |
# File 'lib/spittle/mtime_tracker.rb', line 36 def mtimes return @mtimes if @mtimes return {} unless File.exists?(mtime_file) @mtimes = read_mtimes end |
#read_mtimes ⇒ Object
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/spittle/mtime_tracker.rb', line 42 def read_mtimes mtimes = {} File.open(mtime_file) do |f| f.each do |line| name, time = line.split("\t") mtimes[name] = time.to_i end end mtimes end |
#reset ⇒ Object
74 75 76 77 78 |
# File 'lib/spittle/mtime_tracker.rb', line 74 def reset @mtimes = nil @current = nil @files = nil end |
#update ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/spittle/mtime_tracker.rb', line 65 def update File.open(mtime_file, 'w') do |f| current = current_mtimes flat = current.map{|k, v| "#{k}\t#{v}\n"}.join f.write flat end reset end |
#without_exclusions(files) ⇒ Object
20 21 22 23 24 |
# File 'lib/spittle/mtime_tracker.rb', line 20 def without_exclusions(files) return files unless @options[:exclude] exclusions = [@options[:exclude]].flatten files.select{|f| not exclusions.any?{|e| f.match e}} end |