twitter-text 1.9.0 → 1.9.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -201,15 +201,17 @@ module Twitter
201
201
  if !protocol
202
202
  next if !options[:extract_url_without_protocol] || before =~ Twitter::Regex[:invalid_url_without_protocol_preceding_chars]
203
203
  last_url = nil
204
- last_url_invalid_match = nil
205
204
  domain.scan(Twitter::Regex[:valid_ascii_domain]) do |ascii_domain|
206
205
  last_url = {
207
206
  :url => ascii_domain,
208
207
  :indices => [start_position + $~.char_begin(0),
209
208
  start_position + $~.char_end(0)]
210
209
  }
211
- last_url_invalid_match = ascii_domain =~ Twitter::Regex[:invalid_short_domain]
212
- urls << last_url unless last_url_invalid_match
210
+ if path ||
211
+ ascii_domain =~ Twitter::Regex[:valid_special_short_domain] ||
212
+ ascii_domain !~ Twitter::Regex[:invalid_short_domain]
213
+ urls << last_url
214
+ end
213
215
  end
214
216
 
215
217
  # no ASCII-only domain found. Skip the entire URL
@@ -218,7 +220,6 @@ module Twitter
218
220
  # last_url only contains domain. Need to add path and query if they exist.
219
221
  if path
220
222
  # last_url was not added. Add it to urls here.
221
- urls << last_url if last_url_invalid_match
222
223
  last_url[:url] = url.sub(domain, last_url[:url])
223
224
  last_url[:indices][1] = end_position
224
225
  end
@@ -189,39 +189,53 @@ module Twitter
189
189
 
190
190
  REGEXEN[:valid_gTLD] = %r{
191
191
  (?:
192
- (?:academy|actor|aero|agency|arpa|asia|bar|bargains|berlin|best|bid|bike|biz|blue|boutique|build|builders|
193
- buzz|cab|camera|camp|cards|careers|cat|catering|center|ceo|cheap|christmas|cleaning|clothing|club|codes|
194
- coffee|com|community|company|computer|construction|contractors|cool|coop|cruises|dance|dating|democrat|
195
- diamonds|directory|domains|edu|education|email|enterprises|equipment|estate|events|expert|exposed|farm|fish|
196
- flights|florist|foundation|futbol|gallery|gift|glass|gov|graphics|guitars|guru|holdings|holiday|house|
197
- immobilien|industries|info|institute|int|international|jobs|kaufen|kim|kitchen|kiwi|koeln|kred|land|lighting|
198
- limo|link|luxury|management|mango|marketing|menu|mil|mobi|moda|monash|museum|nagoya|name|net|neustar|ninja|
199
- okinawa|onl|org|partners|parts|photo|photography|photos|pics|pink|plumbing|post|pro|productions|properties|
200
- pub|qpon|recipes|red|rentals|repair|report|reviews|rich|ruhr|sexy|shiksha|shoes|singles|social|solar|
201
- solutions|supplies|supply|support|systems|tattoo|technology|tel|tienda|tips|today|tokyo|tools|training|
202
- travel|uno|vacations|ventures|viajes|villas|vision|vote|voting|voto|voyage|wang|watch|wed|wien|wiki|works|
203
- xxx|xyz|zone|дети|онлайн|орг|сайт|بازار|شبكة|みんな|中信|中文网|公司|公益|在线|我爱你|政务|游戏|移动|网络|集团|삼성)
204
- (?=[^0-9a-z@]|$)
192
+ (?:
193
+ academy|accountants|actor|aero|agency|airforce|archi|arpa|asia|associates|axa|bar|bargains|bayern|berlin|best|
194
+ bid|bike|biz|black|blackfriday|blue|boutique|build|builders|buzz|cab|camera|camp|capital|cards|care|career|
195
+ careers|cash|cat|catering|center|ceo|cheap|christmas|citic|claims|cleaning|clinic|clothing|club|codes|coffee|
196
+ college|cologne|com|community|company|computer|construction|contractors|cooking|cool|coop|country|credit|
197
+ creditcard|cruises|dance|dating|democrat|dental|desi|diamonds|digital|directory|discount|domains|edu|education|
198
+ email|engineering|enterprises|equipment|estate|eus|events|exchange|expert|exposed|fail|farm|feedback|finance|
199
+ financial|fish|fishing|fitness|flights|florist|foo|foundation|frogans|fund|furniture|futbol|gal|gallery|gift|
200
+ glass|globo|gmo|gop|gov|graphics|gratis|gripe|guitars|guru|haus|holdings|holiday|horse|house|immobilien|
201
+ industries|info|institute|insure|int|international|investments|jetzt|jobs|kaufen|kim|kitchen|kiwi|koeln|kred|
202
+ land|lease|lighting|limited|limo|link|london|luxury|management|mango|marketing|media|meet|menu|miami|mil|mobi|
203
+ moda|moe|monash|moscow|museum|nagoya|name|net|neustar|ninja|nyc|okinawa|onl|org|paris|partners|parts|photo|
204
+ photography|photos|pics|pictures|pink|plumbing|post|pro|productions|properties|pub|qpon|quebec|recipes|red|
205
+ reisen|ren|rentals|repair|report|rest|reviews|rich|rocks|rodeo|ruhr|ryukyu|saarland|schule|services|sexy|
206
+ shiksha|shoes|singles|social|sohu|solar|solutions|soy|supplies|supply|support|surgery|systems|tattoo|tax|
207
+ technology|tel|tienda|tips|today|tokyo|tools|town|toys|trade|training|travel|university|uno|vacations|vegas|
208
+ ventures|viajes|villas|vision|vodka|vote|voting|voto|voyage|wang|watch|webcam|wed|wien|wiki|works|wtc|wtf|xxx|
209
+ xyz|yokohama|zone|дети|москва|онлайн|орг|сайт|بازار|شبكة|संगठन|みんな|世界|中信|中文网|公司|公益|商城|在线|我爱你|政务|机构|游戏|移动|组织机构|
210
+ 网址|网络|集团|삼성
211
+ )(?=[^0-9a-z@]|$)
205
212
  )
206
213
  }ix
