micky 0.6.9 → 0.7.1

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: f9be790e9b69f56620b27af765fcdd4230b57d5164ac5f24374fc168986db291
4
- data.tar.gz: eb604f6cefd295336b46903d050d617108a943ef75d0a7fe1c57acb021f773a5
3
+ metadata.gz: f2be6c8fcc885dfca7a1733f5957e089906e033347e39f37a570804692a1430b
4
+ data.tar.gz: 043bdc08aa5c099bf07927ba30011f87696ec8302eb7de9257865f857a5f1a57
5
5
  SHA512:
6
- metadata.gz: ebb52a2e4a80055e47f31e40a7acbe00c1f15d025fe2c38c986dea4d2d456fe78771a9b3d0f483443521051d7f6f6059a1385e295be2f105f777d41dd6d36692
7
- data.tar.gz: 65b29b7898f38eaa2ecff1538b80070dfe03bc108e712f8b9662591ec3f812dcd0866fa57a443124c51c8698f1b7050a5aac005349d8e0ffd7d9eaa3a006bf40
6
+ metadata.gz: 585dcfdc3f897d0880acab1591331774db0f18b189adb1e2111371e4d5b8075bb9f0975e58b3c1b9007c7d2d6f49ce0b95663b944adcff2e9b74a7aeb257b367
7
+ data.tar.gz: 91645ed087cb98abd4c16bae8eac88d088e62cf8fca49cddd1f05c526a9ce560de122d506f6a314003d665a5df269d6ed735c23eccaa7b08acf3466de5addca8
data/lib/micky/errors.rb CHANGED
@@ -32,4 +32,6 @@ module Micky
32
32
  end
33
33
  class NoRedirectLocation < ServerError
34
34
  end
35
+ class InvalidLocation < ServerError
36
+ end
35
37
  end
data/lib/micky/request.rb CHANGED
@@ -5,7 +5,7 @@ module Micky
5
5
  class Request
6
6
  def initialize(opts = {})
7
7
  # Options can be set per request and fallback to module-level defaults
8
- [:raise_errors, :max_redirects, :timeout, :skip_resolve, :resolve_timeout, :oauth, :query, :headers, :parsers].each do |name|
8
+ DEFAULTS.each_key do |name|
9
9
  value = opts.has_key?(name) ? opts[name] : Micky.public_send(name)
10
10
  instance_variable_set "@#{name}", value
11
11
  end
@@ -32,6 +32,7 @@ module Micky
32
32
 
33
33
  case response = request(uri)
34
34
  when Net::HTTPSuccess
35
+ debug "#{response.code} success"
35
36
  Response.new(response, @uri)
36
37
  when Net::HTTPRedirection
37
38
  previous_uri = uri
@@ -39,7 +40,7 @@ module Micky
39
40
 
40
41
  if uri.nil?
41
42
  raise Micky::NoRedirectLocation, response: response if @raise_errors
42
- warn "Micky.#{@request_class_name.downcase}('#{previous_uri}'): No “Location” for #{response.code} response"
43
+ log "No “Location” for #{response.code} response", previous_uri
43
44
  return nil
44
45
  end
45
46
 
@@ -59,7 +60,18 @@ module Micky
59
60
  end
60
61
  end
61
62
 
62
- log "Redirect to #{uri}"
63
+ parsed_uri = Micky::URI(uri)
64
+ if parsed_uri.nil?
65
+ raise Micky::InvalidLocation, response: response if @raise_errors
66
+ log "Invalid “Location” for #{response.code} response: #{uri}", previous_uri
67
+ return nil
68
+ elsif parsed_uri.hostname.empty?
69
+ raise Micky::NoRedirectLocation, response: response if @raise_errors
70
+ log "Empty hostname for #{response.code} response", previous_uri
71
+ return nil
72
+ end
73
+
74
+ debug "#{response.code} redirect to #{uri}"
63
75
  request_with_redirect_handling(uri, redirect_count + 1)
64
76
  else
65
77
  if @raise_errors
@@ -70,7 +82,7 @@ module Micky
70
82
  raise Micky::HTTPServerError, response: response
71
83
  end
72
84
  else
73
- log response
85
+ log "#{response.code} error" if response
74
86
  nil
75
87
  end
76
88
  end
@@ -79,7 +91,7 @@ module Micky
79
91
  def request(uri)
80
92
  @uri = Micky::URI(uri) or begin
81
93
  raise Micky::InvalidURIError, uri if @raise_errors
