ruby-bbcode 2.0.3 → 2.1.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -4
- data/Rakefile +2 -4
- data/lib/ruby-bbcode.rb +48 -28
- data/lib/ruby-bbcode/bbtree.rb +15 -13
- data/lib/ruby-bbcode/configuration.rb +18 -0
- data/lib/ruby-bbcode/tag_collection.rb +9 -9
- data/lib/ruby-bbcode/tag_info.rb +49 -18
- data/lib/ruby-bbcode/tag_node.rb +4 -4
- data/lib/ruby-bbcode/tag_sifter.rb +80 -56
- data/lib/ruby-bbcode/templates/bbcode_errors_template.rb +20 -17
- data/lib/ruby-bbcode/templates/html_template.rb +36 -10
- data/lib/ruby-bbcode/version.rb +1 -1
- data/lib/tags/tags.rb +126 -104
- data/test/ruby_bbcode_bbcode_test.rb +39 -16
- data/test/ruby_bbcode_html_test.rb +65 -42
- data/test/ruby_bbcode_validity_test.rb +22 -19
- data/test/test_helper.rb +4 -5
- data/test/unit/configuration_test.rb +37 -0
- data/test/unit/tag_sifter_test.rb +7 -8
- metadata +43 -12
@@ -1,33 +1,37 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class RubyBbcodeValidityTest < Minitest::Test
|
4
|
+
def before_setup
|
5
|
+
RubyBBCode.reset
|
6
|
+
end
|
7
|
+
|
4
8
|
def test_multiple_errors
|
5
9
|
input = '[b]Bold not closed, [li]Illegal list item[/li]'
|
6
10
|
errors = input.bbcode_check_validity
|
7
11
|
assert_equal 2, errors.length
|
8
|
-
assert_includes errors,
|
9
|
-
assert_includes errors,
|
12
|
+
assert_includes errors, '[b] not closed'
|
13
|
+
assert_includes errors, '[li] can only be used in [ul] and [ol], so using it in a [b] tag is not allowed'
|
10
14
|
end
|
11
15
|
|
12
16
|
def test_illegal_items
|
13
17
|
assert_equal ['[li] can only be used in [ul] and [ol]'],
|
14
|
-
|
18
|
+
'[li]Illegal item[/li]'.bbcode_check_validity
|
15
19
|
assert_equal ['[li] can only be used in [ul] and [ol], so using it in a [b] tag is not allowed'],
|
16
|
-
|
20
|
+
'[b][li]Illegal item[/li][/b]'.bbcode_check_validity
|
17
21
|
end
|
18
22
|
|
19
23
|
def test_illegal_list_contents
|
20
24
|
assert_equal ['[ul] can only contain [li] and [*] tags, so "Illegal list" is not allowed'],
|
21
|
-
|
25
|
+
'[ul]Illegal list[/ul]'.bbcode_check_validity
|
22
26
|
assert_equal ['[ul] can only contain [li] and [*] tags, so [b] is not allowed'],
|
23
|
-
|
27
|
+
'[ul][b]Illegal list[/b][/ul]'.bbcode_check_validity
|
24
28
|
end
|
25
29
|
|
26
30
|
def test_illegal_list_contents_text_between_list_items
|
27
31
|
assert_equal ['[ul] can only contain [li] and [*] tags, so "Illegal text" is not allowed'],
|
28
|
-
|
32
|
+
'[ul][li]item[/li]Illegal text[/ul]'.bbcode_check_validity
|
29
33
|
assert_equal ['[ul] can only contain [li] and [*] tags, so "Illegal text" is not allowed'],
|
30
|
-
|
34
|
+
'[ul][li]item[/li]Illegal text[li]item[/li][/ul]'.bbcode_check_validity
|
31
35
|
end
|
32
36
|
|
33
37
|
def test_unordered_list_omit_closing
|
@@ -71,15 +75,15 @@ class RubyBbcodeValidityTest < Minitest::Test
|
|
71
75
|
end
|
72
76
|
|
73
77
|
def test_no_ending_tag
|
74
|
-
|
78
|
+
assert_equal ['[b] not closed'], 'this [b]should not be bold'.bbcode_check_validity
|
75
79
|
end
|
76
80
|
|
77
81
|
def test_no_start_tag
|
78
|
-
assert_equal ["Closing tag [/b] doesn't match an opening tag"],
|
82
|
+
assert_equal ["Closing tag [/b] doesn't match an opening tag"], 'this should not be bold[/b]'.bbcode_check_validity
|
79
83
|
end
|
80
84
|
|
81
85
|
def test_different_start_and_ending_tags
|
82
|
-
assert_equal ["Closing tag [/i] doesn't match [b]",
|
86
|
+
assert_equal ["Closing tag [/i] doesn't match [b]", '[b] not closed'], 'this [b]should not do formatting[/i]'.bbcode_check_validity
|
83
87
|
end
|
84
88
|
|
85
89
|
def test_failing_between_texts
|
@@ -94,10 +98,10 @@ class RubyBbcodeValidityTest < Minitest::Test
|
|
94
98
|
|
95
99
|
def test_addition_of_tags
|
96
100
|
mydef = {
|
97
|
-
:
|
98
|
-
:
|
99
|
-
:
|
100
|
-
:
|
101
|
+
test: {
|
102
|
+
description: 'This is a test',
|
103
|
+
example: '[test]Test here[/test]',
|
104
|
+
param_tokens: [{ token: :param }]
|
101
105
|
}
|
102
106
|
}
|
103
107
|
# Currently, unknown tags are treated as text and no (missing) parameter values are checked for bbcode_check_validity
|
@@ -106,14 +110,13 @@ class RubyBbcodeValidityTest < Minitest::Test
|
|
106
110
|
assert 'pre [test]Test here[/test] post'.bbcode_check_validity(mydef)
|
107
111
|
end
|
108
112
|
|
109
|
-
|
110
|
-
#def test_stack_level_too_deep
|
113
|
+
# TODO: This stack level problem should be validated during the validations
|
114
|
+
# def test_stack_level_too_deep
|
111
115
|
# num = 2300 # increase this number if the test starts failing. It's very near the tipping point
|
112
116
|
# openers = "[s]hi i'm" * num
|
113
117
|
# closers = "[/s]" * num
|
114
118
|
# assert_raise( SystemStackError ) do
|
115
119
|
# (openers+closers).bbcode_to_html
|
116
120
|
# end
|
117
|
-
#end
|
118
|
-
|
121
|
+
# end
|
119
122
|
end
|
data/test/test_helper.rb
CHANGED
@@ -2,19 +2,18 @@ require 'coveralls'
|
|
2
2
|
Coveralls.wear!
|
3
3
|
|
4
4
|
require 'ruby-bbcode'
|
5
|
-
require
|
5
|
+
require 'minitest/autorun'
|
6
6
|
|
7
7
|
# This hack allows us to make all the private methods of a class public.
|
8
8
|
class Class
|
9
9
|
def publicize_methods
|
10
|
-
saved_private_instance_methods =
|
11
|
-
|
10
|
+
saved_private_instance_methods = private_instance_methods
|
11
|
+
class_eval { public(*saved_private_instance_methods) }
|
12
12
|
yield
|
13
|
-
|
13
|
+
class_eval { private(*saved_private_instance_methods) }
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
17
|
# This is for measuring memory usage...
|
19
18
|
def get_current_memory_usage
|
20
19
|
`ps -o rss= -p #{Process.pid}`.to_i
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConfigurationTest < MiniTest::Test
|
4
|
+
def before_setup
|
5
|
+
RubyBBCode.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_configuration
|
9
|
+
refute_equal :ignore, RubyBBCode.configuration.ignore_unknown_tags
|
10
|
+
|
11
|
+
RubyBBCode.configuration.ignore_unknown_tags = :ignore
|
12
|
+
|
13
|
+
assert_equal :ignore, RubyBBCode.configuration.ignore_unknown_tags
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_configuration_reset
|
17
|
+
refute_equal :exception, RubyBBCode.configuration.ignore_unknown_tags
|
18
|
+
|
19
|
+
RubyBBCode.configuration.ignore_unknown_tags = :exception
|
20
|
+
|
21
|
+
assert_equal :exception, RubyBBCode.configuration.ignore_unknown_tags
|
22
|
+
|
23
|
+
RubyBBCode.reset
|
24
|
+
|
25
|
+
refute_equal :exception, RubyBBCode.configuration.ignore_unknown_tags
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_configuration_block
|
29
|
+
refute_equal :ignore, RubyBBCode.configuration.ignore_unknown_tags
|
30
|
+
|
31
|
+
RubyBBCode.configure do |config|
|
32
|
+
config.ignore_unknown_tags = :ignore
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_equal :ignore, RubyBBCode.configuration.ignore_unknown_tags
|
36
|
+
end
|
37
|
+
end
|
@@ -3,35 +3,34 @@ require 'test_helper'
|
|
3
3
|
class TagSifterTest < MiniTest::Test
|
4
4
|
include RubyBBCode::Tags
|
5
5
|
def test_youtube_parser
|
6
|
-
url1 =
|
6
|
+
url1 = 'http://www.youtube.com/watch?v=E4Fbk52Mk1w'
|
7
7
|
just_an_id = 'E4Fbk52Mk1w'
|
8
|
-
url_without_http =
|
9
|
-
url_without_www =
|
10
|
-
url_with_feature =
|
8
|
+
url_without_http = 'www.youtube.com/watch?v=E4Fbk52Mk1w'
|
9
|
+
url_without_www = 'youtube.com/watch?v=E4Fbk52Mk1w'
|
10
|
+
url_with_feature = 'http://www.youtube.com/watch?feature=player_embedded&v=E4Fbk52Mk1w'
|
11
11
|
mock_regex_matches = @@tags[:youtube][:url_matches]
|
12
12
|
|
13
13
|
expected_output = 'E4Fbk52Mk1w'
|
14
14
|
|
15
15
|
RubyBBCode::TagSifter.publicize_methods do
|
16
|
-
ts = RubyBBCode::TagSifter.new
|
16
|
+
ts = RubyBBCode::TagSifter.new '', ''
|
17
17
|
assert_equal expected_output, ts.match_url_id(url1, mock_regex_matches)
|
18
18
|
assert_equal expected_output, ts.match_url_id(just_an_id, mock_regex_matches)
|
19
19
|
assert_equal expected_output, ts.match_url_id(url_without_http, mock_regex_matches)
|
20
20
|
assert_equal expected_output, ts.match_url_id(url_without_www, mock_regex_matches)
|
21
21
|
assert_equal expected_output, ts.match_url_id(url_with_feature, mock_regex_matches)
|
22
22
|
end
|
23
|
-
|
24
23
|
end
|
25
24
|
|
26
25
|
# I think the answer to this is creating a new tag named [youtube]
|
27
26
|
# but that captures specifically the .be or .com and treats them differently...
|
28
27
|
def test_youtubes_via_there_url_shortener
|
29
|
-
url_from_shortener =
|
28
|
+
url_from_shortener = 'http://youtu.be/E4Fbk52Mk1w'
|
30
29
|
expected_output = 'E4Fbk52Mk1w'
|
31
30
|
mock_regex_matches = @@tags[:youtube][:url_matches]
|
32
31
|
|
33
32
|
RubyBBCode::TagSifter.publicize_methods do
|
34
|
-
ts = RubyBBCode::TagSifter.new
|
33
|
+
ts = RubyBBCode::TagSifter.new '', ''
|
35
34
|
|
36
35
|
# this test is now hopelessly broken because generating an ID from a link requires that @bbtree.current_node.definition be properly populated with regex matches...
|
37
36
|
assert_equal expected_output, ts.match_url_id(url_from_shortener, mock_regex_matches)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-bbcode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maarten Bezemer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -25,7 +25,21 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.2.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: coveralls
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.8.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: irb
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
@@ -39,7 +53,7 @@ dependencies:
|
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: minitest
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,7 +67,7 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: rake
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -67,19 +81,33 @@ dependencies:
|
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: rdoc
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0
|
89
|
+
version: '0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: solargraph
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: term-ansicolor
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,6 +137,7 @@ files:
|
|
109
137
|
- Rakefile
|
110
138
|
- lib/ruby-bbcode.rb
|
111
139
|
- lib/ruby-bbcode/bbtree.rb
|
140
|
+
- lib/ruby-bbcode/configuration.rb
|
112
141
|
- lib/ruby-bbcode/tag_collection.rb
|
113
142
|
- lib/ruby-bbcode/tag_info.rb
|
114
143
|
- lib/ruby-bbcode/tag_node.rb
|
@@ -121,6 +150,7 @@ files:
|
|
121
150
|
- test/ruby_bbcode_html_test.rb
|
122
151
|
- test/ruby_bbcode_validity_test.rb
|
123
152
|
- test/test_helper.rb
|
153
|
+
- test/unit/configuration_test.rb
|
124
154
|
- test/unit/tag_sifter_test.rb
|
125
155
|
- test/unit/tags_test.rb
|
126
156
|
homepage: http://github.com/veger/ruby-bbcode
|
@@ -146,14 +176,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
176
|
- !ruby/object:Gem::Version
|
147
177
|
version: '0'
|
148
178
|
requirements: []
|
149
|
-
rubygems_version: 3.0.
|
179
|
+
rubygems_version: 3.0.3
|
150
180
|
signing_key:
|
151
181
|
specification_version: 4
|
152
|
-
summary: ruby-bbcode-2.0
|
182
|
+
summary: ruby-bbcode-2.1.0
|
153
183
|
test_files:
|
154
|
-
- test/unit/tag_sifter_test.rb
|
155
184
|
- test/unit/tags_test.rb
|
185
|
+
- test/unit/tag_sifter_test.rb
|
186
|
+
- test/unit/configuration_test.rb
|
187
|
+
- test/test_helper.rb
|
156
188
|
- test/ruby_bbcode_validity_test.rb
|
157
189
|
- test/ruby_bbcode_bbcode_test.rb
|
158
|
-
- test/test_helper.rb
|
159
190
|
- test/ruby_bbcode_html_test.rb
|