link-header-parser 2.2.0 → 3.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: edd4ff4c4ffec2f5a5610c32c6814cd82fc1b6f33308648bac07e3444f5f007b
4
- data.tar.gz: 2f533a163609ef49b0e8f44d3ddfe85c2450aedffd6da2ae971cee4b54a22d18
3
+ metadata.gz: 6b2127eef719541b0ed02c6cb37c7271ed1c1bac8358f5808fb50c08d5ccada3
4
+ data.tar.gz: 999fdc8ea6ad395fe72e88094ed4e924063844600b25df4df5822b2e85b6c2aa
5
5
  SHA512:
6
- metadata.gz: 6bca6797af5591f2114b141a11aa7f1d1c80c61279fc79dedce4fcba6fa557777c3c2ae635e87012b4a3ce13e43d4ba42c506b274f8ddf6b6631b18e1c71b19d
7
- data.tar.gz: db2871789cb01fdcd8b8e8e848320d0ff4c8444381f39a02fdbc24071caf2dce3fed31dc0106c53649c21f57a725348a5c4e1943e759c7be5d21e918a819f4da
6
+ metadata.gz: 90a5edd9b4ea7802818d84d858a365f365c6aee0cdcb9ec453feb5620ef7c6b2957da0063a8eaa2847318b69be5e668874a1bf4dc5b01cb36ff75cfd6190a33d
7
+ data.tar.gz: 676c81a374430b522d62d2cc569e149e4c18d5eead47db851cadc1fe509ff787d02b3ecdb823a1e70f8244a6f4d3fb8b122a18ca2dd4ea697eff6faa8c9e22a5
data/CHANGELOG.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # Changelog
2
2
 
3
- ## 2.2.0 / 20201-04-02
3
+ ## 3.0.0 / 2021-05-22
4
+
5
+ - Add implicit type conversion methods, alias explicit methods, and update specs (d132535)
6
+ - Remove exceptions module (249d77c)
7
+ - Use implicit conversions instead of type checking in methods (628c01b)
8
+ - Replace Absolutely dependency with Addressable (beb5188)
9
+ - Update project Ruby version to 2.5.9 (4a3941f)
10
+
11
+ ## 2.2.0 / 2021-04-02
4
12
 
5
13
  - Expand supported Ruby versions to include 3.0 (7187878)
6
14
 
data/CONTRIBUTING.md CHANGED
@@ -8,9 +8,9 @@ There are a couple ways you can help improve link-header-parser-ruby:
8
8
 
9
9
  ## Getting Started
10
10
 