82
- warn "Micky.#{@request_class_name.downcase}('#{uri}'): Invalid URI"
94
+ log 'Invalid URI', uri
83
95
  return nil
84
96
  end
85
97
 
@@ -159,9 +171,13 @@ module Micky
159
171
  end
160
172
  end
161
173
 
162
- def log(message)
174
+ def log(message, uri = @uri, severity = Logger::WARN)
163
175
  message = "#{message.class}: #{message.message}" if message.is_a? Exception
164
- warn "Micky.#{@request_class_name.downcase}('#{@uri}'): #{message}"
176
+ @logger.add(severity, "[Micky] #{@request_class_name.upcase} #{uri} - #{message}")
177
+ end
178
+
179
+ def debug(message, uri = @uri)
180
+ log(message, uri, Logger::DEBUG)
165
181
  end
166
182
  end
167
183
  end
data/lib/micky/uri.rb CHANGED
@@ -16,7 +16,7 @@ module Micky
16
16
  ::URI.parse(uri)
17
17
  rescue ::URI::InvalidURIError
18
18
  begin
19
- ::URI.parse(::URI.encode(uri))
19
+ ::URI.parse(::URI::Parser.new.escape(uri))
20
20
  rescue ::URI::InvalidURIError
21
21
  end
22
22
  end
data/lib/micky/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Micky
2
- VERSION = '0.6.9'
2
+ VERSION = '0.7.1'
3
3
  end
data/lib/micky.rb CHANGED
@@ -5,34 +5,36 @@ require_relative 'micky/request'
5
5
  require_relative 'micky/response'
6
6
  require_relative 'micky/errors'
7
7
 
8
+ require 'logger'
9
+
8
10
  module Micky
11
+ DEFAULTS = {
12
+ raise_errors: false,
13
+ max_redirects: 20,
14
+ timeout: 10,
15
+ skip_resolve: false,
16
+ resolve_timeout: 5,
17
+ oauth: {},
18
+ query: {},
19
+ headers: {},
20
+ parsers: {
21
+ 'application/json' => -> (body) {
22
+ require 'json' unless defined? JSON
23
+ JSON.parse(body) rescue nil
24
+ }
25
+ },
26
+ logger: Logger.new(STDOUT),
27
+ }
28
+
9
29
  class << self
10
- attr_accessor :raise_errors
11
- attr_accessor :max_redirects
12
- attr_accessor :timeout
13
- attr_accessor :skip_resolve
14
- attr_accessor :resolve_timeout
15
- attr_accessor :oauth
16
- attr_accessor :query
17
- attr_accessor :headers
18
- attr_accessor :parsers
30
+ DEFAULTS.each_key do |key|
31
+ attr_accessor key
32
+ end
19
33
  end
20
34
 
21
- # Reasonable defaults
22
- @raise_errors = false
23
- @max_redirects = 20
24
- @timeout = 10
25
- @skip_resolve = false
26
- @resolve_timeout = 5
27
- @oauth = {}
28
- @query = {}
29
- @headers = {}
30
- @parsers = {
31
- 'application/json' => -> (body) {
32
- require 'json' unless defined? JSON
33
- JSON.parse(body) rescue nil
34
- }
35
- }
35
+ DEFAULTS.each do |key, value|
36
+ instance_variable_set :"@#{key}", value
37
+ end
36
38
 
37
39
  def self.get(uri, opts = {})
38
40
  Request.new(opts).get(uri)
data/micky.gemspec CHANGED
@@ -22,6 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1.3'
26
25
  spec.add_development_dependency 'rake'
27
26
  end
metadata CHANGED
@@ -1,29 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: micky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.9
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafaël Blais Masson
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-05-13 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
12
  - !ruby/object:Gem::Dependency
28
13
  name: rake
29
14
  requirement: !ruby/object:Gem::Requirement
@@ -63,7 +48,6 @@ homepage: http://github.com/rafBM/micky
63
48
  licenses:
64
49
  - MIT
65
50
  metadata: {}
66
- post_install_message:
67
51
  rdoc_options: []
68
52
  require_paths:
69
53
  - lib
@@ -78,8 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
62
  - !ruby/object:Gem::Version
79
63
  version: '0'
80
64
  requirements: []
81
- rubygems_version: 3.0.1
82
- signing_key:
65
+ rubygems_version: 3.6.9
83
66
  specification_version: 4
84
67
  summary: Lightweight and worry-free HTTP client
85
68
  test_files: []