207
214
 
208
215
  REGEXEN[:valid_ccTLD] = %r{
209
216
  (?:
210
- (?:ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|
211
- bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|
212
- et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|
213
- im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|
214
- me|mf|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|
215
- pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|
216
- sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|
217
- ye|yt|za|zm|zw|мон|рф|срб|укр|қаз|الاردن|الجزائر|السعودية|المغرب|امارات|ایران|بھارت|تونس|سودان|سورية|عمان|فلسطين|قطر|مصر|مليسيا|پاکستان|
218
- भारत|বাংলা|ভারত|ਭਾਰਤ|ભારત|இந்தியா|இலங்கை|சிங்கப்பூர்|భారత్|ලංකා|ไทย|გე|中国|中國|台湾|台灣|新加坡|
219
- 香港|한국)
220
- (?=[^0-9a-z@]|$)
217
+ (?:
218
+ ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bl|bm|bn|bo|bq|br|bs|bt|bv|bw|
219
+ by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|
220
+ fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|
221
+ is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mk|ml|
222
+ mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|
223
+ ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|
224
+ tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|мкд|мон|рф|
225
+ срб|укр|қаз|الاردن|الجزائر|السعودية|المغرب|امارات|ایران|بھارت|تونس|سودان|سورية|عمان|فلسطين|قطر|مصر|مليسيا|
226
+ پاکستان|भारत|বাংলা|ভারত|ਭਾਰਤ|ભારત|இந்தியா|இலங்கை|சிங்கப்பூர்|భారత్|ලංකා|ไทย|გე|中国|中國|台湾|台灣|新加坡|香港|한국
227
+ )(?=[^0-9a-z@]|$)
221
228
  )
222
229
  }ix
223
230
  REGEXEN[:valid_punycode] = /(?:xn--[0-9a-z]+)/i
224
231
 
