smallcage 0.0.8 → 0.0.9
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/History.txt +10 -0
- data/Manifest.txt +23 -7
- data/bin/smc +6 -126
- data/lib/smallcage.rb +4 -8
- data/lib/smallcage/application.rb +159 -0
- data/lib/smallcage/commands/auto.rb +133 -27
- data/lib/smallcage/commands/base.rb +19 -0
- data/lib/smallcage/commands/clean.rb +10 -2
- data/lib/smallcage/commands/export.rb +41 -0
- data/lib/smallcage/commands/import.rb +12 -7
- data/lib/smallcage/commands/manifest.rb +1 -1
- data/lib/smallcage/commands/server.rb +5 -14
- data/lib/smallcage/commands/update.rb +92 -11
- data/lib/smallcage/document_path.rb +46 -0
- data/lib/smallcage/http_server.rb +66 -0
- data/lib/smallcage/loader.rb +37 -26
- data/lib/smallcage/{commands → resources}/Manifest.erb +0 -0
- data/lib/smallcage/resources/auto.html +119 -0
- data/lib/smallcage/runner.rb +15 -0
- data/lib/smallcage/version.rb +1 -1
- data/project/{default → base}/_smc/helpers/base_helper.rb +0 -0
- data/project/{default → base}/_smc/helpers/site_helper.rb +0 -0
- data/project/{default → base}/_smc/templates/default.rhtml +0 -0
- data/project/{default → base}/_smc/templates/footer.rhtml +0 -0
- data/project/{default → base}/_smc/templates/header.rhtml +0 -0
- data/project/lang/_smc/helpers/lang_helper.rb +19 -0
- data/project/lang/_smc/templates/other_lang.rhtml +6 -0
- data/project/redcloth/_smc/helpers/red_cloth_helper.rb +14 -0
- data/project/redcloth/_smc/templates/markdown.rhtml +5 -0
- data/project/redcloth/_smc/templates/textile.rhtml +5 -0
- data/project/standard/_smc/helpers/menu_helper.rb +2 -2
- data/project/standard/about/index.html.smc +1 -1
- data/project/standard/index.html.smc +1 -1
- data/project/standard/sample1/index.html.smc +1 -1
- data/project/standard/sample1/index2.html.smc +1 -1
- data/project/standard/sample2/index.html.smc +1 -1
- data/spec/data/htdocs1/a/b/c/index.html.smc +6 -1
- data/{log/debug.log → spec/data/htdocs2/_smc/templates/dummy.rhtml} +0 -0
- data/spec/data/htdocs2/a/b/c/test.html +1 -0
- data/spec/data/htdocs2/a/b/test.html +1 -0
- data/spec/data/htdocs2/a/test.html.smc +2 -0
- data/spec/document_path_spec.rb +42 -0
- data/spec/export_spec.rb +45 -0
- data/spec/loader_spec.rb +20 -6
- data/spec/manifest_spec.rb +18 -11
- data/spec/smallcage_spec.rb +17 -11
- metadata +25 -9
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
== 0.0.9 2008-04-21
|
2
|
+
|
3
|
+
* fix smc auto command bug.
|
4
|
+
* add RedCloth project template (redcloth).
|
5
|
+
* add multi language project template (lang).
|
6
|
+
|
7
|
+
* add auto navigation servlet to the HTTP server.
|
8
|
+
* add export command.
|
9
|
+
* delete output file when smc source file does not exist.
|
10
|
+
|
1
11
|
== 0.0.6 2007-11-04
|
2
12
|
|
3
13
|
* smcオブジェクトのpathがStringだったのをPathnameを保持するように修正。ファイルアクセスで使う値なのでPathnameの方が良いと判断しました。
|
data/Manifest.txt
CHANGED
@@ -7,27 +7,37 @@ bin/smc
|
|
7
7
|
config/hoe.rb
|
8
8
|
config/requirements.rb
|
9
9
|
lib/smallcage.rb
|
10
|
-
lib/smallcage/
|
10
|
+
lib/smallcage/application.rb
|
11
11
|
lib/smallcage/commands/auto.rb
|
12
|
+
lib/smallcage/commands/base.rb
|
12
13
|
lib/smallcage/commands/clean.rb
|
14
|
+
lib/smallcage/commands/export.rb
|
13
15
|
lib/smallcage/commands/import.rb
|
14
16
|
lib/smallcage/commands/manifest.rb
|
15
17
|
lib/smallcage/commands/server.rb
|
16
18
|
lib/smallcage/commands/update.rb
|
19
|
+
lib/smallcage/document_path.rb
|
17
20
|
lib/smallcage/erb_base.rb
|
21
|
+
lib/smallcage/http_server.rb
|
18
22
|
lib/smallcage/loader.rb
|
19
23
|
lib/smallcage/misc.rb
|
20
24
|
lib/smallcage/renderer.rb
|
25
|
+
lib/smallcage/resources/Manifest.erb
|
26
|
+
lib/smallcage/resources/auto.html
|
21
27
|
lib/smallcage/runner.rb
|
22
28
|
lib/smallcage/version.rb
|
23
|
-
|
24
|
-
project/
|
25
|
-
project/
|
26
|
-
project/
|
27
|
-
project/
|
28
|
-
project/
|
29
|
+
project/base/_smc/helpers/base_helper.rb
|
30
|
+
project/base/_smc/helpers/site_helper.rb
|
31
|
+
project/base/_smc/templates/default.rhtml
|
32
|
+
project/base/_smc/templates/footer.rhtml
|
33
|
+
project/base/_smc/templates/header.rhtml
|
34
|
+
project/lang/_smc/helpers/lang_helper.rb
|
35
|
+
project/lang/_smc/templates/other_lang.rhtml
|
29
36
|
project/nkf/_smc/filters/filters.yml
|
30
37
|
project/nkf/_smc/filters/nkf_filter.rb
|
38
|
+
project/redcloth/_smc/helpers/red_cloth_helper.rb
|
39
|
+
project/redcloth/_smc/templates/markdown.rhtml
|
40
|
+
project/redcloth/_smc/templates/textile.rhtml
|
31
41
|
project/relpath/_smc/filters/filters.yml
|
32
42
|
project/relpath/_smc/filters/relpath_filter.rb
|
33
43
|
project/standard/_dir.smc
|
@@ -55,6 +65,12 @@ script/generate.cmd
|
|
55
65
|
setup.rb
|
56
66
|
spec/data/htdocs1/_dir.smc
|
57
67
|
spec/data/htdocs1/a/b/c/index.html.smc
|
68
|
+
spec/data/htdocs2/_smc/templates/dummy.rhtml
|
69
|
+
spec/data/htdocs2/a/b/c/test.html
|
70
|
+
spec/data/htdocs2/a/b/test.html
|
71
|
+
spec/data/htdocs2/a/test.html.smc
|
72
|
+
spec/document_path_spec.rb
|
73
|
+
spec/export_spec.rb
|
58
74
|
spec/import_spec.rb
|
59
75
|
spec/loader_spec.rb
|
60
76
|
spec/manifest_spec.rb
|
data/bin/smc
CHANGED
@@ -3,134 +3,14 @@
|
|
3
3
|
# Created on 2007-8-22.
|
4
4
|
# Copyright (c) 2007. All rights reserved.
|
5
5
|
|
6
|
+
unless defined? Gem
|
7
|
+
$:.unshift File.dirname(__FILE__) + "/../lib"
|
8
|
+
end
|
9
|
+
|
6
10
|
begin
|
7
11
|
require 'rubygems'
|
12
|
+
require 'smallcage'
|
13
|
+
SmallCage::Application.execute
|
8
14
|
rescue LoadError
|
9
|
-
# no rubygems to load, so we fail silently
|
10
|
-
end
|
11
|
-
|
12
|
-
require 'smallcage'
|
13
|
-
require 'optparse'
|
14
|
-
|
15
|
-
STDOUT.sync = true
|
16
|
-
|
17
|
-
VERSION_NOTE = "SmallCage #{SmallCage::VERSION::STRING} - Lightweight CMS Package."
|
18
|
-
OPTIONS = {}
|
19
|
-
OPTIONS[:original_argv] = ARGV.clone
|
20
|
-
|
21
|
-
OptionParser.new do |opts|
|
22
|
-
|
23
|
-
opts.banner =<<BANNER
|
24
|
-
Usage: #{File.basename($0)} <subcommand> [options]
|
25
|
-
#{VERSION_NOTE}
|
26
|
-
Subcommands are:
|
27
|
-
update [path] Build smc contents.
|
28
|
-
clean [path] Remove files generated from *.smc source.
|
29
|
-
server [path] [port] Start HTTP server.
|
30
|
-
auto [path] Start auto update daemon.
|
31
|
-
import [name|uri] Import project.
|
32
|
-
manifest [path] Generate Manifest.html file.
|
33
|
-
|
34
|
-
Options are:
|
35
|
-
BANNER
|
36
|
-
|
37
|
-
opts.separator ""
|
38
|
-
opts.on("-h", "--help", "Show this help message.") do
|
39
|
-
puts opts
|
40
|
-
exit
|
41
|
-
end
|
42
|
-
opts.on("-v", "--version", "Show version info.") do
|
43
|
-
puts VERSION_NOTE
|
44
|
-
exit
|
45
|
-
end
|
46
|
-
|
47
|
-
subparsers = Hash.new do |h,k|
|
48
|
-
$stderr.puts "no such subcommand: #{k}"
|
49
|
-
exit 1
|
50
|
-
end
|
51
|
-
|
52
|
-
subparsers[:update] = OptionParser.new do |subp|
|
53
|
-
subp.banner =<<EOT
|
54
|
-
Usage: update [PATH]
|
55
|
-
EOT
|
56
|
-
end
|
57
|
-
|
58
|
-
subparsers[:server] = OptionParser.new do |subp|
|
59
|
-
subp.banner =<<EOT
|
60
|
-
Usage: server [PATH] [PORT]
|
61
|
-
EOT
|
62
|
-
end
|
63
|
-
|
64
|
-
subparsers[:auto] = OptionParser.new do |subp|
|
65
|
-
subp.banner =<<EOT
|
66
|
-
Usage: auto [PATH]
|
67
|
-
EOT
|
68
|
-
end
|
69
|
-
|
70
|
-
subparsers[:generate] = OptionParser.new do |subp|
|
71
|
-
end
|
72
|
-
subparsers[:release] = OptionParser.new do |subp|
|
73
|
-
end
|
74
|
-
subparsers[:help] = OptionParser.new do |subp|
|
75
|
-
end
|
76
|
-
subparsers[:import] = OptionParser.new do |subp|
|
77
|
-
end
|
78
|
-
subparsers[:manifest] = OptionParser.new do |subp|
|
79
|
-
end
|
80
|
-
subparsers[:clean] = OptionParser.new do |subp|
|
81
|
-
end
|
82
|
-
|
83
|
-
commands = Hash.new {|h,k| k}
|
84
|
-
commands.merge!({
|
85
|
-
:up => :update,
|
86
|
-
:sv => :server,
|
87
|
-
:au => :auto,
|
88
|
-
:gen => :generate,
|
89
|
-
:rel => :release,
|
90
|
-
:st => :status,
|
91
|
-
})
|
92
|
-
|
93
|
-
opts.order!(ARGV)
|
94
|
-
unless ARGV.empty?
|
95
|
-
OPTIONS[:command] = commands[ARGV.shift.to_sym]
|
96
|
-
subparsers[OPTIONS[:command]].parse!(ARGV)
|
97
|
-
end
|
98
|
-
|
99
|
-
if OPTIONS[:command].nil?
|
100
|
-
puts opts
|
101
|
-
exit
|
102
|
-
elsif OPTIONS[:command] == :help
|
103
|
-
subcmd = ARGV.shift
|
104
|
-
if subcmd.nil?
|
105
|
-
puts opts
|
106
|
-
else
|
107
|
-
puts subparsers[subcmd.to_sym]
|
108
|
-
end
|
109
|
-
exit
|
110
|
-
elsif OPTIONS[:command] == :update
|
111
|
-
OPTIONS[:path] = ARGV.shift
|
112
|
-
OPTIONS[:path] ||= "."
|
113
|
-
elsif OPTIONS[:command] == :server
|
114
|
-
OPTIONS[:path] = ARGV.shift
|
115
|
-
OPTIONS[:port] = ARGV.shift
|
116
|
-
OPTIONS[:path] ||= "."
|
117
|
-
OPTIONS[:port] ||= 80
|
118
|
-
elsif OPTIONS[:command] == :auto
|
119
|
-
OPTIONS[:path] = ARGV.shift
|
120
|
-
OPTIONS[:path] ||= "."
|
121
|
-
elsif OPTIONS[:command] == :import
|
122
|
-
OPTIONS[:from] = ARGV.shift
|
123
|
-
OPTIONS[:from] ||= "default"
|
124
|
-
|
125
|
-
OPTIONS[:to] = ARGV.shift
|
126
|
-
OPTIONS[:to] ||= "."
|
127
|
-
elsif OPTIONS[:command] == :manifest
|
128
|
-
OPTIONS[:path] = ARGV.shift
|
129
|
-
OPTIONS[:path] ||= "."
|
130
|
-
elsif OPTIONS[:command] == :clean
|
131
|
-
OPTIONS[:path] = ARGV.shift
|
132
|
-
OPTIONS[:path] ||= "."
|
133
|
-
end
|
134
15
|
end
|
135
16
|
|
136
|
-
SmallCage::Runner.run(OPTIONS)
|
data/lib/smallcage.rb
CHANGED
@@ -5,6 +5,7 @@ require 'erb'
|
|
5
5
|
require 'pathname'
|
6
6
|
require 'open-uri'
|
7
7
|
require 'fileutils'
|
8
|
+
require 'delegate'
|
8
9
|
|
9
10
|
require 'smallcage/version'
|
10
11
|
require 'smallcage/misc'
|
@@ -12,11 +13,6 @@ require 'smallcage/loader'
|
|
12
13
|
require 'smallcage/erb_base'
|
13
14
|
require 'smallcage/renderer'
|
14
15
|
require 'smallcage/runner'
|
15
|
-
|
16
|
-
require 'smallcage/
|
17
|
-
require 'smallcage/
|
18
|
-
require 'smallcage/commands/server'
|
19
|
-
require 'smallcage/commands/auto'
|
20
|
-
require 'smallcage/commands/import'
|
21
|
-
require 'smallcage/commands/manifest'
|
22
|
-
|
16
|
+
require 'smallcage/document_path'
|
17
|
+
require 'smallcage/http_server'
|
18
|
+
require 'smallcage/application'
|
@@ -0,0 +1,159 @@
|
|
1
|
+
|
2
|
+
VERSION_NOTE = "SmallCage #{SmallCage::VERSION::STRING} - Lightweight CMS Package."
|
3
|
+
OPTIONS = {}
|
4
|
+
OPTIONS[:original_argv] = ARGV.clone
|
5
|
+
|
6
|
+
class SmallCage::Application
|
7
|
+
require 'optparse'
|
8
|
+
|
9
|
+
@@signal_handlers = {
|
10
|
+
"INT" => [],
|
11
|
+
"TERM" => []
|
12
|
+
}
|
13
|
+
|
14
|
+
@@signal_handlers.keys.each do |signal|
|
15
|
+
Signal.trap(signal) do
|
16
|
+
@@signal_handlers[signal].each do |proc|
|
17
|
+
proc.call(signal)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.add_signal_handler(signal, handler)
|
23
|
+
signal.to_a.each do |s|
|
24
|
+
@@signal_handlers[s] << handler
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.execute
|
29
|
+
|
30
|
+
STDOUT.sync = true
|
31
|
+
|
32
|
+
OptionParser.new do |opts|
|
33
|
+
|
34
|
+
opts.banner =<<BANNER
|
35
|
+
Usage: #{File.basename($0)} <subcommand> [options]
|
36
|
+
#{VERSION_NOTE}
|
37
|
+
Subcommands are:
|
38
|
+
update [path] Build smc contents.
|
39
|
+
clean [path] Remove files generated from *.smc source.
|
40
|
+
server [path] [port] Start HTTP server.
|
41
|
+
auto [path] [port] Start auto update daemon.
|
42
|
+
import [name|uri] Import project.
|
43
|
+
export [path] [outputpath] Export project.
|
44
|
+
manifest [path] Generate Manifest.html file.
|
45
|
+
|
46
|
+
Options are:
|
47
|
+
BANNER
|
48
|
+
|
49
|
+
opts.separator ""
|
50
|
+
opts.on("-h", "--help", "Show this help message.") do
|
51
|
+
puts opts
|
52
|
+
exit
|
53
|
+
end
|
54
|
+
opts.on("-v", "--version", "Show version info.") do
|
55
|
+
puts VERSION_NOTE
|
56
|
+
exit
|
57
|
+
end
|
58
|
+
|
59
|
+
subparsers = Hash.new do |h,k|
|
60
|
+
$stderr.puts "no such subcommand: #{k}"
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
|
64
|
+
subparsers[:update] = OptionParser.new do |subp|
|
65
|
+
subp.banner =<<EOT
|
66
|
+
Usage: update [PATH]
|
67
|
+
EOT
|
68
|
+
end
|
69
|
+
|
70
|
+
subparsers[:server] = OptionParser.new do |subp|
|
71
|
+
subp.banner =<<EOT
|
72
|
+
Usage: server [PATH] [PORT]
|
73
|
+
EOT
|
74
|
+
end
|
75
|
+
|
76
|
+
subparsers[:auto] = OptionParser.new do |subp|
|
77
|
+
subp.banner =<<EOT
|
78
|
+
Usage: auto [PATH]
|
79
|
+
EOT
|
80
|
+
end
|
81
|
+
|
82
|
+
subparsers[:generate] = OptionParser.new do |subp|
|
83
|
+
end
|
84
|
+
subparsers[:release] = OptionParser.new do |subp|
|
85
|
+
end
|
86
|
+
subparsers[:help] = OptionParser.new do |subp|
|
87
|
+
end
|
88
|
+
subparsers[:import] = OptionParser.new do |subp|
|
89
|
+
end
|
90
|
+
subparsers[:export] = OptionParser.new do |subp|
|
91
|
+
end
|
92
|
+
subparsers[:manifest] = OptionParser.new do |subp|
|
93
|
+
end
|
94
|
+
subparsers[:clean] = OptionParser.new do |subp|
|
95
|
+
end
|
96
|
+
|
97
|
+
commands = Hash.new {|h,k| k}
|
98
|
+
commands.merge!({
|
99
|
+
:up => :update,
|
100
|
+
:sv => :server,
|
101
|
+
:au => :auto,
|
102
|
+
:gen => :generate,
|
103
|
+
:rel => :release,
|
104
|
+
:st => :status,
|
105
|
+
})
|
106
|
+
|
107
|
+
opts.order!(ARGV)
|
108
|
+
unless ARGV.empty?
|
109
|
+
OPTIONS[:command] = commands[ARGV.shift.to_sym]
|
110
|
+
subparsers[OPTIONS[:command]].parse!(ARGV)
|
111
|
+
end
|
112
|
+
|
113
|
+
if OPTIONS[:command].nil?
|
114
|
+
puts opts
|
115
|
+
exit
|
116
|
+
elsif OPTIONS[:command] == :help
|
117
|
+
subcmd = ARGV.shift
|
118
|
+
if subcmd.nil?
|
119
|
+
puts opts
|
120
|
+
else
|
121
|
+
puts subparsers[subcmd.to_sym]
|
122
|
+
end
|
123
|
+
exit
|
124
|
+
elsif OPTIONS[:command] == :update
|
125
|
+
OPTIONS[:path] = ARGV.shift
|
126
|
+
OPTIONS[:path] ||= "."
|
127
|
+
elsif OPTIONS[:command] == :server
|
128
|
+
OPTIONS[:path] = ARGV.shift
|
129
|
+
OPTIONS[:port] = ARGV.shift
|
130
|
+
OPTIONS[:path] ||= "."
|
131
|
+
OPTIONS[:port] ||= 80
|
132
|
+
elsif OPTIONS[:command] == :auto
|
133
|
+
OPTIONS[:path] = ARGV.shift
|
134
|
+
OPTIONS[:path] ||= "."
|
135
|
+
OPTIONS[:port] = ARGV.shift
|
136
|
+
elsif OPTIONS[:command] == :import
|
137
|
+
OPTIONS[:from] = ARGV.shift
|
138
|
+
OPTIONS[:from] ||= "default"
|
139
|
+
|
140
|
+
OPTIONS[:to] = ARGV.shift
|
141
|
+
OPTIONS[:to] ||= "."
|
142
|
+
elsif OPTIONS[:command] == :export
|
143
|
+
OPTIONS[:path] = ARGV.shift
|
144
|
+
OPTIONS[:path] ||= "."
|
145
|
+
|
146
|
+
OPTIONS[:out] = ARGV.shift
|
147
|
+
elsif OPTIONS[:command] == :manifest
|
148
|
+
OPTIONS[:path] = ARGV.shift
|
149
|
+
OPTIONS[:path] ||= "."
|
150
|
+
elsif OPTIONS[:command] == :clean
|
151
|
+
OPTIONS[:path] = ARGV.shift
|
152
|
+
OPTIONS[:path] ||= "."
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
SmallCage::Runner.run(OPTIONS)
|
157
|
+
|
158
|
+
end
|
159
|
+
end
|
@@ -1,52 +1,158 @@
|
|
1
1
|
module SmallCage::Commands
|
2
|
-
class Auto
|
3
|
-
def self.execute(opts)
|
4
|
-
self.new(opts).execute
|
5
|
-
end
|
2
|
+
class Auto < SmallCage::Commands::Base
|
6
3
|
|
7
4
|
def initialize(opts)
|
8
|
-
|
5
|
+
super(opts)
|
9
6
|
@target = Pathname.new(opts[:path])
|
7
|
+
@port = opts[:port]
|
10
8
|
@sleep = 1
|
11
9
|
@mtimes = {}
|
12
10
|
end
|
13
|
-
|
11
|
+
|
14
12
|
def execute
|
15
|
-
|
16
|
-
puts "-" * 60
|
13
|
+
puts_banner
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
start_http_server unless @port.nil?
|
16
|
+
init_sig_handler
|
17
|
+
|
18
|
+
@loader = SmallCage::Loader.new(@target)
|
19
|
+
|
20
|
+
first_loop = true
|
21
|
+
@update_loop = true
|
22
|
+
while @update_loop
|
23
|
+
if first_loop
|
24
|
+
first_loop = false
|
25
|
+
update_target
|
26
|
+
else
|
27
|
+
update_modified_files
|
23
28
|
end
|
29
|
+
sleep @sleep
|
24
30
|
end
|
31
|
+
end
|
25
32
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
+
def modified_special_files
|
34
|
+
root = @loader.root
|
35
|
+
|
36
|
+
result = []
|
37
|
+
Dir.chdir(root) do
|
38
|
+
Dir.glob("_smc/{templates,filters,helpers}/*") do |f|
|
39
|
+
f = root + f
|
33
40
|
mtime = File.stat(f).mtime
|
34
41
|
if @mtimes[f] != mtime
|
35
42
|
@mtimes[f] = mtime
|
36
|
-
|
43
|
+
result << f
|
37
44
|
end
|
38
45
|
end
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
46
|
+
end
|
47
|
+
|
48
|
+
return result
|
49
|
+
end
|
50
|
+
private :modified_special_files
|
51
|
+
|
52
|
+
def modified_files
|
53
|
+
result = []
|
54
|
+
@loader.each_smc_file do |f|
|
55
|
+
mtime = File.stat(f).mtime
|
56
|
+
if @mtimes[f] != mtime
|
57
|
+
@mtimes[f] = mtime
|
58
|
+
result << f
|
45
59
|
end
|
60
|
+
end
|
61
|
+
return result
|
62
|
+
end
|
63
|
+
private :modified_files
|
64
|
+
|
65
|
+
def update_target
|
66
|
+
# load @mtimes
|
67
|
+
modified_special_files
|
68
|
+
target_files = modified_files
|
69
|
+
|
70
|
+
runner = SmallCage::Runner.new({ :path => @target })
|
71
|
+
runner.update
|
72
|
+
|
73
|
+
update_http_server(target_files)
|
74
|
+
puts_line
|
75
|
+
end
|
76
|
+
private :update_target
|
46
77
|
|
78
|
+
def update_modified_files
|
79
|
+
reload = false
|
80
|
+
if modified_special_files.empty?
|
81
|
+
target_files = modified_files
|
82
|
+
else
|
83
|
+
# update root directory.
|
84
|
+
target_files = [@loader.root + "./_dir.smc"]
|
85
|
+
reload = true
|
86
|
+
end
|
87
|
+
|
88
|
+
return if target_files.empty?
|
89
|
+
target_files.each do |tf|
|
90
|
+
if tf.basename.to_s == "_dir.smc"
|
91
|
+
runner = SmallCage::Runner.new({ :path => tf.parent })
|
92
|
+
else
|
93
|
+
runner = SmallCage::Runner.new({ :path => tf })
|
94
|
+
end
|
95
|
+
runner.update
|
47
96
|
end
|
97
|
+
|
98
|
+
if reload
|
99
|
+
@http_server.reload
|
100
|
+
else
|
101
|
+
update_http_server(target_files)
|
102
|
+
end
|
103
|
+
puts_line
|
104
|
+
end
|
105
|
+
private :update_modified_files
|
48
106
|
|
107
|
+
def puts_banner
|
108
|
+
return if quiet?
|
109
|
+
puts "SmallCage Auto Update"
|
110
|
+
puts "http://localhost:#{@port}/_smc/auto" unless @port.nil?
|
111
|
+
puts
|
112
|
+
end
|
113
|
+
private :puts_banner
|
114
|
+
|
115
|
+
def puts_line
|
116
|
+
return if quiet?
|
117
|
+
puts "-" * 60
|
118
|
+
print "\a" # Bell
|
119
|
+
end
|
120
|
+
private :puts_line
|
121
|
+
|
122
|
+
def update_http_server(target_files)
|
123
|
+
return unless @http_server
|
124
|
+
path = target_files.find {|p| p.basename.to_s != "_dir.smc" }
|
125
|
+
if path.nil?
|
126
|
+
dir = target_files.shift
|
127
|
+
dpath = SmallCage::DocumentPath.new(@loader.root, dir.parent)
|
128
|
+
@http_server.updated_uri = dpath.uri
|
129
|
+
else
|
130
|
+
dpath = SmallCage::DocumentPath.new(@loader.root, path)
|
131
|
+
@http_server.updated_uri = dpath.outuri
|
132
|
+
end
|
133
|
+
end
|
134
|
+
private :update_http_server
|
135
|
+
|
136
|
+
def init_sig_handler
|
137
|
+
shutdown_handler = Proc.new do |signal|
|
138
|
+
@http_server.shutdown unless @http_server.nil?
|
139
|
+
@update_loop = false
|
140
|
+
end
|
141
|
+
SmallCage::Application.add_signal_handler(["INT", "TERM"], shutdown_handler)
|
142
|
+
end
|
143
|
+
private :init_sig_handler
|
144
|
+
|
145
|
+
def start_http_server
|
146
|
+
document_root = @opts[:path]
|
147
|
+
port = @opts[:port]
|
148
|
+
|
149
|
+
@http_server = SmallCage::HTTPServer.new(document_root, port)
|
150
|
+
|
151
|
+
Thread.new do
|
152
|
+
@http_server.start
|
153
|
+
end
|
49
154
|
end
|
155
|
+
private :start_http_server
|
50
156
|
|
51
157
|
end
|
52
158
|
end
|