diff --git a/.config/rubocop/config.yml b/.config/rubocop/config.yml index aadc53af..fa97f625 100644 --- a/.config/rubocop/config.yml +++ b/.config/rubocop/config.yml @@ -40,7 +40,7 @@ Metrics/MethodLength: - config/initializers/universal_logger_patch.rb Metrics/ParameterLists: Exclude: - - app/aspects/extensions/fetchers/request.rb + - app/aspects/extensions/fetcher/request.rb - app/aspects/screens/placeholder.rb Naming/VariableNumber: AllowedPatterns: diff --git a/.reek.yml b/.reek.yml index ebf11256..79513501 100644 --- a/.reek.yml +++ b/.reek.yml @@ -69,7 +69,7 @@ detectors: - Terminus::Aspects::Errors::Problem#enum - Terminus::Aspects::Extensions::Cloner#build_attributes - Terminus::Aspects::Extensions::Exchanges::Refresher#fetch - - Terminus::Aspects::Extensions::Fetchers::Client#maybe_alter_mime_type + - Terminus::Aspects::Extensions::Fetcher::Client#maybe_alter_mime_type - Terminus::Aspects::Extensions::Importers::Remote::Extractor#build - Terminus::Aspects::Extensions::Importers::Remote::Transformers::Kind#process - Terminus::Aspects::Extensions::Renderers::Image#render_multiple @@ -107,8 +107,7 @@ detectors: - Terminus::Actions::Extensions::Poll::Show#fetch - Terminus::Aspects::Croner#call - Terminus::Aspects::Extensions::Exchanges::RequestBuilder#render - - Terminus::Aspects::Extensions::Fetchers::Client#parse - - Terminus::Aspects::Extensions::Fetchers::Client#process + - Terminus::Aspects::Extensions::Fetcher::Client#parse - Terminus::Aspects::Extensions::Importers::Remote::Transformer#process - Terminus::Aspects::Extensions::Parser#from_json - Terminus::Aspects::Firmware::Downloader#get diff --git a/app/aspects/extensions/exchanges/refresher.rb b/app/aspects/extensions/exchanges/refresher.rb index 464edeeb..f24939a4 100644 --- a/app/aspects/extensions/exchanges/refresher.rb +++ b/app/aspects/extensions/exchanges/refresher.rb @@ -10,12 +10,12 @@ module Terminus # Updates an exchange based on multiple responses. class Refresher include Deps[ - "aspects.extensions.fetchers.client", + "aspects.extensions.fetcher.client", "aspects.extensions.exchanges.request_builder", extension_repository: "repositories.extension", exchange_repository: "repositories.extension_exchange" ] - include Initable[request: Fetchers::Request] + include Initable[request: Fetcher::Request] include Dry::Monads[:result] def call exchange diff --git a/app/aspects/extensions/exchanges/request_builder.rb b/app/aspects/extensions/exchanges/request_builder.rb index 7ffcd6ef..4b42d0de 100644 --- a/app/aspects/extensions/exchanges/request_builder.rb +++ b/app/aspects/extensions/exchanges/request_builder.rb @@ -9,7 +9,7 @@ module Terminus # Builds fully rendereed requests. class RequestBuilder include Deps["aspects.extensions.contextualizer", renderer: "liquid.basic"] - include Initable[request: Fetchers::Request] + include Initable[request: Fetcher::Request] def call exchange, extension context = contextualizer.call extension diff --git a/app/aspects/extensions/fetchers/client.rb b/app/aspects/extensions/fetcher/client.rb similarity index 97% rename from app/aspects/extensions/fetchers/client.rb rename to app/aspects/extensions/fetcher/client.rb index 1f28a575..091309e8 100644 --- a/app/aspects/extensions/fetchers/client.rb +++ b/app/aspects/extensions/fetcher/client.rb @@ -6,8 +6,8 @@ require "initable" module Terminus module Aspects module Extensions - module Fetchers - # A client for processing HTTP requests. + module Fetcher + # A specialized client for processing HTTP requests. class Client include Deps[:http] include Initable[source: Extensions::Source, special_header: "Accept", response: Response] diff --git a/app/aspects/extensions/fetchers/request.rb b/app/aspects/extensions/fetcher/request.rb similarity index 95% rename from app/aspects/extensions/fetchers/request.rb rename to app/aspects/extensions/fetcher/request.rb index d82ac20b..2e5f5dfc 100644 --- a/app/aspects/extensions/fetchers/request.rb +++ b/app/aspects/extensions/fetcher/request.rb @@ -5,7 +5,7 @@ require "core" module Terminus module Aspects module Extensions - module Fetchers + module Fetcher # Captures HTTP request details. Request = Data.define :headers, :verb, :uri, :body do def initialize uri:, headers: Core::EMPTY_HASH, verb: "get", body: Core::EMPTY_HASH diff --git a/app/aspects/extensions/fetchers/response.rb b/app/aspects/extensions/fetcher/response.rb similarity index 86% rename from app/aspects/extensions/fetchers/response.rb rename to app/aspects/extensions/fetcher/response.rb index 957b7441..f672bde8 100644 --- a/app/aspects/extensions/fetchers/response.rb +++ b/app/aspects/extensions/fetcher/response.rb @@ -5,8 +5,8 @@ require "core" module Terminus module Aspects module Extensions - module Fetchers - # Captures the HTTP response details. + module Fetcher + # Captures HTTP response details. Response = Data.define :data, :errors do def initialize data: {}, errors: {} super diff --git a/spec/app/aspects/extensions/exchanges/refresher_spec.rb b/spec/app/aspects/extensions/exchanges/refresher_spec.rb index 4337c482..e8c29f03 100644 --- a/spec/app/aspects/extensions/exchanges/refresher_spec.rb +++ b/spec/app/aspects/extensions/exchanges/refresher_spec.rb @@ -5,7 +5,7 @@ require "hanami_helper" RSpec.describe Terminus::Aspects::Extensions::Exchanges::Refresher, :db do subject(:refresher) { described_class.new client: } - let(:client) { instance_double Terminus::Aspects::Extensions::Fetchers::Client } + let(:client) { instance_double Terminus::Aspects::Extensions::Fetcher::Client } describe "#call" do let(:exchange) { Factory[:extension_exchange] } @@ -13,7 +13,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::Refresher, :db do it "answers success with data and no errors" do allow(client).to receive(:call).and_return( Success( - Terminus::Aspects::Extensions::Fetchers::Response[data: "test"] + Terminus::Aspects::Extensions::Fetcher::Response[data: "test"] ) ) @@ -25,7 +25,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::Refresher, :db do it "answers success with errors only" do allow(client).to receive(:call).and_return( Failure( - Terminus::Aspects::Extensions::Fetchers::Response[errors: "Danger!"] + Terminus::Aspects::Extensions::Fetcher::Response[errors: "Danger!"] ) ) @@ -43,7 +43,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::Refresher, :db do exchange = Factory[:extension_exchange, data: {"source_1" => "initial"}] allow(client).to receive(:call).and_return( - Failure(Terminus::Aspects::Extensions::Fetchers::Response[errors: "Danger!"]) + Failure(Terminus::Aspects::Extensions::Fetcher::Response[errors: "Danger!"]) ) expect(refresher.call(exchange)).to match( @@ -60,8 +60,8 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::Refresher, :db do exchange = Factory[:extension_exchange, template: "https://one.io\nhttps://two.io"] allow(client).to receive(:call).and_return( - Failure(Terminus::Aspects::Extensions::Fetchers::Response[errors: "Danger!"]), - Success(Terminus::Aspects::Extensions::Fetchers::Response[data: "pass"]) + Failure(Terminus::Aspects::Extensions::Fetcher::Response[errors: "Danger!"]), + Success(Terminus::Aspects::Extensions::Fetcher::Response[data: "pass"]) ) expect(refresher.call(exchange)).to match( @@ -89,7 +89,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::Refresher, :db do it "answers an exchange" do allow(client).to receive(:call).and_return( - Success(Terminus::Aspects::Extensions::Fetchers::Response[data: "test"]) + Success(Terminus::Aspects::Extensions::Fetcher::Response[data: "test"]) ) expect(refresher.call(exchange)).to match( diff --git a/spec/app/aspects/extensions/exchanges/request_builder_spec.rb b/spec/app/aspects/extensions/exchanges/request_builder_spec.rb index ad65d007..076789a2 100644 --- a/spec/app/aspects/extensions/exchanges/request_builder_spec.rb +++ b/spec/app/aspects/extensions/exchanges/request_builder_spec.rb @@ -22,7 +22,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::RequestBuilder do exchange = Factory.structs[:extension_exchange] expect(builder.call(exchange, extension)).to contain_exactly( - Terminus::Aspects::Extensions::Fetchers::Request[uri: exchange.template] + Terminus::Aspects::Extensions::Fetcher::Request[uri: exchange.template] ) end @@ -30,7 +30,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::RequestBuilder do exchange = Factory.structs[:extension_exchange, headers: nil, body: nil] expect(builder.call(exchange, extension)).to contain_exactly( - Terminus::Aspects::Extensions::Fetchers::Request[uri: exchange.template] + Terminus::Aspects::Extensions::Fetcher::Request[uri: exchange.template] ) end @@ -55,7 +55,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::RequestBuilder do exchange = Factory.structs[:extension_exchange, body:] expect(builder.call(exchange, extension)).to contain_exactly( - Terminus::Aspects::Extensions::Fetchers::Request[uri: exchange.template, body:] + Terminus::Aspects::Extensions::Fetcher::Request[uri: exchange.template, body:] ) end @@ -69,7 +69,7 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::RequestBuilder do ] expect(builder.call(exchange, extension)).to contain_exactly( - Terminus::Aspects::Extensions::Fetchers::Request[ + Terminus::Aspects::Extensions::Fetcher::Request[ headers: {"content_type" => "application/json"}, verb: "post", uri: "https://test.io/1", @@ -90,13 +90,13 @@ RSpec.describe Terminus::Aspects::Extensions::Exchanges::RequestBuilder do expect(builder.call(exchange, extension)).to eq( [ - Terminus::Aspects::Extensions::Fetchers::Request[ + Terminus::Aspects::Extensions::Fetcher::Request[ headers: {"content_type" => "application/json"}, verb: "post", uri: "https://test.io/1", body: {"sort" => "desc"} ], - Terminus::Aspects::Extensions::Fetchers::Request[ + Terminus::Aspects::Extensions::Fetcher::Request[ headers: {"content_type" => "application/json"}, verb: "post", uri: "https://test.io/2", diff --git a/spec/app/aspects/extensions/fetchers/client_spec.rb b/spec/app/aspects/extensions/fetcher/client_spec.rb similarity index 91% rename from spec/app/aspects/extensions/fetchers/client_spec.rb rename to spec/app/aspects/extensions/fetcher/client_spec.rb index 56b8d6c3..52dbba43 100644 --- a/spec/app/aspects/extensions/fetchers/client_spec.rb +++ b/spec/app/aspects/extensions/fetcher/client_spec.rb @@ -3,7 +3,7 @@ require "hanami_helper" require "http" -RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do +RSpec.describe Terminus::Aspects::Extensions::Fetcher::Client do subject(:client) { described_class.new http: } let(:http) { class_double HTTP } @@ -12,7 +12,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do describe "#call" do let :input do - Terminus::Aspects::Extensions::Fetchers::Request[ + Terminus::Aspects::Extensions::Fetcher::Request[ headers: {"Accept" => "application/json"}, uri: "https://ghibliapi.vercel.app/films" ] @@ -35,7 +35,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do it "answers success" do expect(client.call(input)).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: [ { "title" => "Castle in the Sky", @@ -70,7 +70,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "application/ld+json"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: { "@context" => "https://json-ld.org/contexts/person.jsonld", "@id" => "http://dbpedia.org/resource/John_Lennon", @@ -110,7 +110,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "application/geo+json"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: { "@context" => [ "https://geojson.org/geojson-ld/geojson-context.jsonld", @@ -148,7 +148,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do ) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: [ { "title" => "Castle in the Sky", @@ -179,7 +179,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "application/+json"}) expect(result).to be_failure( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ errors: { uri: "https://ghibliapi.vercel.app/films", code: nil, @@ -203,7 +203,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do it "answers success" do result = client.call input.with(headers: {content_type: "image/png"}) - expect(result).to be_success(Terminus::Aspects::Extensions::Fetchers::Response.new) + expect(result).to be_success(Terminus::Aspects::Extensions::Fetcher::Response.new) end end @@ -226,7 +226,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "text/csv"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: [ { "title" => "Castle in the Sky", @@ -258,7 +258,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "text/plain"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: %w[one two three] ] ) @@ -284,7 +284,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "text/xml"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: {"catalog" => "Empty"} ] ) @@ -310,7 +310,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "application/xml"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: {"catalog" => "Empty"} ] ) @@ -336,7 +336,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "application/rss+xml"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: {"catalog" => "Empty"} ] ) @@ -362,7 +362,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "application/atom+xml"}) expect(result).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: {"catalog" => "Empty"} ] ) @@ -371,7 +371,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do context "with POST body" do let :input do - Terminus::Aspects::Extensions::Fetchers::Request[ + Terminus::Aspects::Extensions::Fetcher::Request[ headers: {content_type: "application/json"}, verb: :post, uri: "https://test.io", @@ -395,7 +395,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do it "answers success" do expect(client.call(input)).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ data: {"name" => "test"} ] ) @@ -404,7 +404,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do context "with POST but without body" do let :input do - Terminus::Aspects::Extensions::Fetchers::Request[ + Terminus::Aspects::Extensions::Fetcher::Request[ headers: {content_type: "application/json"}, verb: :post, uri: "https://test.io" @@ -427,7 +427,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do it "answers success" do expect(client.call(input)).to be_success( - Terminus::Aspects::Extensions::Fetchers::Response[data: "{}"] + Terminus::Aspects::Extensions::Fetcher::Response[data: "{}"] ) end end @@ -446,7 +446,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do result = client.call input.with(headers: {content_type: "text/html"}) expect(result).to be_failure( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ errors: { uri: "https://ghibliapi.vercel.app/films", code: nil, @@ -470,7 +470,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do it "answers failure" do expect(client.call(input)).to be_failure( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ errors: { uri: "https://ghibliapi.vercel.app/films", code: 404, @@ -489,7 +489,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do allow(http).to receive(:headers).and_raise HTTP::RequestError, "Danger!" expect(client.call(input)).to be_failure( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ errors: { uri: "https://ghibliapi.vercel.app/films", code: nil, @@ -508,7 +508,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do allow(http).to receive(:headers).and_raise HTTP::ConnectionError, "Danger!" expect(client.call(input)).to be_failure( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ errors: { uri: "https://ghibliapi.vercel.app/films", code: nil, @@ -527,7 +527,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do allow(http).to receive(:headers).and_raise HTTP::TimeoutError, "Danger!" expect(client.call(input)).to be_failure( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ errors: { uri: "https://ghibliapi.vercel.app/films", code: nil, @@ -546,7 +546,7 @@ RSpec.describe Terminus::Aspects::Extensions::Fetchers::Client do allow(http).to receive(:headers).and_raise OpenSSL::SSL::SSLError, "Danger!" expect(client.call(input)).to be_failure( - Terminus::Aspects::Extensions::Fetchers::Response[ + Terminus::Aspects::Extensions::Fetcher::Response[ errors: { uri: "https://ghibliapi.vercel.app/films", code: nil, diff --git a/spec/app/aspects/extensions/fetchers/request_spec.rb b/spec/app/aspects/extensions/fetcher/request_spec.rb similarity index 92% rename from spec/app/aspects/extensions/fetchers/request_spec.rb rename to spec/app/aspects/extensions/fetcher/request_spec.rb index 597bf423..72856879 100644 --- a/spec/app/aspects/extensions/fetchers/request_spec.rb +++ b/spec/app/aspects/extensions/fetcher/request_spec.rb @@ -2,7 +2,7 @@ require "hanami_helper" -RSpec.describe Terminus::Aspects::Extensions::Fetchers::Request do +RSpec.describe Terminus::Aspects::Extensions::Fetcher::Request do subject(:input) { described_class.new uri: "https://test.io" } describe "#initialize" do diff --git a/spec/app/aspects/extensions/fetchers/response_spec.rb b/spec/app/aspects/extensions/fetcher/response_spec.rb similarity index 94% rename from spec/app/aspects/extensions/fetchers/response_spec.rb rename to spec/app/aspects/extensions/fetcher/response_spec.rb index f84c0d6d..91b927ad 100644 --- a/spec/app/aspects/extensions/fetchers/response_spec.rb +++ b/spec/app/aspects/extensions/fetcher/response_spec.rb @@ -2,7 +2,7 @@ require "hanami_helper" -RSpec.describe Terminus::Aspects::Extensions::Fetchers::Response do +RSpec.describe Terminus::Aspects::Extensions::Fetcher::Response do subject(:response) { described_class.new } describe "#initialize" do