开发者

Making FSSM gem (file watcher) do it's thing to all files when it boots

I have a simple FSSM (File System State Monitor) script setup to watch some files and do some things with them when they are changed. It's woking great.

However, I want it to process any files it has an update handler for when I boot my script. As i开发者_StackOverflow中文版t is now, if I make edits to files before I start the script then my edits arent picked up until I save the file again. And in a project with dozens of files being watched, that is less than ideal.

So how make FSSM process every file it is configured to watch when my script launches?

A snippet of what I have now:

monitor = FSSM::Monitor.new
monitor.path '.' do
  glob '**/*.coffee'

  update do |base, relative|
    coffee base, relative
  end

  delete do |base, relative|
    remove base, relative
  end
end
monitor.run

I'd like it to run the update clause on launch so that any files edited while they were not being watched would get immediately processed.


The simplest method would probably be to update the timestamp of a zero-byte file on each call of the update clause, then on launch process any files that are newer than that marker file. Since the update clause will need to be used in two places, store it as lambda.

# marker file
ts = ".timestamp"
File.open(ts,"w"){} unless File.exists? ts


# store the update block, so we're DRY
update_clause = lambda do |base, relative| 
       coffee base, relative
       atime = mtime = Time.now
       File.utime(atime, mtime, ts)
end

# run the update against any files newer than the timestamp file
Dir["**/*.coffee"].each do |f|
    if File.mtime(f) > File.mtime(ts)
       update_clause.call(File.dirname(f), File.basename(f))
    end
end

monitor = FSSM::Monitor.new
monitor.path '.' do
  glob '**/*.coffee'

  update &update_clause

  delete do |base, relative|
    remove base, relative
  end
end
monitor.run

I'm fairly new to Ruby, so there may be a cleaner or more idiomatic syntax for this, but the basic idea should take care of you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