rinku 2.0.0 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 07c65aa1e4fe77d917eeeb0d4ab03889f5b72443
4
- data.tar.gz: 2e77157e5b959fbda3660e0676d20686e59bd469
2
+ SHA256:
3
+ metadata.gz: 8f7f8c8339abdc0a121db5d557f431d4532fc7f17ac8ae0ceede5b36a8a79235
4
+ data.tar.gz: b58a5fd614fafbcd87e7402e7cb54646af697ef6e908ed3c533683e8d1128e1e
5
5
  SHA512:
6
- metadata.gz: e4c692320131620c6b1398a0d8784091bd1952660bfb1ab14ec7ee32fd115f7c0a39a6faddd924045f4085ee91a1062b67cd6a0600df768a7ccb092a1083e772
7
- data.tar.gz: bc6774b49bb020deaa479ce8145c881e49e037c1539924e3f4cd2a0e8e0e1fb9871356b848e8090d3f3d79239131b0c4d7d6c8afdad117e0dd35edcbe1b5fa14
6
+ metadata.gz: 8e52f7b000fa28489a04aac17189cc401c863c0c2620f5170c4700b855c233fb6fa8bb8f81ab0c096919311e5aac593b05385ce49d279ed03679cb3c3a405112
7
+ data.tar.gz: 8b8453c5ff30e0a0b81c54bd8374a84b2ec847b28fd08929f559f97388ddf69cd62e4ced564a834328526df0d41cc21ea3998b1dc453a74d0170eab85647f389
data/COPYING CHANGED
@@ -1,3 +1,5 @@
1
+ ISC License
2
+
1
3
  Copyright (c) 2011, Vicent Marti
2
4
 
3
5
  Permission to use, copy, modify, and distribute this software for any
data/README.markdown CHANGED
@@ -1,6 +1,9 @@
1
1
  Rinku does linking
2
2
  ==================
3
3
 
