diff --git a/app/helpers/services_helper.rb b/app/helpers/services_helper.rb new file mode 100644 index 0000000..2b8472b --- /dev/null +++ b/app/helpers/services_helper.rb @@ -0,0 +1,12 @@ +module ServicesHelper + + def service_human_name(key, category = :external) + SERVICES[category][key][:name] || key.to_s + end + + def service_display_name(key, category = :external) + SERVICES[category][key][:display_name] || + service_human_name(key, category) + end + +end diff --git a/app/models/setting.rb b/app/models/setting.rb index a5937a9..aa8072d 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -22,10 +22,7 @@ class Setting < RailsSettings::Base include Settings::XmppSettings def self.available_services - known_services = %w[ - discourse ejabberd email gitea mastodon mediawiki remotestorage - ] - + known_services = SERVICES[:external].keys known_services.select {|s| Setting.send "#{s}_enabled?" } end diff --git a/config/initializers/service_details.rb b/config/initializers/service_details.rb new file mode 100644 index 0000000..aaf5d79 --- /dev/null +++ b/config/initializers/service_details.rb @@ -0,0 +1,2 @@ +config_path = Rails.root.join('config', 'services.yml') +SERVICES = YAML.load_file(config_path).deep_symbolize_keys.with_indifferent_access diff --git a/config/services.yml b/config/services.yml new file mode 100644 index 0000000..80147a8 --- /dev/null +++ b/config/services.yml @@ -0,0 +1,30 @@ +internal: + btcpay: + name: BTCPay Server + postgres: + name: PostgreSQL + sentry: + name: Sentry +external: + discourse: + name: Discourse + droneci: + name: Drone CI + ejabberd: + display_name: Chat + email: + name: E-Mail + gitea: + name: Gitea + lndhub: + name: LNDHub + display_name: Lightning Network + mastodon: + name: Mastodon + mediawiki: + name: MediaWiki + nostr: + name: Nostr + remotestorage: + name: remoteStorage + display_name: Storage diff --git a/spec/helpers/services_helper_spec.rb b/spec/helpers/services_helper_spec.rb new file mode 100644 index 0000000..b0f19de --- /dev/null +++ b/spec/helpers/services_helper_spec.rb @@ -0,0 +1,25 @@ +require 'rails_helper' + +describe ServicesHelper do + + describe "#service_human_name" do + it "returns the human name when it's configured" do + expect(service_human_name("mastodon")).to eq("Mastodon") + end + + it "returns the key when there is no human name" do + expect(service_human_name("ejabberd")).to eq("ejabberd") + end + end + + describe "#service_display_name" do + it "returns the display name when it's configured" do + expect(service_display_name("lndhub")).to eq("Lightning Network") + end + + it "returns the human name when there is no display name" do + expect(service_display_name("mastodon")).to eq("Mastodon") + end + end + +end