file-monitor 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +24 -7
 - data/bin/f5.rb +107 -0
 - data/examples/f5.rb +1 -0
 - data/examples/use-creator.rb +43 -0
 - data/examples/use-filter.rb +3 -1
 - data/examples/use-inherit.rb +1 -0
 - data/lib/file-monitor.rb +29 -6
 - metadata +8 -26
 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Ruby File Monitor
         
     | 
| 
       2 
2 
     | 
    
         
             
            =================
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            Ruby File Monitor is a easy way to watch the directories and files,  
     | 
| 
      
 4 
     | 
    
         
            +
            Ruby File Monitor is a easy way to watch the directories and files, execute commands when them changed. Use for situation like Auto refresh webpage, Auto execute unit tests, Auto compile CoffeeScript, Haml and so on. It's base on [rb-inotify](https://github.com/nex3/rb-inotify), So it only works in inotify supported system such as Linux.
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Requirements
         
     | 
| 
       7 
7 
     | 
    
         
             
            ------------
         
     | 
| 
         @@ -36,7 +36,7 @@ Install from source 
     | 
|
| 
       36 
36 
     | 
    
         
             
                git clone https://github.com/jiangmiao/ruby-file-monitor
         
     | 
| 
       37 
37 
     | 
    
         
             
                cd ruby-file-monitor
         
     | 
| 
       38 
38 
     | 
    
         
             
                gem build file-monitor.gemspec
         
     | 
| 
       39 
     | 
    
         
            -
                gem install file-monitor-0.1. 
     | 
| 
      
 39 
     | 
    
         
            +
                gem install --local --user-install file-monitor-0.1.3.gem 
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
            Install from gem server
         
     | 
| 
       42 
42 
     | 
    
         | 
| 
         @@ -45,13 +45,31 @@ Install from gem server 
     | 
|
| 
       45 
45 
     | 
    
         
             
            Usage
         
     | 
| 
       46 
46 
     | 
    
         
             
            -----
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
      
 48 
     | 
    
         
            +
                #!/usr/bin/env ruby
         
     | 
| 
      
 49 
     | 
    
         
            +
                # coding: utf-8
         
     | 
| 
      
 50 
     | 
    
         
            +
                # File: examples/use-creator.rb
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       48 
52 
     | 
    
         
             
                require 'rubygems'
         
     | 
| 
       49 
53 
     | 
    
         | 
| 
      
 54 
     | 
    
         
            +
                lib_dir = File.join File.dirname(__FILE__), '../lib'
         
     | 
| 
      
 55 
     | 
    
         
            +
                $:.unshift lib_dir unless $:.include? lib_dir
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                require 'file-monitor'
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                dir = ARGV[0] || '.'
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
       50 
61 
     | 
    
         
             
                # watch current working directory
         
     | 
| 
       51 
     | 
    
         
            -
                FileMonitor.watch  
     | 
| 
      
 62 
     | 
    
         
            +
                FileMonitor.watch dir do
         
     | 
| 
       52 
63 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                  #  
     | 
| 
       54 
     | 
    
         
            -
                  #  
     | 
| 
      
 64 
     | 
    
         
            +
                  # set frequency 0.2 second (optional default is 0.2)
         
     | 
| 
      
 65 
     | 
    
         
            +
                  # frequency 0.2
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  # do not follow the symlink (optional default is false)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  # follow_symlink false
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  # do not watch directory contains git and svn
         
     | 
| 
      
 72 
     | 
    
         
            +
                  # the last charactor '/' has been trimmed
         
     | 
| 
       55 
73 
     | 
    
         
             
                  dirs {
         
     | 
| 
       56 
74 
     | 
    
         
             
                    disallow /git$|svn$/
         
     | 
| 
       57 
75 
     | 
    
         
             
                  }
         
     | 
| 
         @@ -59,7 +77,7 @@ Usage 
     | 
|
| 
       59 
77 
     | 
    
         
             
                  # record ruby files only
         
     | 
| 
       60 
78 
     | 
    
         
             
                  # it equals files /\.rb$/
         
     | 
| 
       61 
79 
     | 
    
         
             
                  files {
         
     | 
| 
       62 
     | 
    
         
            -
                    disallow  
     | 
| 
      
 80 
     | 
    
         
            +
                    disallow /.*/
         
     | 
| 
       63 
81 
     | 
    
         
             
                    allow /\.rb$/
         
     | 
| 
       64 
82 
     | 
    
         
             
                  }
         
     | 