232
+ REGEXEN[:valid_special_cctld] = %r{
233
+ (?:
234
+ (?:co|tv)
235
+ (?=[^0-9a-z@]|$)
236
+ )
237
+ }ix
238
+
225
239
  REGEXEN[:valid_domain] = /(?:
226
240
  #{REGEXEN[:valid_subdomain]}*#{REGEXEN[:valid_domain_name]}
227
241
  (?:#{REGEXEN[:valid_gTLD]}|#{REGEXEN[:valid_ccTLD]}|#{REGEXEN[:valid_punycode]})
@@ -238,6 +252,7 @@ module Twitter
238
252
 
239
253
  # This is used in Extractor to filter out unwanted URLs.
240
254
  REGEXEN[:invalid_short_domain] = /\A#{REGEXEN[:valid_domain_name]}#{REGEXEN[:valid_ccTLD]}\Z/io
255
+ REGEXEN[:valid_special_short_domain] = /\A#{REGEXEN[:valid_domain_name]}#{REGEXEN[:valid_special_cctld]}\Z/io
241
256
 
242
257
  REGEXEN[:valid_port_number] = /[0-9]+/
243
258
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "twitter-text"
5
- s.version = "1.9.0"
5
+ s.version = "1.9.1"
6
6
  s.authors = ["Matt Sanford", "Patrick Ewing", "Ben Cherry", "Britt Selvitelle",
7
7
  "Raffi Krikorian", "J.P. Cummins", "Yoshimasa Niwa", "Keita Fujii", "James Koval"]
8
8
  s.email = ["matt@twitter.com", "patrick.henry.ewing@gmail.com", "bcherry@gmail.com", "bs@brittspace.com",
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.add_development_dependency "nokogiri", "~> 1.5.10"
20
20
  s.add_development_dependency "rake"
21
21
  s.add_development_dependency "rdoc"
22
- s.add_development_dependency "rspec"
23
- s.add_development_dependency "simplecov"
22
+ s.add_development_dependency "rspec", "~> 2.14.0"
23
+ s.add_development_dependency "simplecov", "~> 0.8.0"
24
24
  s.add_runtime_dependency "unf", "~> 0.1.0"
25
25
 
26
26
  s.files = `git ls-files`.split("\n")
metadata CHANGED
@@ -1,9 +1,15 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: twitter-text
3
- version: !ruby/object:Gem::Version
4
- version: 1.9.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 49
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 9
9
+ - 1
10
+ version: 1.9.1
5
11
  platform: ruby
6
- authors:
12
+ authors:
7
13
  - Matt Sanford
8
14
  - Patrick Ewing
9
15
  - Ben Cherry
@@ -16,108 +22,118 @@ authors:
16
22
  autorequire:
17
23
  bindir: bin
18
24
  cert_chain: []
19
- date: 2014-03-18 00:00:00.000000000 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
25
+
26
+ date: 2014-07-18 00:00:00 Z
27
+ dependencies:
28
+ - !ruby/object:Gem::Dependency
22
29
  name: multi_json
23
- requirement: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
27
- version: '1.3'
28
- type: :development
29
30
  prerelease: false
30
- version_requirements: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '1.3'
35
- - !ruby/object:Gem::Dependency
36
- name: nokogiri
37
- requirement: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: 1.5.10
31
+ requirement: &id001 !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ hash: 9
37
+ segments:
38
+ - 1
39
+ - 3
40
+ version: "1.3"
42
41
  type: :development
42
+ version_requirements: *id001
43
+ - !ruby/object:Gem::Dependency
44
+ name: nokogiri
43
45
  prerelease: false
44
- version_requirements: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "~>"
47
- - !ruby/object:Gem::Version
46
+ requirement: &id002 !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ~>
50
+ - !ruby/object:Gem::Version
51
+ hash: 23
52
+ segments:
53
+ - 1
54
+ - 5
55
+ - 10
48
56
  version: 1.5.10
49
- - !ruby/object:Gem::Dependency
50
- name: rake
51
- requirement: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
56
57
  type: :development
58
+ version_requirements: *id002
59
+ - !ruby/object:Gem::Dependency
60
+ name: rake
57
61
  prerelease: false
58
- version_requirements: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- - !ruby/object:Gem::Dependency
64
- name: rdoc
65
- requirement: !ruby/object:Gem::Requirement
66
- requirements:
62
+ requirement: &id003 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
67
65
  - - ">="
68
- - !ruby/object:Gem::Version
69
- version: '0'
66
+ - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
69
+ - 0
70
+ version: "0"
70
71
  type: :development
72
+ version_requirements: *id003
73
+ - !ruby/object:Gem::Dependency
74
+ name: rdoc
71
75
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: '0'
77
- - !ruby/object:Gem::Dependency
78
- name: rspec
79
- requirement: !ruby/object:Gem::Requirement
80
- requirements:
76
+ requirement: &id004 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
81
79
  - - ">="
82
- - !ruby/object:Gem::Version
83
- version: '0'
80
+ - !ruby/object:Gem::Version
81
+ hash: 3
82
+ segments:
83
+ - 0
84
+ version: "0"
84
85
  type: :development
86
+ version_requirements: *id004
87
+ - !ruby/object:Gem::Dependency
88
+ name: rspec
85
89
  prerelease: false
86
- version_requirements: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: '0'
91
- - !ruby/object:Gem::Dependency
92
- name: simplecov
93
- requirement: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '0'
90
+ requirement: &id005 !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ~>
94
+ - !ruby/object:Gem::Version
95
+ hash: 55
96
+ segments:
97
+ - 2
98
+ - 14
99
+ - 0
100
+ version: 2.14.0
98
101
  type: :development
102
+ version_requirements: *id005
103
+ - !ruby/object:Gem::Dependency
104
+ name: simplecov
99
105
  prerelease: false
100
- version_requirements: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- version: '0'
105
- - !ruby/object:Gem::Dependency
106
+ requirement: &id006 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ hash: 63
112
+ segments:
113
+ - 0
114
+ - 8
115
+ - 0
116
+ version: 0.8.0
117
+ type: :development
118
+ version_requirements: *id006
119
+ - !ruby/object:Gem::Dependency
106
120
  name: unf
107
- requirement: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - "~>"
110
- - !ruby/object:Gem::Version
111
- version: 0.1.0
112
- type: :runtime
113
121
  prerelease: false
114
- version_requirements: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - "~>"
117
- - !ruby/object:Gem::Version
122
+ requirement: &id007 !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ~>
126
+ - !ruby/object:Gem::Version
127
+ hash: 27
128
+ segments:
129
+ - 0
130
+ - 1
131
+ - 0
118
132
  version: 0.1.0
133
+ type: :runtime
134
+ version_requirements: *id007
119
135
  description: A gem that provides text handling for Twitter
120
- email:
136
+ email:
121
137
  - matt@twitter.com
122
138
  - patrick.henry.ewing@gmail.com
123
139
  - bcherry@gmail.com
@@ -128,14 +144,17 @@ email:
128
144
  - keita@twitter.com
129
145
  - jkoval@twitter.com
130
146
  executables: []
147
+
131
148
  extensions: []
149
+
132
150
  extra_rdoc_files: []
133
- files:
134
- - ".gemtest"
135
- - ".gitignore"
136
- - ".gitmodules"
137
- - ".rspec"
138
- - ".travis.yml"
151
+
152
+ files:
153
+ - .gemtest
154
+ - .gitignore
155
+ - .gitmodules
156
+ - .rspec
157
+ - .travis.yml
139
158
  - Gemfile
140
159
  - LICENSE
141
160
  - README.rdoc
@@ -165,30 +184,39 @@ files:
165
184
  - test/conformance_test.rb
166
185
  - twitter-text.gemspec
167
186
  homepage: http://twitter.com
168
- licenses:
187
+ licenses:
169
188
  - Apache 2.0
170
- metadata: {}
171
189
  post_install_message:
172
190
  rdoc_options: []
173
- require_paths:
191
+
192
+ require_paths:
174
193
  - lib
175
- required_ruby_version: !ruby/object:Gem::Requirement
176
- requirements:
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
177
197
  - - ">="
178
- - !ruby/object:Gem::Version
179
- version: '0'
180
- required_rubygems_version: !ruby/object:Gem::Requirement
181
- requirements:
198
+ - !ruby/object:Gem::Version
199
+ hash: 3
200
+ segments:
201
+ - 0
202
+ version: "0"
203
+ required_rubygems_version: !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
182
206
  - - ">="
183
- - !ruby/object:Gem::Version
184
- version: '0'
207
+ - !ruby/object:Gem::Version
208
+ hash: 3
209
+ segments:
210
+ - 0
211
+ version: "0"
185
212
  requirements: []
213
+
186
214
  rubyforge_project:
187
- rubygems_version: 2.2.2
215
+ rubygems_version: 1.8.15
188
216
  signing_key:
189
- specification_version: 4
217
+ specification_version: 3
190
218
  summary: Twitter text handling library
191
- test_files:
219
+ test_files:
192
220
  - spec/autolinking_spec.rb
193
221
  - spec/extractor_spec.rb
194
222
  - spec/hithighlighter_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: d032fd2fa1300bbc000a2e7a8f718fc5a7b33e12
4
- data.tar.gz: ac18985474a651ee6ca291e9cdb5fc7116f2d346
5
- SHA512:
6
- metadata.gz: 7f2c3e340d6768091cc0cfca016f0fbb292deae6f02b6aa4045ce353aadd0e538195b5ed71abb285a82eae40fbdf7c9751271430ea1874f8087b1f1e7b5ed3a5
7
- data.tar.gz: d5ab53a8920d232b2b1c6cdf03e6d5a723d12923d2da461329181af0ceb166cac8c034a3f4f715061cf6d007b00aadb745a97817d47984b6f770a86ddb6a8ba6