ruby-uriparser 0.1.2 → 0.2.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 +5 -5
- data/Gemfile +4 -2
- data/README.md +3 -1
- data/Rakefile +5 -3
- data/ext/uriparser_ext/extconf.rb +3 -1
- data/ext/uriparser_ext/uriparser.c +60 -30
- data/lib/uriparser.rb +13 -19
- data/lib/uriparser/uri_gem.rb +6 -4
- data/lib/uriparser/version.rb +4 -2
- data/test/test_helper.rb +11 -2
- data/test/uriparser_test.rb +95 -71
- metadata +37 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 04a0cd98ff9826b233dbc567276e1dad5485c0068ac48c5d6809929876b05c73
|
4
|
+
data.tar.gz: '08cb5e19c101d70dfd1a34a189be595829b03de8ed150fbaadc7edeb36ae4504'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdc713b945f0874b05cf622941387ff0f90f74fd6f9a84b938f334f31e15ccfa7cb899afd9a8b1f3cbf8afb03474a7e40a959bbdf17a674b48b3356e3a11c4a9
|
7
|
+
data.tar.gz: ad799965b0b8bf958255b0a4be711e7f40f0a527d424a5d00c637220e4a4431ac6c199bc57346d61cb09f3b45d8fc4e56aa7788d53ba8ffc579ae23f84657ef7
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# ruby-uriparser
|
2
2
|
|
3
3
|
[](http://badge.fury.io/rb/ruby-uriparser)
|
4
|
+
[](https://travis-ci.org/tlewin/ruby-uriparser)
|
5
|
+
[](https://github.com/rubocop-hq/rubocop)
|
4
6
|
|
5
7
|
Ruby-uriparser is a wrapper for [uriparser](http://uriparser.sourceforge.net/) C library which is fast (linear input length time complexity), approximatelly 7.5x faster than the standard ruby URI library with a low memory consumption.
|
6
8
|
|
@@ -56,4 +58,4 @@ This project includes code from the New BSD licensed:
|
|
56
58
|
* Copyright (C) 2007, Weijia Song <songweijia@gmail.com>
|
57
59
|
* Copyright (C) 2007, Sebastian Pipping <webmaster@hartwork.org>
|
58
60
|
|
59
|
-
All rights reserved.
|
61
|
+
All rights reserved.
|
data/Rakefile
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake/extensiontask'
|
2
4
|
require 'rake/testtask'
|
3
5
|
|
4
6
|
Rake::ExtensionTask.new('uriparser_ext')
|
5
7
|
|
6
8
|
desc 'run tests'
|
7
|
-
Rake::TestTask.new(:
|
9
|
+
Rake::TestTask.new(test: :'ext:build') do |test|
|
8
10
|
test.libs << 'test'
|
9
11
|
test.pattern = 'test/**/*_test.rb'
|
10
12
|
test.verbose = true
|
@@ -12,7 +14,7 @@ end
|
|
12
14
|
|
13
15
|
namespace :ext do
|
14
16
|
desc 'build extention'
|
15
|
-
task :
|
17
|
+
task build: %i[clobber compile]
|
16
18
|
end
|
17
19
|
|
18
|
-
task :
|
20
|
+
task default: :test
|
@@ -73,10 +73,11 @@ struct uri_data {
|
|
73
73
|
|
74
74
|
/* Helper methods prototypes */
|
75
75
|
static void reset_fields(struct uri_data *);
|
76
|
-
static void populate_fields(VALUE
|
76
|
+
static void populate_fields(VALUE);
|
77
77
|
static VALUE compose_uri_from_data(struct uri_data *);
|
78
|
-
static int parse_uri(char *, UriUriA *);
|
78
|
+
static int parse_uri(const char *, UriUriA *);
|
79
79
|
static void free_uri(UriUriA *);
|
80
|
+
static UriUriA* update_uri(VALUE);
|
80
81
|
|
81
82
|
static void
|
82
83
|
rb_uriparser_mark(void *p)
|
@@ -169,14 +170,9 @@ rb_uriparser_get_path(VALUE self)
|
|
169
170
|
UriPathSegmentA *path_segment = data->uri->pathHead;
|
170
171
|
data->path = rb_str_new("/", 1);
|
171
172
|
do { /* go through the linked list */
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
path_segment->text.afterLast - path_segment->text.first + 1);
|
176
|
-
} else {
|
177
|
-
rb_str_cat(data->path, path_segment->text.first,
|
178
|
-
path_segment->text.afterLast - path_segment->text.first);
|
179
|
-
}
|
173
|
+
rb_str_cat(data->path, path_segment->text.first,
|
174
|
+
path_segment->text.afterLast - path_segment->text.first +
|
175
|
+
(*path_segment->text.afterLast == '/')); /* check if there is a slash to add */
|
180
176
|
path_segment = path_segment->next;
|
181
177
|
} while(path_segment);
|
182
178
|
} else {
|
@@ -197,25 +193,8 @@ rb_uriparser_normalize_bang(VALUE self)
|
|
197
193
|
struct uri_data *data;
|
198
194
|
|
199
195
|
Data_Get_Struct(self, struct uri_data, data);
|
200
|
-
|
201
|
-
|
202
|
-
populate_fields(self);
|
203
|
-
}
|
204
|
-
/* Compute and parse the new URI */
|
205
|
-
VALUE new_uri = compose_uri_from_data(data);
|
206
|
-
UriUriA *uri = ALLOC(UriUriA);
|
207
|
-
|
208
|
-
if(parse_uri(StringValueCStr(new_uri), uri) != URI_SUCCESS) {
|
209
|
-
free_uri(uri);
|
210
|
-
rb_gc_mark(new_uri);
|
211
|
-
rb_raise(rb_eStandardError, "invalid URI (%s) to normalize", StringValueCStr(new_uri));
|
212
|
-
}
|
213
|
-
|
214
|
-
free_uri(data->uri);
|
215
|
-
rb_gc_mark(new_uri);
|
216
|
-
data->uri = uri;
|
217
|
-
}
|
218
|
-
|
196
|
+
update_uri(self);
|
197
|
+
|
219
198
|
if(uriNormalizeSyntaxA(data->uri) != URI_SUCCESS) {
|
220
199
|
rb_raise(rb_eStandardError, "unable to normalize the URI");
|
221
200
|
}
|
@@ -237,6 +216,25 @@ rb_uriparser_unescape(VALUE self)
|
|
237
216
|
return Qnil;
|
238
217
|
}
|
239
218
|
|
219
|
+
static VALUE
|
220
|
+
rb_uriparser_to_s(VALUE self)
|
221
|
+
{
|
222
|
+
int chars_required;
|
223
|
+
char *str_uri;
|
224
|
+
UriUriA *uri = update_uri(self);
|
225
|
+
VALUE obj_str_uri;
|
226
|
+
|
227
|
+
if(uriToStringCharsRequiredA(uri, &chars_required) != URI_SUCCESS ||
|
228
|
+
!(str_uri = ALLOC_N(char, ++chars_required)) ||
|
229
|
+
uriToStringA(str_uri, uri, chars_required, NULL) != URI_SUCCESS) {
|
230
|
+
rb_raise(rb_eStandardError, "unable to convert to string");
|
231
|
+
}
|
232
|
+
|
233
|
+
obj_str_uri = rb_str_new2(str_uri);
|
234
|
+
xfree(str_uri);
|
235
|
+
return obj_str_uri;
|
236
|
+
}
|
237
|
+
|
240
238
|
static void
|
241
239
|
reset_fields(struct uri_data *data)
|
242
240
|
{
|
@@ -318,7 +316,7 @@ compose_uri_from_data(struct uri_data *data)
|
|
318
316
|
}
|
319
317
|
|
320
318
|
static int
|
321
|
-
parse_uri(char *str_uri, UriUriA *uri)
|
319
|
+
parse_uri(const char *str_uri, UriUriA *uri)
|
322
320
|
{
|
323
321
|
uri_parse_state.uri = uri;
|
324
322
|
|
@@ -334,6 +332,37 @@ free_uri(UriUriA *uri)
|
|
334
332
|
}
|
335
333
|
}
|
336
334
|
|
335
|
+
static UriUriA *
|
336
|
+
update_uri(VALUE uri_obj)
|
337
|
+
{
|
338
|
+
struct uri_data *data;
|
339
|
+
|
340
|
+
Data_Get_Struct(uri_obj, struct uri_data, data);
|
341
|
+
if(!data->uri || data->updated) {
|
342
|
+
VALUE new_uri;
|
343
|
+
UriUriA *uri = ALLOC(UriUriA);
|
344
|
+
|
345
|
+
if(data->updated) {
|
346
|
+
populate_fields(uri_obj);
|
347
|
+
}
|
348
|
+
/* Compute and parse the new URI */
|
349
|
+
new_uri = compose_uri_from_data(data);
|
350
|
+
|
351
|
+
if(parse_uri(StringValueCStr(new_uri), uri) != URI_SUCCESS) {
|
352
|
+
free_uri(uri);
|
353
|
+
rb_gc_mark(new_uri);
|
354
|
+
rb_raise(rb_eStandardError, "invalid URI (%s) to normalize", StringValueCStr(new_uri));
|
355
|
+
}
|
356
|
+
|
357
|
+
free_uri(data->uri);
|
358
|
+
rb_gc_mark(new_uri);
|
359
|
+
data->uri = uri;
|
360
|
+
}
|
361
|
+
|
362
|
+
return data->uri;
|
363
|
+
}
|
364
|
+
|
365
|
+
|
337
366
|
void
|
338
367
|
Init_uriparser_ext()
|
339
368
|
{
|
@@ -360,6 +389,7 @@ Init_uriparser_ext()
|
|
360
389
|
rb_define_method(rb_cUri_Class, "normalize!", rb_uriparser_normalize_bang, 0);
|
361
390
|
rb_define_method(rb_cUri_Class, "escape", rb_uriparser_escape, 0);
|
362
391
|
rb_define_method(rb_cUri_Class, "unescape", rb_uriparser_unescape, 0);
|
392
|
+
rb_define_method(rb_cUri_Class, "to_s", rb_uriparser_to_s, 0);
|
363
393
|
|
364
394
|
rb_define_singleton_method(rb_mUriParser, "parse", rb_uriparser_s_parse, 1);
|
365
395
|
}
|
data/lib/uriparser.rb
CHANGED
@@ -1,35 +1,29 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push __dir__
|
2
4
|
require 'uriparser_ext'
|
3
5
|
|
4
|
-
module UriParser
|
6
|
+
module UriParser #:nodoc: all
|
5
7
|
class URI
|
6
8
|
def port
|
7
|
-
@port ||=
|
8
|
-
nil
|
9
|
-
else
|
10
|
-
str_port.to_i
|
11
|
-
end
|
9
|
+
@port ||= str_port.nil? ? nil : str_port.to_i
|
12
10
|
end
|
13
11
|
|
14
|
-
def port=value
|
12
|
+
def port=(value)
|
15
13
|
@port = value.to_i
|
16
14
|
self.str_port = (value.nil? ? nil : value.to_s)
|
17
15
|
end
|
18
16
|
|
19
17
|
def user
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
nil
|
24
|
-
end
|
18
|
+
return unless userinfo
|
19
|
+
|
20
|
+
userinfo.split(':').first
|
25
21
|
end
|
26
22
|
|
27
23
|
def password
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
nil
|
32
|
-
end
|
24
|
+
return unless userinfo
|
25
|
+
|
26
|
+
userinfo.split(':')[1]
|
33
27
|
end
|
34
28
|
end
|
35
|
-
end
|
29
|
+
end
|
data/lib/uriparser/uri_gem.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
require 'uriparser'
|
3
5
|
|
4
6
|
# wrapper the ruby URI class
|
5
|
-
module URI
|
6
|
-
def self.
|
7
|
+
module URI #:nodoc: all
|
8
|
+
def self.parse(uri)
|
7
9
|
UriParser.parse(uri)
|
8
10
|
end
|
9
11
|
end
|
10
12
|
|
11
|
-
module Kernel
|
12
|
-
def URI(uri)
|
13
|
+
module Kernel #:nodoc: all
|
14
|
+
def URI(uri) # rubocop:disable Naming/MethodName
|
13
15
|
UriParser.parse(uri)
|
14
16
|
end
|
15
17
|
end
|
data/lib/uriparser/version.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'shoulda/context'
|
5
|
+
require 'shoulda/matchers'
|
3
6
|
|
4
7
|
require './lib/uriparser'
|
8
|
+
|
9
|
+
Shoulda::Matchers.configure do |config|
|
10
|
+
config.integrate do |with|
|
11
|
+
with.test_framework :minitest
|
12
|
+
end
|
13
|
+
end
|
data/test/uriparser_test.rb
CHANGED
@@ -1,103 +1,120 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
|
-
class UriParserTest < Test
|
5
|
+
class UriParserTest < Minitest::Test # rubocop:disable Metrics/ClassLength
|
6
|
+
FULL_URI = 'http://user:pwd@ruby-lang.org:80/en/about?yes=1#any'
|
7
|
+
SIMPLE_URI = 'https://ruby-lang.org'
|
8
|
+
WEIRD_PATH_URI = 'http://example.org/one/two/../../one'
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@full_uri = UriParser.parse(FULL_URI)
|
12
|
+
@simple_uri = UriParser.parse(SIMPLE_URI)
|
13
|
+
|
14
|
+
@manual_uri = UriParser::URI.new
|
15
|
+
@manual_uri.scheme = 'http'
|
16
|
+
@manual_uri.host = 'example.org'
|
17
|
+
@manual_uri.path = '/one/two/../'
|
18
|
+
@manual_uri.fragment = 'test'
|
19
|
+
|
20
|
+
@weird_path_uri = UriParser.parse(WEIRD_PATH_URI)
|
21
|
+
end
|
4
22
|
|
5
23
|
context 'URI parsing' do
|
6
24
|
should 'raise an exception if was unable to parse the URI' do
|
7
|
-
|
25
|
+
assert_raises(StandardError) { UriParser.parse('invalid uri') }
|
8
26
|
end
|
9
27
|
|
10
28
|
should 'parse valid URI' do
|
11
|
-
|
12
|
-
assert_equal
|
13
|
-
assert_equal
|
14
|
-
assert_equal
|
15
|
-
assert_equal
|
16
|
-
assert_equal
|
17
|
-
assert_equal
|
18
|
-
assert_equal uri.fragment, 'any'
|
29
|
+
assert_equal @full_uri.scheme, 'http'
|
30
|
+
assert_equal @full_uri.userinfo, 'user:pwd'
|
31
|
+
assert_equal @full_uri.host, 'ruby-lang.org'
|
32
|
+
assert_equal @full_uri.str_port, '80'
|
33
|
+
assert_equal @full_uri.path, '/en/about'
|
34
|
+
assert_equal @full_uri.query, 'yes=1'
|
35
|
+
assert_equal @full_uri.fragment, 'any'
|
19
36
|
end
|
20
37
|
|
21
38
|
should 'paser valid but incomplete URI' do
|
22
|
-
|
23
|
-
|
24
|
-
assert_equal
|
25
|
-
|
26
|
-
assert_equal
|
27
|
-
|
28
|
-
|
29
|
-
assert_equal uri.fragment, nil
|
39
|
+
assert_equal @simple_uri.scheme, 'https'
|
40
|
+
assert_nil @simple_uri.userinfo
|
41
|
+
assert_equal @simple_uri.host, 'ruby-lang.org'
|
42
|
+
assert_nil @simple_uri.str_port
|
43
|
+
assert_equal @simple_uri.path, ''
|
44
|
+
assert_nil @simple_uri.query
|
45
|
+
assert_nil @simple_uri.fragment
|
30
46
|
end
|
31
47
|
|
32
48
|
should 'return URI object after a successful parsing' do
|
33
|
-
|
34
|
-
assert_instance_of UriParser::URI, uri
|
49
|
+
assert_instance_of UriParser::URI, @simple_uri
|
35
50
|
end
|
36
51
|
end
|
37
52
|
|
38
53
|
context 'URI class API' do
|
39
54
|
should 'allow update any URI field' do
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
assert_equal
|
50
|
-
|
51
|
-
assert_equal
|
52
|
-
assert_equal
|
53
|
-
|
54
|
-
assert_equal uri.fragment, nil
|
55
|
+
@full_uri.scheme = 'ftp'
|
56
|
+
@full_uri.userinfo = nil
|
57
|
+
@full_uri.host = 'example.org'
|
58
|
+
@full_uri.str_port = nil
|
59
|
+
@full_uri.path = '/'
|
60
|
+
@full_uri.query = 'xx=11'
|
61
|
+
@full_uri.fragment = nil
|
62
|
+
assert_equal @full_uri.scheme, 'ftp'
|
63
|
+
assert_nil @full_uri.userinfo
|
64
|
+
assert_equal @full_uri.host, 'example.org'
|
65
|
+
assert_nil @full_uri.str_port
|
66
|
+
assert_equal @full_uri.path, '/'
|
67
|
+
assert_equal @full_uri.query, 'xx=11'
|
68
|
+
assert_nil @full_uri.fragment
|
55
69
|
end
|
56
70
|
|
57
71
|
should 'split userinfo data' do
|
58
|
-
|
59
|
-
assert_equal
|
60
|
-
assert_equal uri.password, 'pwd'
|
72
|
+
assert_equal @full_uri.user, 'user'
|
73
|
+
assert_equal @full_uri.password, 'pwd'
|
61
74
|
end
|
62
75
|
|
63
76
|
should 'return nil if no user/password informed' do
|
64
77
|
uri = UriParser.parse('http://ruby-lang.org:80/en/about?yes=1#any')
|
65
|
-
|
66
|
-
|
78
|
+
assert_nil uri.user
|
79
|
+
assert_nil uri.password
|
67
80
|
end
|
68
81
|
|
69
82
|
should 'port and str_port be synchronized' do
|
70
|
-
|
71
|
-
|
72
|
-
|
83
|
+
@full_uri.port = 1
|
84
|
+
assert_equal @full_uri.str_port, '1'
|
85
|
+
end
|
86
|
+
|
87
|
+
should 'convert to string (to_s)' do
|
88
|
+
assert_equal @simple_uri.to_s, SIMPLE_URI
|
89
|
+
assert_equal @full_uri.to_s, FULL_URI
|
90
|
+
assert_equal @manual_uri.to_s, 'http://example.org/one/two/../#test'
|
91
|
+
assert_equal @weird_path_uri.to_s, WEIRD_PATH_URI
|
73
92
|
end
|
74
93
|
end
|
75
94
|
|
76
95
|
context 'URI normalizing' do
|
77
96
|
should 'normalize a valid URI' do
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
assert_equal
|
82
|
-
|
83
|
-
assert_equal
|
84
|
-
|
85
|
-
|
86
|
-
assert_equal uri.fragment, nil
|
97
|
+
@weird_path_uri.normalize!
|
98
|
+
assert_equal @weird_path_uri.scheme, 'http'
|
99
|
+
assert_nil @weird_path_uri.userinfo
|
100
|
+
assert_equal @weird_path_uri.host, 'example.org'
|
101
|
+
assert_nil @weird_path_uri.str_port
|
102
|
+
assert_equal @weird_path_uri.path, '/one'
|
103
|
+
assert_nil @weird_path_uri.query
|
104
|
+
assert_nil @weird_path_uri.fragment
|
87
105
|
end
|
88
106
|
|
89
107
|
should 'normalize an updated URI' do
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
assert_equal
|
96
|
-
|
97
|
-
assert_equal
|
98
|
-
|
99
|
-
|
100
|
-
assert_equal uri.fragment, nil
|
108
|
+
@simple_uri.path = '/one/two/../../one'
|
109
|
+
assert_equal @simple_uri.path, '/one/two/../../one'
|
110
|
+
@simple_uri.normalize!
|
111
|
+
assert_equal @simple_uri.scheme, 'https'
|
112
|
+
assert_nil @simple_uri.userinfo
|
113
|
+
assert_equal @simple_uri.host, 'ruby-lang.org'
|
114
|
+
assert_nil @simple_uri.str_port
|
115
|
+
assert_equal @simple_uri.path, '/one'
|
116
|
+
assert_nil @simple_uri.query
|
117
|
+
assert_nil @simple_uri.fragment
|
101
118
|
end
|
102
119
|
|
103
120
|
should 'normalize an URI manually created' do
|
@@ -107,13 +124,20 @@ class UriParserTest < Test::Unit::TestCase
|
|
107
124
|
uri.path = '/one/two/../'
|
108
125
|
uri.fragment = 'test'
|
109
126
|
uri.normalize!
|
110
|
-
assert_equal uri.scheme,
|
111
|
-
|
112
|
-
assert_equal uri.host,
|
113
|
-
|
114
|
-
assert_equal uri.path,
|
115
|
-
|
116
|
-
assert_equal uri.fragment,
|
127
|
+
assert_equal uri.scheme, 'http'
|
128
|
+
assert_nil uri.userinfo
|
129
|
+
assert_equal uri.host, 'example.org'
|
130
|
+
assert_nil uri.str_port
|
131
|
+
assert_equal uri.path, '/one'
|
132
|
+
assert_nil uri.query
|
133
|
+
assert_equal uri.fragment, 'test'
|
134
|
+
end
|
135
|
+
|
136
|
+
should 'update URI string representation' do
|
137
|
+
@weird_path_uri.normalize!
|
138
|
+
@manual_uri.normalize!
|
139
|
+
assert_equal @weird_path_uri.to_s, 'http://example.org/one'
|
140
|
+
assert_equal @manual_uri.to_s, 'http://example.org/one/#test'
|
117
141
|
end
|
118
142
|
end
|
119
|
-
end
|
143
|
+
end
|
metadata
CHANGED
@@ -1,35 +1,63 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-uriparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thiago Lewin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: rake-compiler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
|
19
|
+
version: '1.1'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
21
25
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
26
|
+
version: '1.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.92'
|
23
34
|
type: :development
|
24
35
|
prerelease: false
|
25
36
|
version_requirements: !ruby/object:Gem::Requirement
|
26
37
|
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.92'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: shoulda
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.5.0
|
27
48
|
- - "~>"
|
28
49
|
- !ruby/object:Gem::Version
|
29
50
|
version: '3.5'
|
51
|
+
type: :development
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
30
55
|
- - ">="
|
31
56
|
- !ruby/object:Gem::Version
|
32
57
|
version: 3.5.0
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3.5'
|
33
61
|
description: Ruby wrapper for uriparser C library
|
34
62
|
email:
|
35
63
|
- thiago_lewin@yahoo.com.br
|
@@ -61,18 +89,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
89
|
requirements:
|
62
90
|
- - ">="
|
63
91
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
92
|
+
version: 2.4.0
|
65
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
94
|
requirements:
|
67
95
|
- - ">="
|
68
96
|
- !ruby/object:Gem::Version
|
69
97
|
version: '0'
|
70
98
|
requirements: []
|
71
|
-
|
72
|
-
rubygems_version: 2.2.2
|
99
|
+
rubygems_version: 3.0.1
|
73
100
|
signing_key:
|
74
101
|
specification_version: 4
|
75
102
|
summary: Ruby wrapper for uriparser C library
|
76
103
|
test_files:
|
77
|
-
- test/test_helper.rb
|
78
104
|
- test/uriparser_test.rb
|
105
|
+
- test/test_helper.rb
|