link-header-parser 5.0.0 → 5.0.1

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: a3bede096a22050eb158b8c5e55a8467cf2a0abb91a7058962ab99b1aebe9162
4
- data.tar.gz: 02a647ff14be96c4dfc11f571694d90ef2e75fe2b3930ceb09c0ecb0ab55d92a
3
+ metadata.gz: c9b629542a562a00905799bef5712836047d11c01164ebd1fa51f9d710741edb
4
+ data.tar.gz: 470f3e29a6da3ac405fbf16dddc99a394734d5743717ea53633e8845387dc7ba
5
5
  SHA512:
6
- metadata.gz: af0da321a1652d3f6740fb4396a95d66213334b04eec1bd794652de894f2c7b6d9effd52701722ca851fbb01bcc38601e4c80b20290cede4b4856f36e6436520
7
- data.tar.gz: ea527e8a58c23acafc460a73224d72204d9b82074dfa53275518eea5fd1aad940489d4efc5b770700a7aaf120160e8f589c36f56d9965ffba47d23174a09c73a
6
+ metadata.gz: 779b4826009b1bd94856a17a2789c9cf54f440429543fde806d94ad47ba92c4fec80d981e5d8e60538f94f95ffa5a8e756bd4caff4a46ea6b5b1216ebd1edbfe
7
+ data.tar.gz: 489bec068d9c42302bc233339aa37d602ce189ad09e27d8fb2593eeb1cba0e84f4c1b0de8ecbac12b3902bbdc577640c38f5af437b04559c33a5fb930e886c3f
data/CHANGELOG.md CHANGED
@@ -1,9 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.0.1 / 2023-12-08
4
+
5
+ - Refactor test suite (7a9a446)
6
+ - Miscellaneous RuboCop updates (512efa5, cc36a1e, 025d150, 36f9cc1)
7
+ - Update RuboCop configuration (376cf8e)
8
+ - Update development Ruby to 2.7.8 (5ca0757)
9
+ - Remove Bundler ecosystem config from Dependabot (8bcacdf)
10
+ - Update RSpec configuration (afef67d, 83583a1)
11
+ - Remove `code-scanning-rubocop` and `rspec-github` gems (154fd95)
12
+
3
13
  ## 5.0.0 / 2022-11-09
4
14
 
5
15
  - **Breaking change:** Add `#to_ary`/`#to_a` method to `LinkHeadersCollection` (6a478ed)
6
- - Note: marking this as a breaking change since it changes the existing behavior to return an `Array` of `Hash`es instead of an `Array` of `LinkHeader`s
16
+ - Note: marking this as a breaking change since it changes the existing behavior to return an `Array` of `Hash`es instead of an `Array` of `LinkHeader`s
7
17
  - **Breaking change:** Update project Ruby version to 2.7.6 and minimum Ruby version to 2.7 (1e9df45)
8
18
  - Improve documentation and privatize constants (8a68aa0)
9
19
  - Remove Reek development dependency (423bc7a)
@@ -35,9 +45,9 @@
35
45
  ## 2.0.0 / 2020-05-21
36
46
 
37
47
  - **Breaking changes:** Rewrite gem code (5351010)
38
- - `LinkHeaderParser.parse` returns `LinkHeadersCollection`
39
- - New classes: `LinkHeadersCollection`, `LinkHeader`, and `LinkHeaderParameter`
40
- - Renamed collection's `by_relation_type` method to `group_by_relation_type`
48
+ - `LinkHeaderParser.parse` returns `LinkHeadersCollection`
49
+ - New classes: `LinkHeadersCollection`, `LinkHeader`, and `LinkHeaderParameter`
50
+ - Renamed collection's `by_relation_type` method to `group_by_relation_type`
41
51
  - **Breaking change:** Update project Ruby version to 2.5.8 and minimum Ruby version to 2.5 (05b2e82)
42
52
  - Update inline documentation and refactor `ParsedHeader` and `ParsedHeaderCollection` classes (31ec43e)
43
53
 
data/README.md CHANGED
@@ -4,30 +4,22 @@
4
4
 
