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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 245f54ec2e764c1ab69698c09b42e171e8f9aa2b
4
- data.tar.gz: ed8b45378e1ffbed1f411c3e3a94d877b80d97ab
2
+ SHA256:
3
+ metadata.gz: 04a0cd98ff9826b233dbc567276e1dad5485c0068ac48c5d6809929876b05c73
4
+ data.tar.gz: '08cb5e19c101d70dfd1a34a189be595829b03de8ed150fbaadc7edeb36ae4504'
5
5
  SHA512:
6
- metadata.gz: 7358c5f250a0f90388b1ef18b97cce995eda263efd3b32f6c283a3f4465ff9c403dcaa8068fbae01f8513514e29eb919f51e04893e3dec79a6f1be24b23855aa
7
- data.tar.gz: a40e3e7c64b41435c04b87d69b9c6bfae6bbeaa3c2b95b6e940e0104b4f6f9fc8cc9695f0aeb26404a57683a55020aca3dd753e88291a85baa002cc4660a680c
6
+ metadata.gz: fdc713b945f0874b05cf622941387ff0f90f74fd6f9a84b938f334f31e15ccfa7cb899afd9a8b1f3cbf8afb03474a7e40a959bbdf17a674b48b3356e3a11c4a9
7
+ data.tar.gz: ad799965b0b8bf958255b0a4be711e7f40f0a527d424a5d00c637220e4a4431ac6c199bc57346d61cb09f3b45d8fc4e56aa7788d53ba8ffc579ae23f84657ef7
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
- source "http://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- gemspec
3
+ source 'http://rubygems.org'
4
+
5
+ gemspec
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # ruby-uriparser
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/ruby-uriparser.png)](http://badge.fury.io/rb/ruby-uriparser)
4
+ [![Build Status](https://travis-ci.org/tlewin/ruby-uriparser.svg?branch=master)](https://travis-ci.org/tlewin/ruby-uriparser)
5
+ [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](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(:test => :'ext:build') do |test|
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 :build => [:clobber, :compile]
17
+ task build: %i[clobber compile]
16
18
  end
17
19
 
18
- task :default => :test
20
+ task default: :test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mkmf'
2
4
  require 'rbconfig'
3
5
 
@@ -6,4 +8,4 @@ unless have_library('uriparser')
6
8
  exit
7
9
  end
8
10
 
9
- create_makefile 'uriparser_ext'
11
+ create_makefile 'uriparser_ext'
@@ -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 uri);
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
- /* check if there is a slash to add */
173
- if(*path_segment->text.afterLast == '/') {
174
- rb_str_cat(data->path, path_segment->text.first,
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
- if(!data->uri || data->updated) {
201
- if(data->updated) {
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
  }
@@ -1,35 +1,29 @@
1
- $LOAD_PATH.push File.expand_path(File.dirname(__FILE__))
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 ||= if str_port.nil?
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
- if userinfo
21
- userinfo.split(':').first
22
- else
23
- nil
24
- end
18
+ return unless userinfo
19
+
20
+ userinfo.split(':').first
25
21
  end
26
22
 
27
23
  def password
28
- if userinfo
29
- userinfo.split(':')[1]
30
- else
31
- nil
32
- end
24
+ return unless userinfo
25
+
26
+ userinfo.split(':')[1]
33
27
  end
34
28
  end
35
- end
29
+ end
@@ -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.parser uri
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module UriParser
2
- VERSION = '0.1.2'
3
- end
4
+ VERSION = '0.2.0'
5
+ end
@@ -1,4 +1,13 @@
1
- require 'test/unit'
2
- require 'shoulda'
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
@@ -1,103 +1,120 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
- class UriParserTest < Test::Unit::TestCase
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
- assert_raise(StandardError) {UriParser.parse('invalid uri')}
25
+ assert_raises(StandardError) { UriParser.parse('invalid uri') }
8
26
  end
9
27
 
10
28
  should 'parse valid URI' do
11
- uri = UriParser.parse('http://user:pwd@ruby-lang.org:80/en/about?yes=1#any')
12
- assert_equal uri.scheme, 'http'
13
- assert_equal uri.userinfo, 'user:pwd'
14
- assert_equal uri.host, 'ruby-lang.org'
15
- assert_equal uri.str_port, '80'
16
- assert_equal uri.path, '/en/about'
17
- assert_equal uri.query, 'yes=1'
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
- uri = UriParser.parse('https://ruby-lang.org')
23
- assert_equal uri.scheme, 'https'
24
- assert_equal uri.userinfo, nil
25
- assert_equal uri.host, 'ruby-lang.org'
26
- assert_equal uri.str_port, nil
27
- assert_equal uri.path, ''
28
- assert_equal uri.query, nil
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
- uri = UriParser.parse('https://ruby-lang.org')
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
- uri = UriParser.parse('http://user:pwd@ruby-lang.org:80/en/about?yes=1#any')
41
- uri.scheme = 'ftp'
42
- uri.userinfo = nil
43
- uri.host = 'example.org'
44
- uri.str_port = nil
45
- uri.path = '/'
46
- uri.query = 'xx=11'
47
- uri.fragment = nil
48
- assert_equal uri.scheme, 'ftp'
49
- assert_equal uri.userinfo, nil
50
- assert_equal uri.host, 'example.org'
51
- assert_equal uri.str_port, nil
52
- assert_equal uri.path, '/'
53
- assert_equal uri.query, 'xx=11'
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
- uri = UriParser.parse('http://user:pwd@ruby-lang.org:80/en/about?yes=1#any')
59
- assert_equal uri.user, 'user'
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
- assert_equal uri.user, nil
66
- assert_equal uri.password, nil
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
- uri = UriParser.parse('http://ruby-lang.org:80/en/about?yes=1#any')
71
- uri.port = 1
72
- assert_equal uri.str_port, '1'
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
- uri = UriParser.parse('http://example.org/one/two/../../one')
79
- uri.normalize!
80
- assert_equal uri.scheme, 'http'
81
- assert_equal uri.userinfo, nil
82
- assert_equal uri.host, 'example.org'
83
- assert_equal uri.str_port, nil
84
- assert_equal uri.path, '/one'
85
- assert_equal uri.query, nil
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
- uri = UriParser.parse('http://example.org')
91
- uri.path = '/one/two/../../one'
92
- assert_equal uri.path, '/one/two/../../one'
93
- uri.normalize!
94
- assert_equal uri.scheme, 'http'
95
- assert_equal uri.userinfo, nil
96
- assert_equal uri.host, 'example.org'
97
- assert_equal uri.str_port, nil
98
- assert_equal uri.path, '/one'
99
- assert_equal uri.query, nil
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, 'http'
111
- assert_equal uri.userinfo, nil
112
- assert_equal uri.host, 'example.org'
113
- assert_equal uri.str_port, nil
114
- assert_equal uri.path, '/one'
115
- assert_equal uri.query, nil
116
- assert_equal uri.fragment, 'test'
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.1.2
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: 2014-03-21 00:00:00.000000000 Z
11
+ date: 2020-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: shoulda
14
+ name: rake-compiler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.5'
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: 3.5.0
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: '0'
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
- rubyforge_project:
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