nitlink 1.0.0 → 1.1.0

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
  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