waw 0.2.2
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/LICENCE.rdoc +25 -0
- data/README.rdoc +32 -0
- data/bin/waw +32 -0
- data/bin/waw-profile +26 -0
- data/bin/waw-start +26 -0
- data/bin/wspec +33 -0
- data/layouts/empty/Rakefile +14 -0
- data/layouts/empty/config.ru +5 -0
- data/layouts/empty/config/commons.cfg +31 -0
- data/layouts/empty/config/devel.cfg +21 -0
- data/layouts/empty/ignore +7 -0
- data/layouts/empty/logs/dontforgetme +0 -0
- data/layouts/empty/resources/messages.rs +1 -0
- data/layouts/empty/test/wspec/site_respond.wspec +3 -0
- data/layouts/empty/test/wspec/test_all.rb +13 -0
- data/layouts/empty/waw.deploy +1 -0
- data/layouts/empty/waw.routing +6 -0
- data/layouts/static/dependencies +1 -0
- data/layouts/static/public/.wawaccess +18 -0
- data/layouts/static/public/css/style.css +0 -0
- data/layouts/static/public/images/dontforgetme +0 -0
- data/layouts/static/public/js/project.js +0 -0
- data/layouts/static/public/pages/.wawaccess +30 -0
- data/layouts/static/public/pages/404.wtpl +1 -0
- data/layouts/static/public/pages/index.wtpl +5 -0
- data/layouts/static/public/templates/.wawaccess +9 -0
- data/layouts/static/public/templates/layout.wtpl +17 -0
- data/layouts/static/test/wspec/static_pages_are_served.wspec +21 -0
- data/layouts/static/waw.routing +8 -0
- data/lib/waw.rb +99 -0
- data/lib/waw/commands/command.rb +115 -0
- data/lib/waw/commands/profile_command.rb +66 -0
- data/lib/waw/commands/start_command.rb +59 -0
- data/lib/waw/config.rb +110 -0
- data/lib/waw/controller.rb +25 -0
- data/lib/waw/controllers/action/action.rb +91 -0
- data/lib/waw/controllers/action/action_utils.rb +30 -0
- data/lib/waw/controllers/action/js_generation.rb +116 -0
- data/lib/waw/controllers/action_controller.rb +133 -0
- data/lib/waw/controllers/error/backtrace.rb +54 -0
- data/lib/waw/controllers/error_handler.rb +62 -0
- data/lib/waw/controllers/json_controller.rb +31 -0
- data/lib/waw/controllers/no_cache.rb +22 -0
- data/lib/waw/controllers/static/match.rb +80 -0
- data/lib/waw/controllers/static/waw_access.rb +235 -0
- data/lib/waw/controllers/static/waw_access_dsl.rb +48 -0
- data/lib/waw/controllers/static_controller.rb +37 -0
- data/lib/waw/default_config.cfg +14 -0
- data/lib/waw/environment_utils.rb +57 -0
- data/lib/waw/errors.rb +4 -0
- data/lib/waw/ext.rb +3 -0
- data/lib/waw/ext/core.rb +4 -0
- data/lib/waw/ext/core/hash.rb +47 -0
- data/lib/waw/ext/core/logger.rb +10 -0
- data/lib/waw/ext/core/module.rb +20 -0
- data/lib/waw/ext/core/object.rb +29 -0
- data/lib/waw/ext/rack.rb +19 -0
- data/lib/waw/ext/rack/builder.rb +43 -0
- data/lib/waw/ext/rack/delegator.rb +51 -0
- data/lib/waw/ext/rack/urlmap.rb +55 -0
- data/lib/waw/ext/wlang.rb +1 -0
- data/lib/waw/ext/wlang/hosted_language.rb +21 -0
- data/lib/waw/fullstate.rb +8 -0
- data/lib/waw/fullstate/on_class.rb +37 -0
- data/lib/waw/fullstate/on_instance.rb +27 -0
- data/lib/waw/fullstate/variable.rb +36 -0
- data/lib/waw/kern.rb +6 -0
- data/lib/waw/kern/app.rb +48 -0
- data/lib/waw/kern/empty/waw.deploy +0 -0
- data/lib/waw/kern/empty/waw.routing +1 -0
- data/lib/waw/kern/freezed_state.rb +32 -0
- data/lib/waw/kern/hooks.rb +53 -0
- data/lib/waw/kern/lifecycle.rb +248 -0
- data/lib/waw/kern/living_state.rb +87 -0
- data/lib/waw/kern/utils.rb +27 -0
- data/lib/waw/resource_collection.rb +100 -0
- data/lib/waw/restart.rb +32 -0
- data/lib/waw/routing.rb +43 -0
- data/lib/waw/routing/action_routing.rb +78 -0
- data/lib/waw/routing/dsl.rb +45 -0
- data/lib/waw/routing/feedback.rb +23 -0
- data/lib/waw/routing/form_validation_feedback.rb +36 -0
- data/lib/waw/routing/javascript.rb +17 -0
- data/lib/waw/routing/redirect.rb +26 -0
- data/lib/waw/routing/refresh.rb +17 -0
- data/lib/waw/routing/routing_rule.rb +16 -0
- data/lib/waw/scope_utils.rb +69 -0
- data/lib/waw/session.rb +51 -0
- data/lib/waw/testing.rb +1 -0
- data/lib/waw/tools/mail.rb +4 -0
- data/lib/waw/tools/mail/mail.rb +119 -0
- data/lib/waw/tools/mail/mail_agent.rb +123 -0
- data/lib/waw/tools/mail/mailbox.rb +62 -0
- data/lib/waw/tools/mail/template.rb +38 -0
- data/lib/waw/utils/dsl_helper.rb +116 -0
- data/lib/waw/validation.rb +175 -0
- data/lib/waw/validation/and_validator.rb +27 -0
- data/lib/waw/validation/array_validations.rb +38 -0
- data/lib/waw/validation/boolean_validator.rb +32 -0
- data/lib/waw/validation/comparison_validations.rb +45 -0
- data/lib/waw/validation/date_validator.rb +31 -0
- data/lib/waw/validation/default_validator.rb +30 -0
- data/lib/waw/validation/dsl_ruby_extensions.rb +11 -0
- data/lib/waw/validation/errors.rb +17 -0
- data/lib/waw/validation/ext.rb +3 -0
- data/lib/waw/validation/file_validator.rb +30 -0
- data/lib/waw/validation/float_validator.rb +19 -0
- data/lib/waw/validation/helpers.rb +67 -0
- data/lib/waw/validation/integer_validator.rb +16 -0
- data/lib/waw/validation/isin_validator.rb +24 -0
- data/lib/waw/validation/mandatory_validator.rb +17 -0
- data/lib/waw/validation/missing_validator.rb +17 -0
- data/lib/waw/validation/not_validator.rb +20 -0
- data/lib/waw/validation/or_validator.rb +34 -0
- data/lib/waw/validation/regexp_validator.rb +29 -0
- data/lib/waw/validation/same_validator.rb +16 -0
- data/lib/waw/validation/signature.rb +157 -0
- data/lib/waw/validation/size_validations.rb +44 -0
- data/lib/waw/validation/string_validator.rb +15 -0
- data/lib/waw/validation/validator.rb +48 -0
- data/lib/waw/wawgen.rb +2 -0
- data/lib/waw/wawgen/create.rb +166 -0
- data/lib/waw/wawgen/project.rb +25 -0
- data/lib/waw/wspec.rb +5 -0
- data/lib/waw/wspec/browser.rb +240 -0
- data/lib/waw/wspec/dsl.rb +201 -0
- data/lib/waw/wspec/html_analysis.rb +136 -0
- data/lib/waw/wspec/html_analysis/tag.rb +56 -0
- data/lib/waw/wspec/runner.rb +70 -0
- data/lib/waw/wspec/scenario.rb +35 -0
- data/lib/waw/wspec/suite.rb +54 -0
- data/test/bricks/error_handler/config/test.cfg +2 -0
- data/test/bricks/error_handler/logs/webapp.log +1411 -0
- data/test/bricks/error_handler/test/error_handler.wspec +16 -0
- data/test/bricks/error_handler/waw.deploy +1 -0
- data/test/bricks/error_handler/waw.routing +27 -0
- data/test/integration/waw_create_integration_test.rb +24 -0
- data/test/spec/assumptions_spec.rb +30 -0
- data/test/spec/controllers/action_controller_spec.rb +14 -0
- data/test/spec/controllers/static/waw_access_spec.rb +112 -0
- data/test/spec/environment_utils_spec.rb +15 -0
- data/test/spec/ext/core/hash_spec.rb +58 -0
- data/test/spec/fixtures.rb +41 -0
- data/test/spec/fixtures/action/config/default.cfg +2 -0
- data/test/spec/fixtures/action/lib/action_controller_test.rb +12 -0
- data/test/spec/fixtures/action/waw.deploy +1 -0
- data/test/spec/fixtures/action/waw.routing +6 -0
- data/test/spec/fixtures/empty/waw.deploy +0 -0
- data/test/spec/fixtures/empty/waw.routing +0 -0
- data/test/spec/fullstate/on_class_spec.rb +59 -0
- data/test/spec/fullstate/on_instance_spec.rb +59 -0
- data/test/spec/fullstate/session_spec.rb +43 -0
- data/test/spec/fullstate/variable_spec.rb +55 -0
- data/test/spec/resource_collection_spec.rb +50 -0
- data/test/spec/test_all.rb +9 -0
- data/test/spec/tools/mail/mail_agent_spec.rb +116 -0
- data/test/spec/tools/mail/mail_spec.rb +56 -0
- data/test/spec/tools/mail/mailbox_spec.rb +57 -0
- data/test/spec/tools/mail/template_spec.rb +47 -0
- data/test/spec/validation/array_validation_spec.rb +63 -0
- data/test/spec/validation/array_validator_spec.rb +17 -0
- data/test/spec/validation/date_validation_spec.rb +35 -0
- data/test/spec/validation/default_validation_spec.rb +37 -0
- data/test/spec/validation/disjuctive_validation_spec.rb +33 -0
- data/test/spec/validation/errors_spec.rb +37 -0
- data/test/spec/validation/file_validator_spec.rb +34 -0
- data/test/spec/validation/mail_validation_spec.rb +51 -0
- data/test/spec/validation/missing_validation_spec.rb +43 -0
- data/test/spec/validation/same_validation_spec.rb +24 -0
- data/test/spec/validation/signature_intuition_spec.rb +37 -0
- data/test/spec/validation/signature_spec.rb +164 -0
- data/test/spec/validation/validation_spec.rb +28 -0
- data/test/spec/wspec/html_analysis/tag_spec.rb +38 -0
- data/test/spec/wspec/html_analysis_spec.rb +170 -0
- data/test/unit/test_all.rb +8 -0
- data/test/unit/waw/app_test.rb +126 -0
- data/test/unit/waw/app_test/config/commons.cfg +2 -0
- data/test/unit/waw/app_test/config/devel.cfg +1 -0
- data/test/unit/waw/config_test.rb +54 -0
- data/test/unit/waw/controllers/action_controller_test.rb +76 -0
- data/test/unit/waw/controllers/action_test.rb +35 -0
- data/test/unit/waw/controllers/example_action_controller_test.rb +24 -0
- data/test/unit/waw/controllers/multiple_action_controller_test.rb +78 -0
- data/test/unit/waw/controllers/static/example/css/example.css +1 -0
- data/test/unit/waw/controllers/static/example/index.html +1 -0
- data/test/unit/waw/controllers/static/example/js/example.js +1 -0
- data/test/unit/waw/controllers/static/example/pages/hello.wtpl +1 -0
- data/test/unit/waw/controllers/static/waw_access_test.rb +76 -0
- data/test/unit/waw/ext/rack_test.rb +74 -0
- data/test/unit/waw/resource_collection_test.rb +49 -0
- data/test/unit/waw/resources.txt +4 -0
- data/test/unit/waw/routing/routing_test.rb +26 -0
- data/test/unit/waw/utils/dsl_helper_test.rb +79 -0
- data/test/unit/waw/utils/dsl_helper_test_extensions1.rb +4 -0
- data/test/unit/waw/validation/signature_test.rb +193 -0
- data/test/unit/waw/validation_test.rb +319 -0
- data/test/unit/waw/wspec/html_analysis_test.html +81 -0
- data/test/unit/waw/wspec/html_analysis_test.rb +26 -0
- metadata +272 -0
data/LICENCE.rdoc
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
= Licence
|
|
2
|
+
|
|
3
|
+
The MIT License
|
|
4
|
+
|
|
5
|
+
Copyright (c) 2009 Bernard & Louis Lambeau and the University of Louvain
|
|
6
|
+
(Universite Catholique de Louvain, Louvain-la-Neuve, Belgium)
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in
|
|
16
|
+
all copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24
|
+
THE SOFTWARE.
|
|
25
|
+
|
data/README.rdoc
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
= Waw, making web applications simple
|
|
2
|
+
|
|
3
|
+
Waw is a web framework written in Ruby. It provides an alternative to Rails and other frameworks
|
|
4
|
+
written in Ruby as well. It is designed to be somewhere in the middle between Rails (sometimes a
|
|
5
|
+
bit too heavy) and Rack (not really a framework, sometimes too low-level).
|
|
6
|
+
|
|
7
|
+
== Main features
|
|
8
|
+
|
|
9
|
+
Waw basically provides an overall architecture for web sites and/or applications. Its main
|
|
10
|
+
features are
|
|
11
|
+
|
|
12
|
+
- It proposes the development of secure web applications, avoiding code injection as much
|
|
13
|
+
as possible and enforcing validation of both input data (coming from formularies, for example)
|
|
14
|
+
and application state (user authentification or administration level for invoking specific
|
|
15
|
+
services or to access specific pages)
|
|
16
|
+
|
|
17
|
+
- A simple but powerful templating engine, not restricted to HTML... Creating XML files for AJAX
|
|
18
|
+
services, creating text reports and so on are all as easy as generating html.
|
|
19
|
+
|
|
20
|
+
- Invoking webservices through AJAX is made declarative. The javascript code is automatically
|
|
21
|
+
generated!
|
|
22
|
+
|
|
23
|
+
- When things become too restrictive for you (you don't fit the architecture exactly) you can
|
|
24
|
+
access lower stages ... edit the underlying Rack configuration and install your own services
|
|
25
|
+
in a few minutes, bypassing waw when needed!
|
|
26
|
+
|
|
27
|
+
== Dependencies
|
|
28
|
+
|
|
29
|
+
Waw requires the following ruby gems
|
|
30
|
+
|
|
31
|
+
- rack >= 1.1.0 (provided through <code>gem install rack</code>)
|
|
32
|
+
- wlang >= 0.9.0 (provided in the vendors folder)
|
data/bin/waw
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Waw - making web development simple
|
|
4
|
+
# (see lib/waw/waw.rb for more information)
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2010 University of Louvain, Bernard & Louis Lambeau
|
|
7
|
+
# Released under a MIT or Ruby licence
|
|
8
|
+
#
|
|
9
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
10
|
+
require 'waw'
|
|
11
|
+
require 'waw/wawgen'
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
if ARGV.size < 1
|
|
15
|
+
puts "Usage: waw create [options] ProjectName"
|
|
16
|
+
elsif ARGV[0] != 'create'
|
|
17
|
+
puts "Unknown command #{ARGV[0]}"
|
|
18
|
+
puts "Usage: waw create [options] ProjectName"
|
|
19
|
+
else
|
|
20
|
+
r = Waw::Wawgen::Create.new.run ARGV[1..-1]
|
|
21
|
+
end
|
|
22
|
+
rescue Interrupt => e
|
|
23
|
+
$stderr.puts
|
|
24
|
+
$stderr.puts "Interrupted"
|
|
25
|
+
raise e
|
|
26
|
+
rescue OptionParser::ParseError => e
|
|
27
|
+
$stderr.puts e.message
|
|
28
|
+
raise e
|
|
29
|
+
rescue => e
|
|
30
|
+
$stderr.puts e.message
|
|
31
|
+
raise e
|
|
32
|
+
end
|
data/bin/waw-profile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Waw - making web development simple
|
|
4
|
+
# (see lib/waw/waw.rb for more information)
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2010 University of Louvain, Bernard & Louis Lambeau
|
|
7
|
+
# Released under a MIT or Ruby licence
|
|
8
|
+
#
|
|
9
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
10
|
+
require 'waw'
|
|
11
|
+
require 'waw/commands/command'
|
|
12
|
+
require 'waw/commands/profile_command'
|
|
13
|
+
|
|
14
|
+
begin
|
|
15
|
+
r = Waw::Commands::ProfileCommand.new.run '.', ARGV
|
|
16
|
+
rescue Interrupt => e
|
|
17
|
+
$stderr.puts
|
|
18
|
+
$stderr.puts "Interrupted"
|
|
19
|
+
raise e
|
|
20
|
+
rescue OptionParser::ParseError => e
|
|
21
|
+
$stderr.puts e.message
|
|
22
|
+
raise e
|
|
23
|
+
rescue => e
|
|
24
|
+
$stderr.puts e.message
|
|
25
|
+
raise e
|
|
26
|
+
end
|
data/bin/waw-start
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Waw - making web development simple
|
|
4
|
+
# (see lib/waw/waw.rb for more information)
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2010 University of Louvain, Bernard & Louis Lambeau
|
|
7
|
+
# Released under a MIT or Ruby licence
|
|
8
|
+
#
|
|
9
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
10
|
+
require 'waw'
|
|
11
|
+
require 'waw/commands/command'
|
|
12
|
+
require 'waw/commands/start_command'
|
|
13
|
+
|
|
14
|
+
begin
|
|
15
|
+
r = Waw::Commands::StartCommand.new.run '.', ARGV
|
|
16
|
+
rescue Interrupt => e
|
|
17
|
+
$stderr.puts
|
|
18
|
+
$stderr.puts "Interrupted"
|
|
19
|
+
raise e
|
|
20
|
+
rescue OptionParser::ParseError => e
|
|
21
|
+
$stderr.puts e.message
|
|
22
|
+
raise e
|
|
23
|
+
rescue => e
|
|
24
|
+
$stderr.puts e.message
|
|
25
|
+
raise e
|
|
26
|
+
end
|
data/bin/wspec
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# WSpec - Executes wspec waw tests
|
|
4
|
+
# (see lib/waw/waw.rb for more information)
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2010 University of Louvain, Bernard & Louis Lambeau
|
|
7
|
+
# Released under a MIT or Ruby licence
|
|
8
|
+
#
|
|
9
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
10
|
+
require 'waw'
|
|
11
|
+
|
|
12
|
+
# Abord execution
|
|
13
|
+
def abord(message, code)
|
|
14
|
+
puts message
|
|
15
|
+
exit(code)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
unless ARGV.size == 1
|
|
19
|
+
abord("Usage: wspec a_test.wspec", 0)
|
|
20
|
+
else
|
|
21
|
+
# Checks that the test exists
|
|
22
|
+
wspec_file = ARGV[0]
|
|
23
|
+
abord("Unable to find .wspec file #{wspec_file}", -1) unless File.exists?(wspec_file)
|
|
24
|
+
|
|
25
|
+
# Load the waw application for having configuration
|
|
26
|
+
app = Waw.autoload(wspec_file)
|
|
27
|
+
raise "Tests cannot be run in production mode, to avoid modifying real database "\
|
|
28
|
+
"or sending spam mails to real users." unless app.config.deploy_mode=='devel'
|
|
29
|
+
|
|
30
|
+
# Load the wspec runner now
|
|
31
|
+
require 'waw/wspec/runner'
|
|
32
|
+
load(wspec_file)
|
|
33
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require "rake/rdoctask"
|
|
2
|
+
require "rake/testtask"
|
|
3
|
+
require "rubygems"
|
|
4
|
+
require "waw"
|
|
5
|
+
|
|
6
|
+
task :default => [:test]
|
|
7
|
+
|
|
8
|
+
desc "Launches all wspec tests"
|
|
9
|
+
task :wspec do
|
|
10
|
+
require('test/wspec/test_all.rb')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
desc "Launches all tests"
|
|
14
|
+
task :test => [:wspec]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# The following paths will be automatically added to the $LOAD_PATH
|
|
2
|
+
# ruby global variable when the web application is loaded.
|
|
3
|
+
# load_path 'lib'
|
|
4
|
+
|
|
5
|
+
# The following names will be ruby-required when the web application
|
|
6
|
+
# is loaded.
|
|
7
|
+
# requires '+(project.lowname)'
|
|
8
|
+
|
|
9
|
+
# A simple ruby name for the web application. This name is used in
|
|
10
|
+
# different part of the waw architecture (including code generation).
|
|
11
|
+
# It MUST respect [a-z][a-z_]*, to avoid strange behaviors.
|
|
12
|
+
application_name '+(project.lowname)'
|
|
13
|
+
|
|
14
|
+
# Deployment mode; accepted values are 'devel', 'test' 'acceptation'
|
|
15
|
+
# and 'production'. The deployment mode drives the way critical code is
|
|
16
|
+
# executed. Your wspec tests cannot be run in production mode, for example,
|
|
17
|
+
# to avoid modifying your production database, sending mails to real people,
|
|
18
|
+
# and so on.
|
|
19
|
+
#
|
|
20
|
+
# This is set to 'devel' by default, to avoid waw failures for developers
|
|
21
|
+
# forgetting to set this configuration parameter. It should be overrided
|
|
22
|
+
# on producion and test environments.
|
|
23
|
+
deploy_mode 'devel'
|
|
24
|
+
|
|
25
|
+
# Generate javascript (and additional) code at startup? By default, code
|
|
26
|
+
# is generated at startup time in devel mode only.
|
|
27
|
+
code_at_startup { deploy_mode=='devel' }
|
|
28
|
+
|
|
29
|
+
# About the Rack session
|
|
30
|
+
rack_session true
|
|
31
|
+
rack_session_expire 60 * 60 * 24 * 265
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Deployment mode; accepted values are 'devel', 'test' 'acceptation'
|
|
2
|
+
# and 'production'. The deployment mode drives the way critical code is
|
|
3
|
+
# executed. Your wspec tests cannot be run in production mode, for example,
|
|
4
|
+
# to avoid modifying your production database, sending mails to real people,
|
|
5
|
+
# and so on.
|
|
6
|
+
deploy_mode 'devel'
|
|
7
|
+
|
|
8
|
+
# Web domain, web port and web base. The later is the url to put in
|
|
9
|
+
# <base href=""/>. This url should always include http:// and should not
|
|
10
|
+
# contain the index.html suffix.
|
|
11
|
+
web_domain '127.0.0.1'
|
|
12
|
+
web_port 9292
|
|
13
|
+
web_base "http://#{web_domain}:#{web_port}/"
|
|
14
|
+
|
|
15
|
+
# Logger configuration. Follows what ruby Logger class expects.
|
|
16
|
+
#log_io STDOUT
|
|
17
|
+
log_dir 'logs'
|
|
18
|
+
log_file "#{application_name}.log"
|
|
19
|
+
log_frequency 'weekly'
|
|
20
|
+
log_level Logger::DEBUG
|
|
21
|
+
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# This file helps you developing your web application with a version-control
|
|
2
|
+
# system like Git or Subversion. The following waw files should always be ignored
|
|
3
|
+
# to avoid overriding configuration of other developers or production deployments
|
|
4
|
+
waw.deploy
|
|
5
|
+
config/*.cfg
|
|
6
|
+
tmp
|
|
7
|
+
logs
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Messages that the waw application use
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Requires
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
gem 'waw', '>= +(Waw::VERSION)'
|
|
4
|
+
require 'waw/wspec/runner'
|
|
5
|
+
|
|
6
|
+
# Load the waw application for having configuration
|
|
7
|
+
app = Waw.autoload(__FILE__)
|
|
8
|
+
raise "Tests cannot be run in production mode, to avoid modifying real database "\
|
|
9
|
+
"or sending spam mails to real users." unless ['devel', 'test'].include\?(app.config.deploy_mode\)
|
|
10
|
+
|
|
11
|
+
# Load all tests now
|
|
12
|
+
test_files = Dir[File.join(File.dirname(__FILE__), '**/*.wspec')]
|
|
13
|
+
test_files.each { |file| load(file) }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
commons devel
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
empty
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
wawaccess do
|
|
2
|
+
|
|
3
|
+
# .wawaccess files are never served
|
|
4
|
+
match /.wawaccess$/ do
|
|
5
|
+
deny
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# We serve all as static file by default
|
|
9
|
+
match file do
|
|
10
|
+
static
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# When something is not found, we look in the pages wawaccess
|
|
14
|
+
match true do
|
|
15
|
+
apply "/pages/#{served_file}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
wawaccess do
|
|
2
|
+
|
|
3
|
+
# We don't inherits static configuration
|
|
4
|
+
inherits false
|
|
5
|
+
|
|
6
|
+
# .wawaccess files are never served
|
|
7
|
+
match /.wawaccess$/ do
|
|
8
|
+
deny
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# When a folder is requested, find the associated index file
|
|
12
|
+
match directory do
|
|
13
|
+
apply "#{served_file}/index.wtpl"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# We match .wtpl files using wlang
|
|
17
|
+
match file(:extension => '.wtpl') do
|
|
18
|
+
wlang '../templates/layout.wtpl'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# When the file cannot be found
|
|
22
|
+
match true do
|
|
23
|
+
if /\.wtpl$/ =~ served_file
|
|
24
|
+
apply "pages/404.wtpl", 404
|
|
25
|
+
else
|
|
26
|
+
apply "#{served_file}.wtpl"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<p>404 not found, the requested page does not exists</p>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
|
|
5
|
+
<base href="{config.web_base}"/>
|
|
6
|
+
<title>+(project.upname)</title>
|
|
7
|
+
*{css_files as css}{
|
|
8
|
+
<link rel="stylesheet" type="text/css" href="{css}" />
|
|
9
|
+
}
|
|
10
|
+
*{js_files as js}{
|
|
11
|
+
<script type="text/javascript" src="{js}"></script>
|
|
12
|
+
}
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<<+{../${served_file} share all}
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
scenario __FILE__ do
|
|
2
|
+
because("The root website URL is correctly served") {
|
|
3
|
+
i_reach index_page
|
|
4
|
+
i_see "Hello !"
|
|
5
|
+
}
|
|
6
|
+
because("Static files (css, js, images, ...) are correctly served") {
|
|
7
|
+
i_reach index_page + 'css/style.css'
|
|
8
|
+
i_reach index_page + 'js/+(project.lowname).js'
|
|
9
|
+
}
|
|
10
|
+
because(".wawaccess files are correctly written") {
|
|
11
|
+
i_may_not_reach index_page + '.wawaccess'
|
|
12
|
+
i_may_not_reach index_page + 'pages/.wawaccess'
|
|
13
|
+
i_may_not_reach index_page + 'templates/.wawaccess'
|
|
14
|
+
i_may_not_reach index_page + 'templates/layout.wtpl'
|
|
15
|
+
}
|
|
16
|
+
because("the default wlang context is correct") {
|
|
17
|
+
i_reach index_page
|
|
18
|
+
i_see_tag "link", {:rel => "stylesheet", :type => "text/css", :href => /^.*\.css/}
|
|
19
|
+
i_see_tag "script", {:type => "text/javascript", :src => /^.*\.js$/}
|
|
20
|
+
}
|
|
21
|
+
end
|
data/lib/waw.rb
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
$waw_deprecated_io = nil
|
|
2
|
+
require 'singleton'
|
|
3
|
+
require 'waw/ext/core'
|
|
4
|
+
require 'waw/ext/rack'
|
|
5
|
+
#
|
|
6
|
+
# Main waw module, providing the strict micro kernel of waw loader
|
|
7
|
+
#
|
|
8
|
+
module Waw
|
|
9
|
+
|
|
10
|
+
# Requirements on gems for this version
|
|
11
|
+
GEM_REQUIREMENTS = {
|
|
12
|
+
:rack => '>= 1.1.0',
|
|
13
|
+
:wlang => '>= 0.9.0',
|
|
14
|
+
:json => '>= 1.1.9'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
# Waw version
|
|
18
|
+
VERSION = "0.2.2".freeze
|
|
19
|
+
|
|
20
|
+
# Waw loading mutex
|
|
21
|
+
WAW_KERNELS_LOCK = Mutex.new
|
|
22
|
+
|
|
23
|
+
# Loaded kernels
|
|
24
|
+
KERNELS = []
|
|
25
|
+
|
|
26
|
+
# Autoloads and returns a waw application
|
|
27
|
+
def self.autoload(from)
|
|
28
|
+
WAW_KERNELS_LOCK.synchronize {
|
|
29
|
+
KERNELS << (app = ::Waw::Kern::App.new)
|
|
30
|
+
app.autoload(from)
|
|
31
|
+
}
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Loads a rack application
|
|
35
|
+
def self.rack(&block)
|
|
36
|
+
::Rack::Builder.new(&block).to_app
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Returns the last loaded waw kernel
|
|
40
|
+
deprecated "Waw.kernel will be removed in version 0.3.0"
|
|
41
|
+
def self.kernel
|
|
42
|
+
KERNELS.last
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Sets the current kernel
|
|
46
|
+
deprecated "Waw.kernel= will be removed in version 0.3.0"
|
|
47
|
+
def self.kernel=(kernel)
|
|
48
|
+
KERNELS << kernel
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Install a logger on waw itself
|
|
52
|
+
def self.logger=(logger)
|
|
53
|
+
@logger = logger
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Returns the waw logger, which always works on STDOUT
|
|
57
|
+
def self.logger
|
|
58
|
+
@logger || (self.kernel && self.kernel.logger) || Logger.new(STDOUT)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Install other deprecated methods now
|
|
62
|
+
def self.method_missing(name, *args, &block)
|
|
63
|
+
k = self.kernel
|
|
64
|
+
if k and k.respond_to?(name)
|
|
65
|
+
$waw_deprecated_io << "Waw.#{name} will be removed in version 0.3.0. "\
|
|
66
|
+
"Please use the current kernel instance instead." if $waw_deprecated_io
|
|
67
|
+
k.send(name, *args, &block)
|
|
68
|
+
else
|
|
69
|
+
super(name, *args, &block)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Now, make ruby requires
|
|
76
|
+
require 'rubygems'
|
|
77
|
+
Waw::GEM_REQUIREMENTS.each_pair {|name, version|
|
|
78
|
+
gem(name.to_s, version)
|
|
79
|
+
require(name.to_s)
|
|
80
|
+
}
|
|
81
|
+
require 'waw/errors'
|
|
82
|
+
require 'waw/scope_utils'
|
|
83
|
+
require 'waw/ext'
|
|
84
|
+
require 'waw/utils/dsl_helper'
|
|
85
|
+
require 'waw/resource_collection'
|
|
86
|
+
require 'waw/config'
|
|
87
|
+
require 'waw/kern'
|
|
88
|
+
require 'waw/validation'
|
|
89
|
+
require 'waw/environment_utils'
|
|
90
|
+
require 'waw/fullstate'
|
|
91
|
+
require 'waw/session'
|
|
92
|
+
require 'waw/controller'
|
|
93
|
+
require 'waw/restart'
|
|
94
|
+
require 'waw/controllers/json_controller'
|
|
95
|
+
require 'waw/controllers/action_controller'
|
|
96
|
+
require 'waw/controllers/static_controller'
|
|
97
|
+
require 'waw/controllers/no_cache'
|
|
98
|
+
require 'waw/controllers/error_handler'
|
|
99
|
+
require 'waw/routing'
|