rack-linkeddata 3.0.0 → 3.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc9deb8760334ad2f933b56890f20a8c7cf5f179ddce2c46d0b301c10f8391e5
4
- data.tar.gz: 791f3460f9ea1ac579b120fb450c6c092b3afdfaf2f0c2b9dd9732ac9236cb00
3
+ metadata.gz: 2051e1a0305800d14478159babe72580e41a064ce87d3ca8fa11673d84292f40
4
+ data.tar.gz: 7df952ee3834045c11b3a1254db4eae4c5757a03ea6c8245f868426420f5b755
5
5
  SHA512:
6
- metadata.gz: e6f32f42b0449dc2aef3752f3ede3b1313ee08f17c122a30cab1f907b1c36bba7233a12f500320b63cce689588d6f348a3d867afc39a2d862a974701cb5806f3
7
- data.tar.gz: ea371601178e5f934cf45604e86444286954c7690bc0e665e4ab0613aaff4ceb98061f07a0890115d217754cb2c95f6ce90baf2b20484396d8589c7f73153d1d
6
+ metadata.gz: 4148c17443d565278c01f5abecc585a1985559c38366c01d4f364ddcecf3260b47febf82cd81e34950be1ee703eaa9720ee3632a50a34672072bf5e947c29c0a
7
+ data.tar.gz: 120916aadfadadccbc8121143cf344961073da605172d7170aecddfb0af2a6ca079f1ebbcf11d2aaeec99eff06be5099b0ebd1a36c81ae1b0ded11584248765e
data/README.md CHANGED
@@ -5,15 +5,16 @@ negotiation for Rack applications. You can use `Rack::LinkedData` with any
5
5
  Ruby web framework based on Rack, including with Ruby on Rails 3.0 and with
6
6
  Sinatra.
7
7
 
8
- * <http://github.com/datagraph/rack-linkeddata>
8
+ * <https://github.com/ruby-rdf/rack-linkeddata>
9
9
 
