Skip to content
Snippets Groups Projects
follow_service.rb 800 B
Newer Older
  • Learn to ignore specific revisions
  • Eugen Rochko's avatar
    Eugen Rochko committed
    class FollowService < BaseService
      # Follow a remote user, notify remote user about the follow
      # @param [Account] source_account From which to follow
      # @param [String] uri User URI to follow in the form of username@domain
    
    Eugen Rochko's avatar
    Eugen Rochko committed
      def call(source_account, uri)
        target_account = follow_remote_account_service.(uri)
    
    Eugen Rochko's avatar
    Eugen Rochko committed
    
        return if target_account.nil?
    
        follow = source_account.follow!(target_account)
        send_interaction_service.(follow.stream_entry, target_account)
    
        source_account.ping!(account_url(account, format: 'atom'), [Rails.configuration.x.hub_url])
    
    Eugen Rochko's avatar
    Eugen Rochko committed
      end
    
      private
    
      def follow_remote_account_service
    
    Eugen Rochko's avatar
    Eugen Rochko committed
        @follow_remote_account_service ||= FollowRemoteAccountService.new
      end
    
      def send_interaction_service
        @send_interaction_service ||= SendInteractionService.new
    
    Eugen Rochko's avatar
    Eugen Rochko committed
      end
    end