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