greenpepper-ruby 0.0.1
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/bin/greenpepperize +71 -0
- data/bin/greenpepperrails +33 -0
- data/bin/greenpepperruby +15 -0
- data/data/greenpepper.rake +37 -0
- data/data/helper.rb +32 -0
- data/data/tags +6 -0
- data/lib/greenpepper/argumentparser.rb +161 -0
- data/lib/greenpepper/common/loadpath.rb +7 -0
- data/lib/greenpepper/context/htmlcontext.rb +26 -0
- data/lib/greenpepper/converter.rb +347 -0
- data/lib/greenpepper/core.rb +152 -0
- data/lib/greenpepper/example/collectionexample.rb +305 -0
- data/lib/greenpepper/example/dowithexample.rb +192 -0
- data/lib/greenpepper/example/exampleheader.rb +41 -0
- data/lib/greenpepper/example/examplewithfixture.rb +73 -0
- data/lib/greenpepper/example/executionresults.rb +160 -0
- data/lib/greenpepper/example/fieldaccessor.rb +36 -0
- data/lib/greenpepper/example/freetextexample.rb +51 -0
- data/lib/greenpepper/example/importexample.rb +39 -0
- data/lib/greenpepper/example/nameresolver.rb +69 -0
- data/lib/greenpepper/example/ruleforexample.rb +117 -0
- data/lib/greenpepper/example/setupexample.rb +79 -0
- data/lib/greenpepper/example/silentexample.rb +14 -0
- data/lib/greenpepper/example/unknownexample.rb +17 -0
- data/lib/greenpepper/exception/greenpepperexception.rb +57 -0
- data/lib/greenpepper/executionunit.rb +39 -0
- data/lib/greenpepper/factory/collectionexamplefactory.rb +59 -0
- data/lib/greenpepper/factory/dowithexamplefactory.rb +71 -0
- data/lib/greenpepper/factory/examplefactory.rb +14 -0
- data/lib/greenpepper/factory/freetextexamplefactory.rb +29 -0
- data/lib/greenpepper/factory/htmlexamplefactory.rb +49 -0
- data/lib/greenpepper/factory/importexamplefactory.rb +27 -0
- data/lib/greenpepper/factory/ruleforexamplefactory.rb +46 -0
- data/lib/greenpepper/factory/setupexamplefactory.rb +31 -0
- data/lib/greenpepper/factory/silentexamplefactory.rb +21 -0
- data/lib/greenpepper/factory/unknownexamplefactory.rb +16 -0
- data/lib/greenpepper/freetext.rb +164 -0
- data/lib/greenpepper/grammar/array.treetop +51 -0
- data/lib/greenpepper/grammar/arrayparser.rb +14 -0
- data/lib/greenpepper/greenpepperconfig.rb +19 -0
- data/lib/greenpepper/greenpeppertask.rb +60 -0
- data/lib/greenpepper/logger.rb +45 -0
- data/lib/greenpepper/parser/freetextparser.rb +96 -0
- data/lib/greenpepper/parser/htmlparser.rb +70 -0
- data/lib/greenpepper/parser/scenario.rb +25 -0
- data/lib/greenpepper/parser/table.rb +37 -0
- data/lib/greenpepper/parser/wikiparser.rb +26 -0
- data/lib/greenpepper/pass/freetextpass.rb +24 -0
- data/lib/greenpepper/pass/greenpepperpass.rb +92 -0
- data/lib/greenpepper/pass/tablepass.rb +38 -0
- data/lib/greenpepper/railsargumentparser.rb +46 -0
- data/lib/greenpepper/redpeppertask.rb +89 -0
- data/lib/greenpepper/repository/atlassianrepository.rb +100 -0
- data/lib/greenpepper/writer/consolewriter.rb +21 -0
- data/lib/greenpepper/writer/freetextresult.rb +233 -0
- data/lib/greenpepper/writer/freetextwriter.rb +44 -0
- data/lib/greenpepper/writer/html.rb +14 -0
- data/lib/greenpepper/writer/htmldocwriter.rb +82 -0
- data/lib/greenpepper/writer/htmlresult.rb +192 -0
- data/lib/greenpepper/writer/htmlwriter.rb +112 -0
- data/lib/greenpepper/writer/output.rb +26 -0
- data/lib/greenpepper/writer/result.rb +35 -0
- data/lib/greenpepper/writer/xmlwriter.rb +32 -0
- data/test/coreseedstest.rb +39 -0
- data/test/greenpepper/argumentparsertest.rb +162 -0
- data/test/greenpepper/common/loadpathtest.rb +24 -0
- data/test/greenpepper/common/stattest.rb +186 -0
- data/test/greenpepper/convertertest.rb +371 -0
- data/test/greenpepper/coretest.rb +159 -0
- data/test/greenpepper/example/collectionexampletest.rb +484 -0
- data/test/greenpepper/example/dowithexampletest.rb +148 -0
- data/test/greenpepper/example/exampletest.rb +28 -0
- data/test/greenpepper/example/freetextexampletest.rb +151 -0
- data/test/greenpepper/example/importexampletest.rb +79 -0
- data/test/greenpepper/example/nameresolvertest.rb +56 -0
- data/test/greenpepper/example/ruleforexampletest.rb +225 -0
- data/test/greenpepper/example/setupexampletest.rb +140 -0
- data/test/greenpepper/example/silentexampletest.rb +17 -0
- data/test/greenpepper/example/unknownexampletest.rb +17 -0
- data/test/greenpepper/factory/collectionexamplefactorytest.rb +51 -0
- data/test/greenpepper/factory/dowithexamplefactorytest.rb +48 -0
- data/test/greenpepper/factory/examplefactorytest.rb +88 -0
- data/test/greenpepper/factory/freetextexamplefactorytest.rb +54 -0
- data/test/greenpepper/factory/importexamplefactorytest.rb +40 -0
- data/test/greenpepper/factory/ruleforexamplefactorytest.rb +55 -0
- data/test/greenpepper/factory/setupexamplefactorytest.rb +29 -0
- data/test/greenpepper/factory/silentexamplefactorytest.rb +38 -0
- data/test/greenpepper/freetexttest.rb +222 -0
- data/test/greenpepper/grammar/arrayparsertest.rb +45 -0
- data/test/greenpepper/loggertest.rb +26 -0
- data/test/greenpepper/parser/freetextparsertest.rb +124 -0
- data/test/greenpepper/parser/htmlparsertest.rb +77 -0
- data/test/greenpepper/parser/wikiparsertest.rb +21 -0
- data/test/greenpepper/pass/freetextpasstest.rb +54 -0
- data/test/greenpepper/pass/greenpepperpasstest.rb +47 -0
- data/test/greenpepper/pass/tablepasstest.rb +23 -0
- data/test/greenpepper/repository/atlassionrepositorytest.rb +85 -0
- data/test/greenpepper/writer/freetextwritertest.rb +301 -0
- data/test/greenpepper/writer/htmlcollectionwritertest.rb +145 -0
- data/test/greenpepper/writer/htmldowithwritertest.rb +87 -0
- data/test/greenpepper/writer/htmlruleforwritertest.rb +147 -0
- data/test/greenpepper/writer/htmlsetupwritertest.rb +107 -0
- data/test/greenpepper/writer/htmlstatresulttest.rb +118 -0
- data/test/greenpepper/writer/htmlwriterpositiontest.rb +53 -0
- data/test/greenpepper/writer/writertest.rb +33 -0
- data/test/greenpepper/writer/xmlwritertest.rb +34 -0
- data/test/integration/collectionexampleintegrationtest.rb +64 -0
- data/test/integration/errorhandlingintegrationtest.rb +68 -0
- data/test/integration/freetextexampleintegrationtest.rb +75 -0
- data/test/integration/greenpepperexecutableintegrationtest.rb +22 -0
- data/test/integration/importexampleintegrationtest.rb +41 -0
- data/test/integration/interpretationordertest.rb +48 -0
- data/test/integration/ruleforexampleintegrationtest.rb +102 -0
- data/test/integration/securityintegrationtest.rb +30 -0
- data/test/integration/setupexampleintegrationtest.rb +31 -0
- data/test/integration/silentexampleintegrationtest.rb +29 -0
- data/test/task/greenpeppertasktest.rb +96 -0
- data/test/task/redpeppertasktest.rb +120 -0
- data/vendor/accents.rb +85 -0
- metadata +234 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
Author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
Date: March 29, 2009
|
|
4
|
+
=end
|
|
5
|
+
require 'test/unit'
|
|
6
|
+
require 'greenpepper/example/dowithexample'
|
|
7
|
+
require 'greenpepper/core'
|
|
8
|
+
include GreenPepper
|
|
9
|
+
|
|
10
|
+
class SecurityIntegrationTest < Test::Unit::TestCase
|
|
11
|
+
|
|
12
|
+
def setup
|
|
13
|
+
@old_stdout, $stdout = $stdout, StringIO.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def teardown
|
|
17
|
+
$stdout = @old_stdout
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_code_injection_should_be_prevented
|
|
21
|
+
core = GreenPepperCore.new
|
|
22
|
+
args = ["test/seeds/security1.html",
|
|
23
|
+
"test/results/security1.html"]
|
|
24
|
+
res = core.run args
|
|
25
|
+
output = ""
|
|
26
|
+
File.open(args[1], 'r') {|f| output = f.read }
|
|
27
|
+
assert(/GreenPepper::GreenPepperSecurityError: Can't instantiate a subclass of Class./ === output)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'test/helper/assertion'
|
|
2
|
+
require 'greenpepper/core'
|
|
3
|
+
require 'test/fixtures/fixture'
|
|
4
|
+
require 'test/fixtures/setupfixture'
|
|
5
|
+
require 'stringio'
|
|
6
|
+
|
|
7
|
+
include GreenPepper
|
|
8
|
+
|
|
9
|
+
class SetupExampleIntegrationTest < Test::Unit::TestCase
|
|
10
|
+
|
|
11
|
+
def setup
|
|
12
|
+
@core = GreenPepperCore.new
|
|
13
|
+
#Disable console output
|
|
14
|
+
@old_stdout, $stdout = $stdout, StringIO.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def teardown
|
|
18
|
+
$stdout = @old_stdout
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_setup_integration
|
|
22
|
+
|
|
23
|
+
args = ["test/seeds/setup_integration.html",
|
|
24
|
+
"test/results/setup_integration.html",
|
|
25
|
+
"--no-exception-stack"]
|
|
26
|
+
|
|
27
|
+
@core.run args
|
|
28
|
+
|
|
29
|
+
assert_file_equal 'test/expected/setup_integration.html', args[1]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'stringio'
|
|
2
|
+
|
|
3
|
+
require 'greenpepper/core'
|
|
4
|
+
require '../common/test/helper/assertion'
|
|
5
|
+
require 'test/fixtures/fixture'
|
|
6
|
+
|
|
7
|
+
include GreenPepper
|
|
8
|
+
|
|
9
|
+
class SilentExampleIntegrationTest < Test::Unit::TestCase
|
|
10
|
+
def setup
|
|
11
|
+
@core = GreenPepperCore.new
|
|
12
|
+
#Disable console output
|
|
13
|
+
@old_stdout, $stdout = $stdout, StringIO.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def teardown
|
|
17
|
+
$stdout = @old_stdout
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_silent_example_yields_ignore_in_stats
|
|
21
|
+
args = ['test/seeds/ignored_integration_seed.html',
|
|
22
|
+
'test/results/ignored_integration_seed.html']
|
|
23
|
+
|
|
24
|
+
@core.run args
|
|
25
|
+
|
|
26
|
+
assert_file_equal 'test/expected/ignored_integration_seed.html',
|
|
27
|
+
args[1]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: November 8, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require 'test/unit'
|
|
8
|
+
require 'mocha'
|
|
9
|
+
|
|
10
|
+
require 'lib/greenpepper/greenpeppertask'
|
|
11
|
+
require 'lib/greenpepper/core'
|
|
12
|
+
|
|
13
|
+
include GreenPepper
|
|
14
|
+
|
|
15
|
+
class GreenPepperTaskTest < Test::Unit::TestCase
|
|
16
|
+
TEST_DATA_DIR = 'test/task/test_data'
|
|
17
|
+
|
|
18
|
+
def setup
|
|
19
|
+
@old_stdout, $stdout = $stdout, StringIO.new
|
|
20
|
+
|
|
21
|
+
#Don't load config for all test
|
|
22
|
+
GreenPepperConfig.instance.spec_dir = nil
|
|
23
|
+
GreenPepperConfig.instance.result_dir = nil
|
|
24
|
+
GreenPepperConfig.instance.greenpepper_path = nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def tear_down
|
|
28
|
+
$stdout = @old_stdout
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_rake_task_should_execute_spec_when_execute_arg_is_specified
|
|
32
|
+
name = 'testexecuteraketask'
|
|
33
|
+
|
|
34
|
+
expected_args = [File.join(TEST_DATA_DIR, 'myspec.html'),
|
|
35
|
+
'output/myspec.html']
|
|
36
|
+
|
|
37
|
+
GreenPepperCore.any_instance.expects(:run).with(expected_args).
|
|
38
|
+
once.returns(true)
|
|
39
|
+
|
|
40
|
+
GreenPepperTask.new name do |t|
|
|
41
|
+
t.spec_dir = TEST_DATA_DIR
|
|
42
|
+
t.spec_name = 'myspec.html'
|
|
43
|
+
t.result_dir = 'output'
|
|
44
|
+
t.greenpepper_path = 'lib'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
Rake::Task[name].execute nil
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_rake_task_can_execute_multiple_specs
|
|
51
|
+
name = 'testexecuteraketaskmultiple'
|
|
52
|
+
|
|
53
|
+
dir = File.join TEST_DATA_DIR, 'rake_task_two_files'
|
|
54
|
+
expected_args1 = [File.join(dir, 'myspec.html'), 'output/myspec.html']
|
|
55
|
+
expected_args2 = [File.join(dir, 'myspec2.html'), 'output/myspec2.html']
|
|
56
|
+
|
|
57
|
+
GreenPepperCore.any_instance.expects(:run).with(expected_args1).
|
|
58
|
+
returns(true)
|
|
59
|
+
GreenPepperCore.any_instance.expects(:run).with(expected_args2).
|
|
60
|
+
returns(true)
|
|
61
|
+
|
|
62
|
+
GreenPepperTask.new name do |t|
|
|
63
|
+
t.spec_dir = dir
|
|
64
|
+
t.spec_name = '*.html'
|
|
65
|
+
t.result_dir = 'output'
|
|
66
|
+
t.greenpepper_path = 'lib'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
Rake::Task[name].execute nil
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_rake_task_outputs_error_when_it_can_t_require_greenpepper_core
|
|
73
|
+
name = 'testgreenpeppercorerequire'
|
|
74
|
+
|
|
75
|
+
GreenPepperTask.new name do |t|
|
|
76
|
+
t.greenpepper_path = 'dummy'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
assert_raise(RuntimeError) {
|
|
80
|
+
Rake::Task[name].execute nil
|
|
81
|
+
}
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_rake_task_loads_value_in_config_file
|
|
85
|
+
load 'test/task/test_data/test_config.rb'
|
|
86
|
+
name = 'testconfigfile'
|
|
87
|
+
|
|
88
|
+
task = GreenPepperTask.new name
|
|
89
|
+
|
|
90
|
+
assert_equal "/my/spec/dir", task.spec_dir
|
|
91
|
+
assert_equal "my_result", task.result_dir
|
|
92
|
+
assert_equal "/my/core/path", task.greenpepper_path
|
|
93
|
+
assert !task.instance_variable_defined?("@undefined_var")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: October 23, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require 'test/unit'
|
|
8
|
+
require 'mocha'
|
|
9
|
+
require 'tempfile'
|
|
10
|
+
require 'cgi'
|
|
11
|
+
|
|
12
|
+
require 'greenpepper/redpeppertask'
|
|
13
|
+
|
|
14
|
+
include GreenPepper
|
|
15
|
+
|
|
16
|
+
class RedPepperTaskTest < Test::Unit::TestCase
|
|
17
|
+
def setup
|
|
18
|
+
@server = "http://www.greenpeppersoftware.com"
|
|
19
|
+
@path = Dir::tmpdir
|
|
20
|
+
@content = ["<title>name1</title>Content of spec 1",
|
|
21
|
+
"<title>name2</title>Content of spec 2"]
|
|
22
|
+
|
|
23
|
+
#Don't load config for all test
|
|
24
|
+
GreenPepperConfig.instance.server = nil
|
|
25
|
+
GreenPepperConfig.instance.path = nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_rake_task_should_fetch_a_page_on_server_and_save_it_specified_path
|
|
29
|
+
spec_id = 1
|
|
30
|
+
name = "test"
|
|
31
|
+
|
|
32
|
+
expected_uri = "#{@server}/specifications/spec/#{spec_id}"
|
|
33
|
+
|
|
34
|
+
http_request = get_mock(expected_uri)
|
|
35
|
+
|
|
36
|
+
RedPepperTask.new name, http_request do |t|
|
|
37
|
+
t.server = @server
|
|
38
|
+
t.spec_id = spec_id
|
|
39
|
+
t.path = @path
|
|
40
|
+
end
|
|
41
|
+
execute_and_test name, ["name1.html"]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_rake_task_should_fetch_the_spec_by_name
|
|
45
|
+
spec_name = "My Spec Name"
|
|
46
|
+
name = "test2"
|
|
47
|
+
|
|
48
|
+
expected_uri =
|
|
49
|
+
"#{@server}/specifications/spec/name/#{CGI::escape spec_name}"
|
|
50
|
+
|
|
51
|
+
http_request = get_mock(expected_uri)
|
|
52
|
+
|
|
53
|
+
RedPepperTask.new name, http_request do |t|
|
|
54
|
+
t.server = @server
|
|
55
|
+
t.spec_name = spec_name
|
|
56
|
+
t.path = @path
|
|
57
|
+
end
|
|
58
|
+
execute_and_test name, ["name1.html"]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_rake_task_should_fetch_all_specs
|
|
62
|
+
expected_uri = "#{@server}/specifications/all"
|
|
63
|
+
http_request = get_all_ids_mock(expected_uri)
|
|
64
|
+
name = 'allspecs'
|
|
65
|
+
files_names = ['name1.html', 'name2.html']
|
|
66
|
+
|
|
67
|
+
RedPepperTask.new(name, http_request) do |t|
|
|
68
|
+
t.server = @server
|
|
69
|
+
t.path = @path
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
execute_and_test name, files_names
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_rake_task_loads_value_in_config_file
|
|
76
|
+
load 'test/task/test_data/test_config.rb'
|
|
77
|
+
name = 'testconfigfile'
|
|
78
|
+
task = RedPepperTask.new name
|
|
79
|
+
|
|
80
|
+
assert_equal "config server", task.server
|
|
81
|
+
assert_equal "config path", task.path
|
|
82
|
+
assert !task.instance_variable_defined?("@undefined_var")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
private
|
|
86
|
+
def get_mock(expected_uri)
|
|
87
|
+
http_request = mock
|
|
88
|
+
http_request.expects(:get).with{|uri| uri.to_s == expected_uri}.
|
|
89
|
+
once.returns(@content[0])
|
|
90
|
+
http_request
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def get_all_ids_mock(expected_uri)
|
|
94
|
+
http_request = mock
|
|
95
|
+
http_request.expects(:get).times(3).returns("spec1\nspec2").then.
|
|
96
|
+
returns(@content[0]).then.returns(@content[1])
|
|
97
|
+
http_request
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def execute_and_test(task_name, files)
|
|
101
|
+
Rake::Task[task_name].execute nil
|
|
102
|
+
|
|
103
|
+
files.each_with_index{ |file, index|
|
|
104
|
+
begin
|
|
105
|
+
file = File.join(@path, file)
|
|
106
|
+
validate_file_existence_and_content file, @content[index]
|
|
107
|
+
File.delete file if File.exist?(file)
|
|
108
|
+
ensure
|
|
109
|
+
File.delete file if File.exist?(file)
|
|
110
|
+
end
|
|
111
|
+
}
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def validate_file_existence_and_content(filename, content_to_assert)
|
|
115
|
+
puts "filename #{filename}"
|
|
116
|
+
assert File.exist?(filename)
|
|
117
|
+
file_content = File.read(filename)
|
|
118
|
+
assert_equal file_content, content_to_assert
|
|
119
|
+
end
|
|
120
|
+
end
|
data/vendor/accents.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# RemoveAccents version 1.0.3 (c) 2008-2009 Solutions Informatiques Techniconseils inc.
|
|
2
|
+
#
|
|
3
|
+
# This module adds 2 methods to the string class.
|
|
4
|
+
# Up-to-date version and documentation available at:
|
|
5
|
+
#
|
|
6
|
+
# http://www.techniconseils.ca/en/scripts-remove-accents-ruby.php
|
|
7
|
+
#
|
|
8
|
+
# This script is available under the following license :
|
|
9
|
+
# Creative Commons Attribution-Share Alike 2.5.
|
|
10
|
+
#
|
|
11
|
+
# See full license and details at :
|
|
12
|
+
# http://creativecommons.org/licenses/by-sa/2.5/ca/
|
|
13
|
+
#
|
|
14
|
+
# Version history:
|
|
15
|
+
# * 1.0.3 : July 23 2009
|
|
16
|
+
# Corrected some incorrect character codes. Source is now wikipedia at:
|
|
17
|
+
# http://en.wikipedia.org/wiki/ISO/IEC_8859-1#Related_character_maps
|
|
18
|
+
# Thanks to Raimon Fernandez for pointing out the incorrect codes.
|
|
19
|
+
# * 1.0.2 : October 29 2008
|
|
20
|
+
# Slightly optimized version of urlize - Jonathan Grenier (jgrenier@techniconseils.ca)
|
|
21
|
+
# * 1.0.1 : October 29 2008
|
|
22
|
+
# First public revision - Jonathan Grenier (jgrenier@techniconseils.ca)
|
|
23
|
+
#
|
|
24
|
+
|
|
25
|
+
class String
|
|
26
|
+
# The extended characters map used by removeaccents. The accented characters
|
|
27
|
+
# are coded here using their numerical equivalent to sidestep encoding issues.
|
|
28
|
+
# These correspond to ISO-8859-1 encoding.
|
|
29
|
+
ACCENTS_MAPPING = {
|
|
30
|
+
'E' => [200,201,202,203],
|
|
31
|
+
'e' => [232,233,234,235],
|
|
32
|
+
'A' => [192,193,194,195,196,197],
|
|
33
|
+
'a' => [224,225,226,227,228,229,230],
|
|
34
|
+
'C' => [199],
|
|
35
|
+
'c' => [231],
|
|
36
|
+
'O' => [210,211,212,213,214,216],
|
|
37
|
+
'o' => [242,243,244,245,246,248],
|
|
38
|
+
'I' => [204,205,206,207],
|
|
39
|
+
'i' => [236,237,238,239],
|
|
40
|
+
'U' => [217,218,219,220],
|
|
41
|
+
'u' => [249,250,251,252],
|
|
42
|
+
'N' => [209],
|
|
43
|
+
'n' => [241],
|
|
44
|
+
'Y' => [221],
|
|
45
|
+
'y' => [253,255],
|
|
46
|
+
'AE' => [306],
|
|
47
|
+
'ae' => [346],
|
|
48
|
+
'OE' => [188],
|
|
49
|
+
'oe' => [189]
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Remove the accents from the string. Uses String::ACCENTS_MAPPING as the source map.
|
|
54
|
+
def removeaccents
|
|
55
|
+
str = String.new(self)
|
|
56
|
+
String::ACCENTS_MAPPING.each {|letter,accents|
|
|
57
|
+
packed = accents.pack('U*')
|
|
58
|
+
rxp = Regexp.new("[#{packed}]", nil, 'U')
|
|
59
|
+
str.gsub!(rxp, letter)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
str
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# Convert a string to a format suitable for a URL without ever using escaped characters.
|
|
67
|
+
# It calls strip, removeaccents, downcase (optional) then removes the spaces (optional)
|
|
68
|
+
# and finally removes any characters matching the default regexp (/[^-_A-Za-z0-9]/).
|
|
69
|
+
#
|
|
70
|
+
# Options
|
|
71
|
+
#
|
|
72
|
+
# * :downcase => call downcase on the string (defaults to true)
|
|
73
|
+
# * :convert_spaces => Convert space to underscore (defaults to false)
|
|
74
|
+
# * :regexp => The regexp matching characters that will be converting to an empty string (defaults to /[^-_A-Za-z0-9]/)
|
|
75
|
+
def urlize(options = {})
|
|
76
|
+
options[:downcase] ||= true
|
|
77
|
+
options[:convert_spaces] ||= false
|
|
78
|
+
options[:regexp] ||= /[^-_A-Za-z0-9]/
|
|
79
|
+
|
|
80
|
+
str = self.strip.removeaccents
|
|
81
|
+
str.downcase! if options[:downcase]
|
|
82
|
+
str.gsub!(/\ /,'_') if options[:convert_spaces]
|
|
83
|
+
str.gsub(options[:regexp], '')
|
|
84
|
+
end
|
|
85
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: greenpepper-ruby
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- GreenPepper Ruby Team
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-12-02 00:00:00 -05:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: treetop
|
|
17
|
+
type: :runtime
|
|
18
|
+
version_requirement:
|
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
20
|
+
requirements:
|
|
21
|
+
- - ">="
|
|
22
|
+
- !ruby/object:Gem::Version
|
|
23
|
+
version: 1.2.4
|
|
24
|
+
version:
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
26
|
+
name: libxml-ruby
|
|
27
|
+
type: :runtime
|
|
28
|
+
version_requirement:
|
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 1.1.0
|
|
34
|
+
version:
|
|
35
|
+
- !ruby/object:Gem::Dependency
|
|
36
|
+
name: mocha
|
|
37
|
+
type: :development
|
|
38
|
+
version_requirement:
|
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: "0"
|
|
44
|
+
version:
|
|
45
|
+
- !ruby/object:Gem::Dependency
|
|
46
|
+
name: rcov
|
|
47
|
+
type: :development
|
|
48
|
+
version_requirement:
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: "0"
|
|
54
|
+
version:
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: RedCloth
|
|
57
|
+
type: :development
|
|
58
|
+
version_requirement:
|
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
60
|
+
requirements:
|
|
61
|
+
- - ">="
|
|
62
|
+
- !ruby/object:Gem::Version
|
|
63
|
+
version: "0"
|
|
64
|
+
version:
|
|
65
|
+
- !ruby/object:Gem::Dependency
|
|
66
|
+
name: diff-lcs
|
|
67
|
+
type: :development
|
|
68
|
+
version_requirement:
|
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
70
|
+
requirements:
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: "0"
|
|
74
|
+
version:
|
|
75
|
+
description:
|
|
76
|
+
email: greenpepper@kzeon.com
|
|
77
|
+
executables:
|
|
78
|
+
- greenpepperruby
|
|
79
|
+
- greenpepperize
|
|
80
|
+
- greenpepperrails
|
|
81
|
+
extensions: []
|
|
82
|
+
|
|
83
|
+
extra_rdoc_files: []
|
|
84
|
+
|
|
85
|
+
files:
|
|
86
|
+
- bin/greenpepperize
|
|
87
|
+
- bin/greenpepperrails
|
|
88
|
+
- bin/greenpepperruby
|
|
89
|
+
- lib/greenpepper/argumentparser.rb
|
|
90
|
+
- lib/greenpepper/common/loadpath.rb
|
|
91
|
+
- lib/greenpepper/context/htmlcontext.rb
|
|
92
|
+
- lib/greenpepper/converter.rb
|
|
93
|
+
- lib/greenpepper/core.rb
|
|
94
|
+
- lib/greenpepper/example/collectionexample.rb
|
|
95
|
+
- lib/greenpepper/example/dowithexample.rb
|
|
96
|
+
- lib/greenpepper/example/exampleheader.rb
|
|
97
|
+
- lib/greenpepper/example/examplewithfixture.rb
|
|
98
|
+
- lib/greenpepper/example/executionresults.rb
|
|
99
|
+
- lib/greenpepper/example/fieldaccessor.rb
|
|
100
|
+
- lib/greenpepper/example/freetextexample.rb
|
|
101
|
+
- lib/greenpepper/example/importexample.rb
|
|
102
|
+
- lib/greenpepper/example/nameresolver.rb
|
|
103
|
+
- lib/greenpepper/example/ruleforexample.rb
|
|
104
|
+
- lib/greenpepper/example/setupexample.rb
|
|
105
|
+
- lib/greenpepper/example/silentexample.rb
|
|
106
|
+
- lib/greenpepper/example/unknownexample.rb
|
|
107
|
+
- lib/greenpepper/exception/greenpepperexception.rb
|
|
108
|
+
- lib/greenpepper/executionunit.rb
|
|
109
|
+
- lib/greenpepper/factory/collectionexamplefactory.rb
|
|
110
|
+
- lib/greenpepper/factory/dowithexamplefactory.rb
|
|
111
|
+
- lib/greenpepper/factory/examplefactory.rb
|
|
112
|
+
- lib/greenpepper/factory/freetextexamplefactory.rb
|
|
113
|
+
- lib/greenpepper/factory/htmlexamplefactory.rb
|
|
114
|
+
- lib/greenpepper/factory/importexamplefactory.rb
|
|
115
|
+
- lib/greenpepper/factory/ruleforexamplefactory.rb
|
|
116
|
+
- lib/greenpepper/factory/setupexamplefactory.rb
|
|
117
|
+
- lib/greenpepper/factory/silentexamplefactory.rb
|
|
118
|
+
- lib/greenpepper/factory/unknownexamplefactory.rb
|
|
119
|
+
- lib/greenpepper/freetext.rb
|
|
120
|
+
- lib/greenpepper/grammar/array.treetop
|
|
121
|
+
- lib/greenpepper/grammar/arrayparser.rb
|
|
122
|
+
- lib/greenpepper/greenpepperconfig.rb
|
|
123
|
+
- lib/greenpepper/greenpeppertask.rb
|
|
124
|
+
- lib/greenpepper/logger.rb
|
|
125
|
+
- lib/greenpepper/parser/freetextparser.rb
|
|
126
|
+
- lib/greenpepper/parser/htmlparser.rb
|
|
127
|
+
- lib/greenpepper/parser/scenario.rb
|
|
128
|
+
- lib/greenpepper/parser/table.rb
|
|
129
|
+
- lib/greenpepper/parser/wikiparser.rb
|
|
130
|
+
- lib/greenpepper/pass/freetextpass.rb
|
|
131
|
+
- lib/greenpepper/pass/greenpepperpass.rb
|
|
132
|
+
- lib/greenpepper/pass/tablepass.rb
|
|
133
|
+
- lib/greenpepper/railsargumentparser.rb
|
|
134
|
+
- lib/greenpepper/redpeppertask.rb
|
|
135
|
+
- lib/greenpepper/repository/atlassianrepository.rb
|
|
136
|
+
- lib/greenpepper/writer/consolewriter.rb
|
|
137
|
+
- lib/greenpepper/writer/freetextresult.rb
|
|
138
|
+
- lib/greenpepper/writer/freetextwriter.rb
|
|
139
|
+
- lib/greenpepper/writer/html.rb
|
|
140
|
+
- lib/greenpepper/writer/htmldocwriter.rb
|
|
141
|
+
- lib/greenpepper/writer/htmlresult.rb
|
|
142
|
+
- lib/greenpepper/writer/htmlwriter.rb
|
|
143
|
+
- lib/greenpepper/writer/output.rb
|
|
144
|
+
- lib/greenpepper/writer/result.rb
|
|
145
|
+
- lib/greenpepper/writer/xmlwriter.rb
|
|
146
|
+
- data/greenpepper.rake
|
|
147
|
+
- data/helper.rb
|
|
148
|
+
- data/tags
|
|
149
|
+
- vendor/accents.rb
|
|
150
|
+
has_rdoc: true
|
|
151
|
+
homepage: http://www.greenpeppersoftware.com
|
|
152
|
+
licenses: []
|
|
153
|
+
|
|
154
|
+
post_install_message:
|
|
155
|
+
rdoc_options: []
|
|
156
|
+
|
|
157
|
+
require_paths:
|
|
158
|
+
- lib
|
|
159
|
+
- vendor
|
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
|
+
requirements:
|
|
162
|
+
- - ">="
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: "0"
|
|
165
|
+
version:
|
|
166
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
|
+
requirements:
|
|
168
|
+
- - ">="
|
|
169
|
+
- !ruby/object:Gem::Version
|
|
170
|
+
version: "0"
|
|
171
|
+
version:
|
|
172
|
+
requirements: []
|
|
173
|
+
|
|
174
|
+
rubyforge_project:
|
|
175
|
+
rubygems_version: 1.3.5
|
|
176
|
+
signing_key:
|
|
177
|
+
specification_version: 3
|
|
178
|
+
summary: An executable specification framework.
|
|
179
|
+
test_files:
|
|
180
|
+
- test/coreseedstest.rb
|
|
181
|
+
- test/greenpepper/argumentparsertest.rb
|
|
182
|
+
- test/greenpepper/common/loadpathtest.rb
|
|
183
|
+
- test/greenpepper/common/stattest.rb
|
|
184
|
+
- test/greenpepper/convertertest.rb
|
|
185
|
+
- test/greenpepper/coretest.rb
|
|
186
|
+
- test/greenpepper/example/collectionexampletest.rb
|
|
187
|
+
- test/greenpepper/example/dowithexampletest.rb
|
|
188
|
+
- test/greenpepper/example/exampletest.rb
|
|
189
|
+
- test/greenpepper/example/freetextexampletest.rb
|
|
190
|
+
- test/greenpepper/example/importexampletest.rb
|
|
191
|
+
- test/greenpepper/example/nameresolvertest.rb
|
|
192
|
+
- test/greenpepper/example/ruleforexampletest.rb
|
|
193
|
+
- test/greenpepper/example/setupexampletest.rb
|
|
194
|
+
- test/greenpepper/example/silentexampletest.rb
|
|
195
|
+
- test/greenpepper/example/unknownexampletest.rb
|
|
196
|
+
- test/greenpepper/factory/collectionexamplefactorytest.rb
|
|
197
|
+
- test/greenpepper/factory/dowithexamplefactorytest.rb
|
|
198
|
+
- test/greenpepper/factory/examplefactorytest.rb
|
|
199
|
+
- test/greenpepper/factory/freetextexamplefactorytest.rb
|
|
200
|
+
- test/greenpepper/factory/importexamplefactorytest.rb
|
|
201
|
+
- test/greenpepper/factory/ruleforexamplefactorytest.rb
|
|
202
|
+
- test/greenpepper/factory/setupexamplefactorytest.rb
|
|
203
|
+
- test/greenpepper/factory/silentexamplefactorytest.rb
|
|
204
|
+
- test/greenpepper/freetexttest.rb
|
|
205
|
+
- test/greenpepper/grammar/arrayparsertest.rb
|
|
206
|
+
- test/greenpepper/loggertest.rb
|
|
207
|
+
- test/greenpepper/parser/freetextparsertest.rb
|
|
208
|
+
- test/greenpepper/parser/htmlparsertest.rb
|
|
209
|
+
- test/greenpepper/parser/wikiparsertest.rb
|
|
210
|
+
- test/greenpepper/pass/freetextpasstest.rb
|
|
211
|
+
- test/greenpepper/pass/greenpepperpasstest.rb
|
|
212
|
+
- test/greenpepper/pass/tablepasstest.rb
|
|
213
|
+
- test/greenpepper/repository/atlassionrepositorytest.rb
|
|
214
|
+
- test/greenpepper/writer/freetextwritertest.rb
|
|
215
|
+
- test/greenpepper/writer/htmlcollectionwritertest.rb
|
|
216
|
+
- test/greenpepper/writer/htmldowithwritertest.rb
|
|
217
|
+
- test/greenpepper/writer/htmlruleforwritertest.rb
|
|
218
|
+
- test/greenpepper/writer/htmlsetupwritertest.rb
|
|
219
|
+
- test/greenpepper/writer/htmlstatresulttest.rb
|
|
220
|
+
- test/greenpepper/writer/htmlwriterpositiontest.rb
|
|
221
|
+
- test/greenpepper/writer/writertest.rb
|
|
222
|
+
- test/greenpepper/writer/xmlwritertest.rb
|
|
223
|
+
- test/integration/collectionexampleintegrationtest.rb
|
|
224
|
+
- test/integration/errorhandlingintegrationtest.rb
|
|
225
|
+
- test/integration/freetextexampleintegrationtest.rb
|
|
226
|
+
- test/integration/greenpepperexecutableintegrationtest.rb
|
|
227
|
+
- test/integration/importexampleintegrationtest.rb
|
|
228
|
+
- test/integration/interpretationordertest.rb
|
|
229
|
+
- test/integration/ruleforexampleintegrationtest.rb
|
|
230
|
+
- test/integration/securityintegrationtest.rb
|
|
231
|
+
- test/integration/setupexampleintegrationtest.rb
|
|
232
|
+
- test/integration/silentexampleintegrationtest.rb
|
|
233
|
+
- test/task/greenpeppertasktest.rb
|
|
234
|
+
- test/task/redpeppertasktest.rb
|