http_wrapper 2.1.1 → 3.0.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
- SHA1:
3
- metadata.gz: fa85c2016386aa01baeab80596dc32c5fe9a8487
4
- data.tar.gz: fd6379cb93042cc78a5cfc4efbea1042a7377fbe
2
+ SHA256:
3
+ metadata.gz: 6b8cafac3f93ee092cd47ba4c265369937d998919ac06172436764ec448bbe9a
4
+ data.tar.gz: 49bf3caf2c4791f3af3ed9b360f014ff674816687acc18c60cc53194eac85bd3
5
5
  SHA512:
6
- metadata.gz: 8209c18ab5f5934bfe4eb8792346d9407706345e0a091a23cedc90dde41e4ef761f3c5f59d41168e5e4470d4fbc224d305ddcf4d09e9583f7dea74044088138c
7
- data.tar.gz: b4dd32e4c65b49634447e29773332ea37628099e247cf2cb454d3059c7c1ea207be6f449baded1681b8fb678437a5363daf0817a3f2ef4a69f1296a24a5c7c90
6
+ metadata.gz: 81ad733418da9109bd1a38891325797b278572e5c889d05bbcc20239f6a33d03f72986ac4cd1c0ab7cf23dd5edc7ac3495f79f81721c04f77722b20a48d0c512
7
+ data.tar.gz: 145bb14e27b4725019b7289c8577b71b4c21eb770a41e9608ad7bfae6eb2b2a62dfe88c1b657047d18f2b6442210501e0be8279930d9b404efd753dc2b2048ee
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## v3.0.0
4
+
5
+ * dropped support for Ruby 1.9-2.2 and Rubinius
6
+ * rubocop and rubocop-spec gems added for better code quality
7
+ * simplecov gem added to track test coverage
8
+ * code refactoring due to all the changes above
9
+
3
10
  ## v2.1.1
4
11
 
5
12
  * code refactoring
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
- gemspec
4
+ gemspec
data/README.md CHANGED
@@ -2,11 +2,10 @@
2
2
 
3
3
  Simple wrapper around standard Net::HTTP library
4
4
 