| 
       65 
83 
     | 
    
         | 
| 
         @@ -69,7 +87,6 @@ Usage 
     | 
|
| 
       69 
87 
     | 
    
         
             
                    puts events.size()
         
     | 
| 
       70 
88 
     | 
    
         
             
                    puts "do something"
         
     | 
| 
       71 
89 
     | 
    
         
             
                  }
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
90 
     | 
    
         
             
                end
         
     | 
| 
       74 
91 
     | 
    
         | 
| 
       75 
92 
     | 
    
         
             
            Examples
         
     | 
    
        data/bin/f5.rb
    ADDED
    
    | 
         @@ -0,0 +1,107 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            lib_dir = File.join File.dirname(__FILE__), '../lib'
         
     | 
| 
      
 7 
     | 
    
         
            +
            $:.unshift lib_dir unless $:.include? lib_dir
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            require 'file-monitor'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'sinatra'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'getoptlong'
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            class AjaxF5 < FileMonitor
         
     | 
| 
      
 14 
     | 
    
         
            +
              attr_reader :updated_at, :js
         
     | 
| 
      
 15 
     | 
    
         
            +
              def initialize(dir)
         
     | 
| 
      
 16 
     | 
    
         
            +
                super dir
         
     | 
| 
      
 17 
     | 
    
         
            +
                @updated_at = Time.now.to_f
         
     | 
| 
      
 18 
     | 
    
         
            +
                # ajax library from http://code.google.com/p/miniajax/
         
     | 
| 
      
 19 
     | 
    
         
            +
                @js = <<EOT
         
     | 
| 
      
 20 
     | 
    
         
            +
            (function() {
         
     | 
| 
      
 21 
     | 
    
         
            +
              var ajax;
         
     | 
| 
      
 22 
     | 
    
         
            +
              function $(e){if(typeof e=='string')e=document.getElementById(e);return e};
         
     | 
| 
      
 23 
     | 
    
         
            +
              function collect(a,f){var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              ajax={};
         
     | 
| 
      
 26 
     | 
    
         
            +
              ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};
         
     | 
| 
      
 27 
     | 
    
         
            +
              ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};
         
     | 
| 
      
 28 
     | 
    
         
            +
              ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};
         
     | 
| 
      
 29 
     | 
    
         
            +
              ajax.get=function(url,func){ajax.send(url,func,'GET')};
         
     | 
| 
      
 30 
     | 
    
         
            +
              var now = Date.now();
         
     | 
| 
      
 31 
     | 
    
         
            +
              function checkStatus() {
         
     | 
| 
      
 32 
     | 
    
         
            +
                ajax.get("/f5_status", function(rt) {
         
     | 
| 
      
 33 
     | 
    
         
            +
                  if (now < parseFloat(rt)) {
         
     | 
| 
      
 34 
     | 
    
         
            +
                    location.reload(true);
         
     | 
| 
      
 35 
     | 
    
         
            +
                  }
         
     | 
| 
      
 36 
     | 
    
         
            +
                  setTimeout(checkStatus, 500);
         
     | 
| 
      
 37 
     | 
    
         
            +
                });
         
     | 
| 
      
 38 
     | 
    
         
            +
              }
         
     | 
| 
      
 39 
     | 
    
         
            +
              checkStatus();
         
     | 
| 
      
 40 
     | 
    
         
            +
            })();
         
     | 
| 
      
 41 
     | 
    
         
            +
            EOT
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              # simple mark the last updated time
         
     | 
| 
      
 45 
     | 
    
         
            +
              def check(events)
         
     | 
| 
      
 46 
     | 
    
         
            +
                @updated_at = Time.now.to_f
         
     | 
| 
      
 47 
     | 
    
         
            +
                puts "updated at #{@updated_at}"
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              def run
         
     | 
| 
      
 51 
     | 
    
         
            +
                # use new thread to monitor the file
         
     | 
| 
      
 52 
     | 
    
         
            +
                Thread.new do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 54 
     | 
    
         
            +
                    super
         
     | 
| 
      
 55 
     | 
    
         
            +
                  rescue
         
     | 
