From fdc17bea58f210f62ac0d9e836b68e84c6dbd15c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 15 Nov 2016 16:56:29 +0100 Subject: [PATCH] Fix rubocop issues, introduce usage of frozen literal to improve performance --- .rubocop.yml | 36 ++++++++++++++++--- Gemfile | 2 ++ app/channels/application_cable/channel.rb | 2 ++ app/channels/application_cable/connection.rb | 2 ++ app/channels/hashtag_channel.rb | 2 ++ app/channels/public_channel.rb | 2 ++ app/channels/timeline_channel.rb | 2 ++ app/controllers/about_controller.rb | 2 ++ app/controllers/accounts_controller.rb | 7 ++-- app/controllers/api/salmon_controller.rb | 2 ++ .../api/subscriptions_controller.rb | 2 ++ app/controllers/api/v1/accounts_controller.rb | 8 +++-- app/controllers/api/v1/apps_controller.rb | 2 ++ app/controllers/api/v1/follows_controller.rb | 2 ++ app/controllers/api/v1/media_controller.rb | 2 ++ app/controllers/api/v1/statuses_controller.rb | 8 +++-- .../api/v1/timelines_controller.rb | 10 +++--- app/controllers/api_controller.rb | 8 +++-- app/controllers/application_controller.rb | 2 ++ .../auth/confirmations_controller.rb | 2 ++ app/controllers/auth/passwords_controller.rb | 2 ++ .../auth/registrations_controller.rb | 2 ++ app/controllers/auth/sessions_controller.rb | 2 ++ app/controllers/home_controller.rb | 2 ++ app/controllers/media_controller.rb | 2 ++ .../oauth/authorizations_controller.rb | 2 ++ .../settings/preferences_controller.rb | 2 ++ .../settings/profiles_controller.rb | 2 ++ app/controllers/stream_entries_controller.rb | 6 ++-- app/controllers/tags_controller.rb | 2 ++ app/controllers/xrd_controller.rb | 10 +++--- app/helpers/about_helper.rb | 2 ++ app/helpers/accounts_helper.rb | 8 +++-- app/helpers/application_helper.rb | 2 ++ app/helpers/atom_builder_helper.rb | 10 ++++-- app/helpers/home_helper.rb | 4 ++- app/helpers/routing_helper.rb | 2 ++ app/helpers/stream_entries_helper.rb | 2 ++ app/helpers/tags_helper.rb | 2 ++ app/helpers/xrd_helper.rb | 2 ++ app/lib/feed_manager.rb | 28 ++++++++------- app/lib/formatter.rb | 6 ++-- app/lib/tag_manager.rb | 4 ++- app/mailers/application_mailer.rb | 2 ++ app/mailers/notification_mailer.rb | 2 ++ app/models/account.rb | 10 +++--- app/models/application_record.rb | 2 ++ app/models/block.rb | 2 ++ app/models/concerns/paginable.rb | 2 ++ app/models/concerns/streamable.rb | 2 ++ app/models/concerns/targetable.rb | 2 ++ app/models/domain_block.rb | 2 ++ app/models/favourite.rb | 2 ++ app/models/feed.rb | 4 ++- app/models/follow.rb | 2 ++ app/models/follow_suggestion.rb | 2 ++ app/models/media_attachment.rb | 22 ++++++------ app/models/mention.rb | 2 ++ app/models/status.rb | 15 ++++---- app/models/stream_entry.rb | 8 ++++- app/models/tag.rb | 2 ++ app/models/user.rb | 2 ++ app/services/base_service.rb | 2 ++ app/services/block_domain_service.rb | 2 ++ app/services/block_service.rb | 4 ++- app/services/fan_out_on_write_service.rb | 2 ++ app/services/favourite_service.rb | 2 ++ app/services/fetch_atom_service.rb | 20 +++++------ app/services/fetch_remote_account_service.rb | 6 ++-- app/services/fetch_remote_status_service.rb | 8 +++-- app/services/follow_remote_account_service.rb | 6 ++-- app/services/follow_service.rb | 4 ++- app/services/post_status_service.rb | 2 ++ app/services/precompute_feed_service.rb | 6 ++-- app/services/process_feed_service.rb | 12 ++++--- app/services/process_hashtags_service.rb | 6 ++-- app/services/process_interaction_service.rb | 8 ++--- app/services/process_mentions_service.rb | 2 ++ app/services/reblog_service.rb | 2 ++ app/services/remove_status_service.rb | 4 ++- app/services/search_service.rb | 10 +++--- app/services/send_interaction_service.rb | 2 ++ app/services/subscribe_service.rb | 2 ++ app/services/unblock_service.rb | 2 ++ app/services/unfavourite_service.rb | 2 ++ app/services/unfollow_service.rb | 4 ++- app/services/update_remote_profile_service.rb | 12 ++++--- app/workers/distribution_worker.rb | 2 ++ app/workers/hub_ping_worker.rb | 2 ++ app/workers/notification_worker.rb | 2 ++ app/workers/processing_worker.rb | 2 ++ app/workers/regeneration_worker.rb | 2 ++ app/workers/thread_resolve_worker.rb | 2 ++ config.ru | 1 + config/initializers/redis.rb | 6 ++-- lib/tasks/mastodon.rake | 6 ++-- 96 files changed, 329 insertions(+), 126 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 15ba678d4..b973f01cd 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -18,9 +18,29 @@ Metrics/MethodLength: CountComments: false Max: 10 -Metrics/ModuleLength: +Metrics/AbcSize: Max: 100 +Metrics/BlockNesting: + Max: 3 + +Metrics/ClassLength: + CountComments: false + Max: 200 + +Metrics/CyclomaticComplexity: + Max: 15 + +Metrics/MethodLength: + Max: 55 + +Metrics/ModuleLength: + CountComments: false + Max: 200 + +Metrics/PerceivedComplexity: + Max: 10 + Metrics/ParameterLists: Max: 4 CountKeywordArgs: true @@ -37,10 +57,10 @@ Style/Documentation: Enabled: false Style/DoubleNegation: - Enabled: false + Enabled: true Style/FrozenStringLiteralComment: - Enabled: false + Enabled: true Style/SpaceInsideHashLiteralBraces: EnforcedStyle: space @@ -51,10 +71,18 @@ Style/TrailingCommaInLiteral: Style/RegexpLiteral: Enabled: false +Style/Lambda: + Enabled: false + +Rails/HasAndBelongsToMany: + Enabled: false + AllCops: - TargetRubyVersion: 2.2 + TargetRubyVersion: 2.3 Exclude: - 'spec/**/*' - 'db/**/*' - 'app/views/**/*' - 'config/**/*' + - 'bin/*' + - 'Rakefile' diff --git a/Gemfile b/Gemfile index 37c7459c8..d6ef64cf7 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source 'https://rubygems.org' gem 'rails', '5.0.0.1' diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb index 28bf0d9d3..69e069212 100644 --- a/app/channels/application_cable/channel.rb +++ b/app/channels/application_cable/channel.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ApplicationCable class Channel < ActionCable::Channel::Base protected diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb index b94063b10..33f9aa429 100644 --- a/app/channels/application_cable/connection.rb +++ b/app/channels/application_cable/connection.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :current_user diff --git a/app/channels/hashtag_channel.rb b/app/channels/hashtag_channel.rb index 5be8d94cd..4470a0e99 100644 --- a/app/channels/hashtag_channel.rb +++ b/app/channels/hashtag_channel.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class HashtagChannel < ApplicationCable::Channel def subscribed tag = params[:tag].downcase diff --git a/app/channels/public_channel.rb b/app/channels/public_channel.rb index 41e21611d..9ef9e5dd7 100644 --- a/app/channels/public_channel.rb +++ b/app/channels/public_channel.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PublicChannel < ApplicationCable::Channel def subscribed stream_from 'timeline:public', lambda { |encoded_message| diff --git a/app/channels/timeline_channel.rb b/app/channels/timeline_channel.rb index f2a9636fd..7b8d63ef5 100644 --- a/app/channels/timeline_channel.rb +++ b/app/channels/timeline_channel.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class TimelineChannel < ApplicationCable::Channel def subscribed stream_from "timeline:#{current_user.account_id}" diff --git a/app/controllers/about_controller.rb b/app/controllers/about_controller.rb index 4e423e91f..56ad6365d 100644 --- a/app/controllers/about_controller.rb +++ b/app/controllers/about_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AboutController < ApplicationController before_action :set_body_classes diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index b16938845..5d2f4eee0 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AccountsController < ApplicationController layout 'public' @@ -41,10 +43,7 @@ class AccountsController < ApplicationController end def set_link_headers - response.headers['Link'] = LinkHeader.new([ - [webfinger_account_url, [['rel', 'lrdd'], ['type', 'application/xrd+xml']]], - [account_url(@account, format: 'atom'), [['rel', 'alternate'], ['type', 'application/atom+xml']]] - ]) + response.headers['Link'] = LinkHeader.new([[webfinger_account_url, [%w(rel lrdd), %w(type application/xrd+xml)]], [account_url(@account, format: 'atom'), [%w(rel alternate), %w(type application/atom+xml)]]]) end def webfinger_account_url diff --git a/app/controllers/api/salmon_controller.rb b/app/controllers/api/salmon_controller.rb index c0ba32ff2..01862a900 100644 --- a/app/controllers/api/salmon_controller.rb +++ b/app/controllers/api/salmon_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::SalmonController < ApiController before_action :set_account respond_to :txt diff --git a/app/controllers/api/subscriptions_controller.rb b/app/controllers/api/subscriptions_controller.rb index 058ae8f5e..51c476436 100644 --- a/app/controllers/api/subscriptions_controller.rb +++ b/app/controllers/api/subscriptions_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::SubscriptionsController < ApiController before_action :set_account respond_to :txt diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index 88af41bf8..2dfab0831 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::V1::AccountsController < ApiController before_action -> { doorkeeper_authorize! :read }, except: [:follow, :unfollow, :block, :unblock] before_action -> { doorkeeper_authorize! :follow }, only: [:follow, :unfollow, :block, :unblock] @@ -20,7 +22,7 @@ class Api::V1::AccountsController < ApiController @accounts = results.map { |f| accounts[f.target_account_id] } next_path = following_api_v1_account_url(max_id: results.last.id) if results.size == DEFAULT_ACCOUNTS_LIMIT - prev_path = following_api_v1_account_url(since_id: results.first.id) if results.size > 0 + prev_path = following_api_v1_account_url(since_id: results.first.id) unless results.empty? set_pagination_headers(next_path, prev_path) @@ -33,7 +35,7 @@ class Api::V1::AccountsController < ApiController @accounts = results.map { |f| accounts[f.account_id] } next_path = followers_api_v1_account_url(max_id: results.last.id) if results.size == DEFAULT_ACCOUNTS_LIMIT - prev_path = followers_api_v1_account_url(since_id: results.first.id) if results.size > 0 + prev_path = followers_api_v1_account_url(since_id: results.first.id) unless results.empty? set_pagination_headers(next_path, prev_path) @@ -56,7 +58,7 @@ class Api::V1::AccountsController < ApiController set_maps(@statuses) next_path = statuses_api_v1_account_url(max_id: @statuses.last.id) if @statuses.size == DEFAULT_STATUSES_LIMIT - prev_path = statuses_api_v1_account_url(since_id: @statuses.first.id) if @statuses.size > 0 + prev_path = statuses_api_v1_account_url(since_id: @statuses.first.id) unless @statuses.empty? set_pagination_headers(next_path, prev_path) end diff --git a/app/controllers/api/v1/apps_controller.rb b/app/controllers/api/v1/apps_controller.rb index a09c29cc6..d1db16cf2 100644 --- a/app/controllers/api/v1/apps_controller.rb +++ b/app/controllers/api/v1/apps_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::V1::AppsController < ApiController respond_to :json diff --git a/app/controllers/api/v1/follows_controller.rb b/app/controllers/api/v1/follows_controller.rb index 6a77c4d66..c22dacbaa 100644 --- a/app/controllers/api/v1/follows_controller.rb +++ b/app/controllers/api/v1/follows_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::V1::FollowsController < ApiController before_action -> { doorkeeper_authorize! :follow } before_action :require_user! diff --git a/app/controllers/api/v1/media_controller.rb b/app/controllers/api/v1/media_controller.rb index 6b93e47b4..bb8e8d9ee 100644 --- a/app/controllers/api/v1/media_controller.rb +++ b/app/controllers/api/v1/media_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::V1::MediaController < ApiController before_action -> { doorkeeper_authorize! :write } before_action :require_user! diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index f5dbbd013..e1a417129 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::V1::StatusesController < ApiController before_action -> { doorkeeper_authorize! :read }, except: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite] before_action -> { doorkeeper_authorize! :write }, only: [:create, :destroy, :reblog, :unreblog, :favourite, :unfavourite] @@ -10,7 +12,7 @@ class Api::V1::StatusesController < ApiController end def context - @context = OpenStruct.new({ ancestors: @status.ancestors, descendants: @status.descendants }) + @context = OpenStruct.new(ancestors: @status.ancestors, descendants: @status.descendants) set_maps([@status] + @context[:ancestors] + @context[:descendants]) end @@ -20,7 +22,7 @@ class Api::V1::StatusesController < ApiController @accounts = results.map { |r| accounts[r.account_id] } next_path = reblogged_by_api_v1_status_url(max_id: results.last.id) if results.size == DEFAULT_ACCOUNTS_LIMIT - prev_path = reblogged_by_api_v1_status_url(since_id: results.first.id) if results.size > 0 + prev_path = reblogged_by_api_v1_status_url(since_id: results.first.id) unless results.empty? set_pagination_headers(next_path, prev_path) @@ -33,7 +35,7 @@ class Api::V1::StatusesController < ApiController @accounts = results.map { |f| accounts[f.account_id] } next_path = favourited_by_api_v1_status_url(max_id: results.last.id) if results.size == DEFAULT_ACCOUNTS_LIMIT - prev_path = favourited_by_api_v1_status_url(since_id: results.first.id) if results.size > 0 + prev_path = favourited_by_api_v1_status_url(since_id: results.first.id) unless results.empty? set_pagination_headers(next_path, prev_path) diff --git a/app/controllers/api/v1/timelines_controller.rb b/app/controllers/api/v1/timelines_controller.rb index 6d7858c76..19b76f11d 100644 --- a/app/controllers/api/v1/timelines_controller.rb +++ b/app/controllers/api/v1/timelines_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Api::V1::TimelinesController < ApiController before_action -> { doorkeeper_authorize! :read } before_action :require_user!, only: [:home, :mentions] @@ -10,7 +12,7 @@ class Api::V1::TimelinesController < ApiController set_maps(@statuses) next_path = api_v1_home_timeline_url(max_id: @statuses.last.id) if @statuses.size == DEFAULT_STATUSES_LIMIT - prev_path = api_v1_home_timeline_url(since_id: @statuses.first.id) if @statuses.size > 0 + prev_path = api_v1_home_timeline_url(since_id: @statuses.first.id) unless @statuses.empty? set_pagination_headers(next_path, prev_path) @@ -23,7 +25,7 @@ class Api::V1::TimelinesController < ApiController set_maps(@statuses) next_path = api_v1_mentions_timeline_url(max_id: @statuses.last.id) if @statuses.size == DEFAULT_STATUSES_LIMIT - prev_path = api_v1_mentions_timeline_url(since_id: @statuses.first.id) if @statuses.size > 0 + prev_path = api_v1_mentions_timeline_url(since_id: @statuses.first.id) unless @statuses.empty? set_pagination_headers(next_path, prev_path) @@ -36,7 +38,7 @@ class Api::V1::TimelinesController < ApiController set_maps(@statuses) next_path = api_v1_public_timeline_url(max_id: @statuses.last.id) if @statuses.size == DEFAULT_STATUSES_LIMIT - prev_path = api_v1_public_timeline_url(since_id: @statuses.first.id) if @statuses.size > 0 + prev_path = api_v1_public_timeline_url(since_id: @statuses.first.id) unless @statuses.empty? set_pagination_headers(next_path, prev_path) @@ -50,7 +52,7 @@ class Api::V1::TimelinesController < ApiController set_maps(@statuses) next_path = api_v1_hashtag_timeline_url(params[:id], max_id: @statuses.last.id) if @statuses.size == DEFAULT_STATUSES_LIMIT - prev_path = api_v1_hashtag_timeline_url(params[:id], since_id: @statuses.first.id) if @statuses.size > 0 + prev_path = api_v1_hashtag_timeline_url(params[:id], since_id: @statuses.first.id) unless @statuses.empty? set_pagination_headers(next_path, prev_path) diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index ef453799b..aafaf843c 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApiController < ApplicationController DEFAULT_STATUSES_LIMIT = 20 DEFAULT_ACCOUNTS_LIMIT = 40 @@ -51,8 +53,8 @@ class ApiController < ApplicationController def set_pagination_headers(next_path = nil, prev_path = nil) links = [] - links << [next_path, [['rel', 'next']]] if next_path - links << [prev_path, [['rel', 'prev']]] if prev_path + links << [next_path, [%w(rel next)]] if next_path + links << [prev_path, [%w(rel prev)]] if prev_path response.headers['Link'] = LinkHeader.new(links) end @@ -76,7 +78,7 @@ class ApiController < ApplicationController render json: {}, status: 200 end - def set_maps(statuses) + def set_maps(statuses) # rubocop:disable Style/AccessorMethodName if current_account.nil? @reblogs_map = {} @favourites_map = {} diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e009fb879..c7a99b22f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. diff --git a/app/controllers/auth/confirmations_controller.rb b/app/controllers/auth/confirmations_controller.rb index b8e9316f1..2fdb281f4 100644 --- a/app/controllers/auth/confirmations_controller.rb +++ b/app/controllers/auth/confirmations_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Auth::ConfirmationsController < Devise::ConfirmationsController layout 'auth' end diff --git a/app/controllers/auth/passwords_controller.rb b/app/controllers/auth/passwords_controller.rb index a2fb7bb13..54ee1c39c 100644 --- a/app/controllers/auth/passwords_controller.rb +++ b/app/controllers/auth/passwords_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Auth::PasswordsController < Devise::PasswordsController layout 'auth' end diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index 7b7f6b52d..f06a1dce1 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Auth::RegistrationsController < Devise::RegistrationsController layout 'auth' diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index bd41ffd3d..c8350f9a1 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Auth::SessionsController < Devise::SessionsController include Devise::Controllers::Rememberable diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 8ed88d074..9710aa84f 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class HomeController < ApplicationController before_action :authenticate_user! diff --git a/app/controllers/media_controller.rb b/app/controllers/media_controller.rb index edfcdae53..9832a91b4 100644 --- a/app/controllers/media_controller.rb +++ b/app/controllers/media_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class MediaController < ApplicationController before_action :set_media_attachment diff --git a/app/controllers/oauth/authorizations_controller.rb b/app/controllers/oauth/authorizations_controller.rb index e2d154597..feaad04f6 100644 --- a/app/controllers/oauth/authorizations_controller.rb +++ b/app/controllers/oauth/authorizations_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController skip_before_action :authenticate_resource_owner! diff --git a/app/controllers/settings/preferences_controller.rb b/app/controllers/settings/preferences_controller.rb index 8a038f2fe..7acef5e25 100644 --- a/app/controllers/settings/preferences_controller.rb +++ b/app/controllers/settings/preferences_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Settings::PreferencesController < ApplicationController layout 'auth' diff --git a/app/controllers/settings/profiles_controller.rb b/app/controllers/settings/profiles_controller.rb index 52b6369a6..bd4fa2c46 100644 --- a/app/controllers/settings/profiles_controller.rb +++ b/app/controllers/settings/profiles_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Settings::ProfilesController < ApplicationController layout 'auth' diff --git a/app/controllers/stream_entries_controller.rb b/app/controllers/stream_entries_controller.rb index a364fa01c..caab1237d 100644 --- a/app/controllers/stream_entries_controller.rb +++ b/app/controllers/stream_entries_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StreamEntriesController < ApplicationController layout 'public' @@ -29,9 +31,7 @@ class StreamEntriesController < ApplicationController end def set_link_headers - response.headers['Link'] = LinkHeader.new([ - [account_stream_entry_url(@account, @stream_entry, format: 'atom'), [['rel', 'alternate'], ['type', 'application/atom+xml']]] - ]) + response.headers['Link'] = LinkHeader.new([[account_stream_entry_url(@account, @stream_entry, format: 'atom'), [%w(rel alternate), %w(type application/atom+xml)]]]) end def set_stream_entry diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index ca5ee2f83..a6b359485 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class TagsController < ApplicationController layout 'public' diff --git a/app/controllers/xrd_controller.rb b/app/controllers/xrd_controller.rb index 003ffc182..9e0277860 100644 --- a/app/controllers/xrd_controller.rb +++ b/app/controllers/xrd_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class XrdController < ApplicationController before_action :set_default_format_json, only: :webfinger before_action :set_default_format_xml, only: :host_meta @@ -26,11 +28,11 @@ class XrdController < ApplicationController private def set_default_format_xml - request.format = 'xml' if request.headers["HTTP_ACCEPT"].nil? && params[:format].nil? + request.format = 'xml' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil? end def set_default_format_json - request.format = 'json' if request.headers["HTTP_ACCEPT"].nil? && params[:format].nil? + request.format = 'json' if request.headers['HTTP_ACCEPT'].nil? && params[:format].nil? end def username_from_resource @@ -44,14 +46,14 @@ class XrdController < ApplicationController def pem_to_magic_key(public_key) modulus, exponent = [public_key.n, public_key.e].map do |component| - result = '' + result = [] until component.zero? result << [component % 256].pack('C') component >>= 8 end - result.reverse! + result.reverse.join end (['RSA'] + [modulus, exponent].map { |n| Base64.urlsafe_encode64(n) }).join('.') diff --git a/app/helpers/about_helper.rb b/app/helpers/about_helper.rb index 68e69aee1..0f57a7b5e 100644 --- a/app/helpers/about_helper.rb +++ b/app/helpers/about_helper.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + module AboutHelper end diff --git a/app/helpers/accounts_helper.rb b/app/helpers/accounts_helper.rb index 23eec6c67..17c7b4b82 100644 --- a/app/helpers/accounts_helper.rb +++ b/app/helpers/accounts_helper.rb @@ -1,10 +1,12 @@ +# frozen_string_literal: true + module AccountsHelper def pagination_options { - previous_label: "#{fa_icon('chevron-left')} Prev".html_safe, - next_label: "Next #{fa_icon('chevron-right')}".html_safe, + previous_label: safe_join([fa_icon('chevron-left'), 'Prev'], ' '), + next_label: safe_join(['Next', fa_icon('chevron-right')], ' '), inner_window: 1, - outer_window: 0 + outer_window: 0, } end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5ed8499aa..be82ff2fe 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ApplicationHelper def active_nav_class(path) current_page?(path) ? 'active' : '' diff --git a/app/helpers/atom_builder_helper.rb b/app/helpers/atom_builder_helper.rb index 2eed2da65..52190adae 100644 --- a/app/helpers/atom_builder_helper.rb +++ b/app/helpers/atom_builder_helper.rb @@ -1,6 +1,12 @@ +# frozen_string_literal: true + module AtomBuilderHelper def stream_updated_at - @account.stream_entries.last ? (@account.updated_at > @account.stream_entries.last.created_at ? @account.updated_at : @account.stream_entries.last.created_at) : @account.updated_at + if @account.stream_entries.last + (@account.updated_at > @account.stream_entries.last.created_at ? @account.updated_at : @account.stream_entries.last.created_at) + else + @account.updated_at + end end def entry(xml, is_root = false, &block) @@ -98,7 +104,7 @@ module AtomBuilderHelper end def in_reply_to(xml, uri, url) - xml['thr'].send('in-reply-to', { ref: uri, href: url, type: 'text/html' }) + xml['thr'].send('in-reply-to', ref: uri, href: url, type: 'text/html') end def link_mention(xml, account) diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb index 86cce4c01..66d7ea9af 100644 --- a/app/helpers/home_helper.rb +++ b/app/helpers/home_helper.rb @@ -1,8 +1,10 @@ +# frozen_string_literal: true + module HomeHelper def default_props { token: @token, - account: render(file: 'api/v1/accounts/show', locals: { account: current_user.account }, formats: :json) + account: render(file: 'api/v1/accounts/show', locals: { account: current_user.account }, formats: :json), } end end diff --git a/app/helpers/routing_helper.rb b/app/helpers/routing_helper.rb index 0512a4e0a..9ae29ec91 100644 --- a/app/helpers/routing_helper.rb +++ b/app/helpers/routing_helper.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module RoutingHelper extend ActiveSupport::Concern include Rails.application.routes.url_helpers diff --git a/app/helpers/stream_entries_helper.rb b/app/helpers/stream_entries_helper.rb index e994155b6..2ba50edc3 100644 --- a/app/helpers/stream_entries_helper.rb +++ b/app/helpers/stream_entries_helper.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module StreamEntriesHelper def display_name(account) account.display_name.blank? ? account.username : account.display_name diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb index 23450bc5c..5b2b3ca59 100644 --- a/app/helpers/tags_helper.rb +++ b/app/helpers/tags_helper.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + module TagsHelper end diff --git a/app/helpers/xrd_helper.rb b/app/helpers/xrd_helper.rb index 6b273e122..2281a0278 100644 --- a/app/helpers/xrd_helper.rb +++ b/app/helpers/xrd_helper.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + module XrdHelper end diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 8cf465da8..b808d7a0f 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'singleton' class FeedManager @@ -60,29 +62,29 @@ class FeedManager private def redis - $redis + Redis.current end def filter_from_home?(status, receiver) should_filter = false - if status.reply? && !status.thread.account.nil? # Filter out if it's a reply - should_filter = !receiver.following?(status.thread.account) # and I'm not following the person it's a reply to - should_filter = should_filter && !(receiver.id == status.thread.account_id) # and it's not a reply to me - should_filter = should_filter && !(status.account_id == status.thread.account_id) # and it's not a self-reply - elsif status.reblog? # Filter out a reblog - should_filter = receiver.blocking?(status.reblog.account) # if I'm blocking the reblogged person + if status.reply? && !status.thread.account.nil? # Filter out if it's a reply + should_filter = !receiver.following?(status.thread.account) # and I'm not following the person it's a reply to + should_filter &&= !(receiver.id == status.thread.account_id) # and it's not a reply to me + should_filter &&= !(status.account_id == status.thread.account_id) # and it's not a self-reply + elsif status.reblog? # Filter out a reblog + should_filter = receiver.blocking?(status.reblog.account) # if I'm blocking the reblogged person end should_filter end def filter_from_mentions?(status, receiver) - should_filter = receiver.id == status.account_id # Filter if I'm mentioning myself - should_filter = should_filter || receiver.blocking?(status.account) # or it's from someone I blocked + should_filter = receiver.id == status.account_id # Filter if I'm mentioning myself + should_filter ||= receiver.blocking?(status.account) # or it's from someone I blocked - if status.reply? && !status.thread.account.nil? # or it's a reply - should_filter = should_filter || receiver.blocking?(status.thread.account) # to a user I blocked + if status.reply? && !status.thread.account.nil? # or it's a reply + should_filter ||= receiver.blocking?(status.thread.account) # to a user I blocked end should_filter @@ -92,9 +94,9 @@ class FeedManager should_filter = receiver.blocking?(status.account) if status.reply? && !status.thread.account.nil? - should_filter = should_filter || receiver.blocking?(status.thread.account) + should_filter ||= receiver.blocking?(status.thread.account) elsif status.reblog? - should_filter = should_filter || receiver.blocking?(status.reblog.account) + should_filter ||= receiver.blocking?(status.reblog.account) end should_filter diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index 3a6ba97c8..5748680af 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'singleton' class Formatter @@ -17,7 +19,7 @@ class Formatter html = link_mentions(html, status.mentions) html = link_hashtags(html) - html.html_safe + html.html_safe # rubocop:disable Rails/OutputSafety end def reformat(html) @@ -30,7 +32,7 @@ class Formatter html = encode(account.note) html = link_urls(html) - html.html_safe + html.html_safe # rubocop:disable Rails/OutputSafety end private diff --git a/app/lib/tag_manager.rb b/app/lib/tag_manager.rb index d2cf35b49..fcc4b3259 100644 --- a/app/lib/tag_manager.rb +++ b/app/lib/tag_manager.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'singleton' class TagManager @@ -18,7 +20,7 @@ class TagManager end def local_domain?(domain) - domain.nil? || domain.gsub(/[\/]/, '').downcase == Rails.configuration.x.local_domain.downcase + domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.local_domain).zero? end def uri_for(target) diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb index 1a3196acd..2f7dd6ee5 100644 --- a/app/mailers/application_mailer.rb +++ b/app/mailers/application_mailer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApplicationMailer < ActionMailer::Base default from: (ENV['SMTP_FROM_ADDRESS'] || 'notifications@localhost') layout 'mailer' diff --git a/app/mailers/notification_mailer.rb b/app/mailers/notification_mailer.rb index 6c81df269..2ed562979 100644 --- a/app/mailers/notification_mailer.rb +++ b/app/mailers/notification_mailer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class NotificationMailer < ApplicationMailer helper StreamEntriesHelper diff --git a/app/models/account.rb b/app/models/account.rb index 81b724935..90434f975 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Account < ApplicationRecord include Targetable include PgSearch @@ -92,11 +94,11 @@ class Account < ApplicationRecord end def favourited?(status) - (status.reblog? ? status.reblog : status).favourites.where(account: self).count > 0 + (status.reblog? ? status.reblog : status).favourites.where(account: self).count.positive? end def reblogged?(status) - (status.reblog? ? status.reblog : status).reblogs.where(account: self).count > 0 + (status.reblog? ? status.reblog : status).reblogs.where(account: self).count.positive? end def keypair @@ -115,8 +117,8 @@ class Account < ApplicationRecord def avatar_remote_url=(url) self.avatar = URI.parse(url) unless self[:avatar_remote_url] == url self[:avatar_remote_url] = url - rescue OpenURI::HTTPError - # + rescue OpenURI::HTTPError => e + Rails.logger.debug "Error fetching remote avatar: #{e}" end def object_type diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 10a4cba84..71fbba5b3 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end diff --git a/app/models/block.rb b/app/models/block.rb index 418afdbdf..dc05bce87 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Block < ApplicationRecord belongs_to :account belongs_to :target_account, class_name: 'Account' diff --git a/app/models/concerns/paginable.rb b/app/models/concerns/paginable.rb index 08f207621..b3df081c0 100644 --- a/app/models/concerns/paginable.rb +++ b/app/models/concerns/paginable.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Paginable extend ActiveSupport::Concern diff --git a/app/models/concerns/streamable.rb b/app/models/concerns/streamable.rb index b3354c819..d9f5dc4d8 100644 --- a/app/models/concerns/streamable.rb +++ b/app/models/concerns/streamable.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Streamable extend ActiveSupport::Concern diff --git a/app/models/concerns/targetable.rb b/app/models/concerns/targetable.rb index d46590a02..4c335a302 100644 --- a/app/models/concerns/targetable.rb +++ b/app/models/concerns/targetable.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Targetable extend ActiveSupport::Concern diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index 8f9eb1182..9075b90a0 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class DomainBlock < ApplicationRecord validates :domain, presence: true, uniqueness: true diff --git a/app/models/favourite.rb b/app/models/favourite.rb index 60d853ce2..0a4f60ecb 100644 --- a/app/models/favourite.rb +++ b/app/models/favourite.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Favourite < ApplicationRecord include Paginable include Streamable diff --git a/app/models/feed.rb b/app/models/feed.rb index 408403873..e7f2ab3a5 100644 --- a/app/models/feed.rb +++ b/app/models/feed.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Feed def initialize(type, account) @type = type @@ -28,6 +30,6 @@ class Feed end def redis - $redis + Redis.current end end diff --git a/app/models/follow.rb b/app/models/follow.rb index 720812b6d..c918dabf2 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Follow < ApplicationRecord include Paginable include Streamable diff --git a/app/models/follow_suggestion.rb b/app/models/follow_suggestion.rb index ee76d4b6a..2daa40dcb 100644 --- a/app/models/follow_suggestion.rb +++ b/app/models/follow_suggestion.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FollowSuggestion class << self def get(for_account_id, limit = 10) diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index a740792f2..d3e3d73be 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class MediaAttachment < ApplicationRecord IMAGE_MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif'].freeze VIDEO_MIME_TYPES = ['video/webm', 'video/mp4'].freeze @@ -6,9 +8,9 @@ class MediaAttachment < ApplicationRecord belongs_to :status, inverse_of: :media_attachments has_attached_file :file, - styles: -> (f) { file_styles f }, - processors: -> (f) { f.video? ? [:transcoder] : [:thumbnail] }, - convert_options: { all: "-strip" } + styles: -> (f) { file_styles f }, + processors: -> (f) { f.video? ? [:transcoder] : [:thumbnail] }, + convert_options: { all: '-strip' } validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES validates_attachment_size :file, less_than: 4.megabytes @@ -20,8 +22,8 @@ class MediaAttachment < ApplicationRecord def file_remote_url=(url) self.file = URI.parse(url) - rescue OpenURI::HTTPError - # + rescue OpenURI::HTTPError => e + Rails.logger.debug "Error fetching remote attachment: #{e}" end def image? @@ -43,19 +45,19 @@ class MediaAttachment < ApplicationRecord if f.instance.image? { original: '100%', - small: '510x680>' + small: '510x680>', } else { small: { convert_options: { output: { - vf: 'scale=\'min(510\, iw):min(680\, ih)\':force_original_aspect_ratio=decrease' - } + vf: 'scale=\'min(510\, iw):min(680\, ih)\':force_original_aspect_ratio=decrease', + }, }, format: 'png', - time: 1 - } + time: 1, + }, } end end diff --git a/app/models/mention.rb b/app/models/mention.rb index b39fa2cbb..a3c8baf21 100644 --- a/app/models/mention.rb +++ b/app/models/mention.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Mention < ApplicationRecord belongs_to :account, inverse_of: :mentions belongs_to :status diff --git a/app/models/status.rb b/app/models/status.rb index 9e2711008..c6f5c8d6c 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Status < ApplicationRecord include Paginable include Streamable @@ -89,22 +91,17 @@ class Status < ApplicationRecord def as_public_timeline(account = nil) query = joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id').where('accounts.silenced = FALSE') - - unless account.nil? - query = filter_timeline(query, account) - end + query = filter_timeline(query, account) unless account.nil? query.with_includes.with_counters end def as_tag_timeline(tag, account = nil) query = tag.statuses - .joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') - .where('accounts.silenced = FALSE') + .joins('LEFT OUTER JOIN accounts ON statuses.account_id = accounts.id') + .where('accounts.silenced = FALSE') - unless account.nil? - query = filter_timeline(query, account) - end + query = filter_timeline(query, account) unless account.nil? query.with_includes.with_counters end diff --git a/app/models/stream_entry.rb b/app/models/stream_entry.rb index f8272be17..f6c8f461b 100644 --- a/app/models/stream_entry.rb +++ b/app/models/stream_entry.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StreamEntry < ApplicationRecord include Paginable @@ -15,7 +17,11 @@ class StreamEntry < ApplicationRecord scope :with_includes, -> { includes(:account, status: STATUS_INCLUDES, favourite: [:account, :stream_entry, status: STATUS_INCLUDES], follow: [:target_account, :stream_entry]) } def object_type - orphaned? ? :activity : (targeted? ? :activity : activity.object_type) + if orphaned? + :activity + else + targeted? ? :activity : activity.object_type + end end def verb diff --git a/app/models/tag.rb b/app/models/tag.rb index ac89c9bff..e5b0511ae 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Tag < ApplicationRecord has_and_belongs_to_many :statuses diff --git a/app/models/user.rb b/app/models/user.rb index de3521989..4a330d8ea 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable diff --git a/app/services/base_service.rb b/app/services/base_service.rb index 10c558109..6653255f2 100644 --- a/app/services/base_service.rb +++ b/app/services/base_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class BaseService include ActionView::Helpers::TextHelper include ActionView::Helpers::SanitizeHelper diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index 93987af29..a8fafe412 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class BlockDomainService < BaseService def call(domain) DomainBlock.find_or_create_by!(domain: domain) diff --git a/app/services/block_service.rb b/app/services/block_service.rb index 6c841d25b..388a592e0 100644 --- a/app/services/block_service.rb +++ b/app/services/block_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class BlockService < BaseService def call(account, target_account) return if account.id == target_account.id @@ -20,6 +22,6 @@ class BlockService < BaseService end def redis - $redis + Redis.current end end diff --git a/app/services/fan_out_on_write_service.rb b/app/services/fan_out_on_write_service.rb index 43e36c138..70cf06e02 100644 --- a/app/services/fan_out_on_write_service.rb +++ b/app/services/fan_out_on_write_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FanOutOnWriteService < BaseService # Push a status into home and mentions feeds # @param [Status] status diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb index ab7f8aea1..9c6f12478 100644 --- a/app/services/favourite_service.rb +++ b/app/services/favourite_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FavouriteService < BaseService # Favourite a status and notify remote user # @param [Account] account diff --git a/app/services/fetch_atom_service.rb b/app/services/fetch_atom_service.rb index 5f00bf801..98ee1db84 100644 --- a/app/services/fetch_atom_service.rb +++ b/app/services/fetch_atom_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FetchAtomService < BaseService def call(url) response = http_client.head(url) @@ -9,15 +11,9 @@ class FetchAtomService < BaseService Rails.logger.debug "Remote status GET request returned code #{response.code}" return nil if response.code != 200 - - if response.mime_type == 'application/atom+xml' - return [url, fetch(url)] - elsif !response['Link'].blank? - return process_headers(url, response) - else - return process_html(fetch(url)) - end - + return [url, fetch(url)] if response.mime_type == 'application/atom+xml' + return process_headers(url, response) unless response['Link'].blank? + process_html(fetch(url)) rescue OpenSSL::SSL::SSLError => e Rails.logger.debug "SSL error: #{e}" end @@ -31,17 +27,17 @@ class FetchAtomService < BaseService alternate_link = page.xpath('//link[@rel="alternate"]').find { |link| link['type'] == 'application/atom+xml' } return nil if alternate_link.nil? - return [alternate_link['href'], fetch(alternate_link['href'])] + [alternate_link['href'], fetch(alternate_link['href'])] end def process_headers(url, response) Rails.logger.debug 'Processing link header' link_header = LinkHeader.parse(response['Link'].is_a?(Array) ? response['Link'].first : response['Link']) - alternate_link = link_header.find_link(['rel', 'alternate'], ['type', 'application/atom+xml']) + alternate_link = link_header.find_link(%w(rel alternate), %w(type application/atom+xml)) return process_html(fetch(url)) if alternate_link.nil? - return [alternate_link.href, fetch(alternate_link.href)] + [alternate_link.href, fetch(alternate_link.href)] end def fetch(url) diff --git a/app/services/fetch_remote_account_service.rb b/app/services/fetch_remote_account_service.rb index 7cbc9f6ec..3c3694a65 100644 --- a/app/services/fetch_remote_account_service.rb +++ b/app/services/fetch_remote_account_service.rb @@ -1,9 +1,11 @@ +# frozen_string_literal: true + class FetchRemoteAccountService < BaseService def call(url) atom_url, body = FetchAtomService.new.call(url) return nil if atom_url.nil? - return process_atom(atom_url, body) + process_atom(atom_url, body) end private @@ -25,7 +27,7 @@ class FetchRemoteAccountService < BaseService Rails.logger.debug "Unparseable URL given: #{url}" nil rescue Nokogiri::XML::XPath::SyntaxError - Rails.logger.debug "Invalid XML or missing namespace" + Rails.logger.debug 'Invalid XML or missing namespace' nil end end diff --git a/app/services/fetch_remote_status_service.rb b/app/services/fetch_remote_status_service.rb index e4537d61f..7063231e4 100644 --- a/app/services/fetch_remote_status_service.rb +++ b/app/services/fetch_remote_status_service.rb @@ -1,9 +1,11 @@ +# frozen_string_literal: true + class FetchRemoteStatusService < BaseService def call(url) atom_url, body = FetchAtomService.new.call(url) return nil if atom_url.nil? - return process_atom(atom_url, body) + process_atom(atom_url, body) end private @@ -20,7 +22,7 @@ class FetchRemoteStatusService < BaseService statuses = ProcessFeedService.new.call(body, account) - return statuses.first + statuses.first end def extract_author(url, xml) @@ -34,7 +36,7 @@ class FetchRemoteStatusService < BaseService return FollowRemoteAccountService.new.call("#{username}@#{domain}") rescue Nokogiri::XML::XPath::SyntaxError - Rails.logger.debug "Invalid XML or missing namespace" + Rails.logger.debug 'Invalid XML or missing namespace' nil end end diff --git a/app/services/follow_remote_account_service.rb b/app/services/follow_remote_account_service.rb index b309425a8..37339d8ed 100644 --- a/app/services/follow_remote_account_service.rb +++ b/app/services/follow_remote_account_service.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + class FollowRemoteAccountService < BaseService include OStatus2::MagicKey - DFRN_NS = 'http://purl.org/macgirvin/dfrn/1.0'.freeze + DFRN_NS = 'http://purl.org/macgirvin/dfrn/1.0' # Find or create a local account for a remote user. # When creating, look up the user's webfinger and fetch all @@ -49,7 +51,7 @@ class FollowRemoteAccountService < BaseService get_profile(xml, account) account.save! - return account + account end private diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index 2a9dc82c3..3b97840cb 100644 --- a/app/services/follow_service.rb +++ b/app/services/follow_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FollowService < BaseService # Follow a remote user, notify remote user about the follow # @param [Account] source_account From which to follow @@ -35,7 +37,7 @@ class FollowService < BaseService end def redis - $redis + Redis.current end def follow_remote_account_service diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index b23808a7c..cf824ff99 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PostStatusService < BaseService # Post a text status update, fetch and notify remote users mentioned # @param [Account] account Account from which to post diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb index 3094c50fd..54d11b631 100644 --- a/app/services/precompute_feed_service.rb +++ b/app/services/precompute_feed_service.rb @@ -1,10 +1,10 @@ +# frozen_string_literal: true + class PrecomputeFeedService < BaseService # Fill up a user's home/mentions feed from DB and return a subset # @param [Symbol] type :home or :mentions # @param [Account] account def call(type, account) - instant_return = [] - Status.send("as_#{type}_timeline", account).limit(FeedManager::MAX_ITEMS).each do |status| next if FeedManager.instance.filter?(type, status, account) redis.zadd(FeedManager.instance.key(type, account.id), status.id, status.reblog? ? status.reblog_of_id : status.id) @@ -14,6 +14,6 @@ class PrecomputeFeedService < BaseService private def redis - $redis + Redis.current end end diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb index b671c809d..561feb032 100644 --- a/app/services/process_feed_service.rb +++ b/app/services/process_feed_service.rb @@ -1,6 +1,8 @@ +# frozen_string_literal: true + class ProcessFeedService < BaseService - ACTIVITY_NS = 'http://activitystrea.ms/spec/1.0/'.freeze - THREAD_NS = 'http://purl.org/syndication/thread/1.0'.freeze + ACTIVITY_NS = 'http://activitystrea.ms/spec/1.0/' + THREAD_NS = 'http://purl.org/syndication/thread/1.0' def call(body, account) xml = Nokogiri::XML(body) @@ -89,13 +91,13 @@ class ProcessFeedService < BaseService account = @account end - status = Status.create!({ + status = Status.create!( uri: id(entry), url: url(entry), account: account, text: content(entry), - created_at: published(entry), - }) + created_at: published(entry) + ) if thread?(entry) Rails.logger.debug "Trying to attach #{status.id} (#{id(entry)}) to #{thread(entry).first}" diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index df30f73ae..3bf3471ec 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -1,8 +1,8 @@ +# frozen_string_literal: true + class ProcessHashtagsService < BaseService def call(status, tags = []) - if status.local? - tags = status.text.scan(Tag::HASHTAG_RE).map(&:first) - end + tags = status.text.scan(Tag::HASHTAG_RE).map(&:first) if status.local? tags.map(&:downcase).uniq.each do |tag| status.tags << Tag.where(name: tag).first_or_initialize(name: tag) diff --git a/app/services/process_interaction_service.rb b/app/services/process_interaction_service.rb index be78ebb58..ecd3c2b2c 100644 --- a/app/services/process_interaction_service.rb +++ b/app/services/process_interaction_service.rb @@ -1,5 +1,7 @@ +# frozen_string_literal: true + class ProcessInteractionService < BaseService - ACTIVITY_NS = 'http://activitystrea.ms/spec/1.0/'.freeze + ACTIVITY_NS = 'http://activitystrea.ms/spec/1.0/' # Record locally the remote interaction with our user # @param [String] envelope Salmon envelope @@ -76,9 +78,7 @@ class ProcessInteractionService < BaseService return if status.nil? - if account.id == status.account_id - remove_status_service.call(status) - end + remove_status_service.call(status) if account.id == status.account_id end def favourite!(xml, from_account) diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb index 8baa03d07..fd5a02ffe 100644 --- a/app/services/process_mentions_service.rb +++ b/app/services/process_mentions_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ProcessMentionsService < BaseService # Scan status for mentions and fetch remote mentioned users, create # local mention pointers, send Salmon notifications to mentioned diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb index 627d4e0e8..884d911a4 100644 --- a/app/services/reblog_service.rb +++ b/app/services/reblog_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ReblogService < BaseService # Reblog a status and notify its remote author # @param [Account] account Account to reblog from diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index 66fa1be18..689abc97b 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RemoveStatusService < BaseService def call(status) remove_from_self(status) if status.account.local? @@ -62,6 +64,6 @@ class RemoveStatusService < BaseService end def redis - $redis + Redis.current end end diff --git a/app/services/search_service.rb b/app/services/search_service.rb index 9e8ee6220..c4cffda13 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class SearchService < BaseService def call(query, limit, resolve = false) return if query.blank? @@ -5,10 +7,10 @@ class SearchService < BaseService username, domain = query.split('@') results = if domain.nil? - Account.search_for(username) - else - Account.search_for("#{username} #{domain}") - end + Account.search_for(username) + else + Account.search_for("#{username} #{domain}") + end results = results.limit(limit).with_counters diff --git a/app/services/send_interaction_service.rb b/app/services/send_interaction_service.rb index a425dcc8e..05a1e77e3 100644 --- a/app/services/send_interaction_service.rb +++ b/app/services/send_interaction_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class SendInteractionService < BaseService # Send an Atom representation of an interaction to a remote Salmon endpoint # @param [StreamEntry] stream_entry diff --git a/app/services/subscribe_service.rb b/app/services/subscribe_service.rb index 427a5e198..820b208e9 100644 --- a/app/services/subscribe_service.rb +++ b/app/services/subscribe_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class SubscribeService < BaseService def call(account) account.secret = SecureRandom.hex diff --git a/app/services/unblock_service.rb b/app/services/unblock_service.rb index d24161423..3658dcd71 100644 --- a/app/services/unblock_service.rb +++ b/app/services/unblock_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UnblockService < BaseService def call(account, target_account) account.unblock!(target_account) if account.blocking?(target_account) diff --git a/app/services/unfavourite_service.rb b/app/services/unfavourite_service.rb index 2491c194f..de6e84e7d 100644 --- a/app/services/unfavourite_service.rb +++ b/app/services/unfavourite_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UnfavouriteService < BaseService def call(account, status) favourite = Favourite.find_by!(account: account, status: status) diff --git a/app/services/unfollow_service.rb b/app/services/unfollow_service.rb index d22451a74..b3386a99c 100644 --- a/app/services/unfollow_service.rb +++ b/app/services/unfollow_service.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UnfollowService < BaseService # Unfollow and notify the remote user # @param [Account] source_account Where to unfollow from @@ -21,6 +23,6 @@ class UnfollowService < BaseService end def redis - $redis + Redis.current end end diff --git a/app/services/update_remote_profile_service.rb b/app/services/update_remote_profile_service.rb index 14f8cc868..2909ae12a 100644 --- a/app/services/update_remote_profile_service.rb +++ b/app/services/update_remote_profile_service.rb @@ -1,14 +1,16 @@ +# frozen_string_literal: true + class UpdateRemoteProfileService < BaseService POCO_NS = 'http://portablecontacts.net/spec/1.0' def call(author_xml, account) return if author_xml.nil? - if author_xml.at_xpath('./poco:displayName', poco: POCO_NS).nil? - account.display_name = account.username - else - account.display_name = author_xml.at_xpath('./poco:displayName', poco: POCO_NS).content - end + account.display_name = if author_xml.at_xpath('./poco:displayName', poco: POCO_NS).nil? + account.username + else + author_xml.at_xpath('./poco:displayName', poco: POCO_NS).content + end unless author_xml.at_xpath('./poco:note').nil? account.note = author_xml.at_xpath('./poco:note', poco: POCO_NS).content diff --git a/app/workers/distribution_worker.rb b/app/workers/distribution_worker.rb index a69b39523..09374bee2 100644 --- a/app/workers/distribution_worker.rb +++ b/app/workers/distribution_worker.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class DistributionWorker include Sidekiq::Worker diff --git a/app/workers/hub_ping_worker.rb b/app/workers/hub_ping_worker.rb index 57d716c97..d9a9ff427 100644 --- a/app/workers/hub_ping_worker.rb +++ b/app/workers/hub_ping_worker.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class HubPingWorker include Sidekiq::Worker include RoutingHelper diff --git a/app/workers/notification_worker.rb b/app/workers/notification_worker.rb index 473a9232b..386e94111 100644 --- a/app/workers/notification_worker.rb +++ b/app/workers/notification_worker.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class NotificationWorker include Sidekiq::Worker diff --git a/app/workers/processing_worker.rb b/app/workers/processing_worker.rb index 87ebbc5ea..3b11a4c5e 100644 --- a/app/workers/processing_worker.rb +++ b/app/workers/processing_worker.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ProcessingWorker include Sidekiq::Worker diff --git a/app/workers/regeneration_worker.rb b/app/workers/regeneration_worker.rb index f0ed01d71..3aece0ba2 100644 --- a/app/workers/regeneration_worker.rb +++ b/app/workers/regeneration_worker.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RegenerationWorker include Sidekiq::Worker diff --git a/app/workers/thread_resolve_worker.rb b/app/workers/thread_resolve_worker.rb index c59fb093a..700161989 100644 --- a/app/workers/thread_resolve_worker.rb +++ b/app/workers/thread_resolve_worker.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ThreadResolveWorker include Sidekiq::Worker diff --git a/config.ru b/config.ru index bd83b2541..3476455ef 100644 --- a/config.ru +++ b/config.ru @@ -1,3 +1,4 @@ +# frozen_string_literal: true # This file is used by Rack-based servers to start the application. require ::File.expand_path('../config/environment', __FILE__) diff --git a/config/initializers/redis.rb b/config/initializers/redis.rb index 4fe33811f..3825710b8 100644 --- a/config/initializers/redis.rb +++ b/config/initializers/redis.rb @@ -1,5 +1,7 @@ -$redis = Redis.new({ +# frozen_string_literal: true + +Redis.current = Redis.new( host: ENV.fetch('REDIS_HOST') { 'localhost' }, port: ENV.fetch('REDIS_PORT') { 6379 }, driver: :hiredis -}) +) diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake index 94da0904c..58bafff66 100644 --- a/lib/tasks/mastodon.rake +++ b/lib/tasks/mastodon.rake @@ -1,3 +1,5 @@ +# frozen_string_literal: true + namespace :mastodon do namespace :media do desc 'Removes media attachments that have not been assigned to any status for longer than a day' @@ -28,7 +30,7 @@ namespace :mastodon do task refresh: :environment do Account.expiring(1.day.from_now).find_each do |a| Rails.logger.debug "PuSH re-subscribing to #{a.acct}" - SubscribeService.new.(a) + SubscribeService.new.call(a) end end end @@ -36,7 +38,7 @@ namespace :mastodon do namespace :feeds do desc 'Clears all timelines so that they would be regenerated on next hit' task clear: :environment do - $redis.keys('feed:*').each { |key| $redis.del(key) } + Redis.current.keys('feed:*').each { |key| Redis.current.del(key) } end end