10
- [![Gem Version](https://badge.fury.io/rb/rack-linkeddata.png)](http://badge.fury.io/rb/rack-linkeddata)
11
- [![Build Status](https://travis-ci.org/ruby-rdf/rack-linkeddata.png?branch=master)](http://travis-ci.org/ruby-rdf/rack-linkeddata)
10
+ [![Gem Version](https://badge.fury.io/rb/rack-linkeddata.png)](https://badge.fury.io/rb/rack-linkeddata)
11
+ [![Build Status](https://github.com/ruby-rdf/rack-linkeddata/workflows/CI/badge.svg?branch=develop)](https://github.com/ruby-rdf/rack-linkeddata/actions?query=workflow%3ACI)
12
+ [![Gitter chat](https://badges.gitter.im/ruby-rdf/rdf.png)](https://gitter.im/ruby-rdf/rdf)
12
13
 
13
14
  ## Features
14
15
 
15
16
  * Implements [HTTP content negotiation][conneg] for RDF content types.
16
- * Supports all [RDF.rb][]-compatible serialization formats.
17
+ * Supports all [RDF.rb][] compatible serialization formats.
17
18
  * Compatible with any Rack application and any Rack-based framework.
18
19
 
19
20
  ## Examples
@@ -91,19 +92,19 @@ for N-Triples, N-Quads, Turtle, RDF/XML, RDF/JSON, JSON-LD, RDFa, TriG and TriX.
91
92
 
92
93
  ##Documentation
93
94
 
94
- <http://http://rubydoc.info/github/ruby-rdf/rack-linkeddata/>
95
+ <https://rubydoc.info/github/ruby-rdf/rack-linkeddata/>
95
96
 
96
97
  * {Rack::LinkedData}
97
98
  * {Rack::LinkedData::ContentNegotiation}
98
99
 
99
100
  ## Dependencies
100
101
 
101
- * [Rack](http://rubygems.org/gems/rack) (~> 2.0)
102
- * [Linked Data](http://rubygems.org/gems/linkeddata) (~> 3.0)
102
+ * [Rack](https://rubygems.org/gems/rack) (~> 2.0)
103
+ * [Linked Data](https://rubygems.org/gems/linkeddata) (~> 3.1)
103
104
 
104
105
  ## Installation
105
106
 
106
- The recommended installation method is via [RubyGems](http://rubygems.org/).
107
+ The recommended installation method is via [RubyGems](https://rubygems.org/).
107
108
  To install the latest official release of the gem, do:
108
109
 
109
110
  % [sudo] gem install rack-linkeddata
@@ -117,7 +118,7 @@ To get a local working copy of the development repository, do:
117
118
  Alternatively, download the latest development version as a tarball as
118
119
  follows:
119
120
 
120
- % wget http://github.com/ruby-rdf/rack-linkeddata/tarball/master
121
+ % wget https://github.com/ruby-rdf/rack-linkeddata/tarball/master
121
122
 
122
123
  ## Contributing
123
124
  This repository uses [Git Flow](https://github.com/nvie/gitflow) to mange development and release activity. All submissions _must_ be on a feature branch based on the _develop_ branch to ease staging and integration.
@@ -132,31 +133,33 @@ This repository uses [Git Flow](https://github.com/nvie/gitflow) to mange develo
132
133
  list in the the `README`. Alphabetical order applies.
133
134
  * Do note that in order for us to merge any non-trivial changes (as a rule
134
135
  of thumb, additions larger than about 15 lines of code), we need an
135
- explicit [public domain dedication][PDD] on record from you.
136
+ explicit [public domain dedication][PDD] on record from you,
137
+ which you will be asked to agree to on the first commit to a repo within the organization.
138
+ Note that the agreement applies to all repos in the [Ruby RDF](https://github.com/ruby-rdf/) organization.
136
139
 
137
140
  ## References
138
141
 
139
- * <http://www.w3.org/DesignIssues/LinkedData.html>
140
- * <http://linkeddata.org/docs/how-to-publish>
141
- * <http://linkeddata.org/conneg-303-redirect-code-samples>
142
- * <http://www.w3.org/TR/cooluris/>
143
- * <http://www.w3.org/TR/swbp-vocab-pub/>
144
- * <http://patterns.dataincubator.org/book/publishing-patterns.html>
142
+ * <https://www.w3.org/DesignIssues/LinkedData.html>
143
+ * <https://linkeddata.org/docs/how-to-publish>
144
+ * <https://linkeddata.org/conneg-303-redirect-code-samples>
145
+ * <https://www.w3.org/TR/cooluris/>
146
+ * <https://www.w3.org/TR/swbp-vocab-pub/>
147
+ * <https://patterns.dataincubator.org/book/publishing-patterns.html>
145
148
 
146
149
  ## Authors
147
150
 
148
- * [Arto Bendiken](http://github.com/bendiken) - <http://ar.to/>
149
- * [Gregg Kellogg](http://github.com/gkellogg) - <http://greggkellogg.net/>
151
+ * [Arto Bendiken](https://github.com/artob) - <https://ar.to/>
152
+ * [Gregg Kellogg](https://github.com/gkellogg) - <https://greggkellogg.net/>
150
153
 
151
154
  ## License
152
155
 
153
156
  This is free and unencumbered public domain software. For more information,
154
- see <http://unlicense.org/> or the accompanying {file:UNLICENSE} file.
155
-
156
- [Rack]: http://rack.github.com/
157
- [RDF.rb]: http://ruby-rdf.github.com/rdf/
158
- [Linked Data]: http://linkeddata.org/
159
- [conneg]: http://en.wikipedia.org/wiki/Content_negotiation
160
- [YARD]: http://yardoc.org/
161
- [YARD-GS]: http://rubydoc.info/docs/yard/file/docs/GettingStarted.md
162
- [PDD]: http://unlicense.org/#unlicensing-contributions
157
+ see <https://unlicense.org/> or the accompanying {file:UNLICENSE} file.
158
+
159
+ [Rack]: https://rack.github.com/
160
+ [RDF.rb]: https://ruby-rdf.github.com/rdf/
161
+ [Linked Data]: https://linkeddata.org/
162
+ [conneg]: https://en.wikipedia.org/wiki/Content_negotiation
163
+ [YARD]: https://yardoc.org/
164
+ [YARD-GS]: https://rubydoc.info/docs/yard/file/docs/GettingStarted.md
165
+ [PDD]: https://unlicense.org/#unlicensing-contributions
data/UNLICENSE CHANGED
@@ -21,4 +21,4 @@ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
21
  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
22
  OTHER DEALINGS IN THE SOFTWARE.
23
23
 
24
- For more information, please refer to <http://unlicense.org/>
24
+ For more information, please refer to <https://unlicense.org/>
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0
1
+ 3.1.3
@@ -6,7 +6,7 @@ module Rack; module LinkedData
6
6
  # format to serialize any result with a body being `RDF::Enumerable`.
7
7
  #
8
8
  # Override content negotiation by setting the :format option to
9
- # {#initialize}.
9
+ # `#initialize`.
10
10
  #
11
11
  # Add a :default option to set a content type to use when nothing else
12
12
  # is found.
@@ -18,216 +18,6 @@ module Rack; module LinkedData
18
18
  #
19
19
  # @see http://www4.wiwiss.fu-berlin.de/bizer/pub/LinkedDataTutorial/
20
20
  # @see https://www.rubydoc.info/github/rack/rack/master/file/SPEC
21
- class ContentNegotiation
22
- DEFAULT_CONTENT_TYPE = "application/n-triples" # N-Triples
23
- VARY = {'Vary' => 'Accept'}.freeze
24
-
25
- # @return [#call]
26
- attr_reader :app
27
-
28
- # @return [Hash{Symbol => Object}]
29
- attr_reader :options
30
-
31
- ##
32
- # @param [#call] app
33
- # @param [Hash{Symbol => Object}] options
34
- # Other options passed to writer.
35
- # @option options [String] :default (DEFAULT_CONTENT_TYPE) Specific content type
36
- # @option options [RDF::Format, #to_sym] :format Specific RDF writer format to use
37
- def initialize(app, options = {})
38
- @app, @options = app, options
39
- @options[:default] = (@options[:default] || DEFAULT_CONTENT_TYPE).to_s
40
- end
41
-
42
- ##
43
- # Handles a Rack protocol request.
44
- # Parses Accept header to find appropriate mime-type and sets content_type accordingly.
45
- #
46
- # Inserts ordered content types into the environment as `ORDERED_CONTENT_TYPES` if an Accept header is present
47
- #
48
- # @param [Hash{String => String}] env
49
- # @return [Array(Integer, Hash, #each)] Status, Headers and Body
50
- # @see http://rack.rubyforge.org/doc/SPEC.html
51
- def call(env)
52
- env['ORDERED_CONTENT_TYPES'] = parse_accept_header(env['HTTP_ACCEPT']) if env.has_key?('HTTP_ACCEPT')
53
- response = app.call(env)
54
- body = response[2].respond_to?(:body) ? response[2].body : response[2]
55
- case body
56
- when RDF::Enumerable
57
- response[2] = body # Put it back in the response, it might have been a proxy
58
- serialize(env, *response)
59
- else response
60
- end
61
- end
62
-
63
- ##
64
- # Serializes an `RDF::Enumerable` response into a Rack protocol
65
- # response using HTTP content negotiation rules or a specified Content-Type.
66
- #
67
- # @param [Hash{String => String}] env
68
- # @param [Integer] status
69
- # @param [Hash{String => Object}] headers
70
- # @param [RDF::Enumerable] body
71
- # @return [Array(Integer, Hash, #each)] Status, Headers and Body
72
- def serialize(env, status, headers, body)
73
- result, content_type = nil, nil
74
- find_writer(env, headers) do |writer, ct, accept_params = {}|
75
- begin
76
- # Passes content_type as writer option to allow parameters to be extracted.
77
- result, content_type = writer.dump(body, nil, @options.merge(accept_params: accept_params)), ct.split(';').first
78
- break
79
- rescue RDF::WriterError
80
- # Continue to next writer
81
- ct
82
- rescue
83
- ct
84
- end
85
- end
86
-
87
- if result
88
- headers = headers.merge(VARY).merge('Content-Type' => content_type)
89
- [status, headers, [result]]
90
- else
91
- not_acceptable
92
- end
93
- end
94
-
95
- protected
96
- ##
97
- # Yields an `RDF::Writer` class for the given `env`.
98
- #
99
- # If options contain a `:format` key, it identifies the specific format to use;
100
- # otherwise, if the environment has an HTTP_ACCEPT header, use it to find a writer;
101
- # otherwise, use the default content type
102
- #
103
- # @param [Hash{String => String}] env
104
- # @param [Hash{String => Object}] headers
105
- # @yield |writer, content_type|
106
- # @yield_param [RDF::Writer] writer
107
- # @yield_param [String] content_type from accept media-range without parameters
108
- # @yield_param [Hash{Symbol => String}] accept_params from accept media-range
109
- # @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
110
- def find_writer(env, headers)
111
- if @options[:format]
112
- format = @options[:format]
113
- writer = RDF::Writer.for(format.to_sym)
114
- yield(writer, writer.format.content_type.first) if writer
115
- elsif env.has_key?('HTTP_ACCEPT')
116
- content_types = parse_accept_header(env['HTTP_ACCEPT'])
117
- content_types.each do |content_type|
118
- find_writer_for_content_type(content_type) do |writer, ct, accept_params|
119
- # Yields content type with parameters
120
- yield(writer, ct, accept_params)
121
- end
122
- end
123
- else
124
- # HTTP/1.1 §14.1: "If no Accept header field is present, then it is
125
- # assumed that the client accepts all media types"
126
- find_writer_for_content_type(options[:default]) do |writer, ct|
127
- # Yields content type with parameters
128
- yield(writer, ct)
129
- end
130
- end
131
- end
132
-
133
- ##
134
- # Yields an `RDF::Writer` class for the given `content_type`.
135
- #
136
- # Calls `Writer#accept?(content_type)` for matched content type to allow writers to further discriminate on how if to accept content-type with specified parameters.
137
- #
138
- # @param [String, #to_s] content_type
139
- # @yield |writer, content_type|
140
- # @yield_param [RDF::Writer] writer
141
- # @yield_param [String] content_type (including media-type parameters)
142
- def find_writer_for_content_type(content_type)
143
- ct, *params = content_type.split(';').map(&:strip)
144
- accept_params = params.inject({}) do |memo, pv|
145
- p, v = pv.split('=').map(&:strip)
146
- memo.merge(p.downcase.to_sym => v.sub(/^["']?([^"']*)["']?$/, '\1'))
147
- end
148
- formats = RDF::Format.each(content_type: ct, has_writer: true).to_a.reverse
149
- formats.each do |format|
150
- yield format.writer, (ct || format.content_type.first), accept_params if
151
- format.writer.accept?(accept_params)
152
- end
153
- end
154
-
155
- ##
156
- # Parses an HTTP `Accept` header, returning an array of MIME content
157
- # types ordered by the precedence rules defined in HTTP/1.1 §14.1.
158
- #
159
- # @param [String, #to_s] header
160
- # @return [Array<String>]
161
- # @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
162
- def parse_accept_header(header)
163
- entries = header.to_s.split(',')
164
- entries = entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first)
165
- entries.map { |e| find_content_type_for_media_range(e) }.flatten
166
- end
167
-
168
- # Returns pair of content_type (including non-'q' parameters)
169
- # and array of quality, number of '*' in content-type, and number of non-'q' parameters
170
- def accept_entry(entry)
171
- type, *options = entry.split(';').map(&:strip)
172
- quality = 0 # we sort smallest first
173
- options.delete_if { |e| quality = 1 - e[2..-1].to_f if e.start_with? 'q=' }
174
- [options.unshift(type).join(';'), [quality, type.count('*'), 1 - options.size]]
175
- end
176
-
177
- ##
178
- # Returns a content type appropriate for the given `media_range`,
179
- # returns `nil` if `media_range` contains a wildcard subtype
180
- # that is not mapped.
181
- #
182
- # @param [String, #to_s] media_range
183
- # @return [String, nil]
184
- def find_content_type_for_media_range(media_range)
185
- case media_range.to_s
186
- when '*/*'
187
- options[:default]
188
- when 'text/*'
189
- 'text/turtle'
190
- when 'application/*'
191
- 'application/ld+json'
192
- when 'application/json'
193
- 'application/ld+json'
194
- when 'application/xml'
195
- 'application/rdf+xml'
196
- when /^([^\/]+)\/\*$/
197
- nil
198
- else
199
- media_range.to_s
200
- end
201
- end
202
-
203
- ##
204
- # Outputs an HTTP `406 Not Acceptable` response.
205
- #
206
- # @param [String, #to_s] message
207
- # @return [Array(Integer, Hash, #each)]
208
- def not_acceptable(message = nil)
209
- http_error(406, message, VARY)
210
- end
211
-
212
- ##
213
- # Outputs an HTTP `4xx` or `5xx` response.
214
- #
215
- # @param [Integer, #to_i] code
216
- # @param [String, #to_s] message
217
- # @param [Hash{String => String}] headers
218
- # @return [Array(Integer, Hash, #each)]
219
- def http_error(code, message = nil, headers = {})
220
- message = http_status(code) + (message.nil? ? "\n" : " (#{message})\n")
221
- [code, {'Content-Type' => "text/plain"}.merge(headers), [message]]
222
- end
223
-
224
- ##
225
- # Returns the standard HTTP status message for the given status `code`.
226
- #
227
- # @param [Integer, #to_i] code
228
- # @return [String]
229
- def http_status(code)
230
- [code, Rack::Utils::HTTP_STATUS_CODES[code]].join(' ')
231
- end
21
+ class ContentNegotiation < Rack::RDF::ContentNegotiation
232
22
  end # class ContentNegotiation
233
23
  end; end # module Rack::LinkedData
@@ -1,4 +1,4 @@
1
- require 'rack'
1
+ require 'rack/rdf'
2
2
  require 'linkeddata'
3
3
 
4
4
  module Rack
@@ -9,22 +9,11 @@ module Rack
9
9
  ##
10
10
  # Registers all known RDF formats with Rack's MIME types registry.
11
11
  #
12
+ # @param [Boolean] overwrite (false)
12
13
  # @param [Hash{Symbol => Object}] options
13
- # @option options [Boolean] :overwrite (false)
14
14
  # @return [void]
15
- def self.register_mime_types!(options = {})
16
- if defined?(Rack::Mime::MIME_TYPES)
17
- RDF::Format.each do |format|
18
- if !Rack::Mime::MIME_TYPES.has_key?(file_ext = ".#{format.to_sym}") || options[:overwrite]
19
- Rack::Mime::MIME_TYPES.merge!(file_ext => format.content_type.first)
20
- end
21
- end
22
- RDF::Format.file_extensions.each do |file_ext, formats|
23
- if !Rack::Mime::MIME_TYPES.has_key?(file_ext = ".#{file_ext}") || options[:overwrite]
24
- Rack::Mime::MIME_TYPES.merge!(file_ext => formats.first.content_type.first)
25
- end
26
- end
27
- end
15
+ def self.register_mime_types!(overwrite: false, **options)
16
+ Rack::RDF.register_mime_types!(overwrite: overwrite, **options)
28
17
  end
29
18
  end
30
19
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-linkeddata
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arto Bendiken
8
8
  - Gregg Kellogg
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-12-17 00:00:00.000000000 Z
12
+ date: 2021-10-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: linkeddata
@@ -17,76 +17,82 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '3.0'
20
+ version: '3.1'
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 3.1.6
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
28
  - - "~>"
26
29
  - !ruby/object:Gem::Version
27
- version: '3.0'
30
+ version: '3.1'
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.1.6
28
34
  - !ruby/object:Gem::Dependency
29
- name: rdf
35
+ name: rack-rdf
30
36
  requirement: !ruby/object:Gem::Requirement
31
37
  requirements:
32
38
  - - "~>"
33
39
  - !ruby/object:Gem::Version
34
- version: '3.0'
40
+ version: '3.1'
35
41
  - - ">="
36
42
  - !ruby/object:Gem::Version
37
- version: 3.0.8
43
+ version: 3.1.2
38
44
  type: :runtime
39
45
  prerelease: false
40
46
  version_requirements: !ruby/object:Gem::Requirement
41
47
  requirements:
42
48
  - - "~>"
43
49
  - !ruby/object:Gem::Version
44
- version: '3.0'
50
+ version: '3.1'
45
51
  - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: 3.0.8
53
+ version: 3.1.2
48
54
  - !ruby/object:Gem::Dependency
49
55
  name: rack
50
56
  requirement: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '2.0'
60
+ version: '2.1'
55
61
  type: :runtime
56
62
  prerelease: false
57
63
  version_requirements: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '2.0'
67
+ version: '2.1'
62
68
  - !ruby/object:Gem::Dependency
63
69
  name: yard
64
70
  requirement: !ruby/object:Gem::Requirement
65
71
  requirements:
66
72
  - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: 0.9.12
74
+ version: '0.9'
69
75
  type: :development
70
76
  prerelease: false
71
77
  version_requirements: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: 0.9.12
81
+ version: '0.9'
76
82
  - !ruby/object:Gem::Dependency
77
83
  name: rspec
78
84
  requirement: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: '3.7'
88
+ version: '3.10'
83
89
  type: :development
84
90
  prerelease: false
85
91
  version_requirements: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: '3.7'
95
+ version: '3.10'
90
96
  - !ruby/object:Gem::Dependency
91
97
  name: rack-test
92
98
  requirement: !ruby/object:Gem::Requirement
@@ -115,11 +121,11 @@ files:
115
121
  - lib/rack/linkeddata.rb
116
122
  - lib/rack/linkeddata/conneg.rb
117
123
  - lib/rack/linkeddata/version.rb
118
- homepage: http://ruby-rdf.github.com/rack-linkeddata
124
+ homepage: https://github.com/ruby-rdf/rack-linkeddata
119
125
  licenses:
120
126
  - Unlicense
121
127
  metadata: {}
122
- post_install_message:
128
+ post_install_message:
123
129
  rdoc_options: []
124
130
  require_paths:
125
131
  - lib
@@ -127,15 +133,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
133
  requirements:
128
134
  - - ">="
129
135
  - !ruby/object:Gem::Version
130
- version: 2.2.2
136
+ version: '2.4'
131
137
  required_rubygems_version: !ruby/object:Gem::Requirement
132
138
  requirements:
133
139
  - - ">="
134
140
  - !ruby/object:Gem::Version
135
141
  version: '0'
136
142
  requirements: []
137
- rubygems_version: 3.0.1
138
- signing_key:
143
+ rubygems_version: 3.2.22
144
+ signing_key:
139
145
  specification_version: 4
140
146
  summary: Linked Data content negotiation for Rack applications.
141
147
  test_files: []