indieweb-endpoints 7.1.0 → 8.0.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
2
  SHA256:
3
- metadata.gz: d00bf075ce905d49768b047c4963ccc8fb260e3ce7c06a1305a10099bdf6e4a0
4
- data.tar.gz: 2c50a4fe3f85d401ccf981e5ef4c374e35f2788a2a00422f52df08c7a7c9821f
3
+ metadata.gz: efd7555091687973a996b1914f1a739e7933381dc149d7b67babdf739f8c7c0b
4
+ data.tar.gz: 744cf8171f987add528d18713c2869c954fa9f227c84508ae1d7ad30ea4cba17
5
5
  SHA512:
6
- metadata.gz: ed757712cf9c99812ebdf2eb514c37b4a78cf0fd9f86c416611ce64a854706eb0e7b08599be0681438a774b76dbc9e03b2bb8434107fd17dec37403686743182
7
- data.tar.gz: cadd7fad871a5d33f88e9365f7b8b1300c331cd96f2716d17f24ae8eac9eec79c463f4e45c68cb18fa35d602393fd771d3face3723c0acc1e3ab46acba02f7c7
6
+ metadata.gz: a799aaede4a422adf01c660b7a7ed7b88b6d5907c7f30fef7bf6a12c1b50b2eba64c055ba7b47a3cb899e865552ae6ae124be657ebf7539dba6206baf7457c36
7
+ data.tar.gz: b6ebbaed9561e1b8773329f1782dad87c1a8415bd2849593ec529734eb07930bd9df52e55a9881cc3706003f7479f367cd001ab40802c216aee56c7c30e7926a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 8.0.0 / unreleased
4
+
5
+ - Refactor `ResponseHeadersParser#results_for` to use `Enumerable#filter_map` (946ff3d)
6
+ - Update link-header-parser dependency constraint (4f093fb)
7
+ - **Breaking change:** Update development Ruby to 2.7.6 and minimum Ruby to 2.7 (593455d)
8
+
9
+ ## 7.2.0 / 2022-10-04
10
+
11
+ - Add support for `indieauth-metadata` endpoint (35cc950)
12
+ - Switch from pry-byebug to Ruby's debug gem (7ad8925)
13
+ - Update development Ruby version to 2.6.10 (f105752)
14
+
3
15
  ## 7.1.0 / 2022-03-08
4
16
 
5
17
  - Refactor gem code (eba8115)
data/CONTRIBUTING.md CHANGED
@@ -8,9 +8,9 @@ There are a couple ways you can help improve indieweb-endpoints-ruby:
8
8
 
9
9
  ## Getting Started
10
10
 
