validates_with DisallowedHashtagsValidator
validates :reblog, uniqueness: { scope: :account }, if: :reblog?
validates :visibility, exclusion: { in: %w(direct limited) }, if: :reblog?
- validates_associated :owned_poll
+
+ accepts_nested_attributes_for :owned_poll
default_scope { recent }
return idempotency_duplicate if idempotency_given? && idempotency_duplicate?
validate_media!
- validate_poll!
preprocess_attributes!
if scheduled?
def schedule_status!
status_for_validation = @account.statuses.build(status_attributes)
+
if status_for_validation.valid?
status_for_validation.destroy
raise Mastodon::ValidationError, I18n.t('media_attachments.validations.images_and_video') if @media.size > 1 && @media.find(&:video?)
end
- def validate_poll!
- return if @options[:poll].blank?
-
- @poll = @account.polls.new(@options[:poll])
- end
-
def language_from_option(str)
ISO_639.find(str)&.alpha2
end
text: @text,
media_attachments: @media || [],
thread: @in_reply_to,
- owned_poll: @poll,
+ owned_poll_attributes: poll_attributes,
sensitive: (@options[:sensitive].nil? ? @account.user&.setting_default_sensitive : @options[:sensitive]) || @options[:spoiler_text].present?,
spoiler_text: @options[:spoiler_text] || '',
visibility: @visibility,
language: language_from_option(@options[:language]) || @account.user&.setting_default_language&.presence || LanguageDetector.instance.detect(@text, @account),
application: @options[:application],
- }
+ }.compact
end
def scheduled_status_attributes
}
end
+ def poll_attributes
+ return if @options[:poll].blank?
+
+ @options[:poll].merge(account: @account)
+ end
+
def scheduled_options
@options.tap do |options_hash|
options_hash[:in_reply_to_id] = options_hash.delete(:thread)&.id