| 
      
 56 
     | 
    
         
            +
                    puts $!.message
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                f5 = self
         
     | 
| 
      
 61 
     | 
    
         
            +
                set :logging, false
         
     | 
| 
      
 62 
     | 
    
         
            +
                enable :run
         
     | 
| 
      
 63 
     | 
    
         
            +
                get '/f5_status' do
         
     | 
| 
      
 64 
     | 
    
         
            +
                  (f5.updated_at*1000).to_s
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                get '/f5.js' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  f5.js
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                get '*' do
         
     | 
| 
      
 72 
     | 
    
         
            +
                  host = env['SERVER_NAME']
         
     | 
| 
      
 73 
     | 
    
         
            +
                  path = env['REQUEST_PATH']
         
     | 
| 
      
 74 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 75 
     | 
    
         
            +
                    data = open('http://' + host + path) {|f|
         
     | 
| 
      
 76 
     | 
    
         
            +
                      content_type f.meta['content-type']
         
     | 
| 
      
 77 
     | 
    
         
            +
                      f.read
         
     | 
| 
      
 78 
     | 
    
         
            +
                    }
         
     | 
| 
      
 79 
     | 
    
         
            +
                    data.gsub Regexp.new('</body>', Regexp::IGNORECASE), '<script type="text/javascript" src="/f5.js"></script></body>'
         
     | 
| 
      
 80 
     | 
    
         
            +
                  rescue
         
     | 
| 
      
 81 
     | 
    
         
            +
                    $!.message.match /\d+/
         
     | 
| 
      
 82 
     | 
    
         
            +
                      [$&.to_i, {}, '']
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
            end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            dir = ARGV[0] || '.'
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            opts = GetoptLong.new(
         
     | 
| 
      
 91 
     | 
    
         
            +
              [ '--help', '-h', GetoptLong::NO_ARGUMENT]
         
     | 
| 
      
 92 
     | 
    
         
            +
            )
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            opts.each do|opt, arg|
         
     | 
| 
      
 95 
     | 
    
         
            +
              case opt
         
     | 
| 
      
 96 
     | 
    
         
            +
              when '--help'
         
     | 
| 
      
 97 
     | 
    
         
            +
                puts 'ruby f5.rb [project-directory]'
         
     | 
| 
      
 98 
     | 
    
         
            +
                exit
         
     | 
| 
      
 99 
     | 
    
         
            +
              end
         
     | 
| 
      
 100 
     | 
    
         
            +
            end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
            require 'sinatra'
         
     | 
| 
      
 103 
     | 
    
         
            +
            require 'open-uri'
         
     | 
| 
      
 104 
     | 
    
         
            +
            f5 = AjaxF5.new dir
         
     | 
| 
      
 105 
     | 
    
         
            +
            f5.ignored_dirs = /\.git|\.svn/
         
     | 
| 
      
 106 
     | 
    
         
            +
            f5.ignored_files = /\.sw.*|\~/
         
     | 
| 
      
 107 
     | 
    
         
            +
            f5.run
         
     | 
    
        data/examples/f5.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
            # coding: utf-8
         
     | 
| 
      
 3 
     | 
    
         
            +
            # File: examples/use-creator.rb
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require 'rubygems'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            lib_dir = File.join File.dirname(__FILE__), '../lib'
         
     | 
| 
      
 8 
     | 
    
         
            +
            $:.unshift lib_dir unless $:.include? lib_dir
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            require 'file-monitor'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            dir = ARGV[0] || '.'
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            # watch current working directory
         
     | 
| 
      
 15 
     | 
    
         
            +
            FileMonitor.watch dir do
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              # set frequency 0.2 second (optional default is 0.2)
         
     | 
| 
      
 18 
     | 
    
         
            +
              # frequency 0.2
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              # do not follow the symlink (optional default is false)
         
     | 
| 
      
 21 
     | 
    
         
            +
              # follow_symlink false
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              # do not watch directory contains git and svn
         
     | 
| 
      
 25 
     | 
    
         
            +
              # the last charactor '/' has been trimmed
         
     | 
| 
      
 26 
     | 
    
         
            +
              dirs {
         
     | 
| 
      
 27 
     | 
    
         
            +
                disallow /git$|svn$/
         
     | 
| 
      
 28 
     | 
    
         
            +
              }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              # record ruby files only
         
     | 