4
+ [![Build Status](https://travis-ci.org/vmg/rinku.svg?branch=master)](https://travis-ci.org/vmg/rinku)
5
+ [![Dependency Status](https://www.versioneye.com/ruby/rinku/badge.svg)](https://www.versioneye.com/ruby/rinku)
6
+
4
7
  Rinku is a Ruby library that does autolinking.
5
8
  It parses text and turns anything that remotely resembles a link into an HTML link,
6
9
  just like the Ruby on Rails `auto_link` method -- but it's about 20 times faster,
@@ -91,6 +94,12 @@ choose to use Rinku instead.
91
94
 
92
95
  ~~~~ruby
93
96
  require 'rails_rinku'
97
+ include ActionView::Helpers::TextHelper
98
+ post_body = "Welcome to my new blog at http://www.myblog.com/."
99
+ auto_link(post_body, :html => { :target => '_blank' }) do |text|
100
+ truncate(text, :length => 15)
101
+ end
102
+ # => "Welcome to my new blog at <a href=\"http://www.myblog.com/\" target=\"_blank\">http://www.m...</a>."
94
103
  ~~~~
95
104
 
96
105
  The `rails_rinku` package monkeypatches Rails with an `auto_link` method that
data/Rakefile CHANGED
@@ -1,50 +1,12 @@
1
- require 'date'
2
- require 'rake/clean'
1
+ require 'bundler/setup'
2
+ require 'bundler/gem_tasks'
3
3
  require 'rake/extensiontask'
4
- require 'digest/md5'
5
-
6
- task :default => :test
7
-
8
- # ==========================================================
9
- # Ruby Extension
10
- # ==========================================================
11
-
12
- Rake::ExtensionTask.new('rinku')
13
-
14
- # ==========================================================
15
- # Testing
16
- # ==========================================================
17
-
18
4
  require 'rake/testtask'
19
- Rake::TestTask.new('test') do |t|
20
- t.test_files = FileList['test/*_test.rb']
21
- t.ruby_opts += ['-rubygems'] if defined? Gem
22
- end
23
- task 'test' => [:compile]
24
5
 
25
- # PACKAGING =================================================================
6
+ task default: :test
26
7
 
27
- require 'rubygems'
28
- $spec = eval(File.read('rinku.gemspec'))
8
+ Rake::ExtensionTask.new('rinku') # defines compile task
29
9
 
30
- def package(ext='')
31
- "pkg/rinku-#{$spec.version}" + ext
32
- end
33
-
34
- desc 'Build packages'
35
- task :package => package('.gem')
36
-
37
- desc 'Build and install as local gem'
38
- task :install => package('.gem') do
39
- sh "gem install #{package('.gem')}"
40
- end
41
-
42
- desc 'Update the gemspec'
43
- task :update_gem => file('rinku.gemspec')
44
-
45
- directory 'pkg/'
46
-
47
- file package('.gem') => %w[pkg/ rinku.gemspec] + $spec.files do |f|
48
- sh "gem build rinku.gemspec"
49
- mv File.basename(f.name), f.name
10
+ Rake::TestTask.new(test: :compile) do |t|
11
+ t.test_files = FileList['test/*_test.rb']
50
12
  end
data/ext/rinku/autolink.c CHANGED
@@ -27,6 +27,14 @@
27
27
  #define strncasecmp _strnicmp
28
28
  #endif
29
29
 
30
+ static int
31
+ is_valid_hostchar(const uint8_t *link, size_t link_len)
32
+ {
33
+ size_t pos = 0;
34
+ int32_t ch = utf8proc_next(link, &pos);
35
+ return !utf8proc_is_space(ch) && !utf8proc_is_punctuation(ch);
36
+ }
37
+
30
38
  bool
31
39
  autolink_issafe(const uint8_t *link, size_t link_len)
32
40
  {
@@ -52,7 +60,7 @@ autolink_issafe(const uint8_t *link, size_t link_len)
52
60
  static bool
53
61
  autolink_delim(const uint8_t *data, struct autolink_pos *link)
54
62
  {
55
- uint8_t cclose, copen = 0;
63
+ int32_t cclose, copen = 0;
56
64
  size_t i;
57
65
 
58
66
  for (i = link->start; i < link->end; ++i)
@@ -88,25 +96,14 @@ autolink_delim(const uint8_t *data, struct autolink_pos *link)
88
96
  if (link->end == link->start)
89
97
  return false;
90
98
 
91
- cclose = data[link->end - 1];
92
-
93
- switch (cclose) {
94
- case '"': copen = '"'; break;
95
- case '\'': copen = '\''; break;
96
- case ')': copen = '('; break;
97
- case ']': copen = '['; break;
98
- case '}': copen = '{'; break;
99
- }
99
+ cclose = utf8proc_rewind(data, link->end);
100
+ copen = utf8proc_open_paren_character(cclose);
100
101
 
101
102
  if (copen != 0) {
102
- size_t closing = 0;
103
- size_t opening = 0;
104
- size_t i = link->start;
105
-
106
- /* Try to close the final punctuation sign in this same line;
107
- * if we managed to close it outside of the URL, that means that it's
108
- * not part of the URL. If it closes inside the URL, that means it
109
- * is part of the URL.
103
+ /* Try to close the final punctuation sign in this link; if
104
+ * there's more closing than opening punctuation symbols in the
105
+ * URL, we conservatively remove one closing punctuation from
106
+ * the end of the URL.
110
107
  *
111
108
  * Examples:
112
109
  *
@@ -117,23 +114,51 @@ autolink_delim(const uint8_t *data, struct autolink_pos *link)
117
114
  * => http://www.pokemon.com/Pikachu_(Electric)
118
115
  *
119
116
  * foo http://www.pokemon.com/Pikachu_(Electric)) bar
120
- * => http://www.pokemon.com/Pikachu_(Electric))
117
+ * => http://www.pokemon.com/Pikachu_(Electric)
121
118
  *
122
119
  * (foo http://www.pokemon.com/Pikachu_(Electric)) bar
123
- * => foo http://www.pokemon.com/Pikachu_(Electric)
120
+ * => http://www.pokemon.com/Pikachu_(Electric)
124
121
  */
125
122
 
123
+ size_t closing = 0;
124
+ size_t opening = 0;
125
+ size_t i = link->start;
126
+
126
127
  while (i < link->end) {
127
- if (data[i] == copen)
128
+ int32_t c = utf8proc_next(data, &i);
129
+ if (c == copen)
128
130
  opening++;
129
- else if (data[i] == cclose)
131
+ else if (c == cclose)
130
132
  closing++;
133
+ }
131
134
 
132
- i++;
135
+ if (copen == cclose) {
136
+ if (opening > 0)
137
+ utf8proc_back(data, &link->end);
133
138
  }
139
+ else {
140
+ if (closing > opening)
141
+ utf8proc_back(data, &link->end);
142
+ }
143
+ }
134
144
 
135
- if (closing != opening)
136
- link->end--;
145
+ return true;
146
+ }
147
+
148
+ static bool
149
+ autolink_delim_iter(const uint8_t *data, struct autolink_pos *link)
150
+ {
151
+ size_t prev_link_end;
152
+ int iterations = 0;
153
+
154
+ while(link->end != 0) {
155
+ prev_link_end = link->end;
156
+ if (!autolink_delim(data, link))
157
+ return false;
158
+ if (prev_link_end == link->end || iterations > 5) {
159
+ break;
160
+ }
161
+ iterations++;
137
162
  }
138
163
 
139
164
  return true;
@@ -143,16 +168,25 @@ static bool
143
168
  check_domain(const uint8_t *data, size_t size,
144
169
  struct autolink_pos *link, bool allow_short)
145
170
  {
146
- size_t i, np = 0;
171
+ size_t i, np = 0, uscore1 = 0, uscore2 = 0;
147
172
 
148
173
  if (!rinku_isalnum(data[link->start]))
149
174
  return false;
150
175
 
151
176
  for (i = link->start + 1; i < size - 1; ++i) {
152
- if (data[i] == '.') np++;
153
- else if (!rinku_isalnum(data[i]) && data[i] != '-') break;
177
+ if (data[i] == '_') {
178
+ uscore2++;
179
+ } else if (data[i] == '.') {
180
+ uscore1 = uscore2;
181
+ uscore2 = 0;
182
+ np++;
183
+ } else if (!is_valid_hostchar(data + i, size - i) && data[i] != '-')
184
+ break;
154
185
  }
155
186
 
187
+ if (uscore1 > 0 || uscore2 > 0)
188
+ return false;
189
+
156
190
  link->end = i;
157
191
 
158
192
  if (allow_short) {
@@ -198,7 +232,7 @@ autolink__www(
198
232
  return false;
199
233
 
200
234
  link->end = utf8proc_find_space(data, link->end, size);
201
- return autolink_delim(data, link);
235
+ return autolink_delim_iter(data, link);
202
236
  }
203
237
 
204
238
  bool
@@ -244,7 +278,7 @@ autolink__email(
244
278
  break;
245
279
  }
246
280
 
247
- if ((link->end - pos) < 2 || nb != 1 || np == 0)
281
+ if ((link->end - pos) < 2 || nb != 1 || np == 0 || (np == 1 && data[link->end - 1] == '.'))
248
282
  return false;
249
283
 
250
284
  return autolink_delim(data, link);
@@ -278,5 +312,5 @@ autolink__url(
278
312
  if (!autolink_issafe(data + link->start, size - link->start))
279
313
  return false;
280
314
 
281
- return autolink_delim(data, link);
315
+ return autolink_delim_iter(data, link);
282
316
  }
data/ext/rinku/utf8.c CHANGED
@@ -75,12 +75,38 @@ int32_t utf8proc_next(const uint8_t *str, size_t *pos)
75
75
  return read_cp(str + p, length);
76
76
  }
77
77
 
78
+ int32_t utf8proc_back(const uint8_t *str, size_t *pos)
79
+ {
80
+ const size_t p = *pos;
81
+ int8_t length = 0;
82
+
83
+ if (!p)
84
+ return 0x0;
85
+
86
+ if ((str[p - 1] & 0x80) == 0x0) {
87
+ (*pos) -= 1;
88
+ return str[p - 1];
89
+ }
90
+
91
+ if (p > 1 && utf8proc_utf8class[str[p - 2]] == 2)
92
+ length = 2;
93
+ else if (p > 2 && utf8proc_utf8class[str[p - 3]] == 3)
94
+ length = 3;
95
+ else if (p > 3 && utf8proc_utf8class[str[p - 4]] == 4)
96
+ length = 4;
97
+
98
+ (*pos) -= length;
99
+ return read_cp(&str[*pos], length);
100
+ }
101
+
78
102
  size_t utf8proc_find_space(const uint8_t *str, size_t pos, size_t size)
79
103
  {
80
104
  while (pos < size) {
81
105
  const size_t last = pos;
82
106
  int32_t uc = utf8proc_next(str, &pos);
83
- if (utf8proc_is_space(uc))
107
+ if (uc == 0xFFFD)
108
+ return size;
109
+ else if (utf8proc_is_space(uc))
84
110
  return last;
85
111
  }
86
112
  return size;
@@ -93,7 +119,7 @@ int32_t utf8proc_rewind(const uint8_t *data, size_t pos)
93
119
  if (!pos)
94
120
  return 0x0;
95
121
 
96
- if ((data[pos - 1] & 0xC0) == 0x0)
122
+ if ((data[pos - 1] & 0x80) == 0x0)
97
123
  return data[pos - 1];
98
124
 
99
125
  if (pos > 1 && utf8proc_utf8class[data[pos - 2]] == 2)
@@ -106,6 +132,24 @@ int32_t utf8proc_rewind(const uint8_t *data, size_t pos)
106
132
  return read_cp(&data[pos - length], length);
107
133
  }
108
134
 
135
+ int32_t utf8proc_open_paren_character(int32_t cclose)
136
+ {
137
+ switch (cclose) {
138
+ case '"': return '"';
139
+ case '\'': return '\'';
140
+ case ')': return '(';
141
+ case ']': return '[';
142
+ case '}': return '{';
143
+ case 65289: return 65288; /* () */
144
+ case 12305: return 12304; /* 【】 */
145
+ case 12303: return 12302; /* 『』 */
146
+ case 12301: return 12300; /* 「」 */
147
+ case 12299: return 12298; /* 《》 */
148
+ case 12297: return 12296; /* 〈〉 */
149
+ }
150
+ return 0;
151
+ }
152
+
109
153
  bool utf8proc_is_space(int32_t uc)
110
154
  {
111
155
  return (uc == 9 || uc == 10 || uc == 12 || uc == 13 ||
data/ext/rinku/utf8.h CHANGED
@@ -26,8 +26,11 @@ bool rinku_isalpha(char c);
26
26
  bool rinku_isalnum(char c);
27
27
 
28
28
  int32_t utf8proc_rewind(const uint8_t *data, size_t pos);
29
+ int32_t utf8proc_next(const uint8_t *str, size_t *pos);
30
+ int32_t utf8proc_back(const uint8_t *data, size_t *pos);
29
31
  size_t utf8proc_find_space(const uint8_t *str, size_t pos, size_t size);
30
32
 
33
+ int32_t utf8proc_open_paren_character(int32_t cclose);
31
34
  bool utf8proc_is_space(int32_t uc);
32
35
  bool utf8proc_is_punctuation(int32_t uc);
33
36
 
data/lib/rails_rinku.rb CHANGED
@@ -13,10 +13,18 @@ module RailsRinku
13
13
  options.reverse_merge!(:link => :all, :html => {})
14
14
  text = h(text) unless text.html_safe?
15
15
 
16
+ tag_options_method = if Gem::Version.new(Rails.version) >= Gem::Version.new("5.1")
17
+ # Rails >= 5.1
18
+ tag_builder.method(:tag_options)
19
+ else
20
+ # Rails <= 5.0
21
+ method(:tag_options)
22
+ end
23
+
16
24
  Rinku.auto_link(
17
25
  text,
18
26
  options[:link],
19
- tag_options(options[:html]),
27
+ tag_options_method.call(options[:html]),
20
28
  options[:skip],
21
29
  &block
22
30
  ).html_safe
data/lib/rinku.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Rinku
2
- VERSION = "1.7.3"
2
+ VERSION = "2.0.6"
3
3
 
4
4
  class << self
5
5
  attr_accessor :skip_tags
data/rinku.gemspec CHANGED
@@ -1,8 +1,6 @@
1
- # encoding: UTF-8
2
-
3
1
  Gem::Specification.new do |s|
4
2
  s.name = 'rinku'
5
- s.version = '2.0.0'
3
+ s.version = '2.0.6'
6
4
  s.summary = "Mostly autolinking"
7
5
  s.description = <<-EOF
8
6
  A fast and very smart autolinking library that
@@ -11,6 +9,7 @@ Gem::Specification.new do |s|
11
9
  s.email = 'vicent@github.com'
12
10
  s.homepage = 'https://github.com/vmg/rinku'
13
11
  s.authors = ["Vicent Marti"]
12
+ s.license = 'ISC'
14
13
  # = MANIFEST =
15
14
  s.files = %w[
16
15
  COPYING
@@ -39,5 +38,7 @@ Gem::Specification.new do |s|
39
38
 
40
39
  s.add_development_dependency "rake"
41
40
  s.add_development_dependency "rake-compiler"
42
- s.add_development_dependency "minitest"
41
+ s.add_development_dependency "minitest", ">= 5.0"
42
+
43
+ s.required_ruby_version = '>= 2.0.0'
43
44
  end
@@ -1,6 +1,5 @@
1
- # encoding: utf-8
2
- rootdir = File.dirname(File.dirname(__FILE__))
3
- $LOAD_PATH.unshift "#{rootdir}/lib"
1
+ require 'bundler/setup'
2
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
3
 
5
4
  require 'minitest/autorun'
6
5
  require 'cgi'
@@ -10,7 +9,7 @@ require 'rinku'
10
9
  class RinkuAutoLinkTest < Minitest::Test
11
10
  def generate_result(link_text, href = nil)
12
11
  href ||= link_text
13
- href = "http://" + href unless href =~ %r{\A\w+://}
12
+ href = "http://" + href unless href =~ %r{\A(\w+://|mailto:)}
14
13
  %{<a href="#{CGI.escapeHTML href}">#{CGI.escapeHTML link_text}</a>}
15
14
  end
16
15
 
@@ -28,7 +27,7 @@ class RinkuAutoLinkTest < Minitest::Test
28
27
  end
29
28
 
30
29
  def test_global_skip_tags
31
- assert_equal Rinku.skip_tags, nil
30
+ assert_nil Rinku.skip_tags
32
31
  Rinku.skip_tags = ['pre']
33
32
  assert_equal Rinku.skip_tags, ['pre']
34
33
 
@@ -363,6 +362,13 @@ This is just a test. <a href="http://www.pokemon.com">http://www.pokemon.com</a>
363
362
  assert_linked "email#{NBSP}<a href=\"mailto:#{email_raw}\">#{email_raw}</a>", "email#{NBSP}#{email_raw}"
364
363
  end
365
364
 
365
+ def test_identifies_unicode_spaces
366
+ assert_linked(
367
+ %{This is just a test. <a href="http://www.pokemon.com">http://www.pokemon.com</a>\u202F\u2028\u2001},
368
+ "This is just a test. http://www.pokemon.com\u202F\u2028\u2001"
369
+ )
370
+ end
371
+
366
372
  def test_www_is_case_insensitive
367
373
  url = "www.reddit.com"
368
374
  assert_linked generate_result(url), url
@@ -376,4 +382,64 @@ This is just a test. <a href="http://www.pokemon.com">http://www.pokemon.com</a>
376
382
  url = "WwW.reddit.CoM"
377
383
  assert_linked generate_result(url), url
378
384
  end
385
+
386
+ def test_non_emails_ending_in_periods
387
+ assert_linked "abc/def@ghi.", "abc/def@ghi."
388
+ assert_linked "abc/def@ghi. ", "abc/def@ghi. "
389
+ assert_linked "abc/def@ghi. x", "abc/def@ghi. x"
390
+ assert_linked "abc/def@ghi.< x", "abc/def@ghi.< x"
391
+ assert_linked "abc/<a href=\"mailto:def@ghi.x\">def@ghi.x</a>", "abc/def@ghi.x"
392
+ assert_linked "abc/<a href=\"mailto:def@ghi.x\">def@ghi.x</a>. a", "abc/def@ghi.x. a"
393
+ end
394
+
395
+ def test_urls_with_entities_and_parens
396
+ assert_linked "&lt;<a href=\"http://www.google.com\">http://www.google.com</a>&gt;", "&lt;http://www.google.com&gt;"
397
+
398
+ assert_linked "&lt;<a href=\"http://www.google.com\">http://www.google.com</a>&gt;)", "&lt;http://www.google.com&gt;)"
399
+
400
+ # this produces invalid output, but limits how much work we will do
401
+ assert_linked "&lt;<a href=\"http://www.google.com&gt;\">http://www.google.com&gt;</a>)&lt;)&lt;)&lt;)&lt;)&lt;)&lt;)", "&lt;http://www.google.com&gt;)&lt;)&lt;)&lt;)&lt;)&lt;)&lt;)"
402
+
403
+ url = "http://pokemon.com/bulbasaur"
404
+ assert_linked "URL is #{generate_result(url)}.", "URL is #{url}."
405
+ assert_linked "(URL is #{generate_result(url)}.)", "(URL is #{url}.)"
406
+
407
+ url = "www.pokemon.com/bulbasaur"
408
+ assert_linked "URL is #{generate_result(url)}.", "URL is #{url}."
409
+ assert_linked "(URL is #{generate_result(url)}.)", "(URL is #{url}.)"
410
+
411
+ url = "abc@xyz.com"
412
+ assert_linked "URL is #{generate_result(url, "mailto:#{url}")}.", "URL is #{url}."
413
+ assert_linked "(URL is #{generate_result(url, "mailto:#{url}")}.)", "(URL is #{url}.)"
414
+ end
415
+
416
+ def test_urls_with_parens
417
+ assert_linked "(<a href=\"http://example.com\">http://example.com</a>)", "(http://example.com)"
418
+ assert_linked "((<a href=\"http://example.com/()\">http://example.com/()</a>))", "((http://example.com/()))"
419
+ assert_linked "[<a href=\"http://example.com/()\">http://example.com/()</a>]", "[http://example.com/()]"
420
+
421
+ assert_linked "(<a href=\"http://example.com/\">http://example.com/</a>)", "(http://example.com/)"
422
+ assert_linked "【<a href=\"http://example.com/\">http://example.com/</a>】", "【http://example.com/】"
423
+ assert_linked "『<a href=\"http://example.com/\">http://example.com/</a>』", "『http://example.com/』"
424
+ assert_linked "「<a href=\"http://example.com/\">http://example.com/</a>」", "「http://example.com/」"
425
+ assert_linked "《<a href=\"http://example.com/\">http://example.com/</a>》", "《http://example.com/》"
426
+ assert_linked "〈<a href=\"http://example.com/\">http://example.com/</a>〉", "〈http://example.com/〉"
427
+ end
428
+
429
+ def test_urls_with_quotes
430
+ assert_linked "'<a href=\"http://example.com\">http://example.com</a>'", "'http://example.com'"
431
+ assert_linked "\"<a href=\"http://example.com\">http://example.com</a>\"\"", "\"http://example.com\"\""
432
+ end
433
+
434
+ def test_underscore_in_domain
435
+ assert_linked "http://foo_bar.com", "http://foo_bar.com"
436
+ end
437
+
438
+ def test_underscore_in_subdomain
439
+ assert_linked "<a href=\"http://foo_bar.xyz.com\">http://foo_bar.xyz.com</a>", "http://foo_bar.xyz.com"
440
+ end
441
+
442
+ def test_regression_84
443
+ assert_linked "<a href=\"https://www.keepright.atの情報をもとにエラー修正\">https://www.keepright.atの情報をもとにエラー修正</a>", "https://www.keepright.atの情報をもとにエラー修正"
444
+ end
379
445
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rinku
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vicent Marti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-19 00:00:00.000000000 Z
11
+ date: 2019-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '5.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '5.0'
55
55
  description: |2
56
56
  A fast and very smart autolinking library that
57
57
  acts as a drop-in replacement for Rails `auto_link`
@@ -80,7 +80,8 @@ files:
80
80
  - rinku.gemspec
81
81
  - test/autolink_test.rb
82
82
  homepage: https://github.com/vmg/rinku
83
- licenses: []
83
+ licenses:
84
+ - ISC
84
85
  metadata: {}
85
86
  post_install_message:
86
87
  rdoc_options: []
@@ -90,7 +91,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
91
  requirements:
91
92
  - - ">="
92
93
  - !ruby/object:Gem::Version
93
- version: '0'
94
+ version: 2.0.0
94
95
  required_rubygems_version: !ruby/object:Gem::Requirement
95
96
  requirements:
96
97
  - - ">="
@@ -98,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
99
  version: '0'
99
100
  requirements: []
100
101
  rubyforge_project:
101
- rubygems_version: 2.2.5
102
+ rubygems_version: 2.7.6
102
103
  signing_key:
103
104
  specification_version: 4
104
105
  summary: Mostly autolinking