mirror of
https://github.com/usetrmnl/terminus.git
synced 2026-08-13 14:29:27 -07:00
Refactored fetchers namespace as fetcher (singular)
Clarifies this namespace is for a single entity (and associated objects). Milestone: patch
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+2
-2
@@ -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]
|
||||
+1
-1
@@ -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
|
||||
+2
-2
@@ -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
|
||||
@@ -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(
|
||||
|
||||
@@ -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",
|
||||
|
||||
+24
-24
@@ -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,
|
||||
+1
-1
@@ -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
|
||||
+1
-1
@@ -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
|
||||
Reference in New Issue
Block a user