quesadilla 0.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 +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +6 -0
- data/Contributing.markdown +19 -0
- data/Gemfile +19 -0
- data/LICENSE +22 -0
- data/Rakefile +21 -0
- data/Readme.markdown +100 -0
- data/lib/quesadilla/core_ext/string.rb +28 -0
- data/lib/quesadilla/extractor/autolinks.rb +28 -0
- data/lib/quesadilla/extractor/emoji.rb +43 -0
- data/lib/quesadilla/extractor/hashtags.rb +28 -0
- data/lib/quesadilla/extractor/html.rb +103 -0
- data/lib/quesadilla/extractor/markdown.rb +187 -0
- data/lib/quesadilla/extractor.rb +140 -0
- data/lib/quesadilla/html_renderer.rb +57 -0
- data/lib/quesadilla/version.rb +4 -0
- data/lib/quesadilla.rb +45 -0
- data/quesadilla.gemspec +28 -0
- data/test/quesadilla/autolink_test.rb +84 -0
- data/test/quesadilla/emoji_test.rb +103 -0
- data/test/quesadilla/hashtags_test.rb +50 -0
- data/test/quesadilla/html_test.rb +21 -0
- data/test/quesadilla/markdown_test.rb +235 -0
- data/test/quesadilla/multi_test.rb +64 -0
- data/test/quesadilla_test.rb +9 -0
- data/test/support/extractor_macros.rb +5 -0
- data/test/test_helper.rb +18 -0
- metadata +109 -0
@@ -0,0 +1,235 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
module Quesadilla
|
5
|
+
class MarkdownTest < TestCase
|
6
|
+
def test_that_it_extracts_links
|
7
|
+
extraction = extract('Read [my resume](http://samsoff.es/resume) if you want')
|
8
|
+
assert_equal extraction, {
|
9
|
+
display_text: 'Read my resume if you want',
|
10
|
+
display_html: 'Read <a href="http://samsoff.es/resume" rel="external nofollow" class="link">my resume</a> if you want',
|
11
|
+
entities: [
|
12
|
+
{
|
13
|
+
type: 'link',
|
14
|
+
text: '[my resume](http://samsoff.es/resume)',
|
15
|
+
display_text: 'my resume',
|
16
|
+
url: 'http://samsoff.es/resume',
|
17
|
+
indices: [5, 42],
|
18
|
+
display_indices: [5, 14]
|
19
|
+
}
|
20
|
+
]
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_that_it_extracts_links_with_titles
|
25
|
+
extraction = extract('Read [my resume](http://samsoff.es/resume "Sam\'s Resume") if you want')
|
26
|
+
assert_equal extraction, {
|
27
|
+
display_text: 'Read my resume if you want',
|
28
|
+
display_html: 'Read <a href="http://samsoff.es/resume" rel="external nofollow" class="link" title="Sam's Resume">my resume</a> if you want',
|
29
|
+
entities: [
|
30
|
+
{
|
31
|
+
type: 'link',
|
32
|
+
text: '[my resume](http://samsoff.es/resume "Sam\'s Resume")',
|
33
|
+
display_text: 'my resume',
|
34
|
+
url: 'http://samsoff.es/resume',
|
35
|
+
title: 'Sam\'s Resume',
|
36
|
+
indices: [5, 57],
|
37
|
+
display_indices: [5, 14]
|
38
|
+
}
|
39
|
+
]
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_that_it_extracts_links_with_brackets
|
44
|
+
extraction = extract('Something with a link: <http://samsoff.es/posts/hire-sam>')
|
45
|
+
assert_equal extraction, {
|
46
|
+
display_text: 'Something with a link: samsoff.es/posts/hire-sam',
|
47
|
+
display_html: 'Something with a link: <a href="http://samsoff.es/posts/hire-sam" rel="external nofollow" class="link">samsoff.es/posts/hire-sam</a>',
|
48
|
+
entities: [
|
49
|
+
{
|
50
|
+
type: 'link',
|
51
|
+
text: '<http://samsoff.es/posts/hire-sam>',
|
52
|
+
display_text: 'samsoff.es/posts/hire-sam',
|
53
|
+
url: 'http://samsoff.es/posts/hire-sam',
|
54
|
+
indices: [23, 57],
|
55
|
+
display_indices: [23, 48]
|
56
|
+
}
|
57
|
+
]
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_that_it_extracts_email_addresses_with_brackets
|
62
|
+
extraction = extract('Email <support@cheddarapp.com>')
|
63
|
+
assert_equal extraction, {
|
64
|
+
display_text: 'Email support@cheddarapp.com',
|
65
|
+
display_html: 'Email <a href="mailto:support@cheddarapp.com" rel="external nofollow" class="link">support@cheddarapp.com</a>',
|
66
|
+
entities: [
|
67
|
+
{
|
68
|
+
type: 'link',
|
69
|
+
text: '<support@cheddarapp.com>',
|
70
|
+
display_text: 'support@cheddarapp.com',
|
71
|
+
url: 'mailto:support@cheddarapp.com',
|
72
|
+
indices: [6, 30],
|
73
|
+
display_indices: [6, 28]
|
74
|
+
}
|
75
|
+
]
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
# it 'should extract plain email addresses'
|
80
|
+
|
81
|
+
def test_that_it_extracts_emphasis
|
82
|
+
extraction = extract('Something *cool* is awesome')
|
83
|
+
assert_equal extraction, {
|
84
|
+
display_text: 'Something cool is awesome',
|
85
|
+
display_html: 'Something <em>cool</em> is awesome',
|
86
|
+
entities: [
|
87
|
+
{
|
88
|
+
type: 'emphasis',
|
89
|
+
text: '*cool*',
|
90
|
+
display_text: 'cool',
|
91
|
+
indices: [10, 16],
|
92
|
+
display_indices: [10, 14]
|
93
|
+
}
|
94
|
+
]
|
95
|
+
}
|
96
|
+
|
97
|
+
extraction = extract('Something _cool_ is awesome')
|
98
|
+
assert_equal extraction, {
|
99
|
+
display_text: 'Something cool is awesome',
|
100
|
+
display_html: 'Something <em>cool</em> is awesome',
|
101
|
+
entities: [
|
102
|
+
{
|
103
|
+
type: 'emphasis',
|
104
|
+
text: '_cool_',
|
105
|
+
display_text: 'cool',
|
106
|
+
indices: [10, 16],
|
107
|
+
display_indices: [10, 14]
|
108
|
+
}
|
109
|
+
]
|
110
|
+
}
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_that_it_extracts_double_emphasis
|
114
|
+
extraction = extract('Something **cool** is awesome')
|
115
|
+
assert_equal extraction, {
|
116
|
+
display_text: 'Something cool is awesome',
|
117
|
+
display_html: 'Something <strong>cool</strong> is awesome',
|
118
|
+
entities: [
|
119
|
+
{
|
120
|
+
type: 'double_emphasis',
|
121
|
+
text: '**cool**',
|
122
|
+
display_text: 'cool',
|
123
|
+
indices: [10, 18],
|
124
|
+
display_indices: [10, 14]
|
125
|
+
}
|
126
|
+
]
|
127
|
+
}
|
128
|
+
|
129
|
+
extraction = extract('Something __cool__ is awesome')
|
130
|
+
assert_equal extraction, {
|
131
|
+
display_text: 'Something cool is awesome',
|
132
|
+
display_html: 'Something <strong>cool</strong> is awesome',
|
133
|
+
entities: [
|
134
|
+
{
|
135
|
+
type: 'double_emphasis',
|
136
|
+
text: '__cool__',
|
137
|
+
display_text: 'cool',
|
138
|
+
indices: [10, 18],
|
139
|
+
display_indices: [10, 14]
|
140
|
+
}
|
141
|
+
]
|
142
|
+
}
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_that_it_extracts_triple_emphasis
|
146
|
+
extraction = extract('Something ***cool*** is awesome')
|
147
|
+
assert_equal extraction, {
|
148
|
+
display_text: 'Something cool is awesome',
|
149
|
+
display_html: 'Something <strong><em>cool</em></strong> is awesome',
|
150
|
+
entities: [
|
151
|
+
{
|
152
|
+
type: 'triple_emphasis',
|
153
|
+
text: '***cool***',
|
154
|
+
display_text: 'cool',
|
155
|
+
indices: [10, 20],
|
156
|
+
display_indices: [10, 14]
|
157
|
+
}
|
158
|
+
]
|
159
|
+
}
|
160
|
+
|
161
|
+
extraction = extract('Something ___cool___ is awesome')
|
162
|
+
assert_equal extraction, {
|
163
|
+
display_text: 'Something cool is awesome',
|
164
|
+
display_html: 'Something <strong><em>cool</em></strong> is awesome',
|
165
|
+
entities: [
|
166
|
+
{
|
167
|
+
type: 'triple_emphasis',
|
168
|
+
text: '___cool___',
|
169
|
+
display_text: 'cool',
|
170
|
+
indices: [10, 20],
|
171
|
+
display_indices: [10, 14]
|
172
|
+
}
|
173
|
+
]
|
174
|
+
}
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_that_it_extracts_strikethrough
|
178
|
+
extraction = extract('Something ~~cool~~ awesome')
|
179
|
+
assert_equal extraction, {
|
180
|
+
display_text: 'Something cool awesome',
|
181
|
+
display_html: 'Something <del>cool</del> awesome',
|
182
|
+
entities: [
|
183
|
+
{
|
184
|
+
type: 'strikethrough',
|
185
|
+
text: '~~cool~~',
|
186
|
+
display_text: 'cool',
|
187
|
+
indices: [10, 18],
|
188
|
+
display_indices: [10, 14]
|
189
|
+
}
|
190
|
+
]
|
191
|
+
}
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_that_it_extracts_multiple_strikethroughs
|
195
|
+
extraction = extract('Something ~~cool~~ awesome ~~foo~~')
|
196
|
+
assert_equal extraction, {
|
197
|
+
display_text: 'Something cool awesome foo',
|
198
|
+
display_html: 'Something <del>cool</del> awesome <del>foo</del>',
|
199
|
+
entities: [
|
200
|
+
{
|
201
|
+
type: 'strikethrough',
|
202
|
+
text: '~~cool~~',
|
203
|
+
display_text: 'cool',
|
204
|
+
indices: [10, 18],
|
205
|
+
display_indices: [10, 14]
|
206
|
+
},
|
207
|
+
{
|
208
|
+
type: 'strikethrough',
|
209
|
+
text: '~~foo~~',
|
210
|
+
display_text: 'foo',
|
211
|
+
indices: [27, 34],
|
212
|
+
display_indices: [23, 26]
|
213
|
+
}
|
214
|
+
]
|
215
|
+
}
|
216
|
+
end
|
217
|
+
|
218
|
+
def test_that_it_extracts_code
|
219
|
+
extraction = extract('Something with `code` is awesome')
|
220
|
+
assert_equal extraction, {
|
221
|
+
display_text: 'Something with code is awesome',
|
222
|
+
display_html: 'Something with <code>code</code> is awesome',
|
223
|
+
entities: [
|
224
|
+
{
|
225
|
+
type: 'code',
|
226
|
+
text: '`code`',
|
227
|
+
display_text: 'code',
|
228
|
+
indices: [15, 21],
|
229
|
+
display_indices: [15, 19]
|
230
|
+
}
|
231
|
+
]
|
232
|
+
}
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
module Quesadilla
|
5
|
+
class MultiTest < TestCase
|
6
|
+
def test_that_it_extracts_links_and_tags
|
7
|
+
extraction = extract('Something #tagged with a link http://samsoff.es/posts/hire-sam')
|
8
|
+
assert_equal extraction, {
|
9
|
+
display_text: 'Something #tagged with a link samsoff.es/posts/hire-sam',
|
10
|
+
display_html: 'Something <a href="#hashtag-tagged" class="hashtag">#tagged</a> with a link <a href="http://samsoff.es/posts/hire-sam" rel="external nofollow" class="link">samsoff.es/posts/hire-sam</a>',
|
11
|
+
entities: [
|
12
|
+
{
|
13
|
+
type: 'hashtag',
|
14
|
+
text: '#tagged',
|
15
|
+
display_text: '#tagged',
|
16
|
+
hashtag: 'tagged',
|
17
|
+
indices: [10, 17],
|
18
|
+
display_indices: [10, 17]
|
19
|
+
},
|
20
|
+
{
|
21
|
+
type: 'link',
|
22
|
+
text: 'http://samsoff.es/posts/hire-sam',
|
23
|
+
display_text: 'samsoff.es/posts/hire-sam',
|
24
|
+
url: 'http://samsoff.es/posts/hire-sam',
|
25
|
+
indices: [30, 62],
|
26
|
+
display_indices: [30, 55]
|
27
|
+
}
|
28
|
+
]
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_that_it_doesnt_lose_the_last_character
|
33
|
+
extraction = extract('Something that is **bold**?')
|
34
|
+
assert_equal extraction, {
|
35
|
+
display_text: 'Something that is bold?',
|
36
|
+
display_html: 'Something that is <strong>bold</strong>?',
|
37
|
+
entities: [
|
38
|
+
{
|
39
|
+
type: 'double_emphasis',
|
40
|
+
text: '**bold**',
|
41
|
+
display_text: 'bold',
|
42
|
+
indices: [18, 26],
|
43
|
+
display_indices: [18, 22]
|
44
|
+
}
|
45
|
+
]
|
46
|
+
}
|
47
|
+
|
48
|
+
extraction = extract('Something that is **bold**')
|
49
|
+
assert_equal extraction, {
|
50
|
+
display_text: 'Something that is bold',
|
51
|
+
display_html: 'Something that is <strong>bold</strong>',
|
52
|
+
entities: [
|
53
|
+
{
|
54
|
+
type: 'double_emphasis',
|
55
|
+
text: '**bold**',
|
56
|
+
display_text: 'bold',
|
57
|
+
indices: [18, 26],
|
58
|
+
display_indices: [18, 22]
|
59
|
+
}
|
60
|
+
]
|
61
|
+
}
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
Bundler.require :test
|
4
|
+
|
5
|
+
require 'simplecov'
|
6
|
+
SimpleCov.start
|
7
|
+
|
8
|
+
require 'minitest/autorun'
|
9
|
+
require 'quesadilla'
|
10
|
+
|
11
|
+
# Support files
|
12
|
+
Dir["#{File.expand_path(File.dirname(__FILE__))}/support/*.rb"].each do |file|
|
13
|
+
require file
|
14
|
+
end
|
15
|
+
|
16
|
+
class Quesadilla::TestCase < MiniTest::Unit::TestCase
|
17
|
+
include ExtractorMacros
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: quesadilla
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sam Soffes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-03-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: twitter-text
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.5.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.5.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: named_emoji
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.1
|
41
|
+
description: Entity-style text parsing
|
42
|
+
email:
|
43
|
+
- sam@soff.es
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- .travis.yml
|
50
|
+
- Contributing.markdown
|
51
|
+
- Gemfile
|
52
|
+
- LICENSE
|
53
|
+
- Rakefile
|
54
|
+
- Readme.markdown
|
55
|
+
- lib/quesadilla.rb
|
56
|
+
- lib/quesadilla/core_ext/string.rb
|
57
|
+
- lib/quesadilla/extractor.rb
|
58
|
+
- lib/quesadilla/extractor/autolinks.rb
|
59
|
+
- lib/quesadilla/extractor/emoji.rb
|
60
|
+
- lib/quesadilla/extractor/hashtags.rb
|
61
|
+
- lib/quesadilla/extractor/html.rb
|
62
|
+
- lib/quesadilla/extractor/markdown.rb
|
63
|
+
- lib/quesadilla/html_renderer.rb
|
64
|
+
- lib/quesadilla/version.rb
|
65
|
+
- quesadilla.gemspec
|
66
|
+
- test/quesadilla/autolink_test.rb
|
67
|
+
- test/quesadilla/emoji_test.rb
|
68
|
+
- test/quesadilla/hashtags_test.rb
|
69
|
+
- test/quesadilla/html_test.rb
|
70
|
+
- test/quesadilla/markdown_test.rb
|
71
|
+
- test/quesadilla/multi_test.rb
|
72
|
+
- test/quesadilla_test.rb
|
73
|
+
- test/support/extractor_macros.rb
|
74
|
+
- test/test_helper.rb
|
75
|
+
homepage: https://github.com/soffes/quesadilla
|
76
|
+
licenses:
|
77
|
+
- MIT
|
78
|
+
metadata: {}
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 1.9.3
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
requirements: []
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 2.0.0
|
96
|
+
signing_key:
|
97
|
+
specification_version: 4
|
98
|
+
summary: Entity-style text parsing
|
99
|
+
test_files:
|
100
|
+
- test/quesadilla/autolink_test.rb
|
101
|
+
- test/quesadilla/emoji_test.rb
|
102
|
+
- test/quesadilla/hashtags_test.rb
|
103
|
+
- test/quesadilla/html_test.rb
|
104
|
+
- test/quesadilla/markdown_test.rb
|
105
|
+
- test/quesadilla/multi_test.rb
|
106
|
+
- test/quesadilla_test.rb
|
107
|
+
- test/support/extractor_macros.rb
|
108
|
+
- test/test_helper.rb
|
109
|
+
has_rdoc:
|