diff --git a/app/helpers/ajax_helper.rb b/app/helpers/ajax_helper.rb index 3f1a4867..6a7aa743 100644 --- a/app/helpers/ajax_helper.rb +++ b/app/helpers/ajax_helper.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + module AjaxHelper end diff --git a/app/helpers/application_helper/graph_methods.rb b/app/helpers/application_helper/graph_methods.rb index cde48656..a9487db9 100644 --- a/app/helpers/application_helper/graph_methods.rb +++ b/app/helpers/application_helper/graph_methods.rb @@ -4,13 +4,13 @@ module ApplicationHelper::GraphMethods # Creates tags for OpenGraph properties from a hash # @param values [Hash] def opengraph_meta_tags(values) - safe_join(values.map { |name, content| tag.meta(property: name, content: content) }, "\n") + safe_join(values.map { |name, content| tag.meta(property: name, content:) }, "\n") end # Creates tags from a hash # @param values [Hash] def meta_tags(values) - safe_join(values.map { |name, content| tag.meta(name: name, content: content) }, "\n") + safe_join(values.map { |name, content| tag.meta(name:, content:) }, "\n") end # @param user [User] @@ -22,7 +22,7 @@ module ApplicationHelper::GraphMethods "og:url": user_url(user), "og:description": user.profile.description, "og:site_name": APP_CONFIG["site_name"], - "profile:username": user.screen_name + "profile:username": user.screen_name, }) end @@ -33,7 +33,7 @@ module ApplicationHelper::GraphMethods "twitter:site": "@retrospring", "twitter:title": user.profile.motivation_header.presence || "Ask me anything!", "twitter:description": "Ask #{user.profile.safe_name} anything on Retrospring", - "twitter:image": full_profile_picture_url(user) + "twitter:image": full_profile_picture_url(user), }) end @@ -45,7 +45,7 @@ module ApplicationHelper::GraphMethods "og:image": full_profile_picture_url(answer.user), "og:url": answer_url(answer.user.screen_name, answer.id), "og:description": answer.content, - "og:site_name": APP_CONFIG["site_name"] + "og:site_name": APP_CONFIG["site_name"], }) end diff --git a/app/helpers/application_helper/title_methods.rb b/app/helpers/application_helper/title_methods.rb index b80deee3..9784e646 100644 --- a/app/helpers/application_helper/title_methods.rb +++ b/app/helpers/application_helper/title_methods.rb @@ -28,7 +28,7 @@ module ApplicationHelper::TitleMethods def question_title(question) context_user = question.answers&.first&.user if question.direct name = user_screen_name question.user, - context_user: context_user, + context_user:, author_identifier: question.author_is_anonymous ? question.author_identifier : nil, url: false generate_title name, "asked", question.content diff --git a/app/helpers/bootstrap_helper.rb b/app/helpers/bootstrap_helper.rb index 55544265..e6ae6981 100644 --- a/app/helpers/bootstrap_helper.rb +++ b/app/helpers/bootstrap_helper.rb @@ -25,24 +25,24 @@ module BootstrapHelper "#{content_tag(:i, '', class: "fa fa-#{options[:icon]}")} #{body}" end end - if options[:badge].present? || options.dig(:badge_attr, :data)&.has_key?(:controller) + if options[:badge].present? || options.dig(:badge_attr, :data)&.key?(:controller) badge_class = [ "badge", ("badge-#{options[:badge_color]}" unless options[:badge_color].nil?), ("badge-pill" if options[:badge_pill]) ].compact.join(" ") - body += " #{content_tag(:span, options[:badge], class: badge_class, **options[:badge_attr])}".html_safe + body += " #{content_tag(:span, options[:badge], class: badge_class, **options[:badge_attr])}".html_safe # rubocop:disable Rails/OutputSafety end - content_tag(:li, link_to(body.html_safe, path, class: "nav-link", data: { hotkey: options[:hotkey] }), class: classes, id: options[:id]) + content_tag(:li, link_to(body.html_safe, path, class: "nav-link", data: { hotkey: options[:hotkey] }), class: classes, id: options[:id]) # rubocop:disable Rails/OutputSafety end def list_group_item(body, path, options = {}) options = { badge: nil, badge_color: nil, - class: "" + class: "", }.merge(options) classes = [ @@ -54,13 +54,18 @@ module BootstrapHelper unless options[:badge].nil? || (options[:badge]).zero? # TODO: make this prettier? - body << " #{ - content_tag(:span, options[:badge], class: "badge#{ + badge = content_tag(:span, options[:badge], class: "badge#{ " badge-#{options[:badge_color]}" unless options[:badge_color].nil? - }")}" + }",) end - content_tag(:a, body.html_safe, href: path, class: classes) + html = if badge + "#{body} #{badge}" + else + body + end + + content_tag(:a, html.html_safe, href: path, class: classes) # rubocop:disable Rails/OutputSafety end def tooltip(body, tooltip_content, placement = "bottom") diff --git a/app/helpers/feedback_helper.rb b/app/helpers/feedback_helper.rb index ff51d91b..ac47c27a 100644 --- a/app/helpers/feedback_helper.rb +++ b/app/helpers/feedback_helper.rb @@ -8,7 +8,7 @@ module FeedbackHelper avatarURL: current_user.profile_picture.url(:large), name: current_user.screen_name, id: current_user.id, - email: current_user.email + email: current_user.email, } JWT.encode(user_data, APP_CONFIG.dig("canny", "sso")) diff --git a/app/helpers/markdown_helper.rb b/app/helpers/markdown_helper.rb index ef634209..6ae71c17 100644 --- a/app/helpers/markdown_helper.rb +++ b/app/helpers/markdown_helper.rb @@ -30,7 +30,7 @@ module MarkdownHelper def raw_markdown(content) renderer = Redcarpet::Render::HTML.new(**MARKDOWN_RENDERER_OPTS) md = Redcarpet::Markdown.new(renderer, **MARKDOWN_OPTS) - raw md.render content + raw md.render content # rubocop:disable Rails/OutputSafety end def get_markdown(path, relative_to = Rails.root) diff --git a/app/helpers/social_helper/telegram_methods.rb b/app/helpers/social_helper/telegram_methods.rb index ec13f9ea..046d2392 100644 --- a/app/helpers/social_helper/telegram_methods.rb +++ b/app/helpers/social_helper/telegram_methods.rb @@ -15,7 +15,7 @@ module SocialHelper::TelegramMethods id: answer.id, username: answer.user.screen_name, host: APP_CONFIG["hostname"], - protocol: (APP_CONFIG["https"] ? :https : :http) + protocol: (APP_CONFIG["https"] ? :https : :http), ) %(https://t.me/share/url?url=#{CGI.escape(url)}&text=#{CGI.escape(telegram_text(answer))}) diff --git a/app/helpers/social_helper/tumblr_methods.rb b/app/helpers/social_helper/tumblr_methods.rb index 868f31d3..683199b9 100644 --- a/app/helpers/social_helper/tumblr_methods.rb +++ b/app/helpers/social_helper/tumblr_methods.rb @@ -1,4 +1,6 @@ -require 'cgi' +# frozen_string_literal: true + +require "cgi" module SocialHelper::TumblrMethods def tumblr_title(answer) @@ -13,10 +15,10 @@ module SocialHelper::TumblrMethods def tumblr_body(answer) answer_url = answer_url( - id: answer.id, - username: answer.user.screen_name, - host: APP_CONFIG['hostname'], - protocol: (APP_CONFIG['https'] ? :https : :http) + id: answer.id, + username: answer.user.screen_name, + host: APP_CONFIG["hostname"], + protocol: (APP_CONFIG["https"] ? :https : :http), ) "#{answer.content}\n\n[Smile or comment on the answer here](#{answer_url})" @@ -24,10 +26,10 @@ module SocialHelper::TumblrMethods def tumblr_share_url(answer) answer_url = answer_url( - id: answer.id, + id: answer.id, username: answer.user.screen_name, - host: APP_CONFIG['hostname'], - protocol: (APP_CONFIG['https'] ? :https : :http) + host: APP_CONFIG["hostname"], + protocol: (APP_CONFIG["https"] ? :https : :http), ) "https://www.tumblr.com/widgets/share/tool?shareSource=legacy&posttype=text&title=#{CGI.escape(tumblr_title(answer))}&url=#{CGI.escape(answer_url)}&caption=&content=#{CGI.escape(tumblr_body(answer))}" diff --git a/app/helpers/social_helper/twitter_methods.rb b/app/helpers/social_helper/twitter_methods.rb index 7f025f71..fd143392 100644 --- a/app/helpers/social_helper/twitter_methods.rb +++ b/app/helpers/social_helper/twitter_methods.rb @@ -1,21 +1,23 @@ -require 'cgi' +# frozen_string_literal: true + +require "cgi" module SocialHelper::TwitterMethods include MarkdownHelper def prepare_tweet(answer, post_tag = nil) - question_content = twitter_markdown answer.question.content.gsub(/\@(\w+)/, '\1') + question_content = twitter_markdown answer.question.content.gsub(/@(\w+)/, '\1') original_question_length = question_content.length answer_content = twitter_markdown answer.content original_answer_length = answer_content.length answer_url = answer_url( - id: answer.id, + id: answer.id, username: answer.user.screen_name, - host: APP_CONFIG['hostname'], - protocol: (APP_CONFIG['https'] ? :https : :http) + host: APP_CONFIG["hostname"], + protocol: (APP_CONFIG["https"] ? :https : :http), ) - parsed_tweet = { :valid => false } + parsed_tweet = { valid: false } tweet_text = "" until parsed_tweet[:valid] @@ -23,14 +25,14 @@ module SocialHelper::TwitterMethods shortened_answer = "#{answer_content[0..123]}#{'…' if original_answer_length > [124, answer_content.length].min}" components = [ shortened_question, - '—', + "—", shortened_answer, post_tag, answer_url ] - tweet_text = components.compact.join(' ') + tweet_text = components.compact.join(" ") - parsed_tweet = Twitter::TwitterText::Validation::parse_tweet(tweet_text) + parsed_tweet = Twitter::TwitterText::Validation.parse_tweet(tweet_text) question_content = question_content[0..-2] answer_content = answer_content[0..-2] diff --git a/app/helpers/theme_helper.rb b/app/helpers/theme_helper.rb index 4c1a735f..9cd04910 100644 --- a/app/helpers/theme_helper.rb +++ b/app/helpers/theme_helper.rb @@ -25,7 +25,7 @@ module ThemeHelper "input_color" => "input-bg", "input_text" => "input-text", "input_placeholder" => "input-placeholder", - "muted_text" => "muted-text" + "muted_text" => "muted-text", }.freeze def render_theme diff --git a/spec/helpers/application_helper/graph_methods_spec.rb b/spec/helpers/application_helper/graph_methods_spec.rb index 63baa848..1d79b78c 100644 --- a/spec/helpers/application_helper/graph_methods_spec.rb +++ b/spec/helpers/application_helper/graph_methods_spec.rb @@ -1,20 +1,22 @@ # frozen_string_literal: true -require 'rails_helper' +require "rails_helper" -describe ApplicationHelper::GraphMethods, :type => :helper do +describe ApplicationHelper::GraphMethods, type: :helper do describe "#user_opengraph" do context "sample user" do - let(:user) { FactoryBot.create(:user, - profile: { display_name: 'Cunes', - description: 'A bunch of raccoons in a trenchcoat.' }, - screen_name: 'raccoons') } + let(:user) do + FactoryBot.create(:user, + profile: { display_name: "Cunes", + description: "A bunch of raccoons in a trenchcoat.", }, + screen_name: "raccoons",) + end subject { user_opengraph(user) } - it 'should generate a matching OpenGraph structure for a user' do - allow(APP_CONFIG).to receive(:[]).with('site_name').and_return('pineapplespring') - expect(subject).to eq(<<~EOS.chomp) + it "should generate a matching OpenGraph structure for a user" do + allow(APP_CONFIG).to receive(:[]).with("site_name").and_return("pineapplespring") + expect(subject).to eq(<<~META.chomp) @@ -22,55 +24,63 @@ describe ApplicationHelper::GraphMethods, :type => :helper do - EOS + META end end end describe "#user_twitter_card" do context "sample user" do - let(:user) { FactoryBot.create(:user, - profile: { - display_name: '', - description: 'A bunch of raccoons in a trenchcoat.'}, - screen_name: 'raccoons') } + let(:user) do + FactoryBot.create(:user, + profile: { + display_name: "", + description: "A bunch of raccoons in a trenchcoat.", + }, + screen_name: "raccoons",) + end subject { user_twitter_card(user) } - it 'should generate a matching OpenGraph structure for a user' do - expect(subject).to eq(<<~EOS.chomp) + it "should generate a matching OpenGraph structure for a user" do + expect(subject).to eq(<<~META.chomp) - EOS + META end end end describe "#answer_opengraph" do context "sample user and answer" do - let!(:user) { FactoryBot.create(:user, - profile: { - display_name: '', - description: 'A bunch of raccoons in a trenchcoat.'}, - screen_name: 'raccoons') } - let(:answer) { FactoryBot.create(:answer, - user_id: user.id,) } + let!(:user) do + FactoryBot.create(:user, + profile: { + display_name: "", + description: "A bunch of raccoons in a trenchcoat.", + }, + screen_name: "raccoons",) + end + let(:answer) do + FactoryBot.create(:answer, + user_id: user.id,) + end subject { answer_opengraph(answer) } - it 'should generate a matching OpenGraph structure for a user' do - allow(APP_CONFIG).to receive(:[]).with('site_name').and_return('pineapplespring') - expect(subject).to eq(<<~EOS.chomp) + it "should generate a matching OpenGraph structure for a user" do + allow(APP_CONFIG).to receive(:[]).with("site_name").and_return("pineapplespring") + expect(subject).to eq(<<~META.chomp) - EOS + META end end end -end \ No newline at end of file +end diff --git a/spec/helpers/application_helper/title_methods_spec.rb b/spec/helpers/application_helper/title_methods_spec.rb index 2b3c8bf0..92dc74a8 100644 --- a/spec/helpers/application_helper/title_methods_spec.rb +++ b/spec/helpers/application_helper/title_methods_spec.rb @@ -12,8 +12,8 @@ describe ApplicationHelper::TitleMethods, type: :helper do "anonymous_name" => "Anonymous", "https" => true, "items_per_page" => 5, - "sharing" => {} - }) + "sharing" => {}, + },) user.profile.display_name = "Cool Man" user.profile.save! @@ -42,7 +42,7 @@ describe ApplicationHelper::TitleMethods, type: :helper do context "user has custom anonymous display name" do before do - FactoryBot.create(:answer, question: question, user: user) + FactoryBot.create(:answer, question:, user:) user.profile.anon_display_name = "Amogus" user.profile.save! end @@ -55,9 +55,9 @@ describe ApplicationHelper::TitleMethods, type: :helper do describe "#answer_title" do let(:answer) do - FactoryBot.create(:answer, user: user, + FactoryBot.create(:answer, user:, content: "a", - question_content: "q") + question_content: "q",) end it "should generate a proper title" do diff --git a/spec/helpers/bootstrap_helper_spec.rb b/spec/helpers/bootstrap_helper_spec.rb index 0f31f85e..2f335560 100644 --- a/spec/helpers/bootstrap_helper_spec.rb +++ b/spec/helpers/bootstrap_helper_spec.rb @@ -1,45 +1,47 @@ +# frozen_string_literal: true + require "rails_helper" -describe BootstrapHelper, :type => :helper do +describe BootstrapHelper, type: :helper do include ActiveSupport::Testing::TimeHelpers - describe '#nav_entry' do - it 'should return a HTML navigation item which links to a given address' do + describe "#nav_entry" do + it "should return a HTML navigation item which links to a given address" do allow(self).to receive(:current_page?).and_return(false) - expect(nav_entry('Example', '/example')).to( - eq('