From a27ab6a5b7fa12a464c8ba9142a2392796280e18 Mon Sep 17 00:00:00 2001 From: Nicolas Castellanos Date: Wed, 3 Jul 2024 14:51:29 -0300 Subject: [PATCH] adding the ability to include extra scripts to flipper-ui via configuration --- lib/flipper/ui/configuration.rb | 6 ++++++ lib/flipper/ui/views/layout.erb | 11 +++++++++++ spec/flipper/ui/configuration_spec.rb | 11 +++++++++++ 3 files changed, 28 insertions(+) diff --git a/lib/flipper/ui/configuration.rb b/lib/flipper/ui/configuration.rb index 4582ea59..e4b7c272 100644 --- a/lib/flipper/ui/configuration.rb +++ b/lib/flipper/ui/configuration.rb @@ -77,6 +77,11 @@ class Configuration # Default is false. attr_accessor :confirm_disable + # Public: An array of scripts to include in the UI. Each script should be + # a hash with a `:src` key and optionally a `:integrity` key. Example: + # config.scripts << { src: "https://example.com/script.js", integrity: "sha384-abc123" } + attr_accessor :scripts + VALID_BANNER_CLASS_VALUES = %w( danger dark @@ -111,6 +116,7 @@ def initialize { title: "Features", href: "features" }, { title: "Settings", href: "settings" }, ] + @scripts = [] end def using_descriptions? diff --git a/lib/flipper/ui/views/layout.erb b/lib/flipper/ui/views/layout.erb index 43186738..5a287b1c 100644 --- a/lib/flipper/ui/views/layout.erb +++ b/lib/flipper/ui/views/layout.erb @@ -84,5 +84,16 @@ + <% unless Flipper::UI.configuration.scripts.empty? %> + <% Flipper::UI.configuration.scripts.each do |script| %> + + <% end %> + <% end %> diff --git a/spec/flipper/ui/configuration_spec.rb b/spec/flipper/ui/configuration_spec.rb index b4156701..61d55127 100644 --- a/spec/flipper/ui/configuration_spec.rb +++ b/spec/flipper/ui/configuration_spec.rb @@ -182,4 +182,15 @@ it { is_expected.to eq(true) } end end + + describe "#scripts" do + it "has default value" do + expect(configuration.scripts).to eq([]) + end + + it "can be updated" do + configuration.scripts << { src: "https://example.com/script.js", integrity: "sha384-abc123" } + expect(configuration.scripts).to eq([{ src: "https://example.com/script.js", integrity: "sha384-abc123" }]) + end + end end