11
- indieweb-endpoints-ruby is developed using Ruby 2.6.9 and is additionally tested against Ruby 2.7, 3.0, and 3.1 using [GitHub Actions](https://github.com/indieweb/indieweb-endpoints-ruby/actions).
11
+ indieweb-endpoints-ruby is developed using Ruby 2.7.6 and is additionally tested against Ruby 3.0 and 3.1 using [GitHub Actions](https://github.com/indieweb/indieweb-endpoints-ruby/actions).
12
12
 
13
- Before making changes to indieweb-endpoints-ruby, you'll want to install Ruby 2.6.9. It's recommended that you use a Ruby version managment tool like [rbenv](https://github.com/rbenv/rbenv), [chruby](https://github.com/postmodern/chruby), or [rvm](https://github.com/rvm/rvm). Once you've installed Ruby 2.6.9 using your method of choice, install the project's gems by running:
13
+ Before making changes to indieweb-endpoints-ruby, you'll want to install Ruby 2.7.6. It's recommended that you use a Ruby version managment tool like [rbenv](https://github.com/rbenv/rbenv), [chruby](https://github.com/postmodern/chruby), or [rvm](https://github.com/rvm/rvm). Once you've installed Ruby 2.7.6 using your method of choice, install the project's gems by running:
14
14
 
15
15
  ```sh
16
16
  bundle install
@@ -22,7 +22,7 @@ bundle install
22
22
  1. Install development dependencies as outlined above.
23
23
  1. Create a feature branch for the code changes you're looking to make: `git checkout -b my-new-feature`.
24
24
  1. _Write some code!_
25
- 1. If your changes would benefit from testing, add the necessary tests and verify everything passes by running `bin/ci`.
25
+ 1. If your changes would benefit from testing, add the necessary tests and verify everything passes by running `bundle exec rspec`.
26
26
  1. Commit your changes: `git commit -am 'Add some new feature or fix some issue'`. _(See [this excellent article](https://chris.beams.io/posts/git-commit/) for tips on writing useful Git commit messages.)_
27
27
  1. Push the branch to your fork: `git push -u origin my-new-feature`.
28
28
  1. Create a new [pull request][pulls] and we'll review your changes.
data/README.md CHANGED
@@ -12,13 +12,13 @@
12
12
 
13
13
  - Compliant with [Section 4.1](https://www.w3.org/TR/indieauth/#discovery-by-clients) and [Section 4.2.2](https://www.w3.org/TR/indieauth/#redirect-url) of [the W3C's IndieAuth Working Group Note](https://www.w3.org/TR/indieauth/), [Section 5.3](https://www.w3.org/TR/micropub/#endpoint-discovery) of [the W3C's Micropub Recommendation](https://www.w3.org/TR/micropub/), and [Section 3.1.2](https://www.w3.org/TR/webmention/#sender-discovers-receiver-webmention-endpoint) of [the W3C's Webmention Recommendation](https://www.w3.org/TR/webmention/).
14
14
  - Passes all Endpoint Discovery tests on [webmention.rocks](https://webmention.rocks).
15
- - Supports Ruby 2.6 and newer.
15
+ - Supports Ruby 2.7 and newer.
16
16
 
17
17
  ## Getting Started
18
18
 
19
- Before installing and using indieweb-endpoints-ruby, you'll want to have [Ruby](https://www.ruby-lang.org) 2.6 (or newer) installed. It's recommended that you use a Ruby version managment tool like [rbenv](https://github.com/rbenv/rbenv), [chruby](https://github.com/postmodern/chruby), or [rvm](https://github.com/rvm/rvm).
19
+ Before installing and using indieweb-endpoints-ruby, you'll want to have [Ruby](https://www.ruby-lang.org) 2.7 (or newer) installed. It's recommended that you use a Ruby version managment tool like [rbenv](https://github.com/rbenv/rbenv), [chruby](https://github.com/postmodern/chruby), or [rvm](https://github.com/rvm/rvm).
20
20
 
21
- indieweb-endpoints-ruby is developed using Ruby 2.6.9 and is additionally tested against Ruby 2.7, 3.0, and 3.1 using [GitHub Actions](https://github.com/indieweb/indieweb-endpoints-ruby/actions).
21
+ indieweb-endpoints-ruby is developed using Ruby 2.7.6 and is additionally tested against Ruby 3.0 and 3.1 using [GitHub Actions](https://github.com/indieweb/indieweb-endpoints-ruby/actions).
22
22
 
23
23
  ## Installation
24
24
 
@@ -46,7 +46,7 @@ With indieweb-endpoints-ruby added to your project's `Gemfile` and installed, yo
46
46
  require 'indieweb/endpoints'
47
47
 
48
48
  IndieWeb::Endpoints.get('https://aaronparecki.com')
49
- #=> { authorization_endpoint: "https://aaronparecki.com/auth", micropub: "https://aaronparecki.com/micropub", microsub: "https://aperture.p3k.io/microsub/1", redirect_uri: nil, token_endpoint: "https://aaronparecki.com/auth/token", webmention: "https://webmention.io/aaronpk/webmention" }
49
+ #=> { authorization_endpoint: "https://aaronparecki.com/auth", "indieauth-metadata": "https://aaronparecki.com/.well-known/oauth-authorization-server", micropub: "https://aaronparecki.com/micropub", microsub: "https://aperture.p3k.io/microsub/1", redirect_uri: nil, token_endpoint: "https://aaronparecki.com/auth/token", webmention: "https://webmention.io/aaronpk/webmention" }
50
50
  ```
51
51
 
52
52
  This example will search `https://aaronparecki.com` for valid IndieAuth, Micropub, and Webmention endpoints and return a `Hash` of results. Each key in the returned `Hash` will have a value of either a `String` representing a URL or `nil`. The `redirect_uri` key's value will be either an `Array` or `nil` since a given URL may register multiple callback URLs.
@@ -80,7 +80,7 @@ From [httprb/http](https://github.com/httprb/http):
80
80
 
81
81
  - `IndieWeb::Endpoints::HttpError`
82
82
 
83
- From the Ruby Standard Library's [`OpenSSL::SSL::SSLError`](https://ruby-doc.org/stdlib-2.6.9/libdoc/openssl/rdoc/OpenSSL/SSL/SSLError.html):
83
+ From the Ruby Standard Library's [`OpenSSL::SSL::SSLError`](https://ruby-doc.org/stdlib-2.7.6/libdoc/openssl/rdoc/OpenSSL/SSL/SSLError.html):
84
84
 
85
85
  - `IndieWeb::Endpoints::SSLError`
86
86
 
@@ -3,7 +3,7 @@
3
3
  require_relative 'lib/indieweb/endpoints/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.required_ruby_version = '>= 2.6', '< 4'
6
+ spec.required_ruby_version = '>= 2.7', '< 4'
7
7
 
8
8
  spec.name = 'indieweb-endpoints'
9
9
  spec.version = IndieWeb::Endpoints::VERSION
@@ -28,6 +28,6 @@ Gem::Specification.new do |spec|
28
28
  }
29
29
 
30
30
  spec.add_runtime_dependency 'http', '~> 5.0'
31
- spec.add_runtime_dependency 'link-header-parser', '~> 4.0'
32
- spec.add_runtime_dependency 'nokogiri', '~> 1.13'
31
+ spec.add_runtime_dependency 'link-header-parser', '~> 5.0'
32
+ spec.add_runtime_dependency 'nokogiri', '>= 1.13'
33
33
  end
@@ -8,8 +8,11 @@ module IndieWeb
8
8
  user_agent: 'IndieWeb Endpoint Discovery (https://rubygems.org/gems/indieweb-endpoints)'
9
9
  }.freeze
10
10
 
11
- # Create a new client with a URL to parse for IndieWeb endpoints
11
+ private_constant :HTTP_HEADERS_OPTS
12
+
13
+ # Create a new client with a URL to parse for IndieWeb endpoints.
12
14
  #
15
+ # @example
13
16
  # client = IndieWeb::Endpoints::Client.new('https://aaronparecki.com')
14
17
  #
15
18
  # @param url [String, HTTP::URI, #to_s] an absolute URL
@@ -25,17 +28,17 @@ module IndieWeb
25
28
  %(#<#{self.class.name}:#{format('%#0x', object_id)} uri: "#{uri}">)
26
29
  end
27
30
 
28
- # A Hash of the discovered IndieWeb endpoints from the provided URL
31
+ # A Hash of the discovered IndieWeb endpoints from the provided URL.
29
32
  #
30
33
  # @return [Hash{Symbol => String, Array, nil}]
31
34
  def endpoints
32
35
  @endpoints ||= Parser.new(response).results
33
36
  end
34
37
 
35
- # The HTTP::Response object returned by the provided URL
38
+ # The +HTTP::Response+ object returned by the provided URL.
36
39
  #
37
40
  # @return [HTTP::Response]
38
- # @raise [IndieWeb::Endpoints::HttpError]
41
+ # @raise [IndieWeb::Endpoints::HttpError, IndieWeb::Endpoints::SSLError]
39
42
  def response
40
43
  @response ||= HTTP.follow(max_hops: 20)
41
44
  .headers(HTTP_HEADERS_OPTS)
@@ -13,6 +13,7 @@ module IndieWeb
13
13
  def results
14
14
  {
15
15
  authorization_endpoint: result_for(:authorization_endpoint),
16
+ 'indieauth-metadata': result_for(:'indieauth-metadata'),
16
17
  micropub: result_for(:micropub),
17
18
  microsub: result_for(:microsub),
18
19
  redirect_uri: results_for(:redirect_uri),
@@ -10,13 +10,13 @@ module IndieWeb
10
10
  @uri = response.uri
11
11
  end
12
12
 
13
- # @param headers [Symbol]
13
+ # @param identifier [Symbol]
14
14
  # @return [Array<String>, nil]
15
15
  def results_for(identifier)
16
- return unless parsed_headers.key?(identifier)
17
-
18
16
  # Reject endpoints that contain a fragment identifier
19
- parsed_headers[identifier].reject { |header| HTTP::URI.parse(header.target_uri).fragment }.map(&:target_uri)
17
+ parsed_headers[identifier]&.filter_map do |header|
18
+ header.target_uri unless HTTP::URI.parse(header.target_uri).fragment
19
+ end
20
20
  end
21
21
 
22
22
  private
@@ -2,6 +2,6 @@
2
2
 
3
3
  module IndieWeb
4
4
  module Endpoints
5
- VERSION = '7.1.0'
5
+ VERSION = '8.0.0'
6
6
  end
7
7
  end
@@ -18,12 +18,15 @@ module IndieWeb
18
18
  class InvalidURIError < Error; end
19
19
  class SSLError < Error; end
20
20
 
21
- # Discover a URL's IndieAuth, Micropub, Microsub, and Webmention endpoints
21
+ # Discover a URL's IndieAuth, Micropub, Microsub, and Webmention endpoints.
22
22
  #
23
+ # Convenience method for {IndieWeb::Endpoints::Client#endpoints}.
24
+ #
25
+ # @example
23
26
  # IndieWeb::Endpoints.get('https://aaronparecki.com')
24
27
  #
25
- # @param url [String] an absolute URL
26
- # @return [Hash{Symbol => String, Array, nil}]
28
+ # @param (see IndieWeb::Endpoints::Client#endpoints)
29
+ # @return (see IndieWeb::Endpoints::Client#endpoints)
27
30
  def self.get(url)
28
31
  Client.new(url).endpoints
29
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indieweb-endpoints
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Garber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-09 00:00:00.000000000 Z
11
+ date: 2022-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -30,26 +30,26 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.0'
33
+ version: '5.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.0'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: nokogiri
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.13'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.13'
55
55
  description: Discover a URL’s IndieAuth, Micropub, Microsub, and Webmention endpoints.
@@ -76,7 +76,7 @@ licenses:
76
76
  - MIT
77
77
  metadata:
78
78
  bug_tracker_uri: https://github.com/indieweb/indieweb-endpoints-ruby/issues
79
- changelog_uri: https://github.com/indieweb/indieweb-endpoints-ruby/blob/v7.1.0/CHANGELOG.md
79
+ changelog_uri: https://github.com/indieweb/indieweb-endpoints-ruby/blob/v8.0.0/CHANGELOG.md
80
80
  rubygems_mfa_required: 'true'
81
81
  post_install_message:
82
82
  rdoc_options: []
@@ -86,7 +86,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '2.6'
89
+ version: '2.7'
90
90
  - - "<"
91
91
  - !ruby/object:Gem::Version
92
92
  version: '4'
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  requirements: []
99
- rubygems_version: 3.2.33
99
+ rubygems_version: 3.3.16
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: Discover a URL’s IndieAuth, Micropub, Microsub, and Webmention endpoints.