/
generator.rb
executable file
·61 lines (48 loc) · 2.07 KB
/
generator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# NOTE: requires filesystemwatcher to be installed
# http://www.jhorman.org/FileSystemWatcher/index.html
require "filesystemwatcher/filesystemwatcher"
require 'fileutils'
require 'silverline/essential/xap'
def logger
RAILS_DEFAULT_LOGGER
end
# Generates the XAP on modification of watched files
module Silverline::Essential::Generator
# List of files/directories to watch for modification.
# Triggers generation of the Silverlight package (XAP)
def self.register
create_directories
@watcher = FileSystemWatcher.new
[Silverline::CLIENT_ROOT, Silverline::PLUGIN_CLIENT].each do |dir|
@watcher.addDirectory dir
end
# TODO: watch all client controllers, as well as all views
@watcher.addFile "#{RAILS_ROOT}/app/controllers/client_controller.rb"
@watcher.addDirectory Silverline::RAILS_VIEWS
@watcher.sleepTime = 1
@watcher.start { |status, file| generate }
generate # make sure to generate XAPs the first time
end
def self.generate
logger.info "Silverline: Generating client.xap"
%W(#{Silverline::XAP_FILE}).each do |file|
File.delete(file) if File.exists?(file)
end
# First copy the plugin's client folder to tmp folder
FileUtils.cp_r "#{Silverline::PLUGIN_CLIENT}/.", Silverline::TMP_CLIENT
# TODO: should the controller/views be handled by Visualize/Teleport?
# TODO: copy all controllers, views, and models to tmp folder
FileUtils.mkdir_p "#{Silverline::TMP_CLIENT}/controllers"
FileUtils.mkdir_p "#{Silverline::TMP_CLIENT}/views"
FileUtils.cp 'app/controllers/client_controller.rb', "#{Silverline::TMP_CLIENT}/controllers"
FileUtils.cp_r "#{Silverline::RAILS_VIEWS}/.", "#{Silverline::TMP_CLIENT}/views"
# Lastly, client root wins
FileUtils.cp_r "#{Silverline::CLIENT_ROOT}/.", Silverline::TMP_CLIENT
Silverline::Essential::XAP.new(Silverline::XAP_FILE, Silverline::TMP_CLIENT).generate
FileUtils.rm_r Silverline::TMP_CLIENT
end
def self.create_directories
FileUtils.mkdir_p Silverline::TMP_CLIENT
FileUtils.mkdir_p Silverline::CLIENT_ROOT
end
end