5
- [![Gem Version](https://badge.fury.io/rb/http_wrapper.png)](http://badge.fury.io/rb/http_wrapper)
6
- [![Build Status](https://travis-ci.org/svyatov/http_wrapper.png)](https://travis-ci.org/svyatov/http_wrapper)
7
- [![Dependency Status](https://gemnasium.com/svyatov/http_wrapper.png)](https://gemnasium.com/svyatov/http_wrapper)
8
- [![Code Climate](https://codeclimate.com/github/svyatov/http_wrapper.png)](https://codeclimate.com/github/svyatov/http_wrapper)
9
- [![Coverage Status](https://coveralls.io/repos/svyatov/http_wrapper/badge.png)](https://coveralls.io/r/svyatov/http_wrapper)
5
+ [![Gem Version](https://badge.fury.io/rb/http_wrapper.svg)](https://badge.fury.io/rb/http_wrapper)
6
+ [![Build Status](https://travis-ci.org/svyatov/http_wrapper.svg?branch=master)](https://travis-ci.org/svyatov/http_wrapper)
7
+ [![Maintainability](https://api.codeclimate.com/v1/badges/41f8e8c507907ea20e2b/maintainability)](https://codeclimate.com/github/svyatov/http_wrapper/maintainability)
8
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/41f8e8c507907ea20e2b/test_coverage)](https://codeclimate.com/github/svyatov/http_wrapper/test_coverage)
10
9
 
11
10
  ---
12
11
 
@@ -15,7 +14,7 @@ Simple wrapper around standard Net::HTTP library
15
14
  Add this line to your Gemfile:
16
15
 
17
16
  ```ruby
18
- gem 'http_wrapper', '~> 2.1.1'
17
+ gem 'http_wrapper', '~> 3.0'
19
18
  ```
20
19
 
21
20
  And then execute:
@@ -245,10 +244,7 @@ http.get sample_url, headers: { user_agent: 'custom user agent' }
245
244
  ```ruby
246
245
  uri = URI 'http://example.com'
247
246
 
248
- # Ruby 2.0.0
249
247
  request = Net::HTTP::Head.new uri
250
- # Ruby 1.9.3
251
- request = Net::HTTP::Head.new uri.request_uri
252
248
 
253
249
  http.execute request, uri
254
250
  ```
@@ -320,4 +316,4 @@ If any unknown options or parameters found, it raises the `UnknownKeyError` exce
320
316
  2. Create your feature branch (`git checkout -b my-new-feature`)
321
317
  3. Commit your changes (`git commit -am 'Added some feature'`)
322
318
  4. Push to the branch (`git push origin my-new-feature`)
323
- 5. Create new Pull Request
319
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,12 +1,8 @@
1
- $LOAD_PATH.unshift File.expand_path('lib', File.dirname(__FILE__))
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
5
 
6
- task :default => :spec
7
-
8
- RSpec::Core::RakeTask.new do |task|
9
- task.pattern = 'spec/**/*_spec.rb'
10
- task.verbose = false
11
- end
6
+ RSpec::Core::RakeTask.new(:spec)
12
7
 
8
+ task default: :spec
@@ -1,20 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HTTPWrapper
2
- module HEADER
3
- CONTENT_TYPE = 'content-type'.freeze
4
- USER_AGENT = 'user-agent'.freeze
5
- COOKIE = 'cookie'.freeze
6
- AJAX = 'x-requested-with'.freeze
7
- end
4
+ USER_AGENT = "HTTPWrapper/#{HTTPWrapper::VERSION}; Ruby/#{RUBY_VERSION}"
5
+
6
+ CONTENT_TYPE_HEADER_NAME = 'content-type'
7
+ USER_AGENT_HEADER_NAME = 'user-agent'
8
+ COOKIE_HEADER_NAME = 'cookie'
9
+ AJAX_HEADER_NAME = 'x-requested-with'
8
10
 
9
- module CONTENT_TYPE
10
- DEFAULT = 'text/html; charset=UTF-8'.freeze
11
- JSON = 'application/json; charset=UTF-8'.freeze
12
- POST = 'application/x-www-form-urlencoded'.freeze
13
- MULTIPART = 'multipart/form-data'.freeze
14
- end
11
+ DEFAULT_CONTENT_TYPE = 'text/html; charset=UTF-8'
12
+ JSON_CONTENT_TYPE = 'application/json; charset=UTF-8'
13
+ POST_CONTENT_TYPE = 'application/x-www-form-urlencoded'
14
+ MULTIPART_CONTENT_TYPE = 'multipart/form-data'
15
15
 
16
- USER_AGENT = "HTTPWrapper/#{HTTPWrapper::VERSION}; Ruby/#{RUBY_VERSION}".freeze
17
- AJAX_HEADER = { HEADER::AJAX => 'XMLHttpRequest'.freeze }.freeze
18
- JSON_HEADER = { HEADER::CONTENT_TYPE => CONTENT_TYPE::JSON }.freeze
16
+ AJAX_HEADER = { AJAX_HEADER_NAME => 'XMLHttpRequest' }.freeze
17
+ JSON_HEADER = { CONTENT_TYPE_HEADER_NAME => JSON_CONTENT_TYPE }.freeze
19
18
  AJAX_JSON_HEADER = AJAX_HEADER.dup.merge!(JSON_HEADER).freeze
20
- end
19
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HTTPWrapper
2
- HTTPWrapperError = Class.new StandardError
3
- TooManyRedirectsError = Class.new HTTPWrapperError
4
- UnknownKeyError = Class.new HTTPWrapperError
5
- end
4
+ Error = Class.new StandardError
5
+ TooManyRedirectsError = Class.new Error
6
+ UnknownKeyError = Class.new Error
7
+ end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/https'
2
4
 
3
5
  class HTTPWrapper
4
- KNOWN_OPTIONS_KEYS = [:timeout, :verify_cert, :logger, :max_redirects, :user_agent].freeze
6
+ KNOWN_OPTIONS_KEYS = %i[timeout verify_cert logger max_redirects user_agent].freeze
5
7
 
6
8
  attr_accessor :timeout, :verify_cert, :logger, :max_redirects, :user_agent
7
9
 
8
10
  def initialize(options = {})
9
- Utils.validate_hash_keys options, KNOWN_OPTIONS_KEYS
11
+ Util.validate_hash_keys options, KNOWN_OPTIONS_KEYS
10
12
 
11
13
  @timeout = options.fetch(:timeout) { 10 }
12
14
  @verify_cert = options.fetch(:verify_cert) { true }
@@ -15,7 +17,7 @@ class HTTPWrapper
15
17
  @user_agent = options.fetch(:user_agent) { USER_AGENT }
16
18
  end
17
19
 
18
- [:get, :post, :put, :delete].each do |method_as_symbol|
20
+ %i[get post put delete].each do |method_as_symbol|
19
21
  define_method method_as_symbol do |url, params = {}|
20
22
  params[:user_agent] ||= @user_agent
21
23
  get_response Request.new(url, method_as_symbol, params)
@@ -23,9 +25,9 @@ class HTTPWrapper
23
25
 
24
26
  method_as_string = method_as_symbol.to_s
25
27
 
26
- %w(ajax json ajax_json).each do |request_type|
28
+ %w[ajax json ajax_json].each do |request_type|
27
29
  define_method "#{method_as_string}_#{request_type}" do |url, params = {}|
28
- (params[:headers] ||= {}).merge!(headers_specific_for request_type)
30
+ (params[:headers] ||= {}).merge!(headers_specific_for(request_type))
29
31
  public_send method_as_symbol, url, params
30
32
  end
31
33
  end
@@ -46,11 +48,11 @@ class HTTPWrapper
46
48
  private
47
49
 
48
50
  def get_response(request, redirects_limit = @max_redirects)
49
- raise TooManyRedirectsError.new 'Too many redirects!' if redirects_limit == 0
51
+ raise TooManyRedirectsError, 'Too many redirects!' if redirects_limit == 0
50
52
 
51
53
  response = execute request.create, request.uri
52
54
 
53
- if response.kind_of? Net::HTTPRedirection
55
+ if response.is_a? Net::HTTPRedirection
54
56
  request.uri = response['location']
55
57
  response = get_response request, redirects_limit - 1
56
58
  end
@@ -67,7 +69,7 @@ class HTTPWrapper
67
69
  connection.read_timeout = @timeout
68
70
  connection.open_timeout = @timeout
69
71
 
70
- if uri.kind_of? URI::HTTPS
72
+ if uri.is_a? URI::HTTPS
71
73
  connection.use_ssl = true
72
74
  connection.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @verify_cert
73
75
  end
@@ -75,4 +77,4 @@ class HTTPWrapper
75
77
  connection.set_debug_output(@logger)
76
78
  connection
77
79
  end
78
- end
80
+ end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri/common'
2
4
 
3
5
  class HTTPWrapper
4
6
  class Request
5
- KNOWN_PARAMS_KEYS = [:headers, :query, :cookie, :auth, :body, :user_agent, :content_type, :multipart].freeze
7
+ KNOWN_PARAMS_KEYS = %i[headers query cookie auth body user_agent content_type multipart].freeze
6
8
 
7
- def initialize(url, method, params = {})
8
- Utils.validate_hash_keys params, KNOWN_PARAMS_KEYS
9
+ def initialize(url, method, params = {}) # rubocop:disable Metrics/AbcSize
10
+ Util.validate_hash_keys params, KNOWN_PARAMS_KEYS
9
11
 
10
12
  self.uri = url
11
13
 
@@ -30,7 +32,7 @@ class HTTPWrapper
30
32
  attr_reader :uri
31
33
 
32
34
  def uri=(url)
33
- url = "http://#{url}" unless url =~ /\Ahttps?:\/\//
35
+ url = "http://#{url}" unless url =~ %r{\Ahttps?://}
34
36
  @uri = URI.parse url
35
37
  end
36
38
 
@@ -43,16 +45,14 @@ class HTTPWrapper
43
45
 
44
46
  def normalize_headers(headers)
45
47
  normal_headers = {}
46
- if headers
47
- headers.each do |header, value|
48
- normal_headers[normalize_header header] = value
49
- end
48
+ headers&.each do |header, value|
49
+ normal_headers[normalize_header header] = value
50
50
  end
51
51
  normal_headers
52
52
  end
53
53
 
54
54
  def normalize_header(header)
55
- header = header.to_s.gsub(/_/, '-') if header.is_a? Symbol
55
+ header = header.to_s.tr('_', '-') if header.is_a? Symbol
56
56
  header.downcase
57
57
  end
58
58
 
@@ -62,28 +62,27 @@ class HTTPWrapper
62
62
 
63
63
  def default_content_type_for(method)
64
64
  case method
65
- when :post, :put then CONTENT_TYPE::POST
66
- else CONTENT_TYPE::DEFAULT
65
+ when :post, :put then POST_CONTENT_TYPE
66
+ else DEFAULT_CONTENT_TYPE
67
67
  end
68
68
  end
69
69
 
70
70
  def initialize_headers
71
- @headers[HEADER::USER_AGENT] ||= @user_agent
72
- @headers[HEADER::CONTENT_TYPE] ||= @content_type
73
- @headers[HEADER::COOKIE] ||= @cookie if @cookie
71
+ @headers[USER_AGENT_HEADER_NAME] ||= @user_agent
72
+ @headers[CONTENT_TYPE_HEADER_NAME] ||= @content_type
73
+ @headers[COOKIE_HEADER_NAME] ||= @cookie if @cookie
74
74
  end
75
75
 
76
76
  def merge_uri_query
77
- return unless @query.size > 0
78
- original_query = @uri.query ? Utils.query_to_hash(@uri.query) : {}
77
+ return if @query.empty?
78
+
79
+ original_query = @uri.query ? Util.query_to_hash(@uri.query) : {}
79
80
  merged_query = original_query.merge @query
80
- @uri.query = Utils.hash_to_query merged_query
81
+ @uri.query = Util.hash_to_query merged_query
81
82
  end
82
83
 
83
84
  def create_method_specific_request
84
- # Ruby v1.9.3 doesn't understand full URI object, it needs just path :(
85
- uri = RUBY_VERSION =~ /\A2/ ? @uri : @uri.request_uri
86
- @request = @method.new uri, @headers
85
+ @request = @method.new @uri, @headers
87
86
  set_body
88
87
  set_basic_auth
89
88
  @request
@@ -91,6 +90,7 @@ class HTTPWrapper
91
90
 
92
91
  def set_body
93
92
  return unless @request.request_body_permitted?
93
+
94
94
  if @multipart_data
95
95
  set_body_from_multipart_data
96
96
  else
@@ -100,22 +100,24 @@ class HTTPWrapper
100
100
 
101
101
  def set_body_from_multipart_data
102
102
  convert_body_data_to_multipart_data if @body_data
103
- @request.set_form @multipart_data, CONTENT_TYPE::MULTIPART
103
+ @request.set_form @multipart_data, MULTIPART_CONTENT_TYPE
104
104
  end
105
105
 
106
106
  def convert_body_data_to_multipart_data
107
- @body_data = Utils.query_to_hash(@body_data) unless @body_data.kind_of? Hash
108
- @body_data.each{|key, value| @multipart_data << [key.to_s, value.to_s]}
107
+ @body_data = Util.query_to_hash(@body_data) unless @body_data.is_a? Hash
108
+ @body_data.each { |key, value| @multipart_data << [key.to_s, value.to_s] }
109
109
  end
110
110
 
111
111
  def set_body_from_body_data
112
112
  return unless @body_data
113
- @request.body = @body_data.is_a?(Hash) ? Utils.hash_to_query(@body_data) : @body_data
113
+
114
+ @request.body = @body_data.is_a?(Hash) ? Util.hash_to_query(@body_data) : @body_data
114
115
  end
115
116
 
116
117
  def set_basic_auth
117
- return unless @login
118
+ return unless @login && @password
119
+
118
120
  @request.basic_auth @login, @password
119
121
  end
120
122
  end
121
- end
123
+ end
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HTTPWrapper
2
- module Utils
4
+ module Util
3
5
  def self.validate_hash_keys(hash_to_check, known_keys_array)
4
6
  unknown_keys = hash_to_check.keys - known_keys_array
5
- if unknown_keys.length > 0
6
- raise UnknownKeyError.new "Unknown keys: #{unknown_keys.join(', ')}"
7
- end
7
+ return if unknown_keys.empty?
8
+
9
+ raise UnknownKeyError, "Unknown keys: #{unknown_keys.join(', ')}"
8
10
  end
9
11
 
10
12
  def self.query_to_hash(query)
@@ -15,4 +17,4 @@ class HTTPWrapper
15
17
  URI.encode_www_form hash
16
18
  end
17
19
  end
18
- end
20
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HTTPWrapper
2
- VERSION = '2.1.1'.freeze
3
- end
4
+ VERSION = '3.0.0'
5
+ end
data/lib/http_wrapper.rb CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'http_wrapper/version'
2
4
  require 'http_wrapper/constants'
3
5
  require 'http_wrapper/errors'
4
- require 'http_wrapper/utils'
6
+ require 'http_wrapper/util'
5
7
  require 'http_wrapper/request'
6
- require 'http_wrapper/http_wrapper'
8
+ require 'http_wrapper/http_wrapper'
@@ -1,271 +1,269 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'spec_helper'
2
4
 
3
5
  require 'http_wrapper'
4
6
 
5
- describe HTTPWrapper do
7
+ RSpec.describe HTTPWrapper do
8
+ subject(:http) { described_class.new }
9
+
6
10
  let(:basic_auth_login) { 'balogin' }
7
11
  let(:basic_auth_password) { 'bapassword' }
8
12
 
9
- it 'should define all dynamic methods' do
10
- [:get, :post, :put, :delete,
11
- :get_json, :post_json, :put_json, :delete_json,
12
- :get_ajax, :post_ajax, :put_ajax, :delete_ajax,
13
- :get_ajax_json, :post_ajax_json, :put_ajax_json, :delete_ajax_json,
14
- :get_json_ajax, :post_json_ajax, :put_json_ajax, :delete_json_ajax].each do |method|
15
- subject.should be_respond_to method
13
+ it 'defines all dynamic methods' do
14
+ %i[get post put delete
15
+ get_json post_json put_json delete_json
16
+ get_ajax post_ajax put_ajax delete_ajax
17
+ get_ajax_json post_ajax_json put_ajax_json delete_ajax_json
18
+ get_json_ajax post_json_ajax put_json_ajax delete_json_ajax].each do |method|
19
+ expect(http).to respond_to method
16
20
  end
17
21
  end
18
22
 
19
- context 'HTTP' do
23
+ describe 'HTTP' do
20
24
  let(:sample_url) { 'http://example.com' }
21
- let(:sample_url_with_basic_auth) { "http://#{basic_auth_login}:#{basic_auth_password}@example.com" }
22
25
 
23
- context 'Options' do
24
- it 'should raise UnknownParameterError if initial options key is unknown' do
26
+ describe 'Options' do
27
+ it 'raises UnknownParameterError if initial options key is unknown' do
25
28
  expect do
26
- HTTPWrapper.new unknown_option: 'test', maybe_this_known: '?'
29
+ described_class.new unknown_option: 'test', maybe_this_known: '?'
27
30
  end.to raise_error HTTPWrapper::UnknownKeyError, 'Unknown keys: unknown_option, maybe_this_known'
28
31
  end
29
32
 
30
- it 'should raise UnknownParameterError if params key is unknown' do
33
+ it 'raises UnknownParameterError if params key is unknown' do
31
34
  expect do
32
- subject.get sample_url, unknown_param_key: 'test', another_param_key: 'wow'
35
+ http.get sample_url, unknown_param_key: 'test', another_param_key: 'wow'
33
36
  end.to raise_error HTTPWrapper::UnknownKeyError, 'Unknown keys: unknown_param_key, another_param_key'
34
37
  end
35
38
 
36
- it 'should follow redirects no more then 10 times by default' do
39
+ it 'follows redirects no more then 10 times by default' do
37
40
  stub_redirects sample_url, 9
38
- response = subject.get sample_url
39
- response.code.should eql '200'
41
+ response = http.get sample_url
42
+ expect(response.code).to eq '200'
40
43
 
41
44
  stub_redirects sample_url, 10
42
- expect { subject.get sample_url }.to raise_error HTTPWrapper::TooManyRedirectsError, 'Too many redirects!'
45
+ expect { http.get sample_url }.to raise_error HTTPWrapper::TooManyRedirectsError, 'Too many redirects!'
43
46
  end
44
47
 
45
- it 'should follow redirects no more times then specified' do
46
- subject.max_redirects = 5
48
+ it 'follows redirects no more times then specified' do
49
+ http.max_redirects = 5
47
50
 
48
51
  stub_redirects sample_url, 4
49
- response = subject.get sample_url
50
- response.code.should eql '200'
52
+ response = http.get sample_url
53
+ expect(response.code).to eq '200'
51
54
 
52
55
  stub_redirects sample_url, 5
53
- expect { subject.get sample_url }.to raise_error HTTPWrapper::TooManyRedirectsError, 'Too many redirects!'
56
+ expect { http.get sample_url }.to raise_error HTTPWrapper::TooManyRedirectsError, 'Too many redirects!'
54
57
  end
55
58
 
56
- it 'should use logger' do
59
+ it 'uses logger' do
57
60
  require 'logger'
58
61
  logger = Logger.new StringIO.new
59
- logger.should_receive(:<<).at_least(:once)
60
- subject.logger = logger
62
+ allow(logger).to receive(:<<)
63
+ http.logger = logger
61
64
 
62
65
  WebMock.allow_net_connect!
63
66
  begin
64
- subject.get 'localhost'
65
- rescue
67
+ http.get 'localhost'
68
+ rescue StandardError # rubocop:disable Lint/HandleExceptions
66
69
  # NOOP, rescue from "connection refused" and such
67
70
  end
68
71
  WebMock.disable_net_connect!
72
+
73
+ expect(logger).to have_received(:<<).at_least(:once)
69
74
  end
70
75
  end
71
76
 
72
- context 'GET' do
73
- it 'should add http uri scheme if missing' do
77
+ describe 'GET' do
78
+ it 'adds http uri scheme if missing' do
74
79
  stub_get sample_url
75
- subject.get sample_url.gsub(/\Ahttp:\/\//, '')
80
+ http.get sample_url.gsub(%r{\Ahttp://}, '')
76
81
  end
77
82
 
78
- it 'should hit provided url with default content type' do
79
- params = { headers: {HTTPWrapper::HEADER::CONTENT_TYPE => HTTPWrapper::CONTENT_TYPE::DEFAULT} }
83
+ it 'hits provided url with default content type' do
84
+ params = { headers: { HTTPWrapper::CONTENT_TYPE_HEADER_NAME => HTTPWrapper::DEFAULT_CONTENT_TYPE } }
80
85
  stub_get sample_url, params
81
- subject.get sample_url
86
+ http.get sample_url
82
87
  end
83
88
 
84
- it 'should set content type if provided' do
85
- params = { headers: {HTTPWrapper::HEADER::CONTENT_TYPE => 'Custom Content Type'} }
89
+ it 'sets content type if provided' do
90
+ params = { headers: { HTTPWrapper::CONTENT_TYPE_HEADER_NAME => 'Custom Content Type' } }
86
91
  stub_get sample_url, params
87
- subject.get sample_url, params
88
- subject.get sample_url, content_type: 'Custom Content Type'
89
- subject.get sample_url, params.merge({content_type: 'Should Be Overwritten'})
92
+ http.get sample_url, params
93
+ http.get sample_url, content_type: 'Custom Content Type'
94
+ http.get sample_url, params.merge(content_type: 'Should Be Overwritten')
90
95
  end
91
96
 
92
- it 'should set proper header for JSON requests' do
97
+ it 'sets proper header for JSON requests' do
93
98
  params = { headers: HTTPWrapper::JSON_HEADER }
94
99
  stub_get sample_url, params
95
- subject.get_json sample_url
100
+ http.get_json sample_url
96
101
  end
97
102
 
98
- it 'should set proper header for AJAX requests' do
103
+ it 'sets proper header for AJAX requests' do
99
104
  params = {
100
105
  headers: {
101
- HTTPWrapper::HEADER::CONTENT_TYPE => HTTPWrapper::CONTENT_TYPE::DEFAULT
106
+ HTTPWrapper::CONTENT_TYPE_HEADER_NAME => HTTPWrapper::DEFAULT_CONTENT_TYPE
102
107
  }.merge(HTTPWrapper::AJAX_HEADER)
103
108
  }
104
109
  stub_get sample_url, params
105
- subject.get_ajax sample_url
110
+ http.get_ajax sample_url
106
111
  end
107
112
 
108
- it 'should set proper headers for AJAX-JSON requests' do
113
+ it 'sets proper headers for AJAX-JSON requests' do
109
114
  params = { headers: HTTPWrapper::AJAX_JSON_HEADER }
110
115
  stub_get sample_url, params
111
- subject.get_ajax_json sample_url
116
+ http.get_ajax_json sample_url
112
117
  end
113
118
 
114
- it 'should correctly escape query parameters' do
115
- stub_get sample_url + '/?param1=&param2=A%26B&param3=C%20%26%20D'
116
- subject.get sample_url, query: {param1: '', param2: 'A&B', param3: 'C & D'}
119
+ it 'correctlies escape query parameters' do
120
+ stub_get "#{sample_url}/?param1=&param2=A%26B&param3=C%20%26%20D"
121
+ http.get sample_url, query: { param1: '', param2: 'A&B', param3: 'C & D' }
117
122
  end
118
123
 
119
- it 'should set default user agent' do
120
- params = { headers: {HTTPWrapper::HEADER::USER_AGENT => HTTPWrapper::USER_AGENT} }
124
+ it 'sets default user agent' do
125
+ params = { headers: { HTTPWrapper::USER_AGENT_HEADER_NAME => HTTPWrapper::USER_AGENT } }
121
126
  stub_get sample_url, params
122
- subject.get sample_url
127
+ http.get sample_url
123
128
  end
124
129
 
125
- it 'should change user agent if provided' do
130
+ it 'changes user agent if provided' do
126
131
  custom_user_agent = 'Mozilla v1.2.3'
127
- params = { headers: {HTTPWrapper::HEADER::USER_AGENT => custom_user_agent} }
132
+ params = { headers: { HTTPWrapper::USER_AGENT_HEADER_NAME => custom_user_agent } }
128
133
  stub_get sample_url, params
129
- subject.get sample_url, params
134
+ http.get sample_url, params
130
135
 
131
- subject.get sample_url, user_agent: custom_user_agent
136
+ http.get sample_url, user_agent: custom_user_agent
132
137
 
133
- subject.user_agent = custom_user_agent
134
- subject.get sample_url
138
+ http.user_agent = custom_user_agent
139
+ http.get sample_url
135
140
 
136
141
  expect do
137
- subject.get sample_url, user_agent: 'abracadabra'
142
+ http.get sample_url, user_agent: 'abracadabra'
138
143
  end.to raise_error WebMock::NetConnectNotAllowedError
139
144
 
140
145
  expect do
141
- subject.user_agent = 'another test'
142
- subject.get sample_url
146
+ http.user_agent = 'another test'
147
+ http.get sample_url
143
148
  end.to raise_error WebMock::NetConnectNotAllowedError
144
149
  end
145
150
 
146
- it 'should precedence header user agent before params' do
147
- params = { headers: {HTTPWrapper::HEADER::USER_AGENT => 'TestUserAgent'} }
151
+ it 'precedences header user agent before params' do
152
+ params = { headers: { HTTPWrapper::USER_AGENT_HEADER_NAME => 'TestUserAgent' } }
148
153
  stub_get sample_url, params
149
154
 
150
- subject.user_agent = 'Should Be Overwritten'
151
- subject.get sample_url, params
155
+ http.user_agent = 'Should Be Overwritten'
156
+ http.get sample_url, params
152
157
  end
153
158
 
154
- it 'should send cookie if provided' do
159
+ it 'sends cookie if provided' do
155
160
  cookie_value = 'some cookie'
156
- params = { headers: {'Cookie' => cookie_value} }
161
+ params = { headers: { 'Cookie' => cookie_value } }
157
162
  stub_get sample_url, params
158
- subject.get sample_url, cookie: cookie_value
159
- subject.get sample_url, params
163
+ http.get sample_url, cookie: cookie_value
164
+ http.get sample_url, params
160
165
  end
161
166
 
162
- it 'should use headers cookie if both (headers and parameters) cookies provided' do
163
- params = { headers: {'Cookie' => 'Custom cookie'} }
167
+ it 'uses headers cookie if both (headers and parameters) cookies provided' do
168
+ params = { headers: { 'Cookie' => 'Custom cookie' } }
164
169
  stub_get sample_url, params
165
- subject.get sample_url, params.merge({cookie: 'should not use this one'})
170
+ http.get sample_url, params.merge(cookie: 'should not use this one')
166
171
  end
167
172
 
168
- it 'should hit provided url with basic auth' do
169
- stub_get sample_url_with_basic_auth
170
- subject.get sample_url, auth: {login: basic_auth_login, password: basic_auth_password}
173
+ it 'hits provided url with basic auth' do
174
+ stub_request(:get, sample_url).with(basic_auth: [basic_auth_login, basic_auth_password])
175
+ http.get sample_url, auth: { login: basic_auth_login, password: basic_auth_password }
171
176
  end
172
177
 
173
- it 'should merge query parameters and params should take precedence' do
174
- stub_get sample_url + '/?text=edf&time=16:44&user=test'
175
- subject.get(sample_url + '/?user=test&text=abc', query: {time: '16:44', text: 'edf'})
178
+ it 'merges query parameters and params should take precedence' do
179
+ stub_get "#{sample_url}/?text=edf&time=16:44&user=test"
180
+ http.get "#{sample_url}/?user=test&text=abc", query: { time: '16:44', text: 'edf' }
176
181
  end
177
182
 
178
- it 'should equally treat header as string and header as symbol' do
183
+ it 'equallies treat header as string and header as symbol' do
179
184
  custom_content_type = 'Some Content Type'
180
- stub_get sample_url, { headers: {'Content-Type' => custom_content_type} }
181
- subject.get sample_url, { headers: {content_type: custom_content_type} }
185
+ stub_get sample_url, headers: { 'Content-Type' => custom_content_type }
186
+ http.get sample_url, headers: { content_type: custom_content_type }
182
187
  end
183
188
  end
184
189
 
185
- context 'POST' do
186
- it 'should set content type if provided' do
187
- params = { headers: {HTTPWrapper::HEADER::CONTENT_TYPE => 'Custom Content Type'} }
190
+ describe 'POST' do
191
+ it 'sets content type if provided' do
192
+ params = { headers: { HTTPWrapper::CONTENT_TYPE_HEADER_NAME => 'Custom Content Type' } }
188
193
  stub_post sample_url, params
189
- subject.post sample_url, params
194
+ http.post sample_url, params
190
195
  end
191
196
 
192
- it 'should return cookies after post' do
197
+ it 'returns cookies after post' do
193
198
  cookie_value = 'some cookie'
194
- params = { body: {username: 'test', password: 'test'} }
195
- stub_post(sample_url, params).to_return({headers: {'Set-Cookie' => cookie_value}})
196
- cookie = subject.post_and_get_cookie sample_url, params
197
- cookie.should eql cookie_value
199
+ params = { body: { username: 'test', password: 'test' } }
200
+ stub_post(sample_url, params).to_return(headers: { 'Set-Cookie' => cookie_value })
201
+ cookie = http.post_and_get_cookie sample_url, params
202
+ expect(cookie).to eq cookie_value
198
203
  end
199
204
 
200
- it 'should hit provided url with default content type' do
201
- params = { headers: {HTTPWrapper::HEADER::CONTENT_TYPE => HTTPWrapper::CONTENT_TYPE::POST } }
205
+ it 'hits provided url with default content type' do
206
+ params = { headers: { HTTPWrapper::CONTENT_TYPE_HEADER_NAME => HTTPWrapper::POST_CONTENT_TYPE } }
202
207
  stub_post sample_url, params
203
- subject.post sample_url
208
+ http.post sample_url
204
209
  end
205
210
 
206
- it 'should set all possible parameters correctly' do
207
- stub_request(:post, 'http://user:passw@example.com/?a=b&c=d').
208
- with(body: {
209
- e: 'f',
210
- g: 'k'
211
- },
212
- headers: {
213
- 'Content-Type' => 'Custom content type',
214
- 'User-Agent' => 'Custom user agent',
215
- 'Cookie' => 'cookie',
216
- 'X-Requested-With' => 'XMLHttpRequest'
217
- })
218
-
219
- subject.post sample_url, content_type: 'Custom content type',
220
- user_agent: 'Custom user agent',
221
- headers: {x_requested_with: 'XMLHttpRequest'},
222
- query: {a: 'b', c: 'd'},
223
- body: {e: 'f', g: 'k'},
224
- auth: {login: 'user', password: 'passw'},
225
- cookie: 'cookie'
211
+ it 'sets all possible parameters correctly' do
212
+ stub_request(:post, "#{sample_url}/?a=b&c=d")
213
+ .with(
214
+ body: 'e=f&g=k',
215
+ headers: {
216
+ 'Content-Type' => 'Custom content type',
217
+ 'User-Agent' => 'Custom user agent',
218
+ 'Cookie' => 'cookie',
219
+ 'X-Requested-With' => 'XMLHttpRequest'
220
+ },
221
+ basic_auth: %w[user passw]
222
+ )
223
+
224
+ http.post sample_url,
225
+ content_type: 'Custom content type',
226
+ user_agent: 'Custom user agent',
227
+ headers: { x_requested_with: 'XMLHttpRequest' },
228
+ query: { a: 'b', c: 'd' },
229
+ body: { e: 'f', g: 'k' },
230
+ auth: { login: 'user', password: 'passw' },
231
+ cookie: 'cookie'
226
232
  end
227
233
  end
228
234
 
229
- context 'PUT' do
230
- it 'should hit provided url with default content type' do
231
- params = { headers: {HTTPWrapper::HEADER::CONTENT_TYPE => HTTPWrapper::CONTENT_TYPE::POST } }
235
+ describe 'PUT' do
236
+ it 'hits provided url with default content type' do
237
+ params = { headers: { HTTPWrapper::CONTENT_TYPE_HEADER_NAME => HTTPWrapper::POST_CONTENT_TYPE } }
232
238
  stub_put sample_url, params
233
- subject.put sample_url
239
+ http.put sample_url
234
240
  end
235
241
  end
236
242
 
237
- context 'DELETE' do
238
- it 'should hit provided url with default content type' do
239
- params = { headers: {HTTPWrapper::HEADER::CONTENT_TYPE => HTTPWrapper::CONTENT_TYPE::DEFAULT } }
243
+ describe 'DELETE' do
244
+ it 'hits provided url with default content type' do
245
+ params = { headers: { HTTPWrapper::CONTENT_TYPE_HEADER_NAME => HTTPWrapper::DEFAULT_CONTENT_TYPE } }
240
246
  stub_delete sample_url, params
241
- subject.delete sample_url
247
+ http.delete sample_url
242
248
  end
243
249
  end
244
250
 
245
- context 'Custom request instance' do
246
- it 'should perform request for custom Net::HTTP request instance' do
251
+ describe 'Custom request instance' do
252
+ it 'performs request for custom Net::HTTP request instance' do
247
253
  stub_request :head, sample_url
248
254
  uri = URI sample_url
249
-
250
- if RUBY_VERSION =~ /\A2/
251
- request = Net::HTTP::Head.new uri
252
- subject.execute request, request.uri
253
- else
254
- # Ruby v1.9.3 doesn't understand full URI object, it needs just path :(
255
- request = Net::HTTP::Head.new uri.request_uri
256
- subject.execute request, uri
257
- end
255
+ request = Net::HTTP::Head.new uri
256
+ http.execute request, request.uri
258
257
  end
259
258
  end
260
259
  end
261
260
 
262
- context 'HTTPS' do
261
+ describe 'HTTPS' do
263
262
  let(:sample_url) { 'https://example.com' }
264
263
 
265
- it 'should hit provided url with HTTPS protocol' do
264
+ it 'hits provided url with HTTPS protocol' do
266
265
  stub_get sample_url
267
- subject.get sample_url
266
+ http.get sample_url
268
267
  end
269
268
  end
270
269
  end
271
-
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,16 @@
1
- require 'rspec'
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
2
4
  require 'webmock/rspec'
3
5
 
4
6
  if ENV['TRAVIS'] == 'true'
5
- require 'coveralls'
6
- Coveralls.wear!
7
+ require 'simplecov'
8
+ SimpleCov.start
7
9
  end
8
10
 
9
- $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
10
-
11
11
  module HTTPWrapperSpecHelpers
12
- [:get, :post, :put, :delete].each do |type|
13
- define_method("stub_#{type.to_s}") do |url, params = nil|
12
+ %i[get post put delete].each do |type|
13
+ define_method("stub_#{type}") do |url, params = nil|
14
14
  if params
15
15
  stub_request(type, url).with(params)
16
16
  else
@@ -20,7 +20,7 @@ module HTTPWrapperSpecHelpers
20
20
  end
21
21
 
22
22
  def stub_redirects(url, amount_of_redirects)
23
- stub_get(url).to_return(status: 301, headers: {'Location' => url})
23
+ stub_get(url).to_return(status: 301, headers: { 'Location' => url })
24
24
  .times(amount_of_redirects)
25
25
  .then
26
26
  .to_return(status: 200)
@@ -29,4 +29,11 @@ end
29
29
 
30
30
  RSpec.configure do |config|
31
31
  config.include HTTPWrapperSpecHelpers
32
- end
32
+
33
+ # Disable RSpec exposing methods globally on `Module` and `main`
34
+ config.disable_monkey_patching!
35
+
36
+ config.expect_with :rspec do |c|
37
+ c.syntax = :expect
38
+ end
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leonid Svyatov
@@ -9,64 +9,106 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-22 00:00:00.000000000 Z
12
+ date: 2019-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '1.3'
20
+ version: '0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '1.3'
27
+ version: '0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ~>
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '10.1'
34
+ version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '10.1'
41
+ version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ~>
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: 2.14.1
48
+ version: '3.7'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ~>
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: 2.14.1
55
+ version: '3.7'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rubocop
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 0.63.1
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 0.63.1
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubocop-rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.32'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '1.32'
84
+ - !ruby/object:Gem::Dependency
85
+ name: simplecov
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 0.16.1
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 0.16.1
56
98
  - !ruby/object:Gem::Dependency
57
99
  name: webmock
58
100
  requirement: !ruby/object:Gem::Requirement
59
101
  requirements:
60
- - - ~>
102
+ - - "~>"
61
103
  - !ruby/object:Gem::Version
62
- version: 1.13.0
104
+ version: '3.5'
63
105
  type: :development
64
106
  prerelease: false
65
107
  version_requirements: !ruby/object:Gem::Requirement
66
108
  requirements:
67
- - - ~>
109
+ - - "~>"
68
110
  - !ruby/object:Gem::Version
69
- version: 1.13.0
111
+ version: '3.5'
70
112
  description: Simple wrapper around standard Net::HTTP library with multipart/form-data
71
113
  file upload ability
72
114
  email: leonid@svyatov.ru
@@ -74,18 +116,18 @@ executables: []
74
116
  extensions: []
75
117
  extra_rdoc_files: []
76
118
  files:
119
+ - CHANGELOG.md
77
120
  - Gemfile
78
121
  - LICENSE
79
122
  - README.md
80
- - CHANGELOG.md
81
123
  - Rakefile
124
+ - lib/http_wrapper.rb
82
125
  - lib/http_wrapper/constants.rb
83
126
  - lib/http_wrapper/errors.rb
84
127
  - lib/http_wrapper/http_wrapper.rb
85
128
  - lib/http_wrapper/request.rb
86
- - lib/http_wrapper/utils.rb
129
+ - lib/http_wrapper/util.rb
87
130
  - lib/http_wrapper/version.rb
88
- - lib/http_wrapper.rb
89
131
  - spec/http_wrapper_spec.rb
90
132
  - spec/spec_helper.rb
91
133
  homepage: http://github.com/svyatov/http_wrapper
@@ -98,20 +140,19 @@ require_paths:
98
140
  - lib
99
141
  required_ruby_version: !ruby/object:Gem::Requirement
100
142
  requirements:
101
- - - '>='
143
+ - - ">="
102
144
  - !ruby/object:Gem::Version
103
- version: 1.9.3
145
+ version: 2.3.0
104
146
  required_rubygems_version: !ruby/object:Gem::Requirement
105
147
  requirements:
106
- - - '>='
148
+ - - ">="
107
149
  - !ruby/object:Gem::Version
108
150
  version: '0'
109
151
  requirements: []
110
- rubyforge_project:
111
- rubygems_version: 2.1.4
152
+ rubygems_version: 3.0.2
112
153
  signing_key:
113
154
  specification_version: 4
114
155
  summary: Simple wrapper around standard Net::HTTP library
115
156
  test_files:
116
- - spec/http_wrapper_spec.rb
117
157
  - spec/spec_helper.rb
158
+ - spec/http_wrapper_spec.rb