5
5
  [![Gem](https://img.shields.io/gem/v/link-header-parser.svg?logo=rubygems&style=for-the-badge)](https://rubygems.org/gems/link-header-parser)
6
6
  [![Downloads](https://img.shields.io/gem/dt/link-header-parser.svg?logo=rubygems&style=for-the-badge)](https://rubygems.org/gems/link-header-parser)
7
- [![Build](https://img.shields.io/github/workflow/status/jgarber623/link-header-parser-ruby/CI?logo=github&style=for-the-badge)](https://github.com/jgarber623/link-header-parser-ruby/actions/workflows/ci.yml)
8
- [![Maintainability](https://img.shields.io/codeclimate/maintainability/jgarber623/link-header-parser-ruby.svg?logo=code-climate&style=for-the-badge)](https://codeclimate.com/github/jgarber623/link-header-parser-ruby)
9
- [![Coverage](https://img.shields.io/codeclimate/c/jgarber623/link-header-parser-ruby.svg?logo=code-climate&style=for-the-badge)](https://codeclimate.com/github/jgarber623/link-header-parser-ruby/code)
7
+ [![Build](https://img.shields.io/github/actions/workflow/status/jgarber623/link-header-parser-ruby/ci.yml?branch=main&logo=github&style=for-the-badge)](https://github.com/jgarber623/link-header-parser-ruby/actions/workflows/ci.yml)
10
8
 
11
9
  ## Getting Started
12
10
 
13
- Before installing and using link-header-parser-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).
11
+ Before installing and using link-header-parser-ruby, you'll want to have [Ruby](https://www.ruby-lang.org) 2.7 (or newer) installed. Using 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) is recommended.
14
12
 
15
- link-header-parser-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/jgarber623/link-header-parser-ruby/actions).
13
+ link-header-parser-ruby is developed using Ruby 2.7.8 and is tested against additional Ruby versions using [GitHub Actions](https://github.com/jgarber623/link-header-parser-ruby/actions).
16
14
 
17
15
  ## Installation
18
16
 
19
- If you're using [Bundler](https://bundler.io), add link-header-parser-ruby to your project's `Gemfile`:
17
+ Add link-header-parser-ruby to your project's `Gemfile` and run `bundle install`:
20
18
 
21
19
  ```ruby
22
- source 'https://rubygems.org'
20
+ source "https://rubygems.org"
23
21
 
24
- gem 'link-header-parser'
25
- ```
26
-
27
- …and hop over to your command prompt and run…
28
-
29
- ```sh
30
- $ bundle install
22
+ gem "link-header-parser"
31
23
  ```
32
24
 
33
25
  ## Usage
@@ -35,11 +27,11 @@ $ bundle install
35
27
  With link-header-parser-ruby added to your project's `Gemfile` and installed, you may parse a URL's HTTP Link headers by doing:
36
28
 
37
29
  ```ruby
38
- require 'net/http'
39
- require 'link-header-parser'
30
+ require "net/http"
31
+ require "link-header-parser"
40
32
 
41
- url = 'https://sixtwothree.org'
42
- link_headers = Net::HTTP.get_response(URI.parse(url)).get_fields('Link')
33
+ url = "https://sixtwothree.org"
34
+ link_headers = Net::HTTP.get_response(URI.parse(url)).get_fields("Link")
43
35
 
44
36
  collection = LinkHeaderParser.parse(link_headers, base: url)
45
37
  ```
@@ -93,7 +85,7 @@ You may interact with one or more `LinkHeader`s in a `LinkHeadersCollection` usi
93
85
  #### Link Target ([§ 3.1](https://tools.ietf.org/html/rfc8288#section-3.1))
94
86
 
95
87
  ```ruby
96
- link_header = LinkHeaderParser.parse('</index.html>; rel="home"', base: 'https://example.com/').first
88
+ link_header = LinkHeaderParser.parse(%(</index.html>; rel="home"), base: "https://example.com/").first
97
89
 
98
90
  link_header.target_string
99
91
  #=> "/index.html"
@@ -107,7 +99,7 @@ The `target_string` method returns a string of the value between the opening and
107
99
  #### Link Context ([§ 3.2](https://tools.ietf.org/html/rfc8288#section-3.2))
108
100
 
109
101
  ```ruby
110
- link_header = LinkHeaderParser.parse('</chapters/1>; anchor="#copyright"; rel="license"', base: 'https://example.com/').first
102
+ link_header = LinkHeaderParser.parse(%(</chapters/1>; anchor="#copyright"; rel="license"), base: "https://example.com/").first
111
103
 
112
104
  link_header.context_string
113
105
  #=> "#copyright"
@@ -121,7 +113,7 @@ The `anchor` parameter's value may be a fragment identifier (e.g. `#foo`), a rel
121
113
  #### Relation Type ([§ 3.3](https://tools.ietf.org/html/rfc8288#section-3.3))
122
114
 
123
115
  ```ruby
124
- link_header = LinkHeaderParser.parse('</chapters/1>; rel="prev start"', base: 'https://example.com/').first
116
+ link_header = LinkHeaderParser.parse(%(</chapters/1>; rel="prev start"), base: "https://example.com/").first
125
117
 
126
118
  link_header.relations_string
127
119
  #=> "prev start"
@@ -133,7 +125,7 @@ link_header.relation_types
133
125
  #### Link Parameters ([Appendix B.3](https://tools.ietf.org/html/rfc8288#appendix-B.3))
134
126
 
135
127
  ```ruby
136
- link_header = LinkHeaderParser.parse('</posts.rss>; rel="alternate"; hreflang="en-US"; title="sixtwothree.org: Posts"; type="application/rss+xml"', base: 'https://sixtwothree.org').first
128
+ link_header = LinkHeaderParser.parse(%(</posts.rss>; rel="alternate"; hreflang="en-US"; title="sixtwothree.org: Posts"; type="application/rss+xml"), base: "https://sixtwothree.org").first
137
129
 
138
130
  link_header.link_parameters
139
131
  #=> [#<LinkHeaderParser::LinkHeaderParameter name: "rel", value: "alternate">, #<LinkHeaderParser::LinkHeaderParameter name: "hreflang", value: "en-US">, #<LinkHeaderParser::LinkHeaderParameter name: "title", value: "sixtwothree.org: Posts">, #<LinkHeaderParser::LinkHeaderParameter name: "type", value: "application/rss+xml">]
@@ -141,10 +133,6 @@ link_header.link_parameters
141
133
 
142
134
  Note that the `Array` returned by the `link_parameters` method may include multiple `LinkHeaderParameter`s with the same name depending on the provided Link header. Certain methods on `LinkHeader` will return values from the first occurrence of a parameter name (e.g. `link_header.relations_string`) in accordance with [RFC-8288](https://tools.ietf.org/html/rfc8288).
143
135
 
144
- ## Contributing
145
-
146
- Interested in helping improve link-header-parser-ruby? Awesome! Your help is greatly appreciated. See [CONTRIBUTING.md](https://github.com/jgarber623/link-header-parser-ruby/blob/main/CONTRIBUTING.md) for details.
147
-
148
136
  ## Acknowledgments
149
137
 
150
138
  link-header-parser-ruby is written and maintained by [Jason Garber](https://sixtwothree.org).
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'forwardable'
3
+ require "forwardable"
4
4
 
5
- require_relative 'link_header_parser/version'
5
+ require_relative "link_header_parser/version"
6
6
 
7
- require_relative 'link_header_parser/link_header'
8
- require_relative 'link_header_parser/link_header_parameter'
9
- require_relative 'link_header_parser/link_headers_collection'
7
+ require_relative "link_header_parser/link_header"
8
+ require_relative "link_header_parser/link_header_parameter"
9
+ require_relative "link_header_parser/link_headers_collection"
10
10
 
11
11
  module LinkHeaderParser
12
12
  # Parse an array of HTTP Link headers.
@@ -14,10 +14,10 @@ module LinkHeaderParser
14
14
  # Convenience method for {LinkHeaderParser::LinkHeadersCollection#initialize}.
15
15
  #
16
16
  # @example
17
- # require 'net/http'
17
+ # require "net/http"
18
18
  #
19
- # url = 'https://sixtwothree.org'
20
- # link_headers = Net::HTTP.get_response(URI.parse(url)).get_fields('Link')
19
+ # url = "https://sixtwothree.org"
20
+ # link_headers = Net::HTTP.get_response(URI.parse(url)).get_fields("Link")
21
21
  #
22
22
  # LinkHeaderParser.parse(link_headers, base: url)
23
23
  #
@@ -5,7 +5,7 @@ module LinkHeaderParser
5
5
  FIELD_VALUE_REGEXP_PATTERN = /^\s*<\s*(?<target_string>[^>]+)\s*>\s*(?<parameters>;\s*.*)$/.freeze
6
6
  private_constant :FIELD_VALUE_REGEXP_PATTERN
7
7
 
8
- PARAMETERS_REGEXP_PATTERN = /(?<!;)\s*([^;]+)/.freeze
8
+ PARAMETERS_REGEXP_PATTERN = /(?<!;)\s*[^;]+/.freeze
9
9
  private_constant :PARAMETERS_REGEXP_PATTERN
10
10
 
11
11
  # The +String+ value used to create this {LinkHeader}.
@@ -60,9 +60,9 @@ module LinkHeaderParser
60
60
  #
61
61
  # @return [Array<LinkHeaderParser::LinkHeaderParameter>]
62
62
  def link_parameters
63
- @link_parameters ||= field_value_match_data[:parameters].scan(PARAMETERS_REGEXP_PATTERN)
64
- .flatten
65
- .map { |parameter| LinkHeaderParameter.new(parameter) }
63
+ @link_parameters ||= field_value_match_data[:parameters]
64
+ .scan(PARAMETERS_REGEXP_PATTERN)
65
+ .map { |parameter| LinkHeaderParameter.new(parameter.strip) }
66
66
  end
67
67
 
68
68
  # The +relations_string+ value returned as an +Array+.
@@ -133,10 +133,11 @@ module LinkHeaderParser
133
133
  end
134
134
 
135
135
  def grouped_link_parameters
136
- @grouped_link_parameters ||= link_parameters.map(&:to_a)
137
- .group_by(&:shift)
138
- .transform_keys(&:to_sym)
139
- .transform_values(&:flatten)
136
+ @grouped_link_parameters ||= link_parameters
137
+ .map(&:to_a)
138
+ .group_by(&:shift)
139
+ .transform_keys(&:to_sym)
140
+ .transform_values(&:flatten)
140
141
  end
141
142
  end
142
143
  end
@@ -19,7 +19,9 @@ module LinkHeaderParser
19
19
  # @param headers [Array<String, #to_str>]
20
20
  # @param base [String, #to_str]
21
21
  def initialize(*headers, base:)
22
+ # rubocop:disable Performance/ChainArrayAllocation
22
23
  @headers = headers.to_ary.flatten.map(&:to_str)
24
+ # rubocop:enable Performance/ChainArrayAllocation
23
25
  @base = base.to_str
24
26
 
25
27
  push(*distinct_link_headers)
@@ -47,7 +49,7 @@ module LinkHeaderParser
47
49
  #
48
50
  # @return [Array<String>]
49
51
  def relation_types
50
- @relation_types ||= flat_map(&:relation_types).uniq.sort
52
+ @relation_types ||= Set.new(flat_map(&:relation_types)).to_a.sort
51
53
  end
52
54
 
53
55
  # Return an +Array+ representation of this {LinkHeadersCollection}.
@@ -66,8 +68,9 @@ module LinkHeaderParser
66
68
  attr_reader :base
67
69
 
68
70
  def distinct_link_headers
69
- headers.flat_map { |header| header.split(/,(?=[\s|<])/) }
70
- .map { |header| LinkHeader.new(header.strip, base: base) }
71
+ headers
72
+ .flat_map { |header| header.split(/,(?=[\s|<])/) }
73
+ .map { |header| LinkHeader.new(header.strip, base: base) }
71
74
  end
72
75
 
73
76
  def members
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LinkHeaderParser
4
- VERSION = '5.0.0'
4
+ VERSION = "5.0.1"
5
5
  end
@@ -1,29 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'lib/link_header_parser/version'
3
+ require_relative "lib/link_header_parser/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.required_ruby_version = '>= 2.7', '< 4'
6
+ spec.required_ruby_version = ">= 2.7", "< 4"
7
7
 
8
- spec.name = 'link-header-parser'
8
+ spec.name = "link-header-parser"
9
9
  spec.version = LinkHeaderParser::VERSION
10
- spec.authors = ['Jason Garber']
11
- spec.email = ['jason@sixtwothree.org']
10
+ spec.authors = ["Jason Garber"]
11
+ spec.email = ["jason@sixtwothree.org"]
12
12
 
13
- spec.summary = 'Parse HTTP Link headers.'
13
+ spec.summary = "Parse HTTP Link headers."
14
14
  spec.description = spec.summary
15
- spec.homepage = 'https://github.com/jgarber623/link-header-parser-ruby'
16
- spec.license = 'MIT'
15
+ spec.homepage = "https://github.com/jgarber623/link-header-parser-ruby"
16
+ spec.license = "MIT"
17
17
 
18
- spec.files = Dir['lib/**/*'].reject { |f| File.directory?(f) }
19
- spec.files += %w[LICENSE CHANGELOG.md CONTRIBUTING.md README.md]
18
+ spec.files = Dir["lib/**/*"].reject { |f| File.directory?(f) }
19
+ spec.files += %w[LICENSE CHANGELOG.md README.md]
20
20
  spec.files += %w[link-header-parser.gemspec]
21
21
 
22
- spec.require_paths = ['lib']
22
+ spec.require_paths = ["lib"]
23
23
 
24
24
  spec.metadata = {
25
- 'bug_tracker_uri' => "#{spec.homepage}/issues",
26
- 'changelog_uri' => "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md",
27
- 'rubygems_mfa_required' => 'true'
25
+ "bug_tracker_uri" => "#{spec.homepage}/issues",
26
+ "changelog_uri" => "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md",
27
+ "rubygems_mfa_required" => "true"
28
28
  }
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link-header-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.0.1
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-11-09 00:00:00.000000000 Z
11
+ date: 2023-12-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Parse HTTP Link headers.
14
14
  email:
@@ -18,7 +18,6 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - CHANGELOG.md
21
- - CONTRIBUTING.md
22
21
  - LICENSE
23
22
  - README.md
24
23
  - lib/link-header-parser.rb
@@ -32,7 +31,7 @@ licenses:
32
31
  - MIT
33
32
  metadata:
34
33
  bug_tracker_uri: https://github.com/jgarber623/link-header-parser-ruby/issues
35
- changelog_uri: https://github.com/jgarber623/link-header-parser-ruby/blob/v5.0.0/CHANGELOG.md
34
+ changelog_uri: https://github.com/jgarber623/link-header-parser-ruby/blob/v5.0.1/CHANGELOG.md
36
35
  rubygems_mfa_required: 'true'
37
36
  post_install_message:
38
37
  rdoc_options: []
@@ -52,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
51
  - !ruby/object:Gem::Version
53
52
  version: '0'
54
53
  requirements: []
55
- rubygems_version: 3.3.16
54
+ rubygems_version: 3.1.6
56
55
  signing_key:
57
56
  specification_version: 4
58
57
  summary: Parse HTTP Link headers.
data/CONTRIBUTING.md DELETED
@@ -1,37 +0,0 @@
1
- # Contributing to link-header-parser-ruby
2
-
3
- There are a couple ways you can help improve link-header-parser-ruby:
4
-
5
- 1. Fix an existing [issue][issues] and submit a [pull request][pulls].
6
- 1. Review open [pull requests][pulls].
7
- 1. Report a new [issue][issues]. _Only do this after you've made sure the behavior or problem you're observing isn't already documented in an open issue._
8
-
9
- ## Getting Started
10
-
11
- link-header-parser-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/jgarber623/link-header-parser-ruby/actions).
12
-
13
- Before making changes to link-header-parser-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
-
15
- ```sh
16
- bundle install
17
- ```
18
-
19
- ## Making Changes
20
-
21
- 1. Fork and clone the project's repo.
22
- 1. Install development dependencies as outlined above.
23
- 1. Create a feature branch for the code changes you're looking to make: `git checkout -b my-new-feature`.
24
- 1. _Write some code!_
25
- 1. If your changes would benefit from testing, add the necessary tests and verify everything passes by running `bundle exec rspec`.
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
- 1. Push the branch to your fork: `git push -u origin my-new-feature`.
28
- 1. Create a new [pull request][pulls] and we'll review your changes.
29
-
30
- ## Code Style
31
-
32
- Code formatting conventions are defined in the `.editorconfig` file which uses the [EditorConfig](http://editorconfig.org) syntax. There are [plugins for a variety of editors](http://editorconfig.org/#download) that utilize the settings in the `.editorconfig` file. We recommended you install the EditorConfig plugin for your editor of choice.
33
-
34
- Your bug fix or feature addition won't be rejected if it runs afoul of any (or all) of these guidelines, but following the guidelines will definitely make everyone's lives a little easier.
35
-
36
- [issues]: https://github.com/jgarber623/link-header-parser-ruby/issues
37
- [pulls]: https://github.com/jgarber623/link-header-parser-ruby/pulls