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,17 @@
|
|
|
1
|
+
require "waw"
|
|
2
|
+
describe ::Waw::Validation::ArrayValidations::ArrayValidator do
|
|
3
|
+
|
|
4
|
+
def arrayval(subvalidator)
|
|
5
|
+
::Waw::Validation::ArrayValidations::ArrayValidator.new(subvalidator)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should correctly validate non empty arrays" do
|
|
9
|
+
arrayval(String).validate(["hop", "hello"]).should be_true
|
|
10
|
+
arrayval(String).validate(["world"]).should be_true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "should correctly validate empty arrays" do
|
|
14
|
+
arrayval(String).validate([]).should be_true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe "date proposed validation" do
|
|
3
|
+
|
|
4
|
+
# Creates a signature
|
|
5
|
+
def date
|
|
6
|
+
@date_validator ||= ::Waw::Validation.signature {
|
|
7
|
+
validation :date, date, :bad_date
|
|
8
|
+
}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should block missing values" do
|
|
12
|
+
date.blocks?(:date => nil).should be_true
|
|
13
|
+
date.blocks?(:date => "").should be_true
|
|
14
|
+
date.blocks?(:date => " ").should be_true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should be robust to strange values" do
|
|
18
|
+
date.blocks?(:date => nil).should be_true
|
|
19
|
+
date.blocks?(:date => 12).should be_true
|
|
20
|
+
date.blocks?(:date => self).should be_true
|
|
21
|
+
date.blocks?(:date => Class).should be_true
|
|
22
|
+
date.blocks?(:date => self).should be_true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should allow valid dates" do
|
|
26
|
+
date.allows?(:date => "2010/04/25").should be_true
|
|
27
|
+
date.allows?(:date => "25/04/2010").should be_true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should block invalid dates" do
|
|
31
|
+
date.allows?(:date => "2010/33/75").should be_false
|
|
32
|
+
date.allows?(:date => "2010/02/31").should be_false
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe ::Waw::Validation::DefaultValidator do
|
|
3
|
+
|
|
4
|
+
def default(*args, &block)
|
|
5
|
+
::Waw::Validation::DefaultValidator.new(*args, &block)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "should be correct about missing values when calling validate" do
|
|
9
|
+
default(8).validate(1).should == false
|
|
10
|
+
default(8).validate(1, nil).should == false
|
|
11
|
+
default(8).validate(nil).should == true
|
|
12
|
+
default(8).validate("").should == true
|
|
13
|
+
default(8).validate(" ").should == true
|
|
14
|
+
default(8).validate("", nil).should == true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should be correct about missing values when calling convert_and_validate" do
|
|
18
|
+
default(8).convert_and_validate(1).should == [false, [1]]
|
|
19
|
+
default(8).convert_and_validate(nil).should == [true, [8]]
|
|
20
|
+
default(8).convert_and_validate(nil, nil).should == [true, [8, 8]]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should support passing a block (feature #305)" do
|
|
24
|
+
default{8}.convert_and_validate(1).should == [false, [1]]
|
|
25
|
+
default{8}.convert_and_validate(nil).should == [true, [8]]
|
|
26
|
+
default{8}.convert_and_validate(nil, nil).should == [true, [8, 8]]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should also work when used in signature (feature #{306})" do
|
|
30
|
+
signature = ::Waw::Validation.signature {
|
|
31
|
+
validation :time, String | default{Time.now}, :time
|
|
32
|
+
}
|
|
33
|
+
signature.allows?(:time => nil).should == true
|
|
34
|
+
Time.should === signature.first_converted(:time => nil)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe 'Disjunctive validators' do
|
|
3
|
+
|
|
4
|
+
it "should be ok to put Integer|missing" do
|
|
5
|
+
signature = Waw::Validation.signature {
|
|
6
|
+
validation :id, Integer | missing, :bad_id
|
|
7
|
+
}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "Integer|missing should correctly accept missings" do
|
|
11
|
+
signature = Waw::Validation.signature {
|
|
12
|
+
validation :id, Integer | missing, :bad_id
|
|
13
|
+
}
|
|
14
|
+
signature.allows?(:id => nil).should be_true
|
|
15
|
+
signature.allows?(:id => "").should be_true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "Integer|missing should correctly accept integers as well" do
|
|
19
|
+
signature = Waw::Validation.signature {
|
|
20
|
+
validation :id, Integer | missing, :bad_id
|
|
21
|
+
}
|
|
22
|
+
signature.allows?(:id => 12).should be_true
|
|
23
|
+
signature.allows?(:id => "12").should be_true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "Integer|missing should correctly handle bulk conversions" do
|
|
27
|
+
validator = (Waw::Validation.integer | Waw::Validation.missing)
|
|
28
|
+
ok, values = validator.convert_and_validate(1, nil, 12, "1", "2", "")
|
|
29
|
+
ok.should be_true
|
|
30
|
+
values.should == [1, nil, 12, 1, 2, nil]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require "waw"
|
|
2
|
+
describe Waw::Validation::Error do
|
|
3
|
+
|
|
4
|
+
it "should be raisable easily" do
|
|
5
|
+
begin
|
|
6
|
+
raise Waw::Validation::Error, [:bad_user, :bad_age]
|
|
7
|
+
false.should be_true
|
|
8
|
+
rescue Waw::Validation::Error => ex
|
|
9
|
+
ex.failed.should == [:bad_user, :bad_age]
|
|
10
|
+
ex.message.should_not be_nil
|
|
11
|
+
ex.message.is_a?(String).should be_true
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should allow catching subclasses with Error" do
|
|
16
|
+
begin
|
|
17
|
+
raise Waw::Validation::KO, [:bad_user, :bad_age]
|
|
18
|
+
false.should be_true
|
|
19
|
+
rescue Waw::Validation::Error => ex
|
|
20
|
+
ex.failed.should == [:bad_user, :bad_age]
|
|
21
|
+
ex.message.should_not be_nil
|
|
22
|
+
ex.message.is_a?(String).should be_true
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should allow catching exact subclasses" do
|
|
27
|
+
begin
|
|
28
|
+
raise Waw::Validation::KO, [:bad_user, :bad_age]
|
|
29
|
+
false.should be_true
|
|
30
|
+
rescue Waw::Validation::KO => ex
|
|
31
|
+
ex.failed.should == [:bad_user, :bad_age]
|
|
32
|
+
ex.message.should_not be_nil
|
|
33
|
+
ex.message.is_a?(String).should be_true
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
describe ::Waw::Validation::FileValidator do
|
|
4
|
+
|
|
5
|
+
def file
|
|
6
|
+
::Waw::Validation::FileValidator.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def sandbox_file_with_spaces
|
|
10
|
+
File.join(File.dirname(__FILE__), 'issue 360.txt')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
before(:all) do
|
|
14
|
+
File.open(sandbox_file_with_spaces, 'w'){|io| io << "hello world!"}
|
|
15
|
+
File.read(sandbox_file_with_spaces).should == "hello world!"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
after(:all) do
|
|
19
|
+
FileUtils.rm sandbox_file_with_spaces
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should recognize real files" do
|
|
23
|
+
(file === __FILE__).should be_true
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should support file names containing spaces (see #360)" do
|
|
27
|
+
(file === sandbox_file_with_spaces).should be_true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should not decode html paths itself (see #360)" do
|
|
31
|
+
(file === sandbox_file_with_spaces.gsub(/\s/,"%20")).should be_false
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe "mail proposed validation" do
|
|
3
|
+
|
|
4
|
+
# Creates a signature
|
|
5
|
+
def mail
|
|
6
|
+
@mail_validator ||= ::Waw::Validation.signature {
|
|
7
|
+
validation :mail, mail, :bad_mail
|
|
8
|
+
}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should block missing values" do
|
|
12
|
+
mail.blocks?(:mail => nil).should be_true
|
|
13
|
+
mail.blocks?(:mail => "").should be_true
|
|
14
|
+
mail.blocks?(:mail => " ").should be_true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should be robust to strange values" do
|
|
18
|
+
mail.blocks?(:mail => nil).should be_true
|
|
19
|
+
mail.blocks?(:mail => 12).should be_true
|
|
20
|
+
mail.blocks?(:mail => self).should be_true
|
|
21
|
+
mail.blocks?(:mail => Class).should be_true
|
|
22
|
+
mail.blocks?(:mail => self).should be_true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should allow valid mails" do
|
|
26
|
+
mail.allows?(:mail => "blambeau@gmail.com").should be_true
|
|
27
|
+
mail.allows?(:mail => "blambeau@acm-sc.be").should be_true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should support mails with dots" do
|
|
31
|
+
mail.allows?(:mail => "bernard.lambeau@gmail.com").should be_true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should support mails with numbers" do
|
|
35
|
+
mail.allows?(:mail => "bernard007@gmail.com").should be_true
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should support trailing spaces" do
|
|
39
|
+
mail.allows?(:mail => "blambeau@gmail.com ").should be_true
|
|
40
|
+
mail.allows?(:mail => " blambeau@acm-sc.be").should be_true
|
|
41
|
+
mail.allows?(:mail => " blambeau@acm-sc.be ").should be_true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should not support spaces inside the mail" do
|
|
45
|
+
mail.blocks?(:mail => "blamb gmail.com").should be_true
|
|
46
|
+
mail.blocks?(:mail => "blambeau@gmail.com and something here").should be_true
|
|
47
|
+
mail.blocks?(:mail => "something here blambeau@gmail.com").should be_true
|
|
48
|
+
mail.blocks?(:mail => "something here blambeau@gmail.com and also here").should be_true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe "missing validation" do
|
|
3
|
+
|
|
4
|
+
# Creates a signature
|
|
5
|
+
def missing(&block)
|
|
6
|
+
if block
|
|
7
|
+
::Waw::Validation.signature(&block)
|
|
8
|
+
else
|
|
9
|
+
@missing_validator ||= ::Waw::Validation.signature {
|
|
10
|
+
validation :mail, missing, :bad_mail
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should allow missing values" do
|
|
16
|
+
missing.allows?(:mail => nil).should be_true
|
|
17
|
+
missing.allows?(:mail => "").should be_true
|
|
18
|
+
missing.allows?(:mail => " ").should be_true
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should block non missing values" do
|
|
22
|
+
missing.blocks?(:mail => "blambeau@gmail.com").should be_true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should be robust to strange values" do
|
|
26
|
+
missing.blocks?(:mail => 1234567).should be_true
|
|
27
|
+
missing.blocks?(:mail => self).should be_true
|
|
28
|
+
missing.blocks?(:mail => Object.new).should be_true
|
|
29
|
+
missing.blocks?(:mail => Class).should be_true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should correctly convert missings to nil" do
|
|
33
|
+
missing.first_converted(:mail => "").should be_nil
|
|
34
|
+
missing.first_converted(:mail => nil).should be_nil
|
|
35
|
+
missing.first_converted(:mail => " ").should be_nil
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should never change non missings" do
|
|
39
|
+
missing.first_converted(:mail => "bla").should == "bla"
|
|
40
|
+
missing.first_converted(:mail => 12).should == 12
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe "same proposed validation" do
|
|
3
|
+
|
|
4
|
+
# Creates a signature
|
|
5
|
+
def mail
|
|
6
|
+
@same_validator ||= ::Waw::Validation.signature {
|
|
7
|
+
validation [:pass, :confirm], mandatory & same, :bad_mail
|
|
8
|
+
}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should block invalid combinations" do
|
|
12
|
+
mail.blocks?(:pass => nil).should be_true
|
|
13
|
+
mail.blocks?(:confirm => "").should be_true
|
|
14
|
+
mail.blocks?(:pass => "", :confirm => "").should be_true
|
|
15
|
+
mail.blocks?(:pass => nil, :confirm => "blambeau").should be_true
|
|
16
|
+
mail.blocks?(:pass => "blambeau", :confirm => "").should be_true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should not block valid combinations" do
|
|
20
|
+
mail.blocks?(:pass => "blambeau", :confirm => "blambeau").should be_false
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
describe ::Waw::Validation::Signature do
|
|
3
|
+
|
|
4
|
+
# Creates a signature
|
|
5
|
+
def signature(&block)
|
|
6
|
+
::Waw::Validation.signature(&block)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should not be disjunction sensitive on missing" do
|
|
10
|
+
signature = signature {
|
|
11
|
+
validation :mail, mail | missing, :bad_mail
|
|
12
|
+
}
|
|
13
|
+
signature.first_converted(:mail => "blambeau@hotmail.com").should == "blambeau@hotmail.com"
|
|
14
|
+
signature.first_converted().should be_nil
|
|
15
|
+
|
|
16
|
+
signature = signature {
|
|
17
|
+
validation :mail, missing | mail, :bad_mail
|
|
18
|
+
}
|
|
19
|
+
signature.first_converted(:mail => "blambeau@hotmail.com").should == "blambeau@hotmail.com"
|
|
20
|
+
signature.first_converted().should be_nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should not be disjunction sensitive on default" do
|
|
24
|
+
signature = signature {
|
|
25
|
+
validation :mail, mail | default("info@hotmail.com"), :bad_mail
|
|
26
|
+
}
|
|
27
|
+
signature.first_converted(:mail => "blambeau@hotmail.com").should == "blambeau@hotmail.com"
|
|
28
|
+
signature.first_converted().should == "info@hotmail.com"
|
|
29
|
+
|
|
30
|
+
signature = signature {
|
|
31
|
+
validation :mail, default("info@hotmail.com") | mail, :bad_mail
|
|
32
|
+
}
|
|
33
|
+
signature.first_converted(:mail => "blambeau@hotmail.com").should == "blambeau@hotmail.com"
|
|
34
|
+
signature.first_converted().should == "info@hotmail.com"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
require 'waw'
|
|
2
|
+
|
|
3
|
+
describe ::Waw::Validation::Signature do
|
|
4
|
+
|
|
5
|
+
# Creates a signature
|
|
6
|
+
def signature(&block)
|
|
7
|
+
::Waw::Validation.signature(&block)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should allow user-friendly DSL" do
|
|
11
|
+
signature {
|
|
12
|
+
validation :mail, mandatory & mail, :bad_email
|
|
13
|
+
validation [:password, :confirm], mandatory & equal, :password_dont_match
|
|
14
|
+
}.should_not be_nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should have allows? and blocks? with opposite answers" do
|
|
18
|
+
signature = signature {
|
|
19
|
+
validation :age, is >= 18, :bad_age
|
|
20
|
+
}
|
|
21
|
+
signature.allows?().should be_false
|
|
22
|
+
signature.blocks?().should be_true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should allow valid data" do
|
|
26
|
+
signature = signature {
|
|
27
|
+
validation :age, is >= 18, :bad_age
|
|
28
|
+
}
|
|
29
|
+
signature.allows?(:age => 18).should be_true
|
|
30
|
+
signature.allows?(:age => 20).should be_true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should block invalid data" do
|
|
34
|
+
signature = signature {
|
|
35
|
+
validation :age, is >= 18, :bad_age
|
|
36
|
+
}
|
|
37
|
+
signature.blocks?().should be_true
|
|
38
|
+
signature.blocks?(:age => "").should be_true
|
|
39
|
+
signature.blocks?(:age => " ").should be_true
|
|
40
|
+
signature.blocks?(:age => nil).should be_true
|
|
41
|
+
signature.blocks?(:age => -10).should be_true
|
|
42
|
+
signature.blocks?(:age => 17).should be_true
|
|
43
|
+
signature.blocks?(:age => 17.99999).should be_true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should support missing in disjunction" do
|
|
47
|
+
signature = signature {
|
|
48
|
+
validation :mail, mail | missing, :bad_mail
|
|
49
|
+
}
|
|
50
|
+
signature.allows?(:mail => "blambeau@hotmail.com").should be_true
|
|
51
|
+
signature.blocks?(:mail => "blambeau@hotmail.com").should be_false
|
|
52
|
+
signature.allows?(:mail => "").should be_true
|
|
53
|
+
signature.allows?(:mail => " ").should be_true
|
|
54
|
+
signature.allows?(:mail => nil).should be_true
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should allow Boolean to be like a ruby class" do
|
|
58
|
+
signature = signature {
|
|
59
|
+
validation :newsletter, Boolean, :bad_newsletter
|
|
60
|
+
}
|
|
61
|
+
signature.allows?(:newsletter => true).should be_true
|
|
62
|
+
signature.allows?(:newsletter => false).should be_true
|
|
63
|
+
signature.allows?(:newsletter => "true").should be_true
|
|
64
|
+
signature.allows?(:newsletter => "false").should be_true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should allow String ruby class as validator" do
|
|
68
|
+
signature = signature {
|
|
69
|
+
validation :name, String, :bad_name
|
|
70
|
+
}
|
|
71
|
+
signature.allows?(:name => "blambeau").should be_true
|
|
72
|
+
signature.allows?(:name => "").should be_true
|
|
73
|
+
signature.blocks?(:name => nil).should be_true
|
|
74
|
+
signature.blocks?().should be_true
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "should allow Integer ruby class as validator" do
|
|
78
|
+
signature = signature {
|
|
79
|
+
validation :age, Integer, :bad_age
|
|
80
|
+
}
|
|
81
|
+
signature.allows?(:age => 12).should be_true
|
|
82
|
+
signature.allows?(:age => "12").should be_true
|
|
83
|
+
signature.blocks?(:age => "hello").should be_true
|
|
84
|
+
signature.blocks?().should be_true
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should allow Float ruby class as validator" do
|
|
88
|
+
signature = signature {
|
|
89
|
+
validation :temperature, Float, :bad_temperature
|
|
90
|
+
}
|
|
91
|
+
signature.allows?(:temperature => 12).should be_true
|
|
92
|
+
signature.allows?(:temperature => 12.0).should be_true
|
|
93
|
+
signature.allows?(:temperature => "12").should be_true
|
|
94
|
+
signature.allows?(:temperature => "12.0").should be_true
|
|
95
|
+
signature.blocks?(:temperature => "hello").should be_true
|
|
96
|
+
signature.blocks?().should be_true
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
it "should allow ruby classes as left part of a disjunction" do
|
|
100
|
+
signature = signature {
|
|
101
|
+
validation :age, missing | Integer, :bad_age
|
|
102
|
+
}
|
|
103
|
+
signature.allows?(:age => 12).should be_true
|
|
104
|
+
signature.allows?(:age => "").should be_true
|
|
105
|
+
signature.allows?(:age => nil).should be_true
|
|
106
|
+
signature.blocks?(:age => "hello").should be_true
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "should allow ruby classes as right part of a disjunction" do
|
|
110
|
+
signature = signature {
|
|
111
|
+
validation :age, Integer | missing, :bad_age
|
|
112
|
+
}
|
|
113
|
+
signature.allows?(:age => 12).should be_true
|
|
114
|
+
signature.allows?(:age => "").should be_true
|
|
115
|
+
signature.allows?(:age => nil).should be_true
|
|
116
|
+
signature.blocks?(:age => "hello").should be_true
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should allow ruby classes as left part of a conjunction" do
|
|
120
|
+
signature = signature {
|
|
121
|
+
validation :age, (is > 10) & Integer, :bad_age
|
|
122
|
+
}
|
|
123
|
+
signature.allows?(:age => 12).should be_true
|
|
124
|
+
signature.allows?(:age => "").should be_false
|
|
125
|
+
signature.allows?(:age => nil).should be_false
|
|
126
|
+
signature.blocks?(:age => 7).should be_true
|
|
127
|
+
signature.blocks?(:age => "hello").should be_true
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "should allow ruby classes as right part of a conjunction" do
|
|
131
|
+
signature = signature {
|
|
132
|
+
validation :age, Integer & (is > 10), :bad_age
|
|
133
|
+
}
|
|
134
|
+
signature.allows?(:age => 12).should be_true
|
|
135
|
+
signature.allows?(:age => "").should be_false
|
|
136
|
+
signature.allows?(:age => nil).should be_false
|
|
137
|
+
signature.blocks?(:age => 7).should be_true
|
|
138
|
+
signature.blocks?(:age => "hello").should be_true
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "should provide a utility to get default data" do
|
|
142
|
+
signature = signature {
|
|
143
|
+
validation :name, String | default("hello"), :bad_name
|
|
144
|
+
validation :age, Integer | default(12), :bad_age
|
|
145
|
+
}
|
|
146
|
+
signature.default.should == {:name => "hello", :age => 12}
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
it "should support multiple args when computing defaults" do
|
|
150
|
+
signature = signature {
|
|
151
|
+
validation :name, String | default("hello"), :bad_name
|
|
152
|
+
validation [:age, :support], Integer | default(12), :bad_age
|
|
153
|
+
}
|
|
154
|
+
signature.default.should == {:name => "hello", :age => 12, :support => 12}
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should support non defaults when computing defaults" do
|
|
158
|
+
signature = signature {
|
|
159
|
+
validation [:name1, :name2], String, :bad_name
|
|
160
|
+
}
|
|
161
|
+
signature.default.should == {:name1 => nil, :name2 => nil}
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
end
|