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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 76d7bf9f8436e8b45762a03ae9a73b613db238f7
4
- data.tar.gz: 4af8d8f6a3c09991d4254355be30c8e9148a9551
3
+ metadata.gz: bd514951777aea91ff90a20835d23e2ab3136328
4
+ data.tar.gz: 53dfc5982d3c257fe96f11019d0b11fbbcda0e94
5
5
  SHA512:
6
- metadata.gz: 29b158182dad5e2199db2b2620affc893ec8af246df861ba91cf41e7119ca1515cf17d6830995fa7f6ffc478ba08faab7b067de829a03a79ec5d2ced9d80d409
7
- data.tar.gz: e789dc5dafd4415e9b335be5e33b84503564b0a8db932ea203222374094e7f12ac9a840f4fc166c2e52b75e63555094e0d49f1f42a4ab261f012293df8bc3ec6
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
- require 'hashwithindifferentaccess'
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
- hash = HashWithIndifferentAccess.new
12
- each { |link| hash[link.relation_type] ||= link }
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
@@ -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, value| name == param_name } || []).last
64
+ (link_parameters.find { |name, _value| name == param_name } || []).last
65
65
  end
66
66
 
67
67
  def extract_target_attributes(link_parameters)
@@ -8,7 +8,14 @@ module Nitlink
8
8
  end
9
9
  end
10
10
 
11
- decoratable_responses = ['Curl::Easy', 'Excon::Response', 'Faraday::Response', 'HTTP::Message', 'HTTP::Response', 'HTTParty::Response', 'Net::HTTPResponse', 'Patron::Response', 'RestClient::Response', 'Typhoeus::Response', 'Unirest::HttpResponse']
12
- decoratable_responses.select { |klass| Object.const_defined?(klass) }.each do |klass|
13
- Object.const_get(klass).class_eval { include Nitlink::ResponseDecorator }
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
- require 'hashwithindifferentaccess'
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])]
@@ -1,3 +1,3 @@
1
1
  module Nitlink
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
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.0.0
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: 2016-11-07 00:00:00.000000000 Z
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: '1.13'
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: '1.13'
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