diff --git a/flipper.gemspec b/flipper.gemspec
index 48c25f957..73cfa8c1a 100644
--- a/flipper.gemspec
+++ b/flipper.gemspec
@@ -35,4 +35,6 @@ Gem::Specification.new do |gem|
gem.metadata = Flipper::METADATA
gem.add_dependency 'concurrent-ruby', '< 2'
+
+ gem.required_ruby_version = ">= #{Flipper::REQUIRED_RUBY_VERSION}"
end
diff --git a/lib/flipper/engine.rb b/lib/flipper/engine.rb
index 612eff425..faa0eea66 100644
--- a/lib/flipper/engine.rb
+++ b/lib/flipper/engine.rb
@@ -83,5 +83,9 @@ def self.default_strict_value
:warn
end
end
+
+ def self.deprecated_rails_version?
+ Gem::Version.new(Rails.version) < Gem::Version.new(Flipper::NEXT_REQUIRED_RAILS_VERSION)
+ end
end
end
diff --git a/lib/flipper/ui/action.rb b/lib/flipper/ui/action.rb
index 54d647dbf..58c9537df 100644
--- a/lib/flipper/ui/action.rb
+++ b/lib/flipper/ui/action.rb
@@ -53,6 +53,7 @@ def feature_name
style-src 'self' 'unsafe-inline';
style-src-attr 'unsafe-inline' ;
style-src-elem 'self';
+ connect-src https://www.flippercloud.io;
CSP
# Public: Call this in subclasses so the action knows its route.
diff --git a/lib/flipper/ui/public/js/version.js b/lib/flipper/ui/public/js/version.js
new file mode 100644
index 000000000..945f66822
--- /dev/null
+++ b/lib/flipper/ui/public/js/version.js
@@ -0,0 +1,33 @@
+// Get the latest release from RubyGems.org and show a badge if it's not the current version
+function checkLatestRelease() {
+ // Skip check if last check was less than 1 day ago
+ if(localStorage.getItem('flipper.releaseCheckedAt') > new Date().getTime() - 86400000) return
+
+ // store the last time we checked for a new version
+ localStorage.setItem('flipper.releaseCheckedAt', new Date().getTime())
+
+ fetch('https://www.flippercloud.io/release.json').then(response => {
+ // Something went wrong, so just give up
+ if(!response.ok) return
+
+ response.json().then(release => {
+ localStorage.setItem('flipper.release', JSON.stringify(release))
+ showReleaseBadge()
+ })
+ })
+}
+
+// Show a badge if a new release is available
+function showReleaseBadge() {
+ const badge = document.querySelector('#new-version-badge')
+ const release = JSON.parse(localStorage.getItem('flipper.release') || false)
+
+ if(!badge || !release || badge.dataset.version === release.version) return
+
+ badge.innerText = `${release.version} available!`
+ badge.setAttribute('href', release.changelog_uri)
+ badge.classList.remove('d-none')
+}
+
+checkLatestRelease()
+showReleaseBadge()
diff --git a/lib/flipper/ui/views/layout.erb b/lib/flipper/ui/views/layout.erb
index 9bf1ce42b..b050575a0 100644
--- a/lib/flipper/ui/views/layout.erb
+++ b/lib/flipper/ui/views/layout.erb
@@ -21,6 +21,20 @@
Docs •
Settings •
Version: <%= Flipper::VERSION %>
+
+
+
+ <% if Flipper.deprecated_ruby_version? %>
+
+ Ruby <%= RUBY_VERSION %> deprecated
+
+ <% end %>
+
+ <% if defined?(Rails) && Flipper::Engine.deprecated_rails_version? %>
+
+ Rails <%= Rails.version %> deprecated
+
+ <% end %>