ruby-uriparser 0.1.2 → 0.2.0

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: 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