uri-whatwg_parser 0.1.6 → 0.1.8

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
2
  SHA256:
3
- metadata.gz: 712c7079461310fdab82e79bea4491ce91a4a8b26827a338334a0e161520a8c0
4
- data.tar.gz: 85871841fdee54a61c942134398bfb85e2e89f798144921464058e4edd2ea8fb
3
+ metadata.gz: 4463680cf6d13f3daf3513549ebe358f7b45484888704bbefffcecbb1790b8c7
4
+ data.tar.gz: b5ec5b9ad687c53f71f2fa21bcb049215dfff6ecdcb8305594f569ba86c0b210
5
5
  SHA512:
6
- metadata.gz: 42b046952ea2817c3db80edcc69bafbf86822c9b88f23837b4decb9d9693b0044f68b9a74c920707e16ee28121f2c03d6992df300227b32cf62a3995e7af7ee5
7
- data.tar.gz: aa9c3d27934eec97f11f579cc2b194b5b88f0d69da5c224cb4ebf6fd13878c8a493a7e3391f7f985674e602629da303364aa49c7ed9b88f0b101b66c304db6d2
6
+ metadata.gz: 3ff5fd142e640d265e4d3bd11174e7658732430055d45cce16364bc783c85f7f642d3654d9621e2fa198d63f8e82959fa5d4588d611f6c3e3c3f2d46f382df9e
7
+ data.tar.gz: b389a5a39685d81ce3ade458b1d61746e9b0dca6e227b73658fe6c04910f20908a1669fd884c5e445bb401edc1db3915e21d15bdec8acf1b441c9c9b3e7e65d8
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## 0.1.8
2
+
3
+ * Support `.build` method
4
+ * Support setter methods
5
+
6
+ ## 0.1.7
7
+
8
+ * Allow to call `URI.split` multiple times
9
+ * Fix parsing a username without a password
10
+ * Support `#merge` method
11
+
1
12
  ## 0.1.6
2
13
 
