From d8a2c546f847e8eea90d35441c876b5d108bdedc Mon Sep 17 00:00:00 2001 From: Stanislav K Date: Mon, 30 Oct 2017 21:36:35 +0700 Subject: [PATCH 1/3] some dummy code for RateLimitError --- lib/ipinfo_io/errors.rb | 3 +++ test/ipinfo_io_test.rb | 5 +++++ test/test_helper.rb | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 lib/ipinfo_io/errors.rb diff --git a/lib/ipinfo_io/errors.rb b/lib/ipinfo_io/errors.rb new file mode 100644 index 0000000..54954bc --- /dev/null +++ b/lib/ipinfo_io/errors.rb @@ -0,0 +1,3 @@ +module IpinfoIo + class RateLimitError < StandardError; end +end diff --git a/test/ipinfo_io_test.rb b/test/ipinfo_io_test.rb index df39506..c73b0fc 100644 --- a/test/ipinfo_io_test.rb +++ b/test/ipinfo_io_test.rb @@ -9,6 +9,11 @@ def test_that_it_has_a_version_number refute_nil ::IpinfoIo::VERSION end + def test_rate_limit_error + error = assert_equal(IpinfoIo::RateLimitError) { IpinfoIo.lookup } + assert_equal "To increase your limits, please review our paid plans at https://ipinfo.io/pricing", error.message + end + def test_lookup_without_arg expected = { "ip" => "110.171.151.183", diff --git a/test/test_helper.rb b/test/test_helper.rb index 3b152e0..c3fbfa1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -4,7 +4,7 @@ require 'minitest/autorun' require 'minitest/reporters' require 'minitest-vcr' -require 'webmock' +require 'webmock/minitest' Minitest::Reporters.use!( Minitest::Reporters::SpecReporter.new From b5ad8ba2ecc6198f4dfaca783912dc48cd8a6924 Mon Sep 17 00:00:00 2001 From: Stanislav K Date: Mon, 30 Oct 2017 21:52:12 +0700 Subject: [PATCH 2/3] Raising RateLimitError now --- lib/ipinfo_io.rb | 5 +++++ test/ipinfo_io_test.rb | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/ipinfo_io.rb b/lib/ipinfo_io.rb index 76e7cda..778dcd6 100644 --- a/lib/ipinfo_io.rb +++ b/lib/ipinfo_io.rb @@ -1,10 +1,13 @@ # frozen_string_literal: true require "ipinfo_io/version" +require 'ipinfo_io/errors' require 'faraday' require 'json' module IpinfoIo + RATE_LIMIT_MESSAGE = "To increase your limits, please review our paid plans at https://ipinfo.io/pricing" + class << self def lookup(ip=nil) response = Faraday.get("https://ipinfo.io/#{ip}") do |req| @@ -13,6 +16,8 @@ def lookup(ip=nil) end end + raise RateLimitError.new(RATE_LIMIT_MESSAGE) if response.status.eql?(429) + JSON.parse(response.body) end diff --git a/test/ipinfo_io_test.rb b/test/ipinfo_io_test.rb index c73b0fc..bbbcc15 100644 --- a/test/ipinfo_io_test.rb +++ b/test/ipinfo_io_test.rb @@ -10,7 +10,8 @@ def test_that_it_has_a_version_number end def test_rate_limit_error - error = assert_equal(IpinfoIo::RateLimitError) { IpinfoIo.lookup } + stub_request(:get, 'https://ipinfo.io').to_return(body:'', status: 429) + error = assert_raises(IpinfoIo::RateLimitError) { IpinfoIo.lookup } assert_equal "To increase your limits, please review our paid plans at https://ipinfo.io/pricing", error.message end From 7b306d191ca9cd22708b5e95e9f4d3f1862271c1 Mon Sep 17 00:00:00 2001 From: Stanislav K Date: Mon, 30 Oct 2017 21:53:46 +0700 Subject: [PATCH 3/3] slight code style changes --- lib/ipinfo_io.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/ipinfo_io.rb b/lib/ipinfo_io.rb index 778dcd6..197ab04 100644 --- a/lib/ipinfo_io.rb +++ b/lib/ipinfo_io.rb @@ -7,11 +7,12 @@ module IpinfoIo RATE_LIMIT_MESSAGE = "To increase your limits, please review our paid plans at https://ipinfo.io/pricing" + HOST = 'ipinfo.io' class << self def lookup(ip=nil) - response = Faraday.get("https://ipinfo.io/#{ip}") do |req| - default_header.each_pair do |key, value| + response = Faraday.get("https://#{HOST}/#{ip}") do |req| + default_headers.each_pair do |key, value| req.headers[key] = value end end @@ -21,10 +22,9 @@ def lookup(ip=nil) JSON.parse(response.body) end - private - def default_header + def default_headers { 'User-Agent' => "ruby/#{::IpinfoIo::VERSION}", 'Accept' => 'application/json'