Added application container

Necessary to register common application dependencies for potential injection as desired.
This commit is contained in:
Brooke Kuhlmann
2025-04-22 14:24:33 -06:00
parent 0dfdee3a9a
commit 7c8db493fd
3 changed files with 58 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
# frozen_string_literal: true
require "cogger"
require "containable"
require "http"
module TRMNL
module API
# Registers application dependencies.
module Container
extend Containable
register(:client) { API::Client.new }
register(:logger) { Cogger.new id: "trmnl-api", formatter: :json }
register :http do
HTTP.default_options = ::HTTP::Options.new features: {logging: {logger: self[:logger]}}
HTTP
end
namespace :contracts do
register :current_screen, Contracts::CurrentScreen
register :display, Contracts::Display
register :firmware, Contracts::Firmware
register :setup, Contracts::Setup
end
namespace :models do
register :current_screen, Models::CurrentScreen
register :display, Models::Display
register :firmware, Models::Firmware
register :setup, Models::Setup
end
end
end
end
+13
View File
@@ -0,0 +1,13 @@
# frozen_string_literal: true
require "spec_helper"
RSpec.describe TRMNL::API::Container do
subject(:container) { described_class }
describe ".[]" do
it "answers HTTP" do
expect(container[:http]).to eq(HTTP)
end
end
end
@@ -0,0 +1,9 @@
# frozen_string_literal: true
RSpec.shared_context "with application dependencies" do
let(:logger) { Cogger.new id: "trmnl-api", io: StringIO.new, level: :debug }
before { TRMNL::API::Container.stub! http:, logger: }
after { TRMNL::API::Container.restore }
end