3
14
  * Fix `opaque` part parsing
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Ruby implementation of the [WHATWG URL Living Standard](https://url.spec.whatwg.org/).
4
4
 
5
- The latest revision that this package implements of the standard is ([18 August 2025](https://url.spec.whatwg.org/commit-snapshots/05a5d834deba31622390ee05a3dcbc22496b7bb5/)).
5
+ The latest revision that this package implements of the standard is ([30 October 2025](https://url.spec.whatwg.org/commit-snapshots/52526653e848c5a56598c84aa4bc8ac9025fb66b/)).
6
6
 
7
7
  ## Installation
8
8
 
@@ -0,0 +1,135 @@
1
+ require "uri/generic"
2
+
3
+ module URI
4
+ class WhatwgParser
5
+ module Generic
6
+ def initialize(scheme,
7
+ userinfo, host, port, registry,
8
+ path, opaque,
9
+ query,
10
+ fragment,
11
+ parser = DEFAULT_PARSER,
12
+ arg_check = false)
13
+ @scheme = nil
14
+ @user = nil
15
+ @password = nil
16
+ @host = nil
17
+ @port = nil
18
+ @path = nil
19
+ @query = nil
20
+ @opaque = nil
21
+ @fragment = nil
22
+ @parser = parser == DEFAULT_PARSER ? nil : parser
23
+
24
+ self.set_scheme(scheme)
25
+ self.set_host(host)
26
+ self.set_port(port)
27
+ self.set_userinfo(userinfo)
28
+ self.set_path(path)
29
+ self.query = query
30
+ self.set_opaque(opaque)
31
+ self.fragment=(fragment)
32
+
33
+ self.set_path("") if !@path && !@opaque
34
+ DEFAULT_PARSER.parse(to_s) if arg_check
35
+
36
+ if registry
37
+ raise InvalidURIError,
38
+ "the scheme #{@scheme} does not accept registry part: #{registry} (or bad hostname?)"
39
+ end
40
+
41
+ @scheme&.freeze
42
+ self.set_port(self.default_port) if self.default_port && !@port
43
+ end
44
+
45
+
46
+ def merge(oth)
47
+ URI::DEFAULT_PARSER.join(self.to_s, oth.to_s)
48
+ end
49
+ alias + merge
50
+
51
+ def check_scheme(v)
52
+ self.set_scheme(v)
53
+ DEFAULT_PARSER.parse(to_s)
54
+ true
55
+ end
56
+
57
+ def check_user(v)
58
+ if @opaque
59
+ raise InvalidURIError, "cannot set user with opaque"
60
+ end
61
+
62
+ return v unless v
63
+
64
+ self.set_user(v)
65
+ DEFAULT_PARSER.parse(to_s)
66
+ true
67
+ end
68
+
69
+ def check_password(v, user = @user)
70
+ if @opaque
71
+ raise InvalidURIError, "cannot set password with opaque"
72
+ end
73
+ return v unless v
74
+
75
+ if !user
76
+ raise InvalidURIError, "password component depends user component"
77
+ end
78
+
79
+ self.set_password(v)
80
+ DEFAULT_PARSER.parse(to_s)
81
+ true
82
+ end
83
+
84
+ def check_host(v)
85
+ return v unless v
86
+
87
+ if @opaque
88
+ raise InvalidURIError, "cannot set host with registry or opaque"
89
+ end
90
+
91
+ self.set_host(v)
92
+ DEFAULT_PARSER.parse(to_s)
93
+ true
94
+ end
95
+
96
+ def check_port(v)
97
+ return v unless v
98
+
99
+ if @opaque
100
+ raise InvalidURIError, "cannot set port with registry or opaque"
101
+ end
102
+
103
+ self.set_port(v)
104
+ DEFAULT_PARSER.parse(to_s)
105
+ true
106
+ end
107
+
108
+ def check_path(v)
109
+ return v unless v
110
+
111
+ if @opaque
112
+ raise InvalidURIError, "path conflicts with opaque"
113
+ end
114
+
115
+ self.set_path(v)
116
+ DEFAULT_PARSER.parse(to_s)
117
+ true
118
+ end
119
+
120
+ def check_opaque(v)
121
+ return v unless v
122
+
123
+ if @host || @port || @user || @path
124
+ raise InvalidURIError, "cannot set opaque with host, port, userinfo or path"
125
+ end
126
+
127
+ self.set_opaque(v)
128
+ DEFAULT_PARSER.parse(to_s)
129
+ true
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ URI::Generic.prepend(URI::WhatwgParser::Generic)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module URI
4
4
  class WhatwgParser
5
- VERSION = "0.1.6"
5
+ VERSION = "0.1.8"
6
6
  end
7
7
  end
@@ -5,6 +5,7 @@ require_relative "whatwg_parser/error"
5
5
  require_relative "whatwg_parser/version"
6
6
  require_relative "whatwg_parser/parser_helper"
7
7
  require_relative "whatwg_parser/host_parser"
8
+ require_relative "whatwg_parser/generic"
8
9
 
9
10
  module URI
10
11
  class WhatwgParser
@@ -35,11 +36,11 @@ module URI
35
36
  end
36
37
 
37
38
  def parse(uri, base = nil, encoding = Encoding::UTF_8) # :nodoc:
38
- reset
39
39
  URI.for(*self.split(uri, base, encoding))
40
40
  end
41
41
 
42
42
  def split(uri, base = nil, encoding = Encoding::UTF_8) # :nodoc:
43
+ reset
43
44
  @base = nil
44
45
  if base != nil
45
46
  ary = split(base, nil, encoding)
@@ -66,7 +67,7 @@ module URI
66
67
  @pos += 1
67
68
  end
68
69
 
69
- @parse_result[:userinfo] = "#{@username}:#{@password}" if !@username.nil? || !@password.nil?
70
+ @parse_result[:userinfo] = [@username, @password].compact.reject(&:empty?).join(":")
70
71
  @parse_result[:path] = "/#{@paths.join("/")}" if @paths && !@paths.empty?
71
72
 
72
73
  @parse_result.values
@@ -180,8 +181,7 @@ module URI
180
181
  elsif special_url? && c == "\\"
181
182
  @state = :relative_slash_state
182
183
  else
183
-
184
- @parse_result[:userinfo] = @base[:userinfo]
184
+ @username, @password = @base[:userinfo].split(":") if @base[:userinfo]
185
185
  @parse_result[:host] = @base[:host]
186
186
  @parse_result[:port] = @base[:port]
187
187
  @paths = @base_paths
@@ -208,7 +208,7 @@ module URI
208
208
  elsif c == "/"
209
209
  @state = :authority_state
210
210
  else
211
- @parse_result[:userinfo] = @base[:userinfo]
211
+ @username, @password = @base[:userinfo].split(":") if @base[:userinfo]
212
212
  @parse_result[:host] = @base[:host]
213
213
  @parse_result[:port] = @base[:port]
214
214
  @state = :path_state
@@ -498,6 +498,17 @@ module URI
498
498
  def rest
499
499
  @uri[@pos+1..]
500
500
  end
501
+
502
+ def convert_to_uri(uri)
503
+ if uri.is_a?(URI::Generic)
504
+ uri
505
+ elsif uri = String.try_convert(uri)
506
+ parse(uri)
507
+ else
508
+ raise ArgumentError,
509
+ "bad argument (expected URI object or URI string)"
510
+ end
511
+ end
501
512
  end
502
513
  end
503
514
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uri-whatwg_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Yaginuma
@@ -63,6 +63,7 @@ files:
63
63
  - Rakefile
64
64
  - lib/uri/whatwg_parser.rb
65
65
  - lib/uri/whatwg_parser/error.rb
66
+ - lib/uri/whatwg_parser/generic.rb
66
67
  - lib/uri/whatwg_parser/host_parser.rb
67
68
  - lib/uri/whatwg_parser/parser_helper.rb
68
69
  - lib/uri/whatwg_parser/version.rb