nitlink 1.0.0 → 1.1.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 +4 -4
- data/lib/nitlink/hash_with_indifferent_access.rb +68 -0
- data/lib/nitlink/link_collection.rb +9 -4
- data/lib/nitlink/parser.rb +1 -1
- data/lib/nitlink/response.rb +10 -3
- data/lib/nitlink/response_normalizer.rb +4 -5
- data/lib/nitlink/version.rb +1 -1
- metadata +21 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd514951777aea91ff90a20835d23e2ab3136328
|
4
|
+
data.tar.gz: 53dfc5982d3c257fe96f11019d0b11fbbcda0e94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f28cff5fab3af58703592a22a1d5d76a368f7b556be2129b5f0c48cf8754cd28ecdbd2f2f50126a6f295ba0a4d17d3920756fc28d0d45b2ab378a377b67f7e0b
|
7
|
+
data.tar.gz: e8bed9a781c09e0473285d852185364ed72373964fe437f3a6385eebfd28ed70856c243938ae4a9beb24325195a23c9fce7df525b784506140d01760fed16100
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Nitlink
|
2
|
+
class HashWithIndifferentAccess < ::Hash
|
3
|
+
def initialize(hash = {})
|
4
|
+
super()
|
5
|
+
hash.each do |key, value|
|
6
|
+
self[convert_key(key)] = value
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def [](key)
|
11
|
+
super(convert_key(key))
|
12
|
+
end
|
13
|
+
|
14
|
+
def []=(key, value)
|
15
|
+
super(convert_key(key), value)
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete(key)
|
19
|
+
super(convert_key(key))
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch(key, *args)
|
23
|
+
super(convert_key(key), *args)
|
24
|
+
end
|
25
|
+
|
26
|
+
def key?(key)
|
27
|
+
super(convert_key(key))
|
28
|
+
end
|
29
|
+
|
30
|
+
def values_at(*indices)
|
31
|
+
indices.map { |key| self[convert_key(key)] }
|
32
|
+
end
|
33
|
+
|
34
|
+
def merge(other)
|
35
|
+
dup.merge!(other)
|
36
|
+
end
|
37
|
+
|
38
|
+
def merge!(other)
|
39
|
+
other.each do |key, value|
|
40
|
+
self[convert_key(key)] = value
|
41
|
+
end
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
def reverse_merge(other)
|
46
|
+
self.class.new(other).merge(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def reverse_merge!(other_hash)
|
50
|
+
replace(reverse_merge(other_hash))
|
51
|
+
end
|
52
|
+
|
53
|
+
def replace(other_hash)
|
54
|
+
super(other_hash)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Convert to a Hash with String keys.
|
58
|
+
def to_hash
|
59
|
+
Hash.new(default).merge!(self)
|
60
|
+
end
|
61
|
+
|
62
|
+
protected
|
63
|
+
|
64
|
+
def convert_key(key)
|
65
|
+
key.is_a?(Symbol) ? key.to_s : key
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative './hash_with_indifferent_access'
|
2
2
|
|
3
3
|
module Nitlink
|
4
4
|
class LinkCollection < Array
|
@@ -7,10 +7,15 @@ module Nitlink
|
|
7
7
|
find { |link| link.relation_type == relation_type.downcase.to_s }
|
8
8
|
end
|
9
9
|
|
10
|
-
def to_h
|
11
|
-
|
12
|
-
|
10
|
+
def to_h(options = { with_indifferent_access: true })
|
11
|
+
options = Nitlink::HashWithIndifferentAccess.new(options)
|
12
|
+
indifferent = options.key?(:with_indifferent_access) ? options[:with_indifferent_access] : true
|
13
|
+
|
14
|
+
hash = indifferent ? Nitlink::HashWithIndifferentAccess.new : {}
|
15
|
+
each { |link| hash[link.relation_type.to_s] ||= link }
|
13
16
|
hash
|
14
17
|
end
|
18
|
+
|
19
|
+
alias_method :to_hash, :to_h
|
15
20
|
end
|
16
21
|
end
|
data/lib/nitlink/parser.rb
CHANGED
@@ -61,7 +61,7 @@ module Nitlink
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def first_match(link_parameters, param_name)
|
64
|
-
(link_parameters.find { |name,
|
64
|
+
(link_parameters.find { |name, _value| name == param_name } || []).last
|
65
65
|
end
|
66
66
|
|
67
67
|
def extract_target_attributes(link_parameters)
|
data/lib/nitlink/response.rb
CHANGED
@@ -8,7 +8,14 @@ module Nitlink
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
third_party_clients = ['Curl::Easy', 'Excon::Response', 'Faraday::Response', 'HTTP::Message', 'HTTP::Response', 'HTTParty::Response', 'Net::HTTPResponse', 'Patron::Response', 'RestClient::Response', 'Typhoeus::Response', 'Unirest::HttpResponse']
|
12
|
+
|
13
|
+
decoratable_responses = third_party_clients.select do |klass|
|
14
|
+
module_name, class_name = klass.split('::', 2)
|
15
|
+
Object.const_defined?(module_name) && Object.const_get(module_name).const_defined?(class_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
decoratable_responses.each do |klass|
|
19
|
+
module_name, class_name = klass.split('::', 2)
|
20
|
+
Object.const_get(module_name).const_get(class_name).class_eval { include Nitlink::ResponseDecorator }
|
14
21
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'uri'
|
2
|
-
|
2
|
+
require_relative './hash_with_indifferent_access'
|
3
3
|
|
4
4
|
module Nitlink
|
5
5
|
class ResponseNormalizer
|
@@ -8,7 +8,7 @@ module Nitlink
|
|
8
8
|
|
9
9
|
uri, status, (link, content_location) = case response_class
|
10
10
|
when 'Curl::Easy'
|
11
|
-
[response.url, response.response_code, grab_headers(headers_from_string response.header_str)]
|
11
|
+
[response.url.chomp('?'), response.response_code, grab_headers(headers_from_string response.header_str)]
|
12
12
|
when 'Excon::Response'
|
13
13
|
scheme = response.port == 443 ? 'https' : 'http'
|
14
14
|
# We have to reconstruct to URL annoyingly
|
@@ -33,12 +33,11 @@ module Nitlink
|
|
33
33
|
[response.base_uri, response.status[0], grab_headers(response.meta)]
|
34
34
|
when 'Typhoeus::Response'
|
35
35
|
[response.request.base_url, response.code, grab_headers(response.headers)]
|
36
|
-
# :nocov:
|
37
36
|
when 'Unirest::HttpResponse'
|
37
|
+
warn "Unirest support is deprecated and will be removed in Nitlink 2.0"
|
38
38
|
return metadata(response.raw_body)
|
39
|
-
# :nocov:
|
40
39
|
when 'Hash'
|
41
|
-
response = HashWithIndifferentAccess.new(response)
|
40
|
+
response = Nitlink::HashWithIndifferentAccess.new(response)
|
42
41
|
response[:headers] = headers_from_string(response[:headers]) if String === response[:headers]
|
43
42
|
|
44
43
|
[response[:request_uri], response[:status], grab_headers(response[:headers])]
|
data/lib/nitlink/version.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nitlink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Peattie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: hashwithindifferentaccess
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.1
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1.1
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: bundler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
17
|
+
- - ">="
|
32
18
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
19
|
+
version: 1.7.6
|
34
20
|
type: :development
|
35
21
|
prerelease: false
|
36
22
|
version_requirements: !ruby/object:Gem::Requirement
|
37
23
|
requirements:
|
38
|
-
- - "
|
24
|
+
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
26
|
+
version: 1.7.6
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +80,20 @@ dependencies:
|
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: 0.1.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: addressable
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.4.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.4.0
|
97
97
|
description: |-
|
98
98
|
Nitlink is a nice, nitpicky gem for parsing Link headers, which aims to stick
|
99
99
|
as closely as possible to RFC 5988. Has support for UTF-8 encoded parameters, URI resolution, boolean parameters,
|
@@ -106,6 +106,7 @@ extra_rdoc_files: []
|
|
106
106
|
files:
|
107
107
|
- lib/nitlink.rb
|
108
108
|
- lib/nitlink/exceptions.rb
|
109
|
+
- lib/nitlink/hash_with_indifferent_access.rb
|
109
110
|
- lib/nitlink/link.rb
|
110
111
|
- lib/nitlink/link_collection.rb
|
111
112
|
- lib/nitlink/param_decoder.rb
|