From b0eec90b24b6fe969596bacb1e385618c5642c2e Mon Sep 17 00:00:00 2001 From: rhymes Date: Wed, 20 Nov 2019 16:58:11 +0100 Subject: [PATCH] Add additional keys to site configuration (#4861) [deploy] * Add rate_limit_follow_count_daily to SiteConfig * Add favicon_url to SiteConfig * Add logo_svg to SiteConfig * Add staff_user_id to SiteConfig * Add default_site_email to SiteConfig * Add social_networks_handle to SiteConfig * Add ga_view_id and ga_fetch_rate to SiteConfig * Add mailchimp newsletters IDs to SiteConfig * Add periodic_email_digest_max, periodic_email_digest_min to SiteConfig --- .../internal/configs_controller.rb | 16 +- app/models/site_config.rb | 29 +++- app/views/internal/configs/show.html.erb | 154 +++++++++++++++++- spec/requests/internal/configs_spec.rb | 95 ++++++++++- 4 files changed, 284 insertions(+), 10 deletions(-) diff --git a/app/controllers/internal/configs_controller.rb b/app/controllers/internal/configs_controller.rb index c743be0d1..943870acc 100644 --- a/app/controllers/internal/configs_controller.rb +++ b/app/controllers/internal/configs_controller.rb @@ -1,7 +1,9 @@ class Internal::ConfigsController < Internal::ApplicationController layout "internal" - def show; end + def show + @logo_svg = SiteConfig.logo_svg.html_safe # rubocop:disable Rails/OutputSafety + end def create config_params.keys.each do |key| @@ -13,7 +15,15 @@ class Internal::ConfigsController < Internal::ApplicationController private def config_params - # put this stuff in the policy or in the model - params.require(:site_config).permit(:main_social_image) + allowed_params = %i[ + staff_user_id default_site_email social_networks_handle + main_social_image favicon_url logo_svg + rate_limit_follow_count_daily + ga_view_id ga_fetch_rate + mailchimp_newsletter_id mailchimp_sustaining_members_id + mailchimp_tag_moderators_id mailchimp_community_moderators_id + periodic_email_digest_max periodic_email_digest_min + ] + params.require(:site_config).permit(allowed_params) end end diff --git a/app/models/site_config.rb b/app/models/site_config.rb index 7771320b9..1d66e709b 100644 --- a/app/models/site_config.rb +++ b/app/models/site_config.rb @@ -8,5 +8,32 @@ class SiteConfig < RailsSettings::Base # the cache, or call SiteConfig.clear_cache cache_prefix { "v1" } - field :main_social_image, default: "https://thepracticaldev.s3.amazonaws.com/i/6hqmcjaxbgbon8ydw93z.png" + # staff account + field :staff_user_id, type: :integer, default: 1 # will replace DEVTO_USER_ID + field :default_site_email, type: :string, default: "yo@dev.to" + field :social_networks_handle, type: :string, default: "thepracticaldev" # will replace SITE_TWITTER_HANDLE + + # images + field :main_social_image, type: :string, default: "https://thepracticaldev.s3.amazonaws.com/i/6hqmcjaxbgbon8ydw93z.png" + field :favicon_url, type: :string, default: "favicon.ico" + field :logo_svg, type: :string, default: "" + + # rate limits + field :rate_limit_follow_count_daily, type: :integer, default: 500 + + # Google Analytics Reporting API v4 + # + field :ga_view_id, type: :string, default: "" + field :ga_fetch_rate, type: :integer, default: 25 + + # Mailchimp lists IDs + # + field :mailchimp_newsletter_id, type: :string, default: "" + field :mailchimp_sustaining_members_id, type: :string, default: "" + field :mailchimp_tag_moderators_id, type: :string, default: "" + field :mailchimp_community_moderators_id, type: :string, default: "" + + # Email digest frequency + field :periodic_email_digest_max, type: :integer, default: 0 + field :periodic_email_digest_min, type: :integer, default: 2 end diff --git a/app/views/internal/configs/show.html.erb b/app/views/internal/configs/show.html.erb index 91e325724..35ff347ab 100644 --- a/app/views/internal/configs/show.html.erb +++ b/app/views/internal/configs/show.html.erb @@ -15,11 +15,44 @@ <%= form_for(SiteConfig.new, url: internal_config_path) do |f| %> +
+
Staff
+
+
+ <%= f.label :staff_user_id %> + <%= f.number_field :staff_user_id, + class: "form-control", + value: SiteConfig.staff_user_id, + min: 1, + placeholder: "1" %> + User ID of the staff account +
+ +
+ <%= f.label :default_site_email %> + <%= f.email_field :default_site_email, + class: "form-control", + value: SiteConfig.default_site_email, + placeholder: "email@staff.com" %> + Email of the staff account +
+ +
+ <%= f.label :social_networks_handle %> + <%= f.text_field :social_networks_handle, + class: "form-control", + value: SiteConfig.social_networks_handle, + placeholder: "thepracticaldev" %> + Social networks handle (eg. Twitter, GitHub) +
+
+
+
Images
- <%= f.label "Main social image" %> + <%= f.label :main_social_image %> <%= f.text_field :main_social_image, class: "form-control", value: SiteConfig.main_social_image, @@ -27,6 +60,125 @@ Used as the main image in social networks and OpenGraph main social image
+ +
+ <%= f.label :favicon_url %> + <%= f.text_field :favicon_url, + class: "form-control", + value: SiteConfig.favicon_url, + placeholder: "https://image.url" %> + Used as the site favicon + favicon +
+ +
+ <%= f.label :logo_svg %> + <%= f.text_area :logo_svg, + class: "form-control", + value: SiteConfig.logo_svg, + rows: 6, + placeholder: "" %> + Used as the SVG logo of the community + <%= @logo_svg %> +
+
+
+ +
+
Rate limits
+
+
+ <%= f.label :rate_limit_follow_count_daily %> + <%= f.number_field :rate_limit_follow_count_daily, + class: "form-control", + value: SiteConfig.rate_limit_follow_count_daily, + min: 0, + placeholder: 500 %> + Used to limit the amount of users a person can follow daily +
+
+
+ +
+
Google Analytics Reporting API v4
+
+
+ <%= f.label :ga_view_id, "View ID" %> + <%= f.text_field :ga_view_id, + class: "form-control", + value: SiteConfig.ga_view_id %> + Google Analytics Reporting API v4 - View ID +
+ +
+ <%= f.label :ga_fetch_rate, "Fetch rate" %> + <%= f.number_field :ga_fetch_rate, + class: "form-control", + value: SiteConfig.ga_fetch_rate, + min: 1, + placeholder: 1 %> + Determines how often the site updates its Google Analytics stats +
+
+
+ +
+
Mailchimp Lists IDs
+
+
+ <%= f.label :mailchimp_newsletter_id, "Main Newsletter" %> + <%= f.text_field :mailchimp_newsletter_id, + class: "form-control", + value: SiteConfig.mailchimp_newsletter_id %> + Main Newsletter ID +
+ +
+ <%= f.label :mailchimp_sustaining_members_id, "Sustaining Members Newsletter" %> + <%= f.text_field :mailchimp_sustaining_members_id, + class: "form-control", + value: SiteConfig.mailchimp_sustaining_members_id %> + Sustaining Members Newsletter ID +
+ +
+ <%= f.label :mailchimp_tag_moderators_id, "Tag Moderators Newsletter" %> + <%= f.text_field :mailchimp_tag_moderators_id, + class: "form-control", + value: SiteConfig.mailchimp_tag_moderators_id %> + Tag Moderators Newsletter ID +
+ +
+ <%= f.label :mailchimp_community_moderators_id, "Community Moderators Newsletter" %> + <%= f.text_field :mailchimp_community_moderators_id, + class: "form-control", + value: SiteConfig.mailchimp_community_moderators_id %> + Community Moderators Newsletter ID +
+
+
+ +
+
Email digest frequency
+
+
+ <%= f.label :periodic_email_digest_max %> + <%= f.number_field :periodic_email_digest_max, + class: "form-control", + value: SiteConfig.periodic_email_digest_max, + placeholder: 0 %> + Determines the maximum for the periodic email digest +
+ +
+ <%= f.label :periodic_email_digest_min %> + <%= f.number_field :periodic_email_digest_min, + class: "form-control", + value: SiteConfig.periodic_email_digest_min, + placeholder: 2 %> + Determines the mininum for the periodic email digest +
diff --git a/spec/requests/internal/configs_spec.rb b/spec/requests/internal/configs_spec.rb index cd6e23cad..a50d3770e 100644 --- a/spec/requests/internal/configs_spec.rb +++ b/spec/requests/internal/configs_spec.rb @@ -19,11 +19,96 @@ RSpec.describe "/internal/config", type: :request do sign_in(admin) end - it "updates main_social_image" do - SiteConfig.main_social_image = "https://dummyimage.com/100x100" - expected_image_url = "https://dummyimage.com/300x300" - post "/internal/config", params: { site_config: { main_social_image: expected_image_url } } - expect(SiteConfig.main_social_image).to eq(expected_image_url) + describe "staff" do + it "updates staff_user_id" do + post "/internal/config", params: { site_config: { staff_user_id: 2 } } + expect(SiteConfig.staff_user_id).to eq(2) + end + + it "updates default_site_email" do + expected_email = "foo@bar.com" + post "/internal/config", params: { site_config: { default_site_email: expected_email } } + expect(SiteConfig.default_site_email).to eq(expected_email) + end + + it "updates social_networks_handle" do + expected_handle = "tpd" + post "/internal/config", params: { site_config: { social_networks_handle: expected_handle } } + expect(SiteConfig.social_networks_handle).to eq(expected_handle) + end + end + + describe "images" do + it "updates main_social_image" do + expected_image_url = "https://dummyimage.com/300x300" + post "/internal/config", params: { site_config: { main_social_image: expected_image_url } } + expect(SiteConfig.main_social_image).to eq(expected_image_url) + end + + it "updates favicon_url" do + expected_image_url = "https://dummyimage.com/300x300" + post "/internal/config", params: { site_config: { favicon_url: expected_image_url } } + expect(SiteConfig.favicon_url).to eq(expected_image_url) + end + + it "updates logo_svg" do + expected_image_url = "https://dummyimage.com/300x300" + post "/internal/config", params: { site_config: { logo_svg: expected_image_url } } + expect(SiteConfig.logo_svg).to eq(expected_image_url) + end + end + + describe "rate limits" do + it "updates rate_limit_follow_count_daily" do + post "/internal/config", params: { site_config: { rate_limit_follow_count_daily: 3 } } + expect(SiteConfig.rate_limit_follow_count_daily).to eq(3) + end + end + + describe "Google Analytics Reporting API v4" do + it "updates ga_view_id" do + post "/internal/config", params: { site_config: { ga_view_id: "abc" } } + expect(SiteConfig.ga_view_id).to eq("abc") + end + + it "updates ga_fetch_rate" do + post "/internal/config", params: { site_config: { ga_fetch_rate: 3 } } + expect(SiteConfig.ga_fetch_rate).to eq(3) + end + end + + describe "Mailchimp lists IDs" do + it "updates mailchimp_newsletter_id" do + post "/internal/config", params: { site_config: { mailchimp_newsletter_id: "abc" } } + expect(SiteConfig.mailchimp_newsletter_id).to eq("abc") + end + + it "updates mailchimp_sustaining_members_id" do + post "/internal/config", params: { site_config: { mailchimp_sustaining_members_id: "abc" } } + expect(SiteConfig.mailchimp_sustaining_members_id).to eq("abc") + end + + it "updates mailchimp_tag_moderators_id" do + post "/internal/config", params: { site_config: { mailchimp_tag_moderators_id: "abc" } } + expect(SiteConfig.mailchimp_tag_moderators_id).to eq("abc") + end + + it "updates mailchimp_community_moderators_id" do + post "/internal/config", params: { site_config: { mailchimp_community_moderators_id: "abc" } } + expect(SiteConfig.mailchimp_community_moderators_id).to eq("abc") + end + end + + describe "Email digest frequency" do + it "updates periodic_email_digest_max" do + post "/internal/config", params: { site_config: { periodic_email_digest_max: 1 } } + expect(SiteConfig.periodic_email_digest_max).to eq(1) + end + + it "updates periodic_email_digest_min" do + post "/internal/config", params: { site_config: { periodic_email_digest_min: 3 } } + expect(SiteConfig.periodic_email_digest_min).to eq(3) + end end end end