about summary refs log tree commit diff
path: root/app/lib/command_tag/commands/status_tools.rb
blob: 0e6524001f68d55db528b8a8250af77d22219402 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# frozen_string_literal: true
module CommandTag::Commands::StatusTools
  def handle_title_before_save(args)
    return unless author_of_status?

    @status.title = args[0]
  end

  def handle_visibility_before_save(args)
    return unless author_of_status? && args[0].present?

    args[0] = read_visibility_from(args[0])
    return if args[0].blank?

    if args[1].blank?
      @status.visibility = args[0].to_sym
    elsif args[0] == @status.visibility.to_s
      domains = args[1..-1].map { |domain| normalize_domain(domain) }.uniq.compact
      @status.domain_permissions.where(domain: domains).destroy_all if domains.present?
    else
      args[1..-1].flat_map(&:split).uniq.each do |domain|
        domain = normalize_domain(domain)
        @status.domain_permissions.create_or_update(domain: domain, visibility: args[0]) if domain.present?
      end
    end
  end

  alias handle_v_before_save                      handle_visibility_before_save
  alias handle_privacy_before_save                handle_visibility_before_save

  def handle_semiprivate_before_save(args)
    return unless author_of_status?

    @semiprivate = args.blank? || read_boolean_from(args[0])
  end
end