| 
      
 31 
     | 
    
         
            +
              # it equals files /\.rb$/
         
     | 
| 
      
 32 
     | 
    
         
            +
              files {
         
     | 
| 
      
 33 
     | 
    
         
            +
                disallow /.*/
         
     | 
| 
      
 34 
     | 
    
         
            +
                allow /\.rb$/
         
     | 
| 
      
 35 
     | 
    
         
            +
              }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              # The commands will be runned when file changed
         
     | 
| 
      
 38 
     | 
    
         
            +
              # the events contains all file modified infomation in last 0.2 second
         
     | 
| 
      
 39 
     | 
    
         
            +
              exec {|events|
         
     | 
| 
      
 40 
     | 
    
         
            +
                puts events.size()
         
     | 
| 
      
 41 
     | 
    
         
            +
                puts "do something"
         
     | 
| 
      
 42 
     | 
    
         
            +
              }
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
    
        data/examples/use-filter.rb
    CHANGED
    
    
    
        data/examples/use-inherit.rb
    CHANGED
    
    
    
        data/lib/file-monitor.rb
    CHANGED
    
    | 
         @@ -2,6 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # coding: utf-8
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            require 'rb-inotify'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
            class FileMonitorFilter
         
     | 
| 
       7 
8 
     | 
    
         
             
              def initialize
         
     | 
| 
         @@ -32,6 +33,14 @@ class FileMonitorFilter 
     | 
|
| 
       32 
33 
     | 
    
         
             
                @patterns = []
         
     | 
| 
       33 
34 
     | 
    
         
             
              end
         
     | 
| 
       34 
35 
     | 
    
         | 
| 
      
 36 
     | 
    
         
            +
              def to_s
         
     | 
| 
      
 37 
     | 
    
         
            +
                str = StringIO.new
         
     | 
| 
      
 38 
     | 
    
         
            +
                for pattern in @patterns
         
     | 
| 
      
 39 
     | 
    
         
            +
                  str.puts "#{pattern[0].to_s} #{pattern[1].inspect}"
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                str.string
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
       35 
44 
     | 
    
         
             
              alias_method :d, :disallow
         
     | 
| 
       36 
45 
     | 
    
         
             
              alias_method :a, :allow
         
     | 
| 
       37 
46 
     | 
    
         
             
            end
         
     | 
| 
         @@ -49,17 +58,24 @@ class FileMonitor 
     | 
|
| 
       49 
58 
     | 
    
         
             
                @frequency
         
     | 
| 
       50 
59 
     | 
    
         
             
              end
         
     | 
| 
       51 
60 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
               
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 61 
     | 
    
         
            +
              # options
         
     | 
| 
      
 62 
     | 
    
         
            +
              def follow_symlink=(follow_symlink)
         
     | 
| 
      
 63 
     | 
    
         
            +
                @follow_symlink = follow_symlink
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
              def follow_symlink(*args)
         
     | 
| 
      
 67 
     | 
    
         
            +
                @follow_symlink = args[0] if args.size()
         
     | 
| 
      
 68 
     | 
    
         
            +
                @follow_symlink
         
     | 
| 
       54 
69 
     | 
    
         
             
              end
         
     | 
| 
       55 
70 
     | 
    
         | 
| 
       56 
71 
     | 
    
         
             
              def initialize(project_dir = '.')
         
     | 
| 
       57 
72 
     | 
    
         
             
                @notifier    = INotify::Notifier.new
         
     | 
| 
       58 
73 
     | 
    
         
             
                @project_dir = project_dir
         
     | 
| 
       59 
74 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                @events 
     | 
| 
       61 
     | 
    
         
            -
                @ignores 
     | 
| 
       62 
     | 
    
         
            -
                @frequency 
     | 
| 
      
 75 
     | 
    
         
            +
                @events         = []
         
     | 
| 
      
 76 
     | 
    
         
            +
                @ignores        = []
         
     | 
| 
      
 77 
     | 
    
         
            +
                @frequency      = 0.2
         
     | 
| 
      
 78 
     | 
    
         
            +
                @follow_symlink = false
         
     | 
| 
       63 
79 
     | 
    
         | 
| 
       64 
