wikitext 3.0 → 3.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/ext/parser.c +4 -1
- data/lib/wikitext/version.rb +2 -2
- data/spec/external_link_spec.rb +24 -5
- metadata +3 -3
- data/spec/rails_spec.rb +0 -239
data/ext/parser.c
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright 2007-
|
1
|
+
// Copyright 2007-2012 Wincent Colaiuta. All rights reserved.
|
2
2
|
//
|
3
3
|
// Redistribution and use in source and binary forms, with or without
|
4
4
|
// modification, are permitted provided that the following conditions are met:
|
@@ -1964,6 +1964,9 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
|
|
1964
1964
|
wiki_emit_pending_crlf_if_necessary(parser);
|
1965
1965
|
str_append(parser->output, token->start, TOKEN_LEN(token));
|
1966
1966
|
}
|
1967
|
+
else if (IN(EXT_LINK_START))
|
1968
|
+
// must be capturing and this must be part of the link text
|
1969
|
+
str_append(parser->capture, token->start, TOKEN_LEN(token));
|
1967
1970
|
else
|
1968
1971
|
{
|
1969
1972
|
wiki_pop_excess_elements(parser);
|
data/lib/wikitext/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright 2007-
|
1
|
+
# Copyright 2007-2012 Wincent Colaiuta. All rights reserved.
|
2
2
|
#
|
3
3
|
# Redistribution and use in source and binary forms, with or without
|
4
4
|
# modification, are permitted provided that the following conditions are met:
|
@@ -22,5 +22,5 @@
|
|
22
22
|
# POSSIBILITY OF SUCH DAMAGE.
|
23
23
|
|
24
24
|
module Wikitext
|
25
|
-
VERSION = '3.0'
|
25
|
+
VERSION = '3.0.1'
|
26
26
|
end # module Wikitext
|
data/spec/external_link_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
# Copyright 2007-
|
2
|
+
# Copyright 2007-2012 Wincent Colaiuta. All rights reserved.
|
3
3
|
#
|
4
4
|
# Redistribution and use in source and binary forms, with or without
|
5
5
|
# modification, are permitted provided that the following conditions are met:
|
@@ -49,16 +49,35 @@ describe Wikitext::Parser, 'external links' do
|
|
49
49
|
@parser.parse('[svn://google.com/ Google]').should == expected
|
50
50
|
end
|
51
51
|
|
52
|
-
it '
|
53
|
-
expected = %
|
52
|
+
it 'formats valid external mailto links' do
|
53
|
+
expected = %{<p><a href="mailto:user@example.com" class="mailto">john</a></p>\n}
|
54
54
|
@parser.parse('[mailto:user@example.com john]').should == expected
|
55
55
|
end
|
56
56
|
|
57
|
-
it '
|
58
|
-
expected = %
|
57
|
+
it 'does not treat raw email addresses as valid link targets' do
|
58
|
+
expected = %{<p>[<a href="mailto:user@example.com" class="mailto">user@example.com</a> john]</p>\n}
|
59
59
|
@parser.parse('[user@example.com john]').should == expected
|
60
60
|
end
|
61
61
|
|
62
|
+
it 'formats external mailto links where the linktext is itself an email' do
|
63
|
+
# reported here: https://wincent.com/issues/1955
|
64
|
+
expected = %{<p><a href="mailto:user@example.com" class="mailto">user@example.com</a></p>\n}
|
65
|
+
@parser.parse('[mailto:user@example.com user@example.com]').should == expected
|
66
|
+
|
67
|
+
# just in case that example seems a little contrived and trivial (you could
|
68
|
+
# work around it by instead just writing "user@example.com" in your markup),
|
69
|
+
# here's a more obviously useful one
|
70
|
+
expected = %{<p><a href="mailto:user@example.com" class="mailto">email me at user@example.com for more info</a></p>\n}
|
71
|
+
@parser.parse('[mailto:user@example.com email me at user@example.com for more info]').should == expected
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'allows email addreses in link text' do
|
75
|
+
# more general case of bug reported here: https://wincent.com/issues/1955
|
76
|
+
expected = %{<p><a href="http://google.com/?q=user@example.com" class="external">Google for user@example.com</a></p>\n}
|
77
|
+
@parser.parse('[http://google.com/?q=user@example.com Google for user@example.com]').should == expected
|
78
|
+
|
79
|
+
end
|
80
|
+
|
62
81
|
it 'should format absolute path links' do
|
63
82
|
expected = %Q{<p><a href="/foo/bar">fb</a></p>\n} # note no "external" class
|
64
83
|
@parser.parse('[/foo/bar fb]').should == expected
|
metadata
CHANGED
@@ -5,7 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 3
|
7
7
|
- 0
|
8
|
-
|
8
|
+
- 1
|
9
|
+
version: 3.0.1
|
9
10
|
platform: ruby
|
10
11
|
authors:
|
11
12
|
- Wincent Colaiuta
|
@@ -13,7 +14,7 @@ autorequire:
|
|
13
14
|
bindir: bin
|
14
15
|
cert_chain: []
|
15
16
|
|
16
|
-
date:
|
17
|
+
date: 2012-03-03 00:00:00 -08:00
|
17
18
|
default_executable:
|
18
19
|
dependencies:
|
19
20
|
- !ruby/object:Gem::Dependency
|
@@ -148,7 +149,6 @@ files:
|
|
148
149
|
- spec/p_spec.rb
|
149
150
|
- spec/parser_spec.rb
|
150
151
|
- spec/pre_spec.rb
|
151
|
-
- spec/rails_spec.rb
|
152
152
|
- spec/regressions_spec.rb
|
153
153
|
- spec/spec_helper.rb
|
154
154
|
- spec/string_spec.rb
|
data/spec/rails_spec.rb
DELETED
@@ -1,239 +0,0 @@
|
|
1
|
-
# Copyright 2009-2011 Wincent Colaiuta. All rights reserved.
|
2
|
-
#
|
3
|
-
# Redistribution and use in source and binary forms, with or without
|
4
|
-
# modification, are permitted provided that the following conditions are met:
|
5
|
-
#
|
6
|
-
# 1. Redistributions of source code must retain the above copyright notice,
|
7
|
-
# this list of conditions and the following disclaimer.
|
8
|
-
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
9
|
-
# this list of conditions and the following disclaimer in the documentation
|
10
|
-
# and/or other materials provided with the distribution.
|
11
|
-
|
12
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
13
|
-
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
14
|
-
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
15
|
-
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
16
|
-
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
17
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
18
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
19
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
20
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
21
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
23
|
-
|
24
|
-
require 'spec_helper'
|
25
|
-
require 'wikitext/version'
|
26
|
-
require 'fileutils'
|
27
|
-
require 'pathname'
|
28
|
-
require 'wopen3'
|
29
|
-
|
30
|
-
module RailsSpecs
|
31
|
-
TRASH_PATH = Pathname.new(__FILE__).dirname + '.trash'
|
32
|
-
AREL_CLONE_PATH = TRASH_PATH + 'arel.git'
|
33
|
-
AREL_REPO = 'git://github.com/rails/arel.git'
|
34
|
-
RAILS_CLONE_PATH = TRASH_PATH + 'rails.git'
|
35
|
-
RAILS_REPO = 'git://github.com/rails/rails.git'
|
36
|
-
WIKITEXT_GEM_PATH = TRASH_PATH + '..' + '..'
|
37
|
-
SUCCESSFUL_TEST_RESULT = /1 tests, 3 assertions, 0 failures, 0 errors/
|
38
|
-
|
39
|
-
def run cmd, *args
|
40
|
-
result = Wopen3.system(*([cmd] + args))
|
41
|
-
if result.status != 0
|
42
|
-
command_string = ([cmd] + args).join(' ')
|
43
|
-
puts "\n*** COMMAND #{command_string} EXITED WITH NON-ZERO EXIT STATUS (#{result.status})"
|
44
|
-
puts "*** STDOUT FOR COMMAND #{command_string}:", result.stdout
|
45
|
-
puts "*** STDERR FOR COMMAND #{command_string}:", result.stderr
|
46
|
-
raise "non-zero exit status (#{result.status}) for '#{command_string}'"
|
47
|
-
end
|
48
|
-
result
|
49
|
-
end
|
50
|
-
|
51
|
-
def clone repo, path
|
52
|
-
if File.exist? path
|
53
|
-
FileUtils.cd path do
|
54
|
-
run 'git', 'fetch'
|
55
|
-
end
|
56
|
-
else
|
57
|
-
run 'git', 'clone', repo, path
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def app_path version
|
62
|
-
version = 'edge' if version.nil?
|
63
|
-
version = "v#{version}" if version =~ /\A\d\./
|
64
|
-
TRASH_PATH + "#{version}-app"
|
65
|
-
end
|
66
|
-
|
67
|
-
# if version is nil will create an "Edge" app
|
68
|
-
def create_rails3_app rails_version, arel_version = nil
|
69
|
-
app = app_path rails_version
|
70
|
-
clone AREL_REPO, AREL_CLONE_PATH
|
71
|
-
FileUtils.cd AREL_CLONE_PATH do
|
72
|
-
if arel_version
|
73
|
-
run 'git', 'reset', '--hard', "v#{arel_version}"
|
74
|
-
else # "Edge"
|
75
|
-
run 'git', 'reset', '--hard', 'origin/master'
|
76
|
-
end
|
77
|
-
run 'git', 'clean', '-f'
|
78
|
-
end
|
79
|
-
|
80
|
-
clone RAILS_REPO, RAILS_CLONE_PATH
|
81
|
-
FileUtils.cd RAILS_CLONE_PATH do
|
82
|
-
if rails_version
|
83
|
-
run 'git', 'reset', '--hard', "v#{rails_version}"
|
84
|
-
else # "Edge"
|
85
|
-
run 'git', 'reset', '--hard', 'origin/master'
|
86
|
-
end
|
87
|
-
run 'git', 'clean', '-f'
|
88
|
-
|
89
|
-
begin
|
90
|
-
clean_bundler_environment
|
91
|
-
run 'env', "AREL=#{AREL_CLONE_PATH}",
|
92
|
-
'bundle', 'install', '--path', '../bundle', '--without', 'db'
|
93
|
-
FileUtils.rm_r(app) if File.exist?(app)
|
94
|
-
run 'env', "AREL=#{AREL_CLONE_PATH}",
|
95
|
-
'bundle', 'exec', 'bin/rails', 'new', app, '--skip-activerecord', '--dev'
|
96
|
-
ensure
|
97
|
-
restore_bundler_environment
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
create_gemfile app
|
102
|
-
bundlerize app
|
103
|
-
end
|
104
|
-
|
105
|
-
def insert text, after, infile
|
106
|
-
output = []
|
107
|
-
found = false
|
108
|
-
File.read(infile).split("\n").each do |line|
|
109
|
-
output << line
|
110
|
-
if found == false && line =~ /#{Regexp.escape(after)}/
|
111
|
-
found = true
|
112
|
-
output << text
|
113
|
-
end
|
114
|
-
end
|
115
|
-
File.open(infile, 'wb') { |f| f.write(output.join("\n")) }
|
116
|
-
raise "text '#{after}' not found" unless found
|
117
|
-
end
|
118
|
-
|
119
|
-
def add_text_to_routes text, infile
|
120
|
-
insert text, 'Application.routes.draw', infile
|
121
|
-
end
|
122
|
-
|
123
|
-
def create_gemfile app
|
124
|
-
File.open(app + 'Gemfile', 'w') do |f|
|
125
|
-
f.write <<-GEMFILE
|
126
|
-
source :rubygems
|
127
|
-
gem 'arel', :path => "#{AREL_CLONE_PATH.realpath}"
|
128
|
-
gem 'rake'
|
129
|
-
gem 'rails', :path => "#{RAILS_CLONE_PATH.realpath}"
|
130
|
-
gem 'sqlite3'
|
131
|
-
gem 'wikitext', :path => "#{WIKITEXT_GEM_PATH.realpath}"
|
132
|
-
GEMFILE
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
def bundlerize app
|
137
|
-
clean_bundler_environment
|
138
|
-
Dir.chdir app do
|
139
|
-
run 'bundle', 'install', '--path', '../bundle', '--binstubs'
|
140
|
-
end
|
141
|
-
ensure
|
142
|
-
restore_bundler_environment
|
143
|
-
end
|
144
|
-
|
145
|
-
def create_controller app
|
146
|
-
File.open(app + 'app' + 'controllers' + 'wiki_controller.rb', 'w') do |f|
|
147
|
-
f.write 'class WikiController < ApplicationController; end'
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
def create_template app
|
152
|
-
template_dir = app + 'app' + 'views' + 'wiki'
|
153
|
-
FileUtils.mkdir template_dir
|
154
|
-
File.open(template_dir + 'index.html.wikitext', 'w') do |f|
|
155
|
-
f.write '* hello, world!'
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def create_test app
|
160
|
-
# integration tests won't run without a schema.rb
|
161
|
-
FileUtils.touch app + 'db' + 'schema.rb'
|
162
|
-
|
163
|
-
File.open(app + 'test' + 'integration' + 'wiki_test.rb', 'w') do |f|
|
164
|
-
f.write <<'TEST'
|
165
|
-
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
166
|
-
|
167
|
-
class WikiTest < ActionController::IntegrationTest
|
168
|
-
def test_wiki_index
|
169
|
-
get "/wiki"
|
170
|
-
assert_response :success
|
171
|
-
assert_template "wiki/index"
|
172
|
-
assert_select 'ul>li', 'hello, world!'
|
173
|
-
end
|
174
|
-
end
|
175
|
-
TEST
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def update_routes app
|
180
|
-
routes = app + 'config' + 'routes.rb'
|
181
|
-
add_text_to_routes 'match "/wiki" => "wiki#index"', routes
|
182
|
-
end
|
183
|
-
|
184
|
-
def setup_rails_app rails_version = nil, arel_version = nil
|
185
|
-
create_rails3_app rails_version, arel_version
|
186
|
-
path = app_path rails_version
|
187
|
-
update_routes path
|
188
|
-
create_controller path
|
189
|
-
create_template path
|
190
|
-
create_test path
|
191
|
-
end
|
192
|
-
|
193
|
-
def clean_bundler_environment
|
194
|
-
@bundler_env = ENV.select { |key, value| key =~ /\A(BUNDLE|GEM)_/ }
|
195
|
-
@bundler_env.each { |pair| ENV.delete(pair.first) }
|
196
|
-
end
|
197
|
-
|
198
|
-
def restore_bundler_environment
|
199
|
-
@bundler_env.each { |pair| ENV[pair[0]] = pair[1] }
|
200
|
-
end
|
201
|
-
|
202
|
-
def run_integration_test app
|
203
|
-
clean_bundler_environment
|
204
|
-
FileUtils.cd app do
|
205
|
-
return run('bin/rake', 'test:integration').stdout
|
206
|
-
end
|
207
|
-
ensure
|
208
|
-
restore_bundler_environment
|
209
|
-
end
|
210
|
-
end # module RailsSpecs
|
211
|
-
|
212
|
-
# different versions of Rails require different versions of Arel
|
213
|
-
{ '3.1.0' => '2.1.1' }.each do |rails_version, arel_version|
|
214
|
-
describe "Template handler in Rails #{rails_version}" do
|
215
|
-
include RailsSpecs
|
216
|
-
|
217
|
-
before :all do
|
218
|
-
setup_rails_app rails_version, arel_version
|
219
|
-
@path = app_path rails_version
|
220
|
-
end
|
221
|
-
|
222
|
-
it 'should process the template using the wikitext module' do
|
223
|
-
run_integration_test(@path).should =~ RailsSpecs::SUCCESSFUL_TEST_RESULT
|
224
|
-
end
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
describe 'Template handler in Edge Rails' do
|
229
|
-
include RailsSpecs
|
230
|
-
|
231
|
-
before :all do
|
232
|
-
setup_rails_app
|
233
|
-
@path = app_path nil
|
234
|
-
end
|
235
|
-
|
236
|
-
it 'should process the template using the wikitext module' do
|
237
|
-
run_integration_test(@path).should =~ RailsSpecs::SUCCESSFUL_TEST_RESULT
|
238
|
-
end
|
239
|
-
end
|