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
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
requirement("Friendly error handlers should be provided by waw") {
|
|
2
|
+
browser.location = index_page + "argument"
|
|
3
|
+
i_see "ArgumentError error handler"
|
|
4
|
+
|
|
5
|
+
browser.location = index_page + "nomethod"
|
|
6
|
+
i_see "NoMethodError error handler"
|
|
7
|
+
|
|
8
|
+
browser.location = index_page + "fatal"
|
|
9
|
+
i_see "Internal Server Error"
|
|
10
|
+
|
|
11
|
+
browser.location = index_page + "anyother"
|
|
12
|
+
i_see "500.html error page"
|
|
13
|
+
|
|
14
|
+
browser.location = index_page + "backtrace"
|
|
15
|
+
i_see "Mail should not be nil"
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
test
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Waw.rack do
|
|
2
|
+
error_handler(ArgumentError) {|k, ex| [500, {'Content-Type' => 'text/plain'}, ["ArgumentError error handler"]] }
|
|
3
|
+
error_handler(NoMethodError) {|k, ex| [500, {'Content-Type' => 'text/plain'}, ["NoMethodError error handler"]] }
|
|
4
|
+
error_handler(RuntimeError) {|k, ex| raise }
|
|
5
|
+
error_handler {|k, ex| [301, {'Location' => k.config.web_base + '500.html'}, ['']] }
|
|
6
|
+
map '/argument' do
|
|
7
|
+
run Kernel.lambda{|env| raise ArgumentError}
|
|
8
|
+
end
|
|
9
|
+
map '/nomethod' do
|
|
10
|
+
run Kernel.lambda{|env| raise NoMethodError}
|
|
11
|
+
end
|
|
12
|
+
map '/fatal' do
|
|
13
|
+
run Kernel.lambda{|env| raise}
|
|
14
|
+
end
|
|
15
|
+
map '/anyother' do
|
|
16
|
+
run Kernel.lambda{|env| raise Exception}
|
|
17
|
+
end
|
|
18
|
+
map '/500.html' do
|
|
19
|
+
run Kernel.lambda{|env|
|
|
20
|
+
[200, {'Content-Type' => 'text/plain'}, ['500.html error page']]
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
map '/backtrace' do
|
|
24
|
+
error_handler ::Waw::ErrorHandler::Backtrace.new
|
|
25
|
+
run Kernel.lambda{|env| raise ArgumentError, "Mail should not be nil"}
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
top = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
|
2
|
+
$LOAD_PATH.unshift(top, 'lib')
|
|
3
|
+
require 'fileutils'
|
|
4
|
+
require 'waw'
|
|
5
|
+
|
|
6
|
+
at_exit {
|
|
7
|
+
temp = File.join(top, 'temp')
|
|
8
|
+
FileUtils.mkdir temp unless File.exists?(temp)
|
|
9
|
+
FileUtils.cd temp do |trg_dir|
|
|
10
|
+
Dir[File.join(top, 'layouts', '*')].each do |layout_folder|
|
|
11
|
+
layout = File.basename(layout_folder)
|
|
12
|
+
puts "Testing layout #{layout} with top being #{top}"
|
|
13
|
+
|
|
14
|
+
FileUtils.rm_rf layout
|
|
15
|
+
`ruby -I#{File.join(top, 'lib')} #{File.join(top, 'bin', 'waw')} create --force --layout #{layout} #{layout}`
|
|
16
|
+
|
|
17
|
+
FileUtils.cd layout do |dir|
|
|
18
|
+
puts `ruby -I#{File.join(top, 'lib')} test/unit/test_all.rb` if File.directory?('test/unit')
|
|
19
|
+
puts `ruby -I#{File.join(top, 'lib')} test/wspec/test_all.rb` if File.directory?('test/wspec')
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
FileUtils.rm_rf temp
|
|
24
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
describe "Our understanding of ruby" do
|
|
2
|
+
|
|
3
|
+
def sandbox_file_with_spaces
|
|
4
|
+
File.join(File.dirname(__FILE__), 'issue 360.txt')
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def sandbox_file_with_spaces_2
|
|
8
|
+
File.join(File.dirname(__FILE__), 'ext', 'issue 360.txt')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
before(:all) do
|
|
12
|
+
File.open(sandbox_file_with_spaces, 'w'){|io| io << "hello world!"}
|
|
13
|
+
File.open(sandbox_file_with_spaces_2, 'w'){|io| io << "hello world!"}
|
|
14
|
+
File.read(sandbox_file_with_spaces).should == "hello world!"
|
|
15
|
+
File.read(sandbox_file_with_spaces_2).should == "hello world!"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
after(:all) do
|
|
19
|
+
FileUtils.rm sandbox_file_with_spaces
|
|
20
|
+
FileUtils.rm sandbox_file_with_spaces_2
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should be correct about File.exists? in presence of spaces" do
|
|
24
|
+
File.exists?(__FILE__).should be_true
|
|
25
|
+
File.exists?("something that does not exists").should be_false
|
|
26
|
+
File.exists?(sandbox_file_with_spaces).should be_true
|
|
27
|
+
File.exists?(sandbox_file_with_spaces_2).should be_true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe ::Waw::ActionController do
|
|
3
|
+
include ::Waw::Fixtures
|
|
4
|
+
before(:each) { load_action_app }
|
|
5
|
+
after(:each) { unload_action_app }
|
|
6
|
+
|
|
7
|
+
it "should find its url" do
|
|
8
|
+
controller = Waw::Fixtures::ActionControllerTest
|
|
9
|
+
controller.url.should == "/services"
|
|
10
|
+
controller.instance.url.should == "/services"
|
|
11
|
+
controller.say_hello.url.should == "/services/say_hello"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
|
|
3
|
+
describe "::Waw::StaticController::WawAccess.matching_file" do
|
|
4
|
+
|
|
5
|
+
def folder
|
|
6
|
+
File.dirname(__FILE__)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def join(folder, path)
|
|
10
|
+
File.join(folder, path)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def wawaccess
|
|
14
|
+
::Waw::StaticController::WawAccess.new(nil, folder)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def sandbox_file_with_spaces
|
|
18
|
+
File.join(File.dirname(__FILE__), 'issue 360.txt')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
before(:all) do
|
|
22
|
+
File.open(sandbox_file_with_spaces, 'w'){|io| io << "hello world!"}
|
|
23
|
+
File.read(sandbox_file_with_spaces).should == "hello world!"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
after(:all) do
|
|
27
|
+
FileUtils.rm sandbox_file_with_spaces
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'should correctly resolve file names' do
|
|
31
|
+
wawaccess.matching_file('waw_access_spec.rb').should == join(folder, 'waw_access_spec.rb')
|
|
32
|
+
File.exists?(wawaccess.matching_file('waw_access_spec.rb')).should be_true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'should correctly resolve file names with spaces' do
|
|
36
|
+
file = wawaccess.matching_file('issue 360.txt')
|
|
37
|
+
file.should == join(folder, 'issue 360.txt')
|
|
38
|
+
File.exists?(file).should be_true
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
describe ::Waw::StaticController::WawAccess do
|
|
44
|
+
|
|
45
|
+
def parse(text = "")
|
|
46
|
+
wa = ::Waw::StaticController::WawAccess.new(nil, File.dirname(__FILE__))
|
|
47
|
+
wa.dsl_merge(text)
|
|
48
|
+
wa
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def sandbox_file_with_spaces
|
|
52
|
+
File.join(File.dirname(__FILE__), 'issue 360.txt')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
before(:all) do
|
|
56
|
+
File.open(sandbox_file_with_spaces, 'w'){|io| io << "hello world!"}
|
|
57
|
+
File.read(sandbox_file_with_spaces).should == "hello world!"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
after(:all) do
|
|
61
|
+
FileUtils.rm sandbox_file_with_spaces
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "should propose all ::Waw::Validation as basic matchers" do
|
|
65
|
+
wa = parse <<-EOF
|
|
66
|
+
wawaccess do
|
|
67
|
+
match(file) { :file }
|
|
68
|
+
match(directory) { :directory }
|
|
69
|
+
match(true) { :is404 }
|
|
70
|
+
end
|
|
71
|
+
EOF
|
|
72
|
+
wa.apply_rules('waw_access_spec.rb').should == :file
|
|
73
|
+
wa.apply_rules('').should == :directory
|
|
74
|
+
wa.apply_rules('nothing/at/all').should == :is404
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "should not provide block conflict between validators and matching rules" do
|
|
78
|
+
wa = parse <<-EOF
|
|
79
|
+
wawaccess do
|
|
80
|
+
match file do
|
|
81
|
+
:file
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
EOF
|
|
85
|
+
wa.do_path_serve('waw_access_spec.rb').should == :file
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should support files with spaces (on file, see #360)" do
|
|
89
|
+
wa = parse <<-EOF
|
|
90
|
+
wawaccess do
|
|
91
|
+
match file do
|
|
92
|
+
static
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
EOF
|
|
96
|
+
code, headers, body = wa.do_path_serve('issue 360.txt')
|
|
97
|
+
code.should == 200
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should support files with %20 spaces (on file, see #360)" do
|
|
101
|
+
wa = parse <<-EOF
|
|
102
|
+
wawaccess do
|
|
103
|
+
match file do
|
|
104
|
+
static
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
EOF
|
|
108
|
+
code, headers, body = wa.do_path_serve('issue%20360.txt')
|
|
109
|
+
code.should == 200
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require "waw"
|
|
2
|
+
describe Waw::EnvironmentUtils do
|
|
3
|
+
include Waw::EnvironmentUtils
|
|
4
|
+
|
|
5
|
+
it "should support non rack assumptions, for testing purposes" do
|
|
6
|
+
session[:name] = 12
|
|
7
|
+
session[:name].should == 12
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should support session.get and session.set correctly" do
|
|
11
|
+
session.set(:name, 12)
|
|
12
|
+
session.get(:name).should == 12
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
describe ::Hash do
|
|
2
|
+
|
|
3
|
+
it "should provide a non-intrusive keep method" do
|
|
4
|
+
hash = {:name => "blambeau", :age => 20}
|
|
5
|
+
hash.keep(:name).should == {:name => "blambeau"}
|
|
6
|
+
hash.keep([:name]).should == {:name => "blambeau"}
|
|
7
|
+
hash.keep(:name, :age).should == hash
|
|
8
|
+
hash.keep([:name, :age]).should == hash
|
|
9
|
+
hash.keep(:name, :age).object_id.should_not == hash.object_id
|
|
10
|
+
hash.keep(:name, :age, :occupation).should == hash
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should provide an intrusive keep! method" do
|
|
14
|
+
hash = {:name => "blambeau", :age => 20}
|
|
15
|
+
hash.keep!(:name).should == {:name => "blambeau"}
|
|
16
|
+
hash.keep!([:name]).should == {:name => "blambeau"}
|
|
17
|
+
hash.keep!(:name, :age).should == hash
|
|
18
|
+
hash.keep!([:name, :age]).should == hash
|
|
19
|
+
hash.keep!(:name, :age).object_id.should == hash.object_id
|
|
20
|
+
hash.keep!(:name, :age, :occupation).should == hash
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should provide a non-intrusive forget method" do
|
|
24
|
+
hash = {:name => "blambeau", :age => 20}
|
|
25
|
+
hash.forget(:name).should == {:age => 20}
|
|
26
|
+
hash.forget([:name]).should == {:age => 20}
|
|
27
|
+
hash.forget(:name, :age).should == {}
|
|
28
|
+
hash.forget([:name, :age]).should == {}
|
|
29
|
+
hash.forget(:name, :age).object_id.should_not == hash.object_id
|
|
30
|
+
hash.forget(:name, :age, :occupation).should == {}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should provide an intrusive forget! method" do
|
|
34
|
+
hash = {:name => "blambeau", :age => 20}
|
|
35
|
+
hash.forget!(:name).should == {:age => 20}
|
|
36
|
+
hash.forget!([:name]).should == {:age => 20}
|
|
37
|
+
hash.forget!(:name, :age).should == {}
|
|
38
|
+
hash.forget!([:name, :age]).should == {}
|
|
39
|
+
hash.forget!(:name, :age).object_id.should == hash.object_id
|
|
40
|
+
hash.forget!(:name, :age, :occupation).should == {}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should provide an helper for building url queries" do
|
|
44
|
+
{}.to_url_query.should == ""
|
|
45
|
+
{:name => "blambeau"}.to_url_query.should == "name=blambeau"
|
|
46
|
+
|
|
47
|
+
possible = ["name=blambeau&age=12", "age=12&name=blambeau"]
|
|
48
|
+
possible.include?({:name => "blambeau", :age => 12}.to_url_query).should be_true
|
|
49
|
+
|
|
50
|
+
{:name => "bla&beau"}.to_url_query.should == "name=bla%26beau"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should provide a methodize helper" do
|
|
54
|
+
hash = {'hello' => 'world'}
|
|
55
|
+
hash.methodize.hello.should == 'world'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Waw
|
|
2
|
+
module Fixtures
|
|
3
|
+
|
|
4
|
+
# Returns the empty app folder
|
|
5
|
+
def empty_folder
|
|
6
|
+
File.join(File.dirname(__FILE__), 'fixtures', 'empty')
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Loads and returns the empty application
|
|
10
|
+
def load_empty_app
|
|
11
|
+
@empty_app = Waw.autoload(empty_folder)
|
|
12
|
+
@empty_app.install_living_state({})
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Loads and returns the empty application
|
|
16
|
+
def unload_empty_app
|
|
17
|
+
@empty_app.clean_living_state
|
|
18
|
+
@empty_app.unload
|
|
19
|
+
@empty_app = nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Returns the action app folder
|
|
23
|
+
def action_folder
|
|
24
|
+
File.join(File.dirname(__FILE__), 'fixtures', 'action')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Loads and returns the empty application
|
|
28
|
+
def load_action_app
|
|
29
|
+
@action_app = Waw.autoload(action_folder)
|
|
30
|
+
@action_app.install_living_state({})
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Loads and returns the empty application
|
|
34
|
+
def unload_action_app
|
|
35
|
+
@action_app.clean_living_state
|
|
36
|
+
@action_app.unload
|
|
37
|
+
@action_app = nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end # module Fixtures
|
|
41
|
+
end # module Waw
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
default
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require "waw"
|
|
2
|
+
describe ::Waw::FullState::OnClass do
|
|
3
|
+
include ::Waw::Fixtures
|
|
4
|
+
before(:each) { load_empty_app }
|
|
5
|
+
after(:each) { unload_empty_app }
|
|
6
|
+
|
|
7
|
+
it "should allow session variables on classes" do
|
|
8
|
+
class A
|
|
9
|
+
extend Waw::FullState::OnClass
|
|
10
|
+
session_var :myvar
|
|
11
|
+
end
|
|
12
|
+
A.respond_to?(:myvar).should be_true
|
|
13
|
+
A.respond_to?(:myvar=).should be_true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should allow a default value" do
|
|
17
|
+
class A
|
|
18
|
+
extend Waw::FullState::OnClass
|
|
19
|
+
session_var :myvar, 12
|
|
20
|
+
end
|
|
21
|
+
A.respond_to?(:myvar).should be_true
|
|
22
|
+
A.respond_to?(:myvar=).should be_true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should allow a default value given by a block" do
|
|
26
|
+
class A
|
|
27
|
+
extend Waw::FullState::OnClass
|
|
28
|
+
session_var :myvar do 12 end
|
|
29
|
+
end
|
|
30
|
+
A.respond_to?(:myvar).should be_true
|
|
31
|
+
A.respond_to?(:myvar=).should be_true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should respect the default value when the session is empty" do
|
|
35
|
+
class A
|
|
36
|
+
extend Waw::FullState::OnClass
|
|
37
|
+
session_var :myvar, "hello"
|
|
38
|
+
end
|
|
39
|
+
A.myvar.should == "hello"
|
|
40
|
+
|
|
41
|
+
class B
|
|
42
|
+
extend Waw::FullState::OnClass
|
|
43
|
+
session_var :myvar do 12 end
|
|
44
|
+
end
|
|
45
|
+
B.myvar.should == 12
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should allow affecting the session variable" do
|
|
49
|
+
class A
|
|
50
|
+
extend Waw::FullState::OnClass
|
|
51
|
+
session_var :myvar, "hello"
|
|
52
|
+
end
|
|
53
|
+
a = A
|
|
54
|
+
a.myvar = "world"
|
|
55
|
+
@empty_app.session[:myvar].should == "world"
|
|
56
|
+
a.myvar.should == "world"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require "waw"
|
|
2
|
+
describe ::Waw::FullState::OnInstance do
|
|
3
|
+
include ::Waw::Fixtures
|
|
4
|
+
before(:each) { load_empty_app }
|
|
5
|
+
after(:each) { unload_empty_app }
|
|
6
|
+
|
|
7
|
+
it "should allow session variable creation on classes" do
|
|
8
|
+
class A
|
|
9
|
+
extend Waw::FullState::OnInstance
|
|
10
|
+
session_var :myvar
|
|
11
|
+
end
|
|
12
|
+
A.new.respond_to?(:myvar).should be_true
|
|
13
|
+
A.new.respond_to?(:myvar=).should be_true
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should allow a default value" do
|
|
17
|
+
class A
|
|
18
|
+
extend Waw::FullState::OnInstance
|
|
19
|
+
session_var :myvar, 12
|
|
20
|
+
end
|
|
21
|
+
A.new.respond_to?(:myvar).should be_true
|
|
22
|
+
A.new.respond_to?(:myvar=).should be_true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should allow a default value given by a block" do
|
|
26
|
+
class A
|
|
27
|
+
extend Waw::FullState::OnInstance
|
|
28
|
+
session_var :myvar do 12 end
|
|
29
|
+
end
|
|
30
|
+
A.new.respond_to?(:myvar).should be_true
|
|
31
|
+
A.new.respond_to?(:myvar=).should be_true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should respect the default value when the session is empty" do
|
|
35
|
+
class A
|
|
36
|
+
extend Waw::FullState::OnInstance
|
|
37
|
+
session_var :myvar, "hello"
|
|
38
|
+
end
|
|
39
|
+
A.new.myvar.should == "hello"
|
|
40
|
+
|
|
41
|
+
class A
|
|
42
|
+
extend Waw::FullState::OnInstance
|
|
43
|
+
session_var :myvar do 12 end
|
|
44
|
+
end
|
|
45
|
+
A.new.myvar.should == 12
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should allow affecting the session variable" do
|
|
49
|
+
class A
|
|
50
|
+
extend Waw::FullState::OnInstance
|
|
51
|
+
session_var :myvar, "hello"
|
|
52
|
+
end
|
|
53
|
+
a = A.new
|
|
54
|
+
a.myvar = "world"
|
|
55
|
+
@empty_app.session[:myvar].should == "world"
|
|
56
|
+
a.myvar.should == "world"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|