Add Ruby 3.0 support (#16046)
* Fix issues with POSIX::Spawn, Terrapin and Ruby 3.0 Also improve the Terrapin monkey-patch for the stderr/stdout issue. * Fix keyword argument handling throughout the codebase * Monkey-patch Paperclip to fix keyword arguments handling in validators * Change validation_extensions to please CodeClimate * Bump microformats from 4.2.1 to 4.3.1 * Allow Ruby 3.0 * Add Ruby 3.0 test target to CircleCI * Add test for admin dashboard warnings * Fix admin dashboard warnings on Ruby 3.0
This commit is contained in:
		| @ -20,7 +20,7 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController | ||||
|   def outbox_presenter | ||||
|     if page_requested? | ||||
|       ActivityPub::CollectionPresenter.new( | ||||
|         id: outbox_url(page_params), | ||||
|         id: outbox_url(**page_params), | ||||
|         type: :ordered, | ||||
|         part_of: outbox_url, | ||||
|         prev: prev_page, | ||||
|  | ||||
| @ -35,7 +35,7 @@ class Api::V1::AccountsController < Api::BaseController | ||||
|     follow  = FollowService.new.call(current_user.account, @account, reblogs: params.key?(:reblogs) ? truthy_param?(:reblogs) : nil, notify: params.key?(:notify) ? truthy_param?(:notify) : nil, with_rate_limit: true) | ||||
|     options = @account.locked? || current_user.account.silenced? ? {} : { following_map: { @account.id => { reblogs: follow.show_reblogs?, notify: follow.notify? } }, requested_map: { @account.id => false } } | ||||
|  | ||||
|     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(options) | ||||
|     render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships(**options) | ||||
|   end | ||||
|  | ||||
|   def block | ||||
| @ -70,7 +70,7 @@ class Api::V1::AccountsController < Api::BaseController | ||||
|   end | ||||
|  | ||||
|   def relationships(**options) | ||||
|     AccountRelationshipsPresenter.new([@account.id], current_user.account_id, options) | ||||
|     AccountRelationshipsPresenter.new([@account.id], current_user.account_id, **options) | ||||
|   end | ||||
|  | ||||
|   def account_params | ||||
|  | ||||
| @ -29,7 +29,7 @@ class Api::V1::FollowRequestsController < Api::BaseController | ||||
|   end | ||||
|  | ||||
|   def relationships(**options) | ||||
|     AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, options) | ||||
|     AccountRelationshipsPresenter.new([params[:id]], current_user.account_id, **options) | ||||
|   end | ||||
|  | ||||
|   def load_accounts | ||||
|  | ||||
| @ -44,7 +44,7 @@ class SessionActivation < ApplicationRecord | ||||
|     end | ||||
|  | ||||
|     def activate(**options) | ||||
|       activation = create!(options) | ||||
|       activation = create!(**options) | ||||
|       purge_old | ||||
|       activation | ||||
|     end | ||||
|  | ||||
| @ -370,15 +370,20 @@ class User < ApplicationRecord | ||||
|  | ||||
|   protected | ||||
|  | ||||
|   def send_devise_notification(notification, *args) | ||||
|   def send_devise_notification(notification, *args, **kwargs) | ||||
|     # This method can be called in `after_update` and `after_commit` hooks, | ||||
|     # but we must make sure the mailer is actually called *after* commit, | ||||
|     # otherwise it may work on stale data. To do this, figure out if we are | ||||
|     # within a transaction. | ||||
|  | ||||
|     # It seems like devise sends keyword arguments as a hash in the last | ||||
|     # positional argument | ||||
|     kwargs = args.pop if args.last.is_a?(Hash) && kwargs.empty? | ||||
|  | ||||
|     if ActiveRecord::Base.connection.current_transaction.try(:records)&.include?(self) | ||||
|       pending_devise_notifications << [notification, args] | ||||
|       pending_devise_notifications << [notification, args, kwargs] | ||||
|     else | ||||
|       render_and_send_devise_message(notification, *args) | ||||
|       render_and_send_devise_message(notification, *args, **kwargs) | ||||
|     end | ||||
|   end | ||||
|  | ||||
| @ -389,8 +394,8 @@ class User < ApplicationRecord | ||||
|   end | ||||
|  | ||||
|   def send_pending_devise_notifications | ||||
|     pending_devise_notifications.each do |notification, args| | ||||
|       render_and_send_devise_message(notification, *args) | ||||
|     pending_devise_notifications.each do |notification, args, kwargs| | ||||
|       render_and_send_devise_message(notification, *args, **kwargs) | ||||
|     end | ||||
|  | ||||
|     # Empty the pending notifications array because the | ||||
| @ -403,8 +408,8 @@ class User < ApplicationRecord | ||||
|     @pending_devise_notifications ||= [] | ||||
|   end | ||||
|  | ||||
|   def render_and_send_devise_message(notification, *args) | ||||
|     devise_mailer.send(notification, self, *args).deliver_later | ||||
|   def render_and_send_devise_message(notification, *args, **kwargs) | ||||
|     devise_mailer.send(notification, self, *args, **kwargs).deliver_later | ||||
|   end | ||||
|  | ||||
|   def set_approved | ||||
|  | ||||
| @ -5,7 +5,7 @@ | ||||
|   .flash-message-stack | ||||
|     - @system_checks.each do |message| | ||||
|       .flash-message.warning | ||||
|         = t("admin.system_checks.#{message.key}.message_html", message.value ? { value: content_tag(:strong, message.value) } : {}) | ||||
|         = t("admin.system_checks.#{message.key}.message_html", value: message.value ? content_tag(:strong, message.value) : nil) | ||||
|         - if message.action | ||||
|           = link_to t("admin.system_checks.#{message.key}.action"), message.action | ||||
|  | ||||
|  | ||||
| @ -5,7 +5,7 @@ class Import::RelationshipWorker | ||||
|  | ||||
|   sidekiq_options queue: 'pull', retry: 8, dead: false | ||||
|  | ||||
|   def perform(account_id, target_account_uri, relationship, options = {}) | ||||
|   def perform(account_id, target_account_uri, relationship, options) | ||||
|     from_account   = Account.find(account_id) | ||||
|     target_domain  = domain(target_account_uri) | ||||
|     target_account = stoplight_wrap_request(target_domain) { ResolveAccountService.new.call(target_account_uri, { check_delivery_availability: true }) } | ||||
| @ -16,7 +16,7 @@ class Import::RelationshipWorker | ||||
|     case relationship | ||||
|     when 'follow' | ||||
|       begin | ||||
|         FollowService.new.call(from_account, target_account, options) | ||||
|         FollowService.new.call(from_account, target_account, **options) | ||||
|       rescue ActiveRecord::RecordInvalid | ||||
|         raise if FollowLimitValidator.limit_for_account(from_account) < from_account.following_count | ||||
|       end | ||||
| @ -27,7 +27,7 @@ class Import::RelationshipWorker | ||||
|     when 'unblock' | ||||
|       UnblockService.new.call(from_account, target_account) | ||||
|     when 'mute' | ||||
|       MuteService.new.call(from_account, target_account, options) | ||||
|       MuteService.new.call(from_account, target_account, **options) | ||||
|     when 'unmute' | ||||
|       UnmuteService.new.call(from_account, target_account) | ||||
|     end | ||||
|  | ||||
		Reference in New Issue
	
	Block a user