[前][次][番号順一覧][スレッド一覧]

ruby-changes:69335

From: Tiago <ko1@a...>
Date: Fri, 22 Oct 2021 19:56:46 +0900 (JST)
Subject: [ruby-changes:69335] 553f234a07 (master): [ruby/uri] URI#HTTP#origin and URI#HTTP#authority (https://github.com/ruby/uri/pull/30)

https://git.ruby-lang.org/ruby.git/commit/?id=553f234a07

From 553f234a07fe000cf5416793c1f9c0273518d906 Mon Sep 17 00:00:00 2001
From: Tiago <cardoso_tiago@h...>
Date: Mon, 20 Sep 2021 22:53:42 +0100
Subject: [ruby/uri] URI#HTTP#origin and URI#HTTP#authority
 (https://github.com/ruby/uri/pull/30)

https://github.com/ruby/uri/commit/bf13946c32

Co-authored-by: Samuel Williams <samuel.williams@o...>
---
 lib/uri/http.rb       | 39 +++++++++++++++++++++++++++++++++++++++
 test/uri/test_http.rb | 30 +++++++++++++++++++++++-------
 2 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/lib/uri/http.rb b/lib/uri/http.rb
index 6e9c963ef1..306daf1965 100644
--- a/lib/uri/http.rb
+++ b/lib/uri/http.rb
@@ -80,6 +80,45 @@ module URI https://github.com/ruby/ruby/blob/trunk/lib/uri/http.rb#L80
       url = @query ? "#@path?#@query" : @path.dup
       url.start_with?(?/.freeze) ? url : ?/ + url
     end
+
+    #
+    # == Description
+    #
+    # Returns the authority for an HTTP uri, as defined in
+    # https://datatracker.ietf.org/doc/html/rfc3986/#section-3.2.
+    #
+    #
+    # Example:
+    #
+    #     URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').authority #=> "www.example.com"
+    #     URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').authority #=> "www.example.com:8000"
+    #     URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').authority #=> "www.example.com"
+    #
+    def authority
+      if port == default_port
+        host
+      else
+        "#{host}:#{port}"
+      end
+    end
+
+    #
+    # == Description
+    #
+    # Returns the origin for an HTTP uri, as defined in
+    # https://datatracker.ietf.org/doc/html/rfc6454.
+    #
+    #
+    # Example:
+    #
+    #     URI::HTTP.build(host: 'www.example.com', path: '/foo/bar').origin #=> "http://www.example.com"
+    #     URI::HTTP.build(host: 'www.example.com', port: 8000, path: '/foo/bar').origin #=> "http://www.example.com:8000"
+    #     URI::HTTP.build(host: 'www.example.com', port: 80, path: '/foo/bar').origin #=> "http://www.example.com"
+    #     URI::HTTPS.build(host: 'www.example.com', path: '/foo/bar').origin #=> "https://www.example.com"
+    #
+    def origin
+      "#{scheme}://#{authority}"
+    end
   end
 
   register_scheme 'HTTP', HTTP
diff --git a/test/uri/test_http.rb b/test/uri/test_http.rb
index cc19046c8f..a52b4cfe28 100644
--- a/test/uri/test_http.rb
+++ b/test/uri/test_http.rb
@@ -24,14 +24,16 @@ class TestHTTP < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/uri/test_http.rb#L24
   def test_parse
     u = URI.parse('http://a')
     assert_kind_of(URI::HTTP, u)
-    assert_equal(['http',
-		   nil, 'a', URI::HTTP.default_port,
-		   '', nil, nil], uri_to_ary(u))
+    assert_equal([
+      'http',
+      nil, 'a', URI::HTTP.default_port,
+      '', nil, nil
+    ], uri_to_ary(u))
   end
 
   def test_normalize
     host = 'aBcD'
-    u1 = URI.parse('http://' + host          + '/eFg?HiJ')
+    u1 = URI.parse('http://' + host + '/eFg?HiJ')
     u2 = URI.parse('http://' + host.downcase + '/eFg?HiJ')
     assert(u1.normalize.host == 'abcd')
     assert(u1.normalize.path == u1.path)
@@ -49,11 +51,11 @@ class TestHTTP < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/uri/test_http.rb#L51
   end
 
   def test_request_uri
-    assert_equal('/',         URI.parse('http://a.b.c/').request_uri)
+    assert_equal('/', URI.parse('http://a.b.c/').request_uri)
     assert_equal('/?abc=def', URI.parse('http://a.b.c/?abc=def').request_uri)
-    assert_equal('/',         URI.parse('http://a.b.c').request_uri)
+    assert_equal('/', URI.parse('http://a.b.c').request_uri)
     assert_equal('/?abc=def', URI.parse('http://a.b.c?abc=def').request_uri)
-    assert_equal(nil,         URI.parse('http:foo').request_uri)
+    assert_equal(nil, URI.parse('http:foo').request_uri)
   end
 
   def test_select
@@ -64,6 +66,20 @@ class TestHTTP < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/uri/test_http.rb#L66
       u.select(:scheme, :host, :not_exist, :port)
     end
   end
+
+  def test_authority
+    assert_equal('a.b.c', URI.parse('http://a.b.c/').authority)
+    assert_equal('a.b.c:8081', URI.parse('http://a.b.c:8081/').authority)
+    assert_equal('a.b.c', URI.parse('http://a.b.c:80/').authority)
+  end
+
+
+  def test_origin
+    assert_equal('http://a.b.c', URI.parse('http://a.b.c/').origin)
+    assert_equal('http://a.b.c:8081', URI.parse('http://a.b.c:8081/').origin)
+    assert_equal('http://a.b.c', URI.parse('http://a.b.c:80/').origin)
+    assert_equal('https://a.b.c', URI.parse('https://a.b.c/').origin)
+  end
 end
 
 
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]