spiderfw 0.6.23 → 0.6.24
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/CHANGELOG +10 -1
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/apps/config_editor/_init.rb +1 -2
- data/apps/config_editor/controllers/config_editor_controller.rb +1 -7
- data/apps/core/admin/controllers/admin_controller.rb +1 -1
- data/apps/core/admin/public/css/sass/admin.css +35 -31
- data/apps/core/admin/public/sass/admin.scss +6 -1
- data/apps/core/components/widgets/crud/crud.shtml +2 -2
- data/apps/core/components/widgets/table/table.rb +5 -5
- data/apps/core/forms/tags/element_row.erb +15 -10
- data/apps/core/forms/widgets/form/form.rb +35 -22
- data/apps/core/forms/widgets/inputs/checkbox/checkbox.shtml +2 -2
- data/apps/core/forms/widgets/inputs/date_time/date_time.shtml +2 -2
- data/apps/core/forms/widgets/inputs/file_input/file_input.shtml +2 -2
- data/apps/core/forms/widgets/inputs/html_area/html_area.shtml +2 -2
- data/apps/core/forms/widgets/inputs/input/input.shtml +2 -2
- data/apps/core/forms/widgets/inputs/password/password.shtml +2 -2
- data/apps/core/forms/widgets/inputs/search_select/search_select.shtml +1 -1
- data/apps/core/forms/widgets/inputs/select/select.shtml +2 -2
- data/apps/core/forms/widgets/inputs/text/text.shtml +2 -2
- data/apps/core/forms/widgets/inputs/text_area/text_area.shtml +2 -2
- data/apps/core/forms/widgets/inputs/time_span/time_span.shtml +1 -1
- data/blueprints/home/config.ru +8 -0
- data/lib/spiderfw/app.rb +416 -224
- data/lib/spiderfw/cmd/commands/app.rb +243 -239
- data/lib/spiderfw/cmd/commands/cert.rb +421 -417
- data/lib/spiderfw/cmd/commands/config.rb +85 -82
- data/lib/spiderfw/cmd/commands/console.rb +64 -40
- data/lib/spiderfw/cmd/commands/content.rb +29 -25
- data/lib/spiderfw/cmd/commands/create.rb +58 -54
- data/lib/spiderfw/cmd/commands/model.rb +118 -114
- data/lib/spiderfw/cmd/commands/setup.rb +55 -51
- data/lib/spiderfw/cmd/commands/test.rb +63 -59
- data/lib/spiderfw/cmd/commands/webserver.rb +56 -51
- data/lib/spiderfw/config/options/spider.rb +4 -3
- data/lib/spiderfw/controller/controller.rb +2 -0
- data/lib/spiderfw/controller/http_controller.rb +1 -2
- data/lib/spiderfw/controller/mixins/static_content.rb +3 -3
- data/lib/spiderfw/controller/mixins/visual.rb +30 -15
- data/lib/spiderfw/controller/response.rb +84 -0
- data/lib/spiderfw/controller/session/file_session.rb +2 -2
- data/lib/spiderfw/http/adapters/rack.rb +12 -13
- data/lib/spiderfw/http/server.rb +80 -46
- data/lib/spiderfw/i18n/cldr.rb +6 -9
- data/lib/spiderfw/model/base_model.rb +103 -23
- data/lib/spiderfw/model/condition.rb +110 -25
- data/lib/spiderfw/model/mappers/db_mapper.rb +14 -6
- data/lib/spiderfw/model/mappers/mapper.rb +440 -197
- data/lib/spiderfw/model/model.rb +105 -21
- data/lib/spiderfw/model/model_hash.rb +9 -1
- data/lib/spiderfw/model/query.rb +50 -9
- data/lib/spiderfw/model/query_set.rb +211 -44
- data/lib/spiderfw/model/request.rb +28 -21
- data/lib/spiderfw/model/storage/base_storage.rb +125 -10
- data/lib/spiderfw/model/storage/db/db_storage.rb +7 -4
- data/lib/spiderfw/model/storage.rb +8 -1
- data/lib/spiderfw/setup/spider_setup_wizard.rb +9 -7
- data/lib/spiderfw/spider.rb +270 -43
- data/lib/spiderfw/templates/layout.rb +9 -4
- data/lib/spiderfw/templates/resources/sass.rb +3 -2
- data/lib/spiderfw/templates/template.rb +1 -0
- data/lib/spiderfw/utils/annotations.rb +3 -1
- data/lib/spiderfw/utils/logger.rb +1 -1
- data/lib/spiderfw/utils/monkey/symbol.rb +4 -2
- data/lib/spiderfw/utils/shared_store/file_shared_store.rb +2 -2
- data/lib/spiderfw/utils/thread_out.rb +3 -1
- data/public/css/error_page.css +83 -0
- data/public/js/error_page.js +5 -0
- data/spider.gemspec +4 -1
- data/templates/email/error.erb +9 -0
- metadata +28 -12
- data/apps/config_editor/widgets/edit_bool/edit_bool.rb +0 -8
- data/apps/config_editor/widgets/edit_bool/edit_bool.shtml +0 -5
@@ -1,135 +1,139 @@
|
|
1
|
-
|
1
|
+
module Spider::CommandLine
|
2
2
|
|
3
|
+
class ModelCommand < CmdParse::Command
|
3
4
|
|
4
|
-
def initialize
|
5
|
-
super( 'model', true, true )
|
6
|
-
@short_desc = _("Manage models")
|
7
|
-
@apps = []
|
8
|
-
@force = false
|
9
|
-
@no_fkc = true
|
10
5
|
|
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
|
-
|
6
|
+
def initialize
|
7
|
+
super( 'model', true, true )
|
8
|
+
@short_desc = _("Manage models")
|
9
|
+
@apps = []
|
10
|
+
@force = false
|
11
|
+
@no_fkc = true
|
12
|
+
|
13
|
+
sync_cmd = CmdParse::Command.new( 'sync', false )
|
14
|
+
sync_cmd.short_desc = _("Sync models")
|
15
|
+
sync_cmd.options = CmdParse::OptionParserWrapper.new do |opt|
|
16
|
+
opt.on("--force", _("Force syncing"), "-f"){ |f|
|
17
|
+
@force = true
|
18
|
+
}
|
19
|
+
opt.on("--drop-columns", _("Drop unused columns"), "-d"){ |d| @drop = true}
|
20
|
+
opt.on("--drop-tables [PREFIX]", _("Drop unused tables")){ |dt|
|
21
|
+
dt = true if dt == '*'
|
22
|
+
@drop_tables = dt
|
23
|
+
}
|
24
|
+
opt.on("--update-sequences", _("Update current sequences to max db value"), "-s"){ |s|
|
25
|
+
@update_sequences = true
|
26
|
+
}
|
27
|
+
opt.on("--non-managed", _("Process also non managed models"), "-m"){ |m| @non_managed = true}
|
28
|
+
opt.on("--no-fk-constraints", _("Don't create foreign key constraints"), "-c"){ |c| @no_fkc = true }
|
29
|
+
opt.on("--fk-constraints", _("Create foreign key constraints"), "-C" ){ |c| @no_fkc = false }
|
30
|
+
end
|
31
|
+
|
32
|
+
sync_cmd.set_execution_block do |req_models|
|
33
|
+
require 'spiderfw/init'
|
34
|
+
require 'spiderfw/model/mappers/db_mapper'
|
35
|
+
req_models || []
|
36
|
+
unsafe_fields = {}
|
37
|
+
req_models = Spider.apps.values if (req_models.empty?)
|
38
|
+
req_models.each do |model_or_app|
|
39
|
+
models = []
|
40
|
+
mod = model_or_app.is_a?(Module) ? model_or_app : const_get_full(model_or_app)
|
41
|
+
if (mod.is_a?(Module) && mod.include?(Spider::App))
|
42
|
+
mod.models.each do |m|
|
43
|
+
unless @non_managed || m < Spider::Model::Managed
|
44
|
+
unless m < Spider::Model::InlineModel || m.attributes[:sub_model]
|
45
|
+
Spider.logger.warn("Skipping #{m} because it's non managed (use -m to override)")
|
46
|
+
end
|
47
|
+
next
|
44
48
|
end
|
45
|
-
|
49
|
+
models << m
|
50
|
+
end
|
51
|
+
elsif (mod.subclass_of?(Spider::Model::BaseModel))
|
52
|
+
if @non_managed || mod < Spider::Model::Managed
|
53
|
+
models << mod
|
54
|
+
else
|
55
|
+
Spider.logger.warn("Skipping #{mod} because it's non managed (use -m to override)")
|
46
56
|
end
|
47
|
-
|
57
|
+
|
48
58
|
end
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
Spider
|
59
|
+
models.each do |model|
|
60
|
+
begin
|
61
|
+
Spider::Model.sync_schema(model, @force,
|
62
|
+
:drop_fields => @drop, :update_sequences => @update_sequences, :no_foreign_key_constraints => @no_fkc)
|
63
|
+
rescue Spider::Model::Mappers::SchemaSyncUnsafeConversion => exc
|
64
|
+
unsafe_fields[model] = exc.fields
|
65
|
+
end
|
54
66
|
end
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
Spider::Model.sync_schema(mod, false, :no_sync => true, :drop_tables => @drop_tables)
|
68
|
-
rescue Spider::Model::Mappers::SchemaSyncUnsafeConversion => exc
|
69
|
-
puts _("The following tables are about to be dropped: \n%s") % exc.fields.join(', ')
|
70
|
-
puts _("Continue? yes/NO: ")
|
71
|
-
r = STDIN.gets.chomp.downcase
|
72
|
-
yes_chr = _("yes")[0].chr
|
73
|
-
no_chr = _("no")[0].chr
|
74
|
-
if (r == _("yes") || (yes_chr != no_chr && r == yes_chr))
|
75
|
-
Spider::Model.sync_schema(mod, true, :no_sync => true, :drop_tables => @drop_tables)
|
67
|
+
if (@drop_tables)
|
68
|
+
begin
|
69
|
+
Spider::Model.sync_schema(mod, false, :no_sync => true, :drop_tables => @drop_tables)
|
70
|
+
rescue Spider::Model::Mappers::SchemaSyncUnsafeConversion => exc
|
71
|
+
puts _("The following tables are about to be dropped: \n%s") % exc.fields.join(', ')
|
72
|
+
puts _("Continue? yes/NO: ")
|
73
|
+
r = STDIN.gets.chomp.downcase
|
74
|
+
yes_chr = _("yes")[0].chr
|
75
|
+
no_chr = _("no")[0].chr
|
76
|
+
if (r == _("yes") || (yes_chr != no_chr && r == yes_chr))
|
77
|
+
Spider::Model.sync_schema(mod, true, :no_sync => true, :drop_tables => @drop_tables)
|
78
|
+
end
|
76
79
|
end
|
80
|
+
|
81
|
+
|
77
82
|
end
|
78
|
-
|
79
|
-
|
83
|
+
end
|
84
|
+
unless unsafe_fields.empty?
|
85
|
+
puts _("Unable to modify the following fields:")
|
86
|
+
puts unsafe_fields.inspect
|
87
|
+
puts _("(use -f to force)")
|
80
88
|
end
|
81
89
|
end
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
90
|
+
self.add_command(sync_cmd)
|
91
|
+
|
92
|
+
dump_cmd = CmdParse::Command.new( 'dump', false )
|
93
|
+
dump_cmd.short_desc = _("Dump models")
|
94
|
+
dump_cmd.options = CmdParse::OptionParserWrapper.new do |opt|
|
95
|
+
opt.on("--force", _("Overwrite existing files"), "-f"){ |f|
|
96
|
+
@force = true
|
97
|
+
}
|
98
|
+
opt.on("--path [PATH]", _("Specify dump path"), "-p"){ |p|
|
99
|
+
@dump_path = p
|
100
|
+
}
|
86
101
|
end
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
end
|
100
|
-
dump_cmd.set_execution_block do |req_models|
|
101
|
-
require 'spiderfw/init'
|
102
|
-
req_models || []
|
103
|
-
req_models.each do |model_or_app|
|
104
|
-
models = []
|
105
|
-
mod = model_or_app.is_a?(Module) ? model_or_app : const_get_full(model_or_app)
|
106
|
-
if (mod.is_a?(Module) && mod.include?(Spider::App))
|
107
|
-
mod.models.each do |m|
|
108
|
-
models << m
|
109
|
-
end
|
110
|
-
elsif (mod.subclass_of?(Spider::Model::BaseModel))
|
111
|
-
models << mod if @non_managed || mod < Spider::Model::Managed
|
112
|
-
end
|
113
|
-
Spider.logger.warn("Nothing to do") if models.empty?
|
114
|
-
models.each do |model|
|
115
|
-
dest = @dump_path || model.app.models_path
|
116
|
-
FileUtils.mkdir_p(dest)
|
117
|
-
file_name = "#{model.short_name}.rb"
|
118
|
-
path = "#{dest}/#{file_name}"
|
119
|
-
if (File.exist?(path) && !@force)
|
120
|
-
Spider.logger.warn("File #{path} exists, skipping #{model}")
|
121
|
-
next
|
102
|
+
dump_cmd.set_execution_block do |req_models|
|
103
|
+
require 'spiderfw/init'
|
104
|
+
req_models || []
|
105
|
+
req_models.each do |model_or_app|
|
106
|
+
models = []
|
107
|
+
mod = model_or_app.is_a?(Module) ? model_or_app : const_get_full(model_or_app)
|
108
|
+
if (mod.is_a?(Module) && mod.include?(Spider::App))
|
109
|
+
mod.models.each do |m|
|
110
|
+
models << m
|
111
|
+
end
|
112
|
+
elsif (mod.subclass_of?(Spider::Model::BaseModel))
|
113
|
+
models << mod if @non_managed || mod < Spider::Model::Managed
|
122
114
|
end
|
123
|
-
|
124
|
-
|
125
|
-
|
115
|
+
Spider.logger.warn("Nothing to do") if models.empty?
|
116
|
+
models.each do |model|
|
117
|
+
dest = @dump_path || model.app.models_path
|
118
|
+
FileUtils.mkdir_p(dest)
|
119
|
+
file_name = "#{model.short_name}.rb"
|
120
|
+
path = "#{dest}/#{file_name}"
|
121
|
+
if (File.exist?(path) && !@force)
|
122
|
+
Spider.logger.warn("File #{path} exists, skipping #{model}")
|
123
|
+
next
|
124
|
+
end
|
125
|
+
code = model.to_code
|
126
|
+
File.open(path, "w") do |f|
|
127
|
+
f << code
|
128
|
+
end
|
126
129
|
end
|
127
130
|
end
|
128
131
|
end
|
129
|
-
|
130
|
-
self.add_command(dump_cmd)
|
132
|
+
self.add_command(dump_cmd)
|
131
133
|
|
132
134
|
|
135
|
+
end
|
136
|
+
|
133
137
|
end
|
134
138
|
|
135
139
|
end
|
@@ -1,61 +1,65 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
def initialize
|
5
|
-
super( 'setup', false, true )
|
6
|
-
@short_desc = _("Setup an application")
|
7
|
-
# @description = _("")
|
8
|
-
@apps = []
|
9
|
-
|
10
|
-
self.options = CmdParse::OptionParserWrapper.new do |opt|
|
11
|
-
# TODO
|
12
|
-
opt.on("--from [VERSION]", _("Assume a specific version is installed"), "-f"){ |from|
|
13
|
-
@from = Gem::Version.new(from)
|
14
|
-
}
|
15
|
-
opt.on("--to [VERSION]", _("Setup to a specific version"), "-t"){ |to|
|
16
|
-
@to = Gem::Version.new(to)
|
17
|
-
}
|
18
|
-
opt.on("--version [VERSION]", _("Only run the setup script for the given version"), "-v"){ |v|
|
19
|
-
@version = Gem::Version.new(v)
|
20
|
-
}
|
21
|
-
opt.on("--all", _("Setup all active apps")){ |all|
|
22
|
-
@all = true
|
23
|
-
}
|
24
|
-
opt.on("--no-cleanup", _("Don't cleanup"), "-C"){ |no_cleanup| @no_cleanup = true }
|
25
|
-
end
|
1
|
+
module Spider::CommandLine
|
26
2
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
3
|
+
class SetupCommand < CmdParse::Command
|
4
|
+
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
super( 'setup', false, true )
|
8
|
+
@short_desc = _("Setup an application")
|
9
|
+
# @description = _("")
|
10
|
+
@apps = []
|
11
|
+
|
12
|
+
self.options = CmdParse::OptionParserWrapper.new do |opt|
|
13
|
+
# TODO
|
14
|
+
opt.on("--from [VERSION]", _("Assume a specific version is installed"), "-f"){ |from|
|
15
|
+
@from = Gem::Version.new(from)
|
16
|
+
}
|
17
|
+
opt.on("--to [VERSION]", _("Setup to a specific version"), "-t"){ |to|
|
18
|
+
@to = Gem::Version.new(to)
|
19
|
+
}
|
20
|
+
opt.on("--version [VERSION]", _("Only run the setup script for the given version"), "-v"){ |v|
|
21
|
+
@version = Gem::Version.new(v)
|
22
|
+
}
|
23
|
+
opt.on("--all", _("Setup all active apps")){ |all|
|
24
|
+
@all = true
|
25
|
+
}
|
26
|
+
opt.on("--no-cleanup", _("Don't cleanup"), "-C"){ |no_cleanup| @no_cleanup = true }
|
46
27
|
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
28
|
+
|
29
|
+
set_execution_block do |apps|
|
30
|
+
$SPIDER_INTERACTIVE = true
|
31
|
+
require 'spiderfw/spider'
|
32
|
+
Spider.init_base
|
33
|
+
apps = Spider.apps.keys if @all
|
34
|
+
if (apps.length > 1) && (@to || @from || @version)
|
35
|
+
raise "Can't use --from, --to or --version with multiple apps"
|
36
|
+
end
|
37
|
+
if apps.length == 0
|
38
|
+
require 'lib/spiderfw/setup/spider_setup_wizard'
|
39
|
+
wizard = Spider::SpiderSetupWizard.new
|
40
|
+
wizard.implementation(Spider::ConsoleWizard)
|
41
|
+
wizard.run
|
42
|
+
|
43
|
+
end
|
44
|
+
tasks = []
|
45
|
+
apps.each do |name|
|
46
|
+
require 'spiderfw/setup/app_manager'
|
47
|
+
tasks += Spider::AppManager.new(:interactive => true).setup(name, @from, @to)
|
48
|
+
end
|
49
|
+
unless @no_cleanup
|
50
|
+
tasks.each do |t|
|
51
|
+
begin
|
52
|
+
t.do_cleanup
|
53
|
+
rescue => exc
|
54
|
+
Spider.logger.error(exc)
|
55
|
+
end
|
53
56
|
end
|
54
57
|
end
|
55
58
|
end
|
56
|
-
end
|
57
59
|
|
58
60
|
|
61
|
+
end
|
62
|
+
|
59
63
|
end
|
60
64
|
|
61
65
|
end
|
@@ -1,72 +1,76 @@
|
|
1
|
-
|
1
|
+
module Spider::CommandLine
|
2
2
|
|
3
|
+
class TestCommand < CmdParse::Command
|
3
4
|
|
4
|
-
def initialize
|
5
|
-
super( 'test', true, true )
|
6
|
-
@short_desc = _("Manage tests")
|
7
|
-
# @description = _("")
|
8
|
-
@apps = []
|
9
5
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
apps
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
collector
|
6
|
+
def initialize
|
7
|
+
super( 'test', true, true )
|
8
|
+
@short_desc = _("Manage tests")
|
9
|
+
# @description = _("")
|
10
|
+
@apps = []
|
11
|
+
|
12
|
+
run_cmd = CmdParse::Command.new( 'run', false )
|
13
|
+
run_cmd.short_desc = _("Run tests")
|
14
|
+
# run.options = CmdParse::OptionParserWrapper.new do |opt|
|
15
|
+
# opt.on("--app",
|
16
|
+
# _("Run tests only for an app"),
|
17
|
+
# "-a"){ |app|
|
18
|
+
# @apps << app
|
19
|
+
# }
|
20
|
+
# end
|
21
|
+
run_cmd.set_execution_block do |apps|
|
22
|
+
require 'test/unit/collector/dir'
|
23
|
+
require 'test/unit'
|
24
|
+
apps = Spider.apps.keys if (!apps || apps.length < 1)
|
25
|
+
collector = Test::Unit::Collector::Dir.new()
|
26
|
+
apps.each do |name|
|
27
|
+
next unless File.exist?(Spider.apps[name].test_path)
|
28
|
+
collector.collect(Spider.apps[name].test_path)
|
29
|
+
end
|
27
30
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
test_env
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
Spider.apps.clear
|
31
|
+
self.add_command(run_cmd)
|
32
|
+
|
33
|
+
self_cmd = CmdParse::Command.new('self', false)
|
34
|
+
self_cmd.short_desc = _("Run framework tests")
|
35
|
+
self_cmd.set_execution_block do
|
36
|
+
require 'test/unit/collector/dir'
|
37
|
+
require 'test/unit'
|
38
|
+
$SPIDER_RUNMODE = 'test'
|
39
|
+
require 'spiderfw/init'
|
40
|
+
test_env = "#{$SPIDER_PATH}/test"
|
41
|
+
# Dir.cwd(test_env)
|
42
|
+
$:.push(test_env)
|
43
|
+
apps = Spider.find_apps_in_folder("#{test_env}/apps")
|
44
|
+
Spider.apps.clear
|
43
45
|
|
44
|
-
|
46
|
+
apps.each{ |app| Spider.load_app_at_path app }
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
Spider._test_setup
|
49
|
+
collector = Test::Unit::Collector::Dir.new()
|
50
|
+
collector.collect("#{test_env}/tests")
|
51
|
+
Spider._test_teardown
|
52
|
+
end
|
53
|
+
self.add_command(self_cmd)
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
55
|
+
issue = CmdParse::Command.new('issue', false)
|
56
|
+
issue.short_desc = _("Test for an issue")
|
57
|
+
issue.set_execution_block do |args|
|
58
|
+
id = args.first
|
59
|
+
require 'spiderfw/spider'
|
60
|
+
require 'spiderfw/test'
|
61
|
+
|
62
|
+
test_path = File.join($SPIDER_PATH, 'test', 'issues')
|
63
|
+
issue_no = id.rjust(5, "0")
|
64
|
+
Dir.glob(File.join(test_path, "#{issue_no}-*")).each do |f|
|
65
|
+
require f
|
66
|
+
end
|
67
|
+
|
64
68
|
end
|
65
|
-
|
66
|
-
end
|
67
|
-
self.add_command(issue)
|
69
|
+
self.add_command(issue)
|
68
70
|
|
69
71
|
|
72
|
+
end
|
73
|
+
|
70
74
|
end
|
71
75
|
|
72
76
|
end
|
@@ -1,63 +1,68 @@
|
|
1
1
|
require 'spiderfw/http/http'
|
2
2
|
|
3
|
-
|
3
|
+
module Spider::CommandLine
|
4
4
|
|
5
|
+
class WebServerCommand < CmdParse::Command
|
5
6
|
|
6
|
-
def initialize
|
7
|
-
super( 'webserver', true, true )
|
8
|
-
@short_desc = _("Manage internal webserver")
|
9
|
-
# @description = _("")
|
10
|
-
|
11
|
-
servers = {
|
12
|
-
'webrick' => :WEBrick,
|
13
|
-
'mongrel' => :Mongrel,
|
14
|
-
'thin' => :Thin
|
15
|
-
}
|
16
7
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
@server_name = server_name
|
27
|
-
}
|
28
|
-
opt.on("--daemonize [daemon_name]", _("Detach server process"), "-d"){ |daemon_name| @daemonize = daemon_name || true }
|
29
|
-
opt.on("--cgi", _("Serve each request spawning a CGI subprocess. Useful in developement."), "-c"){
|
30
|
-
@cgi = true
|
31
|
-
}
|
32
|
-
opt.on("--ssl [PORT]", _("Listen to SSL requests"), "-S"){ |port|
|
33
|
-
@ssl = port || 443
|
8
|
+
def initialize
|
9
|
+
super( 'webserver', true, true )
|
10
|
+
@short_desc = _("Manage internal webserver")
|
11
|
+
# @description = _("")
|
12
|
+
|
13
|
+
servers = {
|
14
|
+
'webrick' => :WEBrick,
|
15
|
+
'mongrel' => :Mongrel,
|
16
|
+
'thin' => :Thin
|
34
17
|
}
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
18
|
+
|
19
|
+
# start
|
20
|
+
start = CmdParse::Command.new( 'start', false )
|
21
|
+
start.short_desc = "Start web server"
|
22
|
+
start.options = CmdParse::OptionParserWrapper.new do |opt|
|
23
|
+
opt.on("--port N", _("The port the webserver should listen on"), "-p") { |port|
|
24
|
+
@port = port
|
25
|
+
}
|
26
|
+
opt.on("--server name", _("Which webserver to use; the choices are 'webrick', 'mongrel' and 'thin'"), "-s"){ |server_name|
|
27
|
+
raise CmdParse::InvalidArgumentError, _("The webserver %s is not supported") % server_name unless servers[server_name]
|
28
|
+
@server_name = server_name
|
29
|
+
}
|
30
|
+
opt.on("--daemonize [daemon_name]", _("Detach server process"), "-d"){ |daemon_name| @daemonize = daemon_name || true }
|
31
|
+
opt.on("--cgi", _("Serve each request spawning a CGI subprocess. Useful in developement."), "-c"){
|
32
|
+
@cgi = true
|
33
|
+
}
|
34
|
+
opt.on("--ssl [PORT]", _("Listen to SSL requests"), "-S"){ |port|
|
35
|
+
@ssl = port || 443
|
36
|
+
}
|
37
|
+
opt.on("--cert CERT", _("SSL certificate")){ |cert| @ssl_cert = cert }
|
38
|
+
opt.on("--key key", _("SSL private key")){ |key| @ssl_key = key }
|
44
39
|
end
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
40
|
+
start.set_execution_block do |args|
|
41
|
+
require 'spiderfw/spider'
|
42
|
+
raise "Can't use cgi mode with SSL" if @ssl && @cgi
|
43
|
+
if @ssl && @server_name != 'webrick'
|
44
|
+
puts _("Note: Using WEBrick as a webserver, since SSL was requested")
|
45
|
+
@server_name = 'webrick'
|
46
|
+
end
|
47
|
+
options = {
|
48
|
+
:port => @port,
|
49
|
+
:verbose => $verbose,
|
50
|
+
:ssl => @ssl,
|
51
|
+
:ssl_cert => @ssl_cert,
|
52
|
+
:ssl_key => @ssl_key,
|
53
|
+
:cgi => @cgi,
|
54
|
+
:daemonize => @daemonize
|
55
|
+
}
|
56
|
+
Spider::HTTP::Server.start(@server_name, options)
|
57
|
+
|
58
|
+
|
59
|
+
end
|
60
|
+
self.add_command( start )
|
61
|
+
|
62
|
+
# stop
|
58
63
|
|
59
|
-
# stop
|
60
64
|
|
65
|
+
end
|
61
66
|
|
62
67
|
end
|
63
68
|
|