From 7c8db493fd345bee5296d94bf8706ee50a3b07e1 Mon Sep 17 00:00:00 2001 From: Brooke Kuhlmann Date: Tue, 22 Apr 2025 09:10:00 -0600 Subject: [PATCH] Added application container Necessary to register common application dependencies for potential injection as desired. --- lib/trmnl/api/container.rb | 36 +++++++++++++++++++ spec/lib/trmnl/api/container_spec.rb | 13 +++++++ .../application_dependencies.rb | 9 +++++ 3 files changed, 58 insertions(+) create mode 100644 lib/trmnl/api/container.rb create mode 100644 spec/lib/trmnl/api/container_spec.rb create mode 100644 spec/support/shared_contexts/application_dependencies.rb diff --git a/lib/trmnl/api/container.rb b/lib/trmnl/api/container.rb new file mode 100644 index 0000000..345de65 --- /dev/null +++ b/lib/trmnl/api/container.rb @@ -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 diff --git a/spec/lib/trmnl/api/container_spec.rb b/spec/lib/trmnl/api/container_spec.rb new file mode 100644 index 0000000..c4380bb --- /dev/null +++ b/spec/lib/trmnl/api/container_spec.rb @@ -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 diff --git a/spec/support/shared_contexts/application_dependencies.rb b/spec/support/shared_contexts/application_dependencies.rb new file mode 100644 index 0000000..f9d9d2a --- /dev/null +++ b/spec/support/shared_contexts/application_dependencies.rb @@ -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