From f769b6f367867f64d44bc50cbcabe4535a136ba6 Mon Sep 17 00:00:00 2001 From: Nic Duke Date: Wed, 2 Aug 2023 17:37:15 +0100 Subject: [PATCH 1/4] Fixes #121. Bump faraday dep version from >= 0.9.2 to >= 2 and migrate custom middleware --- lib/survey-gizmo-ruby.rb | 1 - .../faraday_middleware/parse_survey_gizmo.rb | 30 +++++++++++-------- survey-gizmo-ruby.gemspec | 3 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/survey-gizmo-ruby.rb b/lib/survey-gizmo-ruby.rb index e102e3a..9a4e990 100644 --- a/lib/survey-gizmo-ruby.rb +++ b/lib/survey-gizmo-ruby.rb @@ -10,7 +10,6 @@ require 'awesome_print' require 'digest/md5' require 'faraday' -require 'faraday_middleware' require 'logger' require 'net/http' require 'retriable' diff --git a/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb b/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb index ee65c7b..54ad72a 100644 --- a/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb +++ b/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb @@ -1,10 +1,10 @@ -require 'faraday_middleware/response_middleware' +require 'faraday' module SurveyGizmo class RateLimitExceededError < RuntimeError; end class BadResponseError < RuntimeError; end - class ParseSurveyGizmo < FaradayMiddleware::ResponseMiddleware + class ParseSurveyGizmo < Faraday::Middleware Faraday::Response.register_middleware(parse_survey_gizmo_data: self) PAGINATION_FIELDS = [ @@ -22,20 +22,26 @@ class ParseSurveyGizmo < FaradayMiddleware::ResponseMiddleware 'modified_on' ] - def call(environment) - @app.call(environment).on_complete do |response| - fail RateLimitExceededError if response.status == 429 - fail BadResponseError, "Bad response code #{response.status} in #{response.inspect}" unless response.status == 200 - fail BadResponseError, response.body['message'] unless response.body['result_ok'] && response.body['result_ok'].to_s =~ /^true$/i + def on_complete(env) + fail RateLimitExceededError if env.status == 429 + fail BadResponseError, "Bad response code #{env.status} in #{environment.inspect}" unless env.status == 200 + fail BadResponseError, env.body['message'] unless env.body['result_ok'] && env.body['result_ok'].to_s =~ /^true$/i - process_response(response) - end + process_response(env) end - define_parser do |body| + private + + def process_response(env) + env[:body] = parse(env[:body]) + rescue Faraday::ParsingError => e + raise Faraday::ParsingError.new(e.wrapped_exception, env[:response]) + end + + def parse(body) PAGINATION_FIELDS.each { |n| body[n] = body[n].to_i if body[n] } - next body unless body['data'] + return body unless body['data'] # Handle really crappy [] notation in SG API, so far just in SurveyResponse Array.wrap(body['data']).compact.each do |datum| @@ -71,8 +77,6 @@ def call(environment) body end - private - def self.cleanup_attribute_name(attr) attr.downcase.gsub(/[^[:alnum:]]+/, '_') .gsub(/(url|variable|standard|shown)/, '') diff --git a/survey-gizmo-ruby.gemspec b/survey-gizmo-ruby.gemspec index b65bbcb..7c816bb 100644 --- a/survey-gizmo-ruby.gemspec +++ b/survey-gizmo-ruby.gemspec @@ -18,8 +18,7 @@ Gem::Specification.new do |gem| gem.add_dependency 'activesupport', '>= 3.0' gem.add_dependency 'addressable', '>= 2' gem.add_dependency 'awesome_print', '>= 1' - gem.add_dependency 'faraday', '>= 0.9.1' - gem.add_dependency 'faraday_middleware' + gem.add_dependency 'faraday', '>= 2.0' gem.add_dependency 'retriable', '>= 2.0' gem.add_dependency 'i18n' gem.add_dependency 'virtus', '>= 1.0.0' From 697531c812eed68d351a72b3ecbc34a0c3764cae Mon Sep 17 00:00:00 2001 From: Nic Duke Date: Thu, 3 Aug 2023 15:04:09 +0100 Subject: [PATCH 2/4] Fix erroneous variable reference in ParseSurveyGizmo#on_complete callback --- lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb b/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb index 54ad72a..6a9ab41 100644 --- a/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb +++ b/lib/survey_gizmo/faraday_middleware/parse_survey_gizmo.rb @@ -24,7 +24,7 @@ class ParseSurveyGizmo < Faraday::Middleware def on_complete(env) fail RateLimitExceededError if env.status == 429 - fail BadResponseError, "Bad response code #{env.status} in #{environment.inspect}" unless env.status == 200 + fail BadResponseError, "Bad response code #{env.status} in #{env.inspect}" unless env.status == 200 fail BadResponseError, env.body['message'] unless env.body['result_ok'] && env.body['result_ok'].to_s =~ /^true$/i process_response(env) From 60e134b8362e8a10b8b1bb97288747648977ec39 Mon Sep 17 00:00:00 2001 From: Nic Duke Date: Mon, 7 Aug 2023 09:57:05 +0100 Subject: [PATCH 3/4] Fixes #121. Remove Ruby versions 2.4 and 2.5 from CI --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3b66864..3abe07f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: [2.4, 2.5, 2.6, 2.7, 3.0, head] + ruby: [2.6, 2.7, 3.0, head] steps: - name: Checkout repository From 5cfb35085dcf97bdb58dea91339453d65eab14c7 Mon Sep 17 00:00:00 2001 From: Nic Duke Date: Mon, 7 Aug 2023 09:59:10 +0100 Subject: [PATCH 4/4] Fixes #121. Update min ruby version in gemspec to be >=2.6 --- survey-gizmo-ruby.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/survey-gizmo-ruby.gemspec b/survey-gizmo-ruby.gemspec index 7c816bb..8ce8481 100644 --- a/survey-gizmo-ruby.gemspec +++ b/survey-gizmo-ruby.gemspec @@ -13,7 +13,7 @@ Gem::Specification.new do |gem| gem.summary = 'Gem to use the SurveyGizmo.com REST API, v3+' gem.homepage = 'http://github.com/jarthod/survey-gizmo-ruby' gem.licenses = ['MIT'] - gem.required_ruby_version = '>= 2.1' + gem.required_ruby_version = '>= 2.6' gem.add_dependency 'activesupport', '>= 3.0' gem.add_dependency 'addressable', '>= 2'