Method: Capucine::CoffeeScript#run_watch

Defined in:
lib/coffeescript.rb

#run_watchObject



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/coffeescript.rb', line 77

def run_watch
  require 'fssm'

  files_to_lookat = File.join @cap.settings.working_dir, @cap.settings.conf['coffeescript_files_dir']
  js_generated_dir = File.join @cap.settings.working_dir, @cap.settings.conf['coffeescript_output_dir']

  coffee = @cap.coffee

  coffee_thread = Thread.new {

    FSSM.monitor(files_to_lookat, :directories => true) do
      update do |b, r|
        file = File.join b, r
        coffee.run_once file if File.extname(r) == '.coffee' # COFFEE
      end

      create do |b, r|
        file = File.join b, r
        coffee.run_once file if File.extname(r) == '.coffee' # COFFEE
      end

      delete do |b, r|

        file_name = File.expand_path File.join(b, r)
        folder_name = File.dirname file_name
        js_files = [
          File.join(js_generated_dir, r.gsub('.coffee', '.js')),
          File.join(js_generated_dir, r.gsub('.coffee', '.min.js')),
        ]

        if Dir["#{folder_name}/*"].empty? and folder_name != js_generated_dir
          # delete full dir
          to_delete = File.expand_path(File.dirname(js_files[0]))
          FileUtils.rm_r to_delete
        else
          js_files.each do |file|
            File.delete(file) if File.exist?(file)
          end
        end

      end
    end

  }

  return coffee_thread


end