diff --git a/app/aspects/firmware/poller.rb b/app/aspects/firmware/poller.rb index 0b23cbe0..f9815bbe 100644 --- a/app/aspects/firmware/poller.rb +++ b/app/aspects/firmware/poller.rb @@ -8,7 +8,7 @@ module Terminus module Firmware # Polls the Core Firmware API on a scheduled interval for new firmware versions. class Poller - include Deps["aspects.firmware.synchronizer"] + include Deps[:settings, "aspects.firmware.synchronizer"] include Initable[kernel: Kernel] include Dry::Monads[:result] @@ -29,10 +29,14 @@ module Terminus def keep_alive seconds kernel.loop do - synchronizer.call + sync_or_skip kernel.sleep seconds end end + + def sync_or_skip + settings.firmware_poller ? synchronizer.call : kernel.puts("Firmware polling disabled.") + end end end end diff --git a/app/aspects/models/poller.rb b/app/aspects/models/poller.rb index 3a4e6857..08af1a06 100644 --- a/app/aspects/models/poller.rb +++ b/app/aspects/models/poller.rb @@ -8,7 +8,7 @@ module Terminus module Models # Polls the Core Models API on a scheduled interval for new (or updated) models. class Poller - include Deps["aspects.models.synchronizer"] + include Deps[:settings, "aspects.models.synchronizer"] include Initable[kernel: Kernel] include Dry::Monads[:result] @@ -29,10 +29,14 @@ module Terminus def keep_alive seconds kernel.loop do - synchronizer.call + sync_or_skip kernel.sleep seconds end end + + def sync_or_skip + settings.model_poller ? synchronizer.call : kernel.puts("Model polling disabled.") + end end end end diff --git a/app/aspects/screens/poller.rb b/app/aspects/screens/poller.rb index 47e58bae..9aa24a12 100644 --- a/app/aspects/screens/poller.rb +++ b/app/aspects/screens/poller.rb @@ -7,7 +7,12 @@ module Terminus module Screens # Polls the Core Display API on a scheduled interval for new images to display locally. class Poller - include Deps[:trmnl_api, "aspects.screens.synchronizer", repository: "repositories.device"] + include Deps[ + :settings, + :trmnl_api, + "aspects.screens.synchronizer", + repository: "repositories.device" + ] include Initable[kernel: Kernel] include Dry::Monads[:result] @@ -28,14 +33,18 @@ module Terminus def keep_alive seconds kernel.loop do - process_devices + sync_or_skip kernel.sleep seconds end end - def process_devices = repository.all.select(&:proxy).each { |device| process device } + def sync_or_skip + settings.screen_poller ? process_devices : kernel.puts("Screen polling disabled.") + end - def process device + def process_devices = repository.all.select(&:proxy).each { |device| sync device } + + def sync device trmnl_api.display(token: device.api_key).bind { |record| synchronizer.call record } end end diff --git a/spec/app/aspects/firmware/poller_spec.rb b/spec/app/aspects/firmware/poller_spec.rb index eb4a3c00..013be6e8 100644 --- a/spec/app/aspects/firmware/poller_spec.rb +++ b/spec/app/aspects/firmware/poller_spec.rb @@ -8,6 +8,8 @@ RSpec.describe Terminus::Aspects::Firmware::Poller do let(:synchronizer) { instance_spy Terminus::Aspects::Firmware::Synchronizer } let(:kernel) { class_spy Kernel, sleep: 0 } + include_context "with main application" + describe "#call" do before { allow(kernel).to receive(:loop).and_yield } @@ -29,5 +31,20 @@ RSpec.describe Terminus::Aspects::Firmware::Poller do poller.call expect(synchronizer).to have_received(:call) end + + context "when disabled" do + before do + allow(settings).to receive(:firmware_poller).and_return false + poller.call + end + + it "prints message" do + expect(kernel).to have_received(:puts).with("Firmware polling disabled.") + end + + it "doesn't synchronize" do + expect(synchronizer).not_to have_received(:call) + end + end end end diff --git a/spec/app/aspects/models/poller_spec.rb b/spec/app/aspects/models/poller_spec.rb index 67e6c66b..a6b4d75d 100644 --- a/spec/app/aspects/models/poller_spec.rb +++ b/spec/app/aspects/models/poller_spec.rb @@ -8,6 +8,8 @@ RSpec.describe Terminus::Aspects::Models::Poller do let(:synchronizer) { instance_spy Terminus::Aspects::Models::Synchronizer } let(:kernel) { class_spy Kernel, sleep: 0 } + include_context "with main application" + describe "#call" do before { allow(kernel).to receive(:loop).and_yield } @@ -29,5 +31,20 @@ RSpec.describe Terminus::Aspects::Models::Poller do poller.call expect(synchronizer).to have_received(:call) end + + context "when disabled" do + before do + allow(settings).to receive(:model_poller).and_return false + poller.call + end + + it "prints message" do + expect(kernel).to have_received(:puts).with("Model polling disabled.") + end + + it "doesn't synchronize" do + expect(synchronizer).not_to have_received(:call) + end + end end end diff --git a/spec/app/aspects/screens/poller_spec.rb b/spec/app/aspects/screens/poller_spec.rb index 183420a8..3c46101e 100644 --- a/spec/app/aspects/screens/poller_spec.rb +++ b/spec/app/aspects/screens/poller_spec.rb @@ -15,6 +15,8 @@ RSpec.describe Terminus::Aspects::Screens::Poller, :db do let(:synchronizer) { instance_spy Terminus::Aspects::Screens::Synchronizer } + include_context "with main application" + describe "#call" do let(:devices) { [Factory[:device, proxy: true]] } @@ -73,5 +75,20 @@ RSpec.describe Terminus::Aspects::Screens::Poller, :db do expect(synchronizer).not_to have_received(:call) end end + + context "when disabled" do + before do + allow(settings).to receive(:screen_poller).and_return false + poller.call + end + + it "prints message" do + expect(kernel).to have_received(:puts).with("Screen polling disabled.") + end + + it "doesn't synchronize" do + expect(synchronizer).not_to have_received(:call) + end + end end end