11
- link-header-parser-ruby is developed using Ruby 2.5.8 and is additionally tested against Ruby 2.6, 2.7, and 3.0 using [CircleCI](https://app.circleci.com/pipelines/github/jgarber623/link-header-parser-ruby).
11
+ link-header-parser-ruby is developed using Ruby 2.5.9 and is additionally tested against Ruby 2.6, 2.7, and 3.0 using [CircleCI](https://app.circleci.com/pipelines/github/jgarber623/link-header-parser-ruby).
12
12
 
13
- Before making changes to link-header-parser-ruby, you'll want to install Ruby 2.5.8. 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.5.8 using your method of choice, install the project's gems by running:
13
+ Before making changes to link-header-parser-ruby, you'll want to install Ruby 2.5.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.5.9 using your method of choice, install the project's gems by running:
14
14
 
15
15
  ```sh
16
16
  bundle install
data/README.md CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  Before installing and using link-header-parser-ruby, you'll want to have [Ruby](https://www.ruby-lang.org) 2.5 (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).
14
14
 
15
- link-header-parser-ruby is developed using Ruby 2.5.8 and is additionally tested against Ruby 2.6, 2.7, and 3.0 using [CircleCI](https://app.circleci.com/pipelines/github/jgarber623/link-header-parser-ruby).
15
+ link-header-parser-ruby is developed using Ruby 2.5.9 and is additionally tested against Ruby 2.6, 2.7, and 3.0 using [CircleCI](https://app.circleci.com/pipelines/github/jgarber623/link-header-parser-ruby).
16
16
 
17
17
  ## Installation
18
18
 
@@ -42,13 +42,13 @@ response = HTTP.get('https://sixtwothree.org')
42
42
 
43
43
  link_headers = response.headers.get('link')
44
44
 
45
- collection = LinkHeaderParser.parse(link_headers, base: response.uri.to_s)
45
+ collection = LinkHeaderParser.parse(link_headers, base: response.uri)
46
46
  ```
47
47
 
48
48
  The `parse` method accepts two arguments:
49
49
 
50
50
  1. an `Array` of strings representing HTTP Link headers (e.g. `['</>; rel="home"', '</chapters/1>; anchor="#copyright"; rel="license"']`)
51
- 1. a `String` representing the absolute URL of the resource providing the HTTP Link headers
51
+ 1. a `String` (or any `String`-like object) representing the absolute URL of the resource providing the HTTP Link headers
52
52
 
53
53
  In the example above, `collection` is an instance of `LinkHeadersCollection` which includes Ruby's [`Enumerable`](https://ruby-doc.org/core/Enumerable.html) mixin. This mixin allows for use of common methods like `each`, `first`/`last`, and `map`.
54
54
 
@@ -137,7 +137,7 @@ link_header.relation_types
137
137
  link_header = LinkHeaderParser.parse('</posts.rss>; rel="alternate"; hreflang="en-US"; title="sixtwothree.org: Posts"; type="application/rss+xml"', base: 'https://sixtwothree.org').first
138
138
 
139
139
  link_header.link_parameters
140
- #=> [#<LinkHeaderParser::LinkHeaderParameter:0x3fdea54716ac name: "rel", value: "alternate">, #<LinkHeaderParser::LinkHeaderParameter:0x3fdea5471684 name: "hreflang", value: "en-US">, #<LinkHeaderParser::LinkHeaderParameter:0x3fdea5471670 name: "title", value: "sixtwothree.org: Posts">, #<LinkHeaderParser::LinkHeaderParameter:0x3fdea547165c name: "type", value: "application/rss+xml">]
140
+ #=> [#<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
141
  ```
142
142
 
143
143
  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).
@@ -1,9 +1,8 @@
1
1
  require 'forwardable'
2
2
 
3
- require 'absolutely'
3
+ require 'addressable/uri'
4
4
 
5
5
  require 'link_header_parser/version'
6
- require 'link_header_parser/exceptions'
7
6
 
8
7
  require 'link_header_parser/link_header'
9
8
  require 'link_header_parser/link_header_parameter'
@@ -11,11 +11,8 @@ module LinkHeaderParser
11
11
  # @param field_value [String]
12
12
  # @param base [String]
13
13
  def initialize(field_value, base:)
14
- raise ArgumentError, "field_value must be a String (given #{field_value.class})" unless field_value.is_a?(String)
15
- raise ArgumentError, "base must be a String (given #{base.class})" unless base.is_a?(String)
16
-
17
- @field_value = field_value
18
- @base = base
14
+ @field_value = field_value.to_str
15
+ @base = base.to_str
19
16
  end
20
17
 
21
18
  # The context URL for this Link header extracted from field_value (or target URL if no context URL is present)
@@ -31,7 +28,7 @@ module LinkHeaderParser
31
28
  #
32
29
  # @return [String]
33
30
  def context_uri
34
- @context_uri ||= Absolutely.to_abs(base: target_uri, relative: context_string)
31
+ @context_uri ||= Addressable::URI.join(target_uri, context_string).normalize.to_s
35
32
  end
36
33
 
37
34
  def inspect
@@ -59,7 +56,7 @@ module LinkHeaderParser
59
56
  #
60
57
  # @return [String]
61
58
  def relations_string
62
- @relations_string ||= grouped_link_parameters[:rel]&.first || ''
59
+ @relations_string ||= grouped_link_parameters[:rel]&.first.to_s
63
60
  end
64
61
 
65
62
  # The target URL for this Link header extracted from field_value
@@ -75,11 +72,11 @@ module LinkHeaderParser
75
72
  #
76
73
  # @return [String]
77
74
  def target_uri
78
- @target_uri ||= Absolutely.to_abs(base: base, relative: target_string)
75
+ @target_uri ||= Addressable::URI.join(base, target_string).normalize.to_s
79
76
  end
80
77
 
81
78
  # @return [Hash{Symbol => String, Array, Hash{Symbol => Array}}]
82
- def to_h
79
+ def to_hash
83
80
  {
84
81
  target_string: target_string,
85
82
  target_uri: target_uri,
@@ -91,6 +88,8 @@ module LinkHeaderParser
91
88
  }
92
89
  end
93
90
 
91
+ alias to_h to_hash
92
+
94
93
  private
95
94
 
96
95
  attr_reader :base
@@ -6,7 +6,7 @@ module LinkHeaderParser
6
6
 
7
7
  # @param parameter [String]
8
8
  def initialize(parameter)
9
- @parameter = parameter
9
+ @parameter = parameter.to_str
10
10
  end
11
11
 
12
12
  def inspect
@@ -22,16 +22,18 @@ module LinkHeaderParser
22
22
 
23
23
  # @see https://tools.ietf.org/html/rfc8288#appendix-B.3 (Appendix B.3.2.8)
24
24
  #
25
- # @return [String, nil]
25
+ # @return [String]
26
26
  def value
27
- @value ||= parameter_match_data[:value] || ''
27
+ @value ||= parameter_match_data[:value].to_s
28
28
  end
29
29
 
30
30
  # @return [Array<String>]
31
- def to_a
31
+ def to_ary
32
32
  [name, value]
33
33
  end
34
34
 
35
+ alias to_a to_ary
36
+
35
37
  private
36
38
 
37
39
  def parameter_match_data
@@ -11,10 +11,10 @@ module LinkHeaderParser
11
11
  # @param headers [Array<String>]
12
12
  # @param base [String]
13
13
  def initialize(*headers, base:)
14
- @headers = headers.flatten
15
- @base = base
14
+ @headers = headers.to_ary.flatten.map(&:to_str)
15
+ @base = base.to_str
16
16
 
17
- discrete_headers.each { |header| push(LinkHeader.new(header, base: base)) }
17
+ distinct_headers.each { |header| push(LinkHeader.new(header, base: base)) }
18
18
  end
19
19
 
20
20
  # @return [Hash{Symbol => Array<LinkHeaderParser::LinkHeader>}]
@@ -37,8 +37,8 @@ module LinkHeaderParser
37
37
 
38
38
  attr_reader :base
39
39
 
40
- def discrete_headers
41
- @discrete_headers ||= headers.flat_map { |header| header.split(/,(?=[\s|<])/) }.map(&:strip)
40
+ def distinct_headers
41
+ @distinct_headers ||= headers.flat_map { |header| header.split(/,(?=[\s|<])/) }.map(&:strip)
42
42
  end
43
43
 
44
44
  def members
@@ -1,3 +1,3 @@
1
1
  module LinkHeaderParser
2
- VERSION = '2.2.0'.freeze
2
+ VERSION = '3.0.0'.freeze
3
3
  end
@@ -22,5 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.metadata['bug_tracker_uri'] = "#{spec.homepage}/issues"
23
23
  spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/v#{spec.version}/CHANGELOG.md"
24
24
 
25
- spec.add_runtime_dependency 'absolutely', '~> 5.1'
25
+ spec.add_runtime_dependency 'addressable', '~> 2.7'
26
26
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: link-header-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.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: 2021-04-02 00:00:00.000000000 Z
11
+ date: 2021-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: absolutely
14
+ name: addressable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.1'
19
+ version: '2.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5.1'
26
+ version: '2.7'
27
27
  description: Parse HTTP Link headers.
28
28
  email:
29
29
  - jason@sixtwothree.org
@@ -36,7 +36,6 @@ files:
36
36
  - LICENSE
37
37
  - README.md
38
38
  - lib/link-header-parser.rb
39
- - lib/link_header_parser/exceptions.rb
40
39
  - lib/link_header_parser/link_header.rb
41
40
  - lib/link_header_parser/link_header_parameter.rb
42
41
  - lib/link_header_parser/link_headers_collection.rb
@@ -47,7 +46,7 @@ licenses:
47
46
  - MIT
48
47
  metadata:
49
48
  bug_tracker_uri: https://github.com/jgarber623/link-header-parser-ruby/issues
50
- changelog_uri: https://github.com/jgarber623/link-header-parser-ruby/blob/v2.2.0/CHANGELOG.md
49
+ changelog_uri: https://github.com/jgarber623/link-header-parser-ruby/blob/v3.0.0/CHANGELOG.md
51
50
  post_install_message:
52
51
  rdoc_options: []
53
52
  require_paths:
@@ -66,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
65
  - !ruby/object:Gem::Version
67
66
  version: '0'
68
67
  requirements: []
69
- rubygems_version: 3.1.2
68
+ rubygems_version: 3.2.16
70
69
  signing_key:
71
70
  specification_version: 4
72
71
  summary: Parse HTTP Link headers.
@@ -1,5 +0,0 @@
1
- module LinkHeaderParser
2
- class LinkHeaderParserError < StandardError; end
3
-
4
- class ArgumentError < LinkHeaderParserError; end
5
- end