80 
     | 
    
         
             
                @filters = {
         
     | 
| 
       65 
81 
     | 
    
         
             
                  :files => FileMonitorFilter.new,
         
     | 
| 
         @@ -133,10 +149,15 @@ class FileMonitor 
     | 
|
| 
       133 
149 
     | 
    
         
             
                end
         
     | 
| 
       134 
150 
     | 
    
         
             
                path
         
     | 
| 
       135 
151 
     | 
    
         
             
              end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
       136 
153 
     | 
    
         | 
| 
       137 
154 
     | 
    
         
             
              # Watch a directory
         
     | 
| 
       138 
155 
     | 
    
         
             
              def watch(dir)
         
     | 
| 
       139 
156 
     | 
    
         
             
                dir = trim_dir(dir)
         
     | 
| 
      
 157 
     | 
    
         
            +
                if !@follow_symlink and File.symlink? dir
         
     | 
| 
      
 158 
     | 
    
         
            +
                  puts "ignore symlink directory #{dir}"
         
     | 
| 
      
 159 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 160 
     | 
    
         
            +
                end
         
     | 
| 
       140 
161 
     | 
    
         
             
                if ignored_dir?(dir)
         
     | 
| 
       141 
162 
     | 
    
         
             
                  puts "ignore #{dir}"
         
     | 
| 
       142 
163 
     | 
    
         
             
                  return false
         
     | 
| 
         @@ -170,7 +191,9 @@ class FileMonitor 
     | 
|
| 
       170 
191 
     | 
    
         
             
                    info += 'unknown ' + flags.to_s
         
     | 
| 
       171 
192 
     | 
    
         
             
                  end
         
     | 
| 
       172 
193 
     | 
    
         | 
| 
       173 
     | 
    
         
            -
                   
     | 
| 
      
 194 
     | 
    
         
            +
                  is_dir = flags.include?(:isdir)
         
     | 
| 
      
 195 
     | 
    
         
            +
                  if is_dir and ignored_dir?(event.absolute_name) or 
         
     | 
| 
      
 196 
     | 
    
         
            +
                    !is_dir and ignored_file?(event.absolute_name)
         
     | 
| 
       174 
197 
     | 
    
         
             
                    # the ignored info will not put currently
         
     | 
| 
       175 
198 
     | 
    
         
             
                    info += "i #{event.absolute_name}"
         
     | 
| 
       176 
199 
     | 
    
         
             
                    next
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,12 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: file-monitor
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              prerelease:  
     | 
| 
       5 
     | 
    
         
            -
               
     | 
| 
       6 
     | 
    
         
            -
              - 0
         
     | 
| 
       7 
     | 
    
         
            -
              - 1
         
     | 
| 
       8 
     | 
    
         
            -
              - 2
         
     | 
| 
       9 
     | 
    
         
            -
              version: 0.1.2
         
     | 
| 
      
 4 
     | 
    
         
            +
              prerelease: 
         
     | 
| 
      
 5 
     | 
    
         
            +
              version: 0.1.3
         
     | 
| 
       10 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       11 
7 
     | 
    
         
             
            authors: 
         
     | 
| 
       12 
8 
     | 
    
         
             
            - JiangMiao
         
     | 
| 
         @@ -14,8 +10,7 @@ autorequire: 
     | 
|
| 
       14 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       15 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       16 
12 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
            date: 2011-10-17 00:00:00  
     | 
| 
       18 
     | 
    
         
            -
            default_executable: 
         
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2011-10-17 00:00:00 Z
         
     | 
| 
       19 
14 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       21 
16 
     | 
    
         
             
              name: rb-inotify
         
     | 
| 
         @@ -25,10 +20,6 @@ dependencies: 
     | 
|
| 
       25 
20 
     | 
    
         
             
                requirements: 
         
     | 
| 
       26 
21 
     | 
    
         
             
                - - ">="
         
     | 
| 
       27 
22 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       28 
     | 
    
         
            -
                    segments: 
         
     | 
| 
       29 
     | 
    
         
            -
                    - 0
         
     | 
| 
       30 
     | 
    
         
            -
                    - 8
         
     | 
| 
       31 
     | 
    
         
            -
                    - 8
         
     | 
| 
       32 
23 
     | 
    
         
             
                    version: 0.8.8
         
     | 
| 
       33 
24 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       34 
25 
     | 
    
         
             
              version_requirements: *id001
         
     | 
| 
         @@ -40,17 +31,13 @@ dependencies: 
     | 
|
| 
       40 
31 
     | 
    
         
             
                requirements: 
         
     | 
| 
       41 
32 
     | 
    
         
             
                - - ">="
         
     | 
| 
       42 
33 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       43 
     | 
    
         
            -
                    segments: 
         
     | 
| 
       44 
     | 
    
         
            -
                    - 0
         
     | 
| 
       45 
     | 
    
         
            -
                    - 8
         
     | 
| 
       46 
     | 
    
         
            -
                    - 8
         
     | 
| 
       47 
34 
     | 
    
         
             
                    version: 0.8.8
         
     | 
| 
       48 
35 
     | 
    
         
             
              type: :development
         
     | 
| 
       49 
36 
     | 
    
         
             
              version_requirements: *id002
         
     | 
| 
       50 
37 
     | 
    
         
             
            description: Ruby File Monitor is a easy way to watch the directories and files, execute commands when them changed.
         
     | 
| 
       51 
38 
     | 
    
         
             
            email: jiangfriend@gmail.com
         
     | 
| 
       52 
     | 
    
         
            -
            executables:  
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 39 
     | 
    
         
            +
            executables: 
         
     | 
| 
      
 40 
     | 
    
         
            +
            - f5.rb
         
     | 
| 
       54 
41 
     | 
    
         
             
            extensions: []
         
     | 
| 
       55 
42 
     | 
    
         | 
| 
       56 
43 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
         @@ -60,9 +47,10 @@ files: 
     | 
|
| 
       60 
47 
     | 
    
         
             
            - examples/use-block.rb
         
     | 
| 
       61 
48 
     | 
    
         
             
            - examples/use-inherit.rb
         
     | 
| 
       62 
49 
     | 
    
         
             
            - examples/use-filter.rb
         
     | 
| 
      
 50 
     | 
    
         
            +
            - examples/use-creator.rb
         
     | 
| 
       63 
51 
     | 
    
         
             
            - examples/f5.rb
         
     | 
| 
      
 52 
     | 
    
         
            +
            - bin/f5.rb
         
     | 
| 
       64 
53 
     | 
    
         
             
            - README.md
         
     | 
| 
       65 
     | 
    
         
            -
            has_rdoc: true
         
     | 
| 
       66 
54 
     | 
    
         
             
            homepage: https://github.com/jiangmiao/ruby-file-monitor
         
     | 
| 
       67 
55 
     | 
    
         
             
            licenses: []
         
     | 
| 
       68 
56 
     | 
    
         | 
| 
         @@ -76,23 +64,17 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       76 
64 
     | 
    
         
             
              requirements: 
         
     | 
| 
       77 
65 
     | 
    
         
             
              - - ">="
         
     | 
| 
       78 
66 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       79 
     | 
    
         
            -
                  segments: 
         
     | 
| 
       80 
     | 
    
         
            -
                  - 1
         
     | 
| 
       81 
     | 
    
         
            -
                  - 8
         
     | 
| 
       82 
     | 
    
         
            -
                  - 7
         
     | 
| 
       83 
67 
     | 
    
         
             
                  version: 1.8.7
         
     | 
| 
       84 
68 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         
     | 
| 
       85 
69 
     | 
    
         
             
              none: false
         
     | 
| 
       86 
70 
     | 
    
         
             
              requirements: 
         
     | 
| 
       87 
71 
     | 
    
         
             
              - - ">="
         
     | 
| 
       88 
72 
     | 
    
         
             
                - !ruby/object:Gem::Version 
         
     | 
| 
       89 
     | 
    
         
            -
                  segments: 
         
     | 
| 
       90 
     | 
    
         
            -
                  - 0
         
     | 
| 
       91 
73 
     | 
    
         
             
                  version: "0"
         
     | 
| 
       92 
74 
     | 
    
         
             
            requirements: []
         
     | 
| 
       93 
75 
     | 
    
         | 
| 
       94 
76 
     | 
    
         
             
            rubyforge_project: file-monitor
         
     | 
| 
       95 
     | 
    
         
            -
            rubygems_version: 1. 
     | 
| 
      
 77 
     | 
    
         
            +
            rubygems_version: 1.8.11
         
     | 
| 
       96 
78 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       97 
79 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       98 
80 
     | 
    
         
             
            summary: File Monitor Library
         
     |