fuzzysearch enqueue job
This commit is contained in:
@@ -67,7 +67,7 @@ module Domain::PostsHelper
|
||||
def gallery_file_for_post(post)
|
||||
file = post.primary_file_for_view
|
||||
return nil unless file.present?
|
||||
return nil unless file.state_ok?
|
||||
return nil unless file.state_ok? || file.last_status_code == 200
|
||||
return nil unless file.log_entry_id.present?
|
||||
content_type = file.log_entry&.content_type
|
||||
return nil unless content_type.present?
|
||||
|
||||
@@ -78,7 +78,7 @@ class Domain::E621::Job::ScanPostFavsJob < Domain::E621::Job::Base
|
||||
breaker += 1
|
||||
end
|
||||
|
||||
post.scanned_post_favs_at = Time.now
|
||||
post.scanned_post_favs_at = Time.current
|
||||
post.save!
|
||||
end
|
||||
end
|
||||
|
||||
87
app/jobs/domain/fa/job/scan_fuzzysearch_job.rb
Normal file
87
app/jobs/domain/fa/job/scan_fuzzysearch_job.rb
Normal file
@@ -0,0 +1,87 @@
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Domain::Fa::Job::ScanFuzzysearchJob < Domain::Fa::Job::Base
|
||||
queue_as :fuzzysearch
|
||||
|
||||
sig { override.returns(Symbol) }
|
||||
def self.http_factory_method
|
||||
:get_fuzzysearch_http_client
|
||||
end
|
||||
|
||||
sig { override.params(args: T::Hash[Symbol, T.untyped]).returns(T.untyped) }
|
||||
def perform(args)
|
||||
post = post_from_args!
|
||||
fs_client = Scraper::FuzzysearchApiClient.new(http_client)
|
||||
|
||||
logger.tagged(make_arg_tag(post)) do
|
||||
if post.fuzzysearch_checked_at.present?
|
||||
logger.warn("fuzzysearch already checked, skipping")
|
||||
return
|
||||
end
|
||||
|
||||
fa_id = post.fa_id
|
||||
if fa_id.nil?
|
||||
logger.error("post has no fa_id, skipping")
|
||||
return
|
||||
end
|
||||
|
||||
unless post.state_removed?
|
||||
logger.warn("post is not removed, skipping")
|
||||
return
|
||||
end
|
||||
|
||||
response = fs_client.search_fa_id_info(fa_id)
|
||||
post.fuzzysearch_checked_at = Time.now
|
||||
if response.is_a?(HttpLogEntry)
|
||||
post.fuzzysearch_entry = response
|
||||
return
|
||||
end
|
||||
|
||||
post.fuzzysearch_entry = response.log_entry
|
||||
post.fuzzysearch_json = response.json
|
||||
|
||||
if creator = post.creator
|
||||
if creator.url_name != response.artist_url_name
|
||||
fatal_error(
|
||||
format_tags(
|
||||
make_tag("existing", creator.url_name),
|
||||
make_tag("fuzzysearch", response.artist_url_name),
|
||||
"fuzzysearch artist url name mismatch",
|
||||
),
|
||||
)
|
||||
end
|
||||
else
|
||||
url_name = response.artist_url_name
|
||||
creator =
|
||||
Domain::User::FaUser.find_or_initialize_by(url_name:) do |user|
|
||||
# TODO - bug in has_aux_table, attributes not initialized before
|
||||
# block is called
|
||||
user.name ||= response.artist_name
|
||||
user.full_name ||= response.artist_name
|
||||
end
|
||||
creator.save! if creator.new_record?
|
||||
post.creator = creator
|
||||
end
|
||||
|
||||
if post.keywords.blank? || post.keywords.empty?
|
||||
post.keywords = response.tags
|
||||
end
|
||||
|
||||
post_file = post.file
|
||||
post_file ||=
|
||||
post.build_file(url_str: response.file_url) do |post_file|
|
||||
post_file.last_status_code = 404
|
||||
post_file.state = "terminal_error"
|
||||
end
|
||||
if post_file.new_record?
|
||||
post_file.enqueue_job_after_save(
|
||||
Job::FaPostFurArchiverPostFileJob,
|
||||
{ post_file: },
|
||||
)
|
||||
end
|
||||
end
|
||||
ensure
|
||||
post.save! if post
|
||||
end
|
||||
end
|
||||
@@ -18,12 +18,16 @@ class Scraper::JobBase < ApplicationJob
|
||||
@http_client = http_client
|
||||
end
|
||||
|
||||
sig { params(url: String).returns(Scraper::HttpClient::Response) }
|
||||
sig do
|
||||
params(url: T.any(String, Addressable::URI)).returns(
|
||||
Scraper::HttpClient::Response,
|
||||
)
|
||||
end
|
||||
def get(url)
|
||||
around_request(
|
||||
proc do
|
||||
@http_client.get(
|
||||
url,
|
||||
url.to_s,
|
||||
caused_by_entry: @job.causing_log_entry,
|
||||
use_http_cache: @job.use_http_cache?,
|
||||
)
|
||||
@@ -31,12 +35,16 @@ class Scraper::JobBase < ApplicationJob
|
||||
)
|
||||
end
|
||||
|
||||
sig { params(url: String).returns(Scraper::HttpClient::Response) }
|
||||
sig do
|
||||
params(url: T.any(String, Addressable::URI)).returns(
|
||||
Scraper::HttpClient::Response,
|
||||
)
|
||||
end
|
||||
def post(url)
|
||||
around_request(
|
||||
proc do
|
||||
@http_client.post(
|
||||
url,
|
||||
url.to_s,
|
||||
caused_by_entry: @job.causing_log_entry,
|
||||
use_http_cache: @job.use_http_cache?,
|
||||
)
|
||||
|
||||
@@ -48,6 +48,14 @@ class Scraper::ClientFactory
|
||||
end
|
||||
end
|
||||
|
||||
def self.get_fuzzysearch_http_client
|
||||
if Rails.env.test?
|
||||
@http_client_mock || raise("no http client mock set")
|
||||
else
|
||||
_http_client_impl(:fuzzysearch, Scraper::FuzzysearchHttpClientConfig)
|
||||
end
|
||||
end
|
||||
|
||||
def self.get_sofurry_http_client
|
||||
if Rails.env.test?
|
||||
@http_client_mock || raise("no http client mock set")
|
||||
|
||||
61
app/lib/scraper/fuzzysearch_api_client.rb
Normal file
61
app/lib/scraper/fuzzysearch_api_client.rb
Normal file
@@ -0,0 +1,61 @@
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Scraper::FuzzysearchApiClient
|
||||
extend T::Sig
|
||||
|
||||
API_BASE_URL = "https://api-next.fuzzysearch.net"
|
||||
API_PATH_FA_ID_INFO = "/v1/file/furaffinity"
|
||||
|
||||
sig { params(http_client: Scraper::JobBase::WrappedHttpClient).void }
|
||||
def initialize(http_client)
|
||||
@http_client = http_client
|
||||
end
|
||||
|
||||
class FaIdInfo < T::ImmutableStruct
|
||||
include T::Struct::ActsAsComparable
|
||||
|
||||
const :log_entry, HttpLogEntry
|
||||
const :json, T::Hash[String, T.untyped]
|
||||
const :fa_id, Integer
|
||||
const :artist_url_name, String
|
||||
const :artist_name, String
|
||||
const :deleted, T::Boolean
|
||||
const :file_url, String
|
||||
const :file_sha256, String
|
||||
const :tags, T::Array[String]
|
||||
end
|
||||
|
||||
sig { params(fa_id: Integer).returns(T.any(HttpLogEntry, FaIdInfo)) }
|
||||
def search_fa_id_info(fa_id)
|
||||
url = Addressable::URI.parse("#{API_BASE_URL}#{API_PATH_FA_ID_INFO}")
|
||||
url.query_values = { search: fa_id.to_s }
|
||||
response = @http_client.get(url)
|
||||
return response.log_entry if response.status_code != 200
|
||||
|
||||
json = JSON.parse(response.body)
|
||||
return response.log_entry unless json.is_a?(Array)
|
||||
return response.log_entry if json.empty?
|
||||
json = json.first
|
||||
return response.log_entry unless json.is_a?(Hash)
|
||||
file_url = json["url"]
|
||||
return response.log_entry unless file_url.present?
|
||||
|
||||
url_parsed = FaUriHelper.parse_fa_media_url(file_url)
|
||||
return response.log_entry unless url_parsed.present?
|
||||
|
||||
FaIdInfo.new(
|
||||
log_entry: response.log_entry,
|
||||
json:,
|
||||
fa_id: json["id"],
|
||||
artist_url_name: url_parsed.url_name,
|
||||
artist_name: json["artist"],
|
||||
deleted: json["deleted"],
|
||||
file_url:,
|
||||
file_sha256: json["sha256"],
|
||||
tags: json["tags"],
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
end
|
||||
49
app/lib/scraper/fuzzysearch_http_client_config.rb
Normal file
49
app/lib/scraper/fuzzysearch_http_client_config.rb
Normal file
@@ -0,0 +1,49 @@
|
||||
# typed: strict
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Scraper::FuzzysearchHttpClientConfig < Scraper::HttpClientConfig
|
||||
API_KEY_STATE_KEY = "fuzzysearch-api-key"
|
||||
|
||||
sig { void }
|
||||
def initialize
|
||||
api_key!
|
||||
end
|
||||
|
||||
sig { override.returns(T.nilable(T::Array[T.untyped])) }
|
||||
def cookies
|
||||
[]
|
||||
end
|
||||
sig { override.returns(T::Array[[String, Numeric]]) }
|
||||
def ratelimit
|
||||
[["api-next.fuzzysearch.net", 1.0]]
|
||||
end
|
||||
|
||||
sig { override.returns(Integer) }
|
||||
def redirect_limit
|
||||
2
|
||||
end
|
||||
|
||||
sig { override.returns(T::Array[String]) }
|
||||
def allowed_domains
|
||||
%w[api-next.fuzzysearch.net]
|
||||
end
|
||||
|
||||
sig do
|
||||
override
|
||||
.params(request: Scraper::CurlHttpPerformer::Request)
|
||||
.returns(Scraper::CurlHttpPerformer::Request)
|
||||
end
|
||||
def map_request(request)
|
||||
request.request_headers["X-Api-Key"] = api_key!
|
||||
request.request_headers["Accept"] = "application/json"
|
||||
request
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
sig { returns(String) }
|
||||
def api_key!
|
||||
GlobalState.get(API_KEY_STATE_KEY) ||
|
||||
raise("fuzzysearch api key is not set")
|
||||
end
|
||||
end
|
||||
81
app/lib/tasks/fa/query_missing_posts_from_fuzzysearch.rb
Normal file
81
app/lib/tasks/fa/query_missing_posts_from_fuzzysearch.rb
Normal file
@@ -0,0 +1,81 @@
|
||||
# typed: strict
|
||||
class Tasks::Fa::QueryMissingPostsFromFuzzysearch < EnqueueJobBase
|
||||
extend T::Sig
|
||||
include Domain::Fa::HasCountFailedInQueue
|
||||
|
||||
sig { params(start_at: T.nilable(String), kwargs: T.untyped).void }
|
||||
def initialize(start_at: nil, **kwargs)
|
||||
super(**kwargs)
|
||||
@start_at = T.let(get_progress(start_at)&.to_i, T.nilable(Integer))
|
||||
end
|
||||
|
||||
sig { override.returns(String) }
|
||||
def progress_key
|
||||
"fa-query-missing-posts-from-fuzzysearch"
|
||||
end
|
||||
|
||||
sig { override.void }
|
||||
def start_enqueuing
|
||||
greatest_ok_post_fa_id =
|
||||
Domain::Post::FaPost.where(state: :ok).maximum(:fa_id)
|
||||
|
||||
query =
|
||||
Domain::Post::FaPost.where(state: :removed, fuzzysearch_checked_at: nil)
|
||||
# clamp to greatest ok post fa_id
|
||||
query =
|
||||
query.where(fa_id: ..greatest_ok_post_fa_id) if greatest_ok_post_fa_id
|
||||
query = query.where(fa_id: ..@start_at) if @start_at
|
||||
query = query.where.missing(:file).order(fa_id: :desc)
|
||||
|
||||
log("finding greatest qualifying fa_id...")
|
||||
greatest_post_fa_id = query.first&.fa_id
|
||||
|
||||
log("counting posts...")
|
||||
count = query.count
|
||||
puts "number of posts to process: #{count}"
|
||||
pb = create_progress_bar(count)
|
||||
|
||||
while greatest_post_fa_id
|
||||
posts = query.where(fa_id: ..greatest_post_fa_id).limit(32).to_a
|
||||
break if posts.empty?
|
||||
|
||||
posts.each do |post|
|
||||
break if interrupted?
|
||||
|
||||
enqueue do
|
||||
Domain::Fa::Job::ScanFuzzysearchJob.perform_later(
|
||||
{ fa_id: post.fa_id },
|
||||
)
|
||||
end
|
||||
|
||||
post_desc =
|
||||
"#{(post.creator&.to_param || "(none)").rjust(20)} / #{post.to_param}".ljust(
|
||||
40,
|
||||
)
|
||||
log("migrate post :: #{post_desc}") if pb.progress % 10 == 0
|
||||
rescue StandardError
|
||||
log("error processing post :: #{post_desc}")
|
||||
ensure
|
||||
pb.progress = [pb.progress + 1, pb.total].min
|
||||
end
|
||||
|
||||
last_processed_fa_id = posts.map(&:fa_id).compact.min
|
||||
if last_processed_fa_id
|
||||
save_progress(last_processed_fa_id.to_s)
|
||||
greatest_post_fa_id = last_processed_fa_id - 1
|
||||
else
|
||||
break
|
||||
end
|
||||
|
||||
# Check for interruption after processing batch
|
||||
break if interrupted?
|
||||
end
|
||||
|
||||
log("finished")
|
||||
end
|
||||
|
||||
sig { override.returns(Integer) }
|
||||
def queue_size
|
||||
count_failed_in_queue("fuzzysearch")
|
||||
end
|
||||
end
|
||||
@@ -34,7 +34,7 @@ module BelongsToWithCounterCache
|
||||
association(association_name).target,
|
||||
T.nilable(ActiveRecord::Base),
|
||||
)
|
||||
if target.send(counter_name_column).nil?
|
||||
if target.send(counter_name_column).nil? && !target.new_record?
|
||||
target.class.reset_counters(target.id, inverse_association_name)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -21,6 +21,10 @@ class Domain::Post::FaPost < Domain::Post
|
||||
attr_json :first_gallery_page_id, :integer
|
||||
attr_json :first_seen_entry_id, :integer
|
||||
|
||||
attr_json :fuzzysearch_checked_at, ActiveModelUtcTimeValue.new
|
||||
attr_json :fuzzysearch_json, ActiveModel::Type::Value.new
|
||||
attr_json :fuzzysearch_entry_id, :integer
|
||||
|
||||
# TODO - convert `file` to Domain::PostFile::FaPostFile and
|
||||
# move this to Domain::PostFile::FaPostFile
|
||||
attr_json :tried_from_fur_archiver, :boolean, default: false
|
||||
@@ -29,6 +33,7 @@ class Domain::Post::FaPost < Domain::Post
|
||||
belongs_to :first_browse_page, class_name: "::HttpLogEntry", optional: true
|
||||
belongs_to :first_gallery_page, class_name: "::HttpLogEntry", optional: true
|
||||
belongs_to :first_seen_entry, class_name: "::HttpLogEntry", optional: true
|
||||
belongs_to :fuzzysearch_entry, class_name: "::HttpLogEntry", optional: true
|
||||
|
||||
has_single_file!
|
||||
has_single_creator! Domain::User::FaUser
|
||||
@@ -177,7 +182,7 @@ class Domain::Post::FaPost < Domain::Post
|
||||
pa = super
|
||||
return pa unless pa.nil?
|
||||
|
||||
if file_url_str = file&.url_str
|
||||
for file_url_str in files.map(&:url_str).compact
|
||||
parsed = FaUriHelper.parse_fa_media_url(file_url_str)
|
||||
return parsed.original_file_posted_at.in_time_zone("UTC") if parsed
|
||||
end
|
||||
|
||||
8
app/views/domain/posts/_title_stat.html.erb
Normal file
8
app/views/domain/posts/_title_stat.html.erb
Normal file
@@ -0,0 +1,8 @@
|
||||
<span>
|
||||
<i class="fa-solid <%= icon_class %> mr-1"></i>
|
||||
<%= label %>: <% if value.present? %>
|
||||
<%= value %>
|
||||
<% else %>
|
||||
<span class="text-slate-400"> - </span>
|
||||
<% end %>
|
||||
</span>
|
||||
@@ -1,18 +1,18 @@
|
||||
<span>
|
||||
<i class="fa-solid fa-eye mr-1"></i>
|
||||
Views: <%= post.num_views %>
|
||||
</span>
|
||||
<span>
|
||||
<i class="fa-solid fa-comment mr-1"></i>
|
||||
Comments: <%= post.num_comments %>
|
||||
</span>
|
||||
<span>
|
||||
<i class="fa-solid fa-calendar-days mr-1"></i>
|
||||
Status: <%= post.status_for_view %>
|
||||
</span>
|
||||
<% if policy(post).view_tried_from_fur_archiver? && post.tried_from_fur_archiver? %>
|
||||
<span>
|
||||
<i class="fa-solid fa-download mr-1"></i>
|
||||
FurArchiver
|
||||
</span>
|
||||
<%= render partial: "domain/posts/title_stat", locals: { label: "Views", value: post.num_views, icon_class: "fa-eye" } %>
|
||||
<%= render partial: "domain/posts/title_stat", locals: { label: "Comments", value: post.num_comments, icon_class: "fa-comment" } %>
|
||||
<%= render partial: "domain/posts/title_stat", locals: { label: "Status", value: post.status_for_view, icon_class: "fa-calendar-days" } %>
|
||||
<% if policy(post).view_tried_from_fur_archiver? %>
|
||||
<% if post.fuzzysearch_checked_at? %>
|
||||
<% hle = post.fuzzysearch_entry %>
|
||||
<span>
|
||||
<i class="fa-solid fa-search mr-1"></i>
|
||||
<%= link_to "FuzzySearch", log_entry_path(hle), title: post.fuzzysearch_checked_at&.strftime("%Y-%m-%d %H:%M:%S"), class: "text-blue-600" %>
|
||||
</span>
|
||||
<% end %>
|
||||
<% if post.tried_from_fur_archiver? %>
|
||||
<span>
|
||||
<i class="fa-solid fa-download mr-1"></i>
|
||||
FurArchiver
|
||||
</span>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
class AddFuzzysearchCheckToFaPosts < ActiveRecord::Migration[7.2]
|
||||
def change
|
||||
add_column :domain_fa_posts_fa_aux, :fuzzysearch_checked_at, :datetime
|
||||
add_reference :domain_fa_posts_fa_aux,
|
||||
:fuzzysearch_log_entry,
|
||||
foreign_key: {
|
||||
to_table: :log_entries,
|
||||
}
|
||||
end
|
||||
end
|
||||
10
rake/fa.rake
10
rake/fa.rake
@@ -96,6 +96,16 @@ namespace :fa do
|
||||
loop { sleep poll_duration if enqueuer.run_once == :sleep }
|
||||
end
|
||||
|
||||
desc "Pull missing post information from FuzzySearch"
|
||||
task pull_missing_post_info_from_fuzzysearch: %i[
|
||||
set_logger_stdout
|
||||
environment
|
||||
] do
|
||||
Tasks::Fa::QueryMissingPostsFromFuzzysearch.new(
|
||||
start_at: ENV["start_at"],
|
||||
).run
|
||||
end
|
||||
|
||||
desc "run a single browse page job"
|
||||
task browse_page_job: %i[set_logger_stdout environment] do
|
||||
Domain::Fa::Job::BrowsePageJob.set(
|
||||
|
||||
1
sorbet/rbi/dsl/application_controller.rbi
generated
1
sorbet/rbi/dsl/application_controller.rbi
generated
@@ -43,6 +43,7 @@ class ApplicationController
|
||||
include ::Domain::Users::FaUsersHelper
|
||||
include ::Domain::VisualSearchHelper
|
||||
include ::DomainSourceHelper
|
||||
include ::FaUriHelper
|
||||
include ::GoodJobHelper
|
||||
include ::IpAddressHelper
|
||||
include ::TimestampHelper
|
||||
|
||||
1
sorbet/rbi/dsl/devise_controller.rbi
generated
1
sorbet/rbi/dsl/devise_controller.rbi
generated
@@ -40,6 +40,7 @@ class DeviseController
|
||||
include ::Domain::Users::FaUsersHelper
|
||||
include ::Domain::VisualSearchHelper
|
||||
include ::DomainSourceHelper
|
||||
include ::FaUriHelper
|
||||
include ::GoodJobHelper
|
||||
include ::IpAddressHelper
|
||||
include ::TimestampHelper
|
||||
|
||||
27
sorbet/rbi/dsl/domain/fa/job/scan_fuzzysearch_job.rbi
generated
Normal file
27
sorbet/rbi/dsl/domain/fa/job/scan_fuzzysearch_job.rbi
generated
Normal file
@@ -0,0 +1,27 @@
|
||||
# typed: true
|
||||
|
||||
# DO NOT EDIT MANUALLY
|
||||
# This is an autogenerated file for dynamic methods in `Domain::Fa::Job::ScanFuzzysearchJob`.
|
||||
# Please instead update this file by running `bin/tapioca dsl Domain::Fa::Job::ScanFuzzysearchJob`.
|
||||
|
||||
|
||||
class Domain::Fa::Job::ScanFuzzysearchJob
|
||||
sig { returns(ColorLogger) }
|
||||
def logger; end
|
||||
|
||||
class << self
|
||||
sig { returns(ColorLogger) }
|
||||
def logger; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
args: T::Hash[::Symbol, T.untyped],
|
||||
block: T.nilable(T.proc.params(job: Domain::Fa::Job::ScanFuzzysearchJob).void)
|
||||
).returns(T.any(Domain::Fa::Job::ScanFuzzysearchJob, FalseClass))
|
||||
end
|
||||
def perform_later(args, &block); end
|
||||
|
||||
sig { params(args: T::Hash[::Symbol, T.untyped]).returns(T.untyped) }
|
||||
def perform_now(args); end
|
||||
end
|
||||
end
|
||||
@@ -632,61 +632,6 @@ class Domain::Factors::UserPostFavPostFactors
|
||||
end
|
||||
|
||||
module GeneratedAttributeMethods
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def created_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_was; end
|
||||
|
||||
sig { void }
|
||||
def created_at_will_change!; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def embedding; end
|
||||
|
||||
@@ -822,9 +767,6 @@ class Domain::Factors::UserPostFavPostFactors
|
||||
sig { void }
|
||||
def post_id_will_change!; end
|
||||
|
||||
sig { void }
|
||||
def restore_created_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_embedding!; end
|
||||
|
||||
@@ -834,15 +776,6 @@ class Domain::Factors::UserPostFavPostFactors
|
||||
sig { void }
|
||||
def restore_post_id!; end
|
||||
|
||||
sig { void }
|
||||
def restore_updated_at!; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_created_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_created_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def saved_change_to_embedding; end
|
||||
|
||||
@@ -861,70 +794,6 @@ class Domain::Factors::UserPostFavPostFactors
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_post_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_updated_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_updated_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def updated_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_was; end
|
||||
|
||||
sig { void }
|
||||
def updated_at_will_change!; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_created_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_embedding?; end
|
||||
|
||||
@@ -933,9 +802,6 @@ class Domain::Factors::UserPostFavPostFactors
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_post_id?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_updated_at?; end
|
||||
end
|
||||
|
||||
module GeneratedRelationMethods
|
||||
|
||||
@@ -632,61 +632,6 @@ class Domain::Factors::UserPostFavUserFactors
|
||||
end
|
||||
|
||||
module GeneratedAttributeMethods
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def created_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_was; end
|
||||
|
||||
sig { void }
|
||||
def created_at_will_change!; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def embedding; end
|
||||
|
||||
@@ -777,27 +722,15 @@ class Domain::Factors::UserPostFavUserFactors
|
||||
sig { void }
|
||||
def id_will_change!; end
|
||||
|
||||
sig { void }
|
||||
def restore_created_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_embedding!; end
|
||||
|
||||
sig { void }
|
||||
def restore_id!; end
|
||||
|
||||
sig { void }
|
||||
def restore_updated_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_user_id!; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_created_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_created_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def saved_change_to_embedding; end
|
||||
|
||||
@@ -810,73 +743,12 @@ class Domain::Factors::UserPostFavUserFactors
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_updated_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_updated_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Integer), T.nilable(::Integer)])) }
|
||||
def saved_change_to_user_id; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_user_id?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def updated_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_was; end
|
||||
|
||||
sig { void }
|
||||
def updated_at_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def user_id; end
|
||||
|
||||
@@ -922,18 +794,12 @@ class Domain::Factors::UserPostFavUserFactors
|
||||
sig { void }
|
||||
def user_id_will_change!; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_created_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_embedding?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_id?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_updated_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_user_id?; end
|
||||
end
|
||||
|
||||
@@ -632,61 +632,6 @@ class Domain::Factors::UserUserFollowFromFactors
|
||||
end
|
||||
|
||||
module GeneratedAttributeMethods
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def created_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_was; end
|
||||
|
||||
sig { void }
|
||||
def created_at_will_change!; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def embedding; end
|
||||
|
||||
@@ -777,27 +722,15 @@ class Domain::Factors::UserUserFollowFromFactors
|
||||
sig { void }
|
||||
def id_will_change!; end
|
||||
|
||||
sig { void }
|
||||
def restore_created_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_embedding!; end
|
||||
|
||||
sig { void }
|
||||
def restore_id!; end
|
||||
|
||||
sig { void }
|
||||
def restore_updated_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_user_id!; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_created_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_created_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def saved_change_to_embedding; end
|
||||
|
||||
@@ -810,73 +743,12 @@ class Domain::Factors::UserUserFollowFromFactors
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_updated_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_updated_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Integer), T.nilable(::Integer)])) }
|
||||
def saved_change_to_user_id; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_user_id?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def updated_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_was; end
|
||||
|
||||
sig { void }
|
||||
def updated_at_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def user_id; end
|
||||
|
||||
@@ -922,18 +794,12 @@ class Domain::Factors::UserUserFollowFromFactors
|
||||
sig { void }
|
||||
def user_id_will_change!; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_created_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_embedding?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_id?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_updated_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_user_id?; end
|
||||
end
|
||||
|
||||
@@ -632,61 +632,6 @@ class Domain::Factors::UserUserFollowToFactors
|
||||
end
|
||||
|
||||
module GeneratedAttributeMethods
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def created_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def created_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def created_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def created_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def created_at_was; end
|
||||
|
||||
sig { void }
|
||||
def created_at_will_change!; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def embedding; end
|
||||
|
||||
@@ -777,27 +722,15 @@ class Domain::Factors::UserUserFollowToFactors
|
||||
sig { void }
|
||||
def id_will_change!; end
|
||||
|
||||
sig { void }
|
||||
def restore_created_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_embedding!; end
|
||||
|
||||
sig { void }
|
||||
def restore_id!; end
|
||||
|
||||
sig { void }
|
||||
def restore_updated_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_user_id!; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_created_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_created_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def saved_change_to_embedding; end
|
||||
|
||||
@@ -810,73 +743,12 @@ class Domain::Factors::UserUserFollowToFactors
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_updated_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_updated_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Integer), T.nilable(::Integer)])) }
|
||||
def saved_change_to_user_id; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_user_id?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at; end
|
||||
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at?; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def updated_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def updated_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_change_to_be_saved; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def updated_at_previous_change; end
|
||||
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def updated_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def updated_at_was; end
|
||||
|
||||
sig { void }
|
||||
def updated_at_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def user_id; end
|
||||
|
||||
@@ -922,18 +794,12 @@ class Domain::Factors::UserUserFollowToFactors
|
||||
sig { void }
|
||||
def user_id_will_change!; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_created_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_embedding?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_id?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_updated_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_user_id?; end
|
||||
end
|
||||
|
||||
89
sorbet/rbi/dsl/domain/post/e621_post.rbi
generated
89
sorbet/rbi/dsl/domain/post/e621_post.rbi
generated
@@ -446,6 +446,9 @@ class Domain::Post::E621Post
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def build_caused_by_entry(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainPostsE621Aux) }
|
||||
def build_e621_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile) }
|
||||
def build_file(*args, &blk); end
|
||||
|
||||
@@ -485,6 +488,12 @@ class Domain::Post::E621Post
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_caused_by_entry!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainPostsE621Aux) }
|
||||
def create_e621_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainPostsE621Aux) }
|
||||
def create_e621_aux!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile) }
|
||||
def create_file(*args, &blk); end
|
||||
|
||||
@@ -527,6 +536,12 @@ class Domain::Post::E621Post
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::UserPostFav) }
|
||||
def create_user_post_fav!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::DomainPostsE621Aux)) }
|
||||
def e621_aux; end
|
||||
|
||||
sig { params(value: T.nilable(::DomainPostsE621Aux)).void }
|
||||
def e621_aux=(value); end
|
||||
|
||||
sig { returns(T::Array[T.untyped]) }
|
||||
def faving_user_ids; end
|
||||
|
||||
@@ -622,6 +637,9 @@ class Domain::Post::E621Post
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def reload_caused_by_entry; end
|
||||
|
||||
sig { returns(T.nilable(::DomainPostsE621Aux)) }
|
||||
def reload_e621_aux; end
|
||||
|
||||
sig { returns(T.nilable(::Domain::PostFile)) }
|
||||
def reload_file; end
|
||||
|
||||
@@ -646,6 +664,9 @@ class Domain::Post::E621Post
|
||||
sig { void }
|
||||
def reset_caused_by_entry; end
|
||||
|
||||
sig { void }
|
||||
def reset_e621_aux; end
|
||||
|
||||
sig { void }
|
||||
def reset_file; end
|
||||
|
||||
@@ -1178,16 +1199,16 @@ class Domain::Post::E621Post
|
||||
sig { void }
|
||||
def e621_id_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def e621_updated_at; end
|
||||
|
||||
sig { params(value: T.nilable(::Time)).returns(T.nilable(::Time)) }
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def e621_updated_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def e621_updated_at?; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def e621_updated_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
@@ -1196,28 +1217,38 @@ class Domain::Post::E621Post
|
||||
sig { returns(T::Boolean) }
|
||||
def e621_updated_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def e621_updated_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def e621_updated_at_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.nilable(::Time), to: T.nilable(::Time)).returns(T::Boolean) }
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def e621_updated_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def e621_updated_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def e621_updated_at_previous_change; end
|
||||
|
||||
sig { params(from: T.nilable(::Time), to: T.nilable(::Time)).returns(T::Boolean) }
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def e621_updated_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def e621_updated_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def e621_updated_at_was; end
|
||||
|
||||
sig { void }
|
||||
@@ -2046,7 +2077,7 @@ class Domain::Post::E621Post
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_e621_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_e621_updated_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
@@ -2154,7 +2185,7 @@ class Domain::Post::E621Post
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_scan_log_entry_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def saved_change_to_scanned_post_favs_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
@@ -2304,16 +2335,16 @@ class Domain::Post::E621Post
|
||||
sig { void }
|
||||
def scan_log_entry_id_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def scanned_post_favs_at; end
|
||||
|
||||
sig { params(value: T.nilable(::Time)).returns(T.nilable(::Time)) }
|
||||
sig { params(value: T.nilable(::ActiveSupport::TimeWithZone)).returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def scanned_post_favs_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def scanned_post_favs_at?; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def scanned_post_favs_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
@@ -2322,28 +2353,38 @@ class Domain::Post::E621Post
|
||||
sig { returns(T::Boolean) }
|
||||
def scanned_post_favs_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def scanned_post_favs_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def scanned_post_favs_at_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.nilable(::Time), to: T.nilable(::Time)).returns(T::Boolean) }
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def scanned_post_favs_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def scanned_post_favs_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
sig { returns(T.nilable([T.nilable(::ActiveSupport::TimeWithZone), T.nilable(::ActiveSupport::TimeWithZone)])) }
|
||||
def scanned_post_favs_at_previous_change; end
|
||||
|
||||
sig { params(from: T.nilable(::Time), to: T.nilable(::Time)).returns(T::Boolean) }
|
||||
sig do
|
||||
params(
|
||||
from: T.nilable(::ActiveSupport::TimeWithZone),
|
||||
to: T.nilable(::ActiveSupport::TimeWithZone)
|
||||
).returns(T::Boolean)
|
||||
end
|
||||
def scanned_post_favs_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def scanned_post_favs_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
sig { returns(T.nilable(::ActiveSupport::TimeWithZone)) }
|
||||
def scanned_post_favs_at_was; end
|
||||
|
||||
sig { void }
|
||||
|
||||
198
sorbet/rbi/dsl/domain/post/fa_post.rbi
generated
198
sorbet/rbi/dsl/domain/post/fa_post.rbi
generated
@@ -488,6 +488,9 @@ class Domain::Post::FaPost
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def build_first_seen_entry(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def build_fuzzysearch_entry(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def build_last_submission_log_entry(*args, &blk); end
|
||||
|
||||
@@ -530,6 +533,12 @@ class Domain::Post::FaPost
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_first_seen_entry!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_fuzzysearch_entry(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_fuzzysearch_entry!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_last_submission_log_entry(*args, &blk); end
|
||||
|
||||
@@ -630,6 +639,18 @@ class Domain::Post::FaPost
|
||||
sig { returns(T::Boolean) }
|
||||
def first_seen_entry_previously_changed?; end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def fuzzysearch_entry; end
|
||||
|
||||
sig { params(value: T.nilable(::HttpLogEntry)).void }
|
||||
def fuzzysearch_entry=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_entry_changed?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_entry_previously_changed?; end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def last_submission_log_entry; end
|
||||
|
||||
@@ -669,6 +690,9 @@ class Domain::Post::FaPost
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def reload_first_seen_entry; end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def reload_fuzzysearch_entry; end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def reload_last_submission_log_entry; end
|
||||
|
||||
@@ -696,6 +720,9 @@ class Domain::Post::FaPost
|
||||
sig { void }
|
||||
def reset_first_seen_entry; end
|
||||
|
||||
sig { void }
|
||||
def reset_fuzzysearch_entry; end
|
||||
|
||||
sig { void }
|
||||
def reset_last_submission_log_entry; end
|
||||
|
||||
@@ -1264,6 +1291,141 @@ class Domain::Post::FaPost
|
||||
sig { void }
|
||||
def first_seen_entry_id_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
def fuzzysearch_checked_at; end
|
||||
|
||||
sig { params(value: T.nilable(::Time)).returns(T.nilable(::Time)) }
|
||||
def fuzzysearch_checked_at=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_checked_at?; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
def fuzzysearch_checked_at_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_checked_at_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_checked_at_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
def fuzzysearch_checked_at_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
def fuzzysearch_checked_at_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.nilable(::Time), to: T.nilable(::Time)).returns(T::Boolean) }
|
||||
def fuzzysearch_checked_at_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
def fuzzysearch_checked_at_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
def fuzzysearch_checked_at_previous_change; end
|
||||
|
||||
sig { params(from: T.nilable(::Time), to: T.nilable(::Time)).returns(T::Boolean) }
|
||||
def fuzzysearch_checked_at_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
def fuzzysearch_checked_at_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::Time)) }
|
||||
def fuzzysearch_checked_at_was; end
|
||||
|
||||
sig { void }
|
||||
def fuzzysearch_checked_at_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def fuzzysearch_entry_id; end
|
||||
|
||||
sig { params(value: T.nilable(::Integer)).returns(T.nilable(::Integer)) }
|
||||
def fuzzysearch_entry_id=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_entry_id?; end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def fuzzysearch_entry_id_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_entry_id_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_entry_id_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Integer), T.nilable(::Integer)])) }
|
||||
def fuzzysearch_entry_id_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Integer), T.nilable(::Integer)])) }
|
||||
def fuzzysearch_entry_id_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.nilable(::Integer), to: T.nilable(::Integer)).returns(T::Boolean) }
|
||||
def fuzzysearch_entry_id_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def fuzzysearch_entry_id_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Integer), T.nilable(::Integer)])) }
|
||||
def fuzzysearch_entry_id_previous_change; end
|
||||
|
||||
sig { params(from: T.nilable(::Integer), to: T.nilable(::Integer)).returns(T::Boolean) }
|
||||
def fuzzysearch_entry_id_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def fuzzysearch_entry_id_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::Integer)) }
|
||||
def fuzzysearch_entry_id_was; end
|
||||
|
||||
sig { void }
|
||||
def fuzzysearch_entry_id_will_change!; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_json; end
|
||||
|
||||
sig { params(value: T.untyped).returns(T.untyped) }
|
||||
def fuzzysearch_json=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_json?; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_json_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_json_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def fuzzysearch_json_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def fuzzysearch_json_change; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def fuzzysearch_json_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.untyped, to: T.untyped).returns(T::Boolean) }
|
||||
def fuzzysearch_json_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_json_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def fuzzysearch_json_previous_change; end
|
||||
|
||||
sig { params(from: T.untyped, to: T.untyped).returns(T::Boolean) }
|
||||
def fuzzysearch_json_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_json_previously_was; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def fuzzysearch_json_was; end
|
||||
|
||||
sig { void }
|
||||
def fuzzysearch_json_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def gender; end
|
||||
|
||||
@@ -1790,6 +1952,15 @@ class Domain::Post::FaPost
|
||||
sig { void }
|
||||
def restore_first_seen_entry_id!; end
|
||||
|
||||
sig { void }
|
||||
def restore_fuzzysearch_checked_at!; end
|
||||
|
||||
sig { void }
|
||||
def restore_fuzzysearch_entry_id!; end
|
||||
|
||||
sig { void }
|
||||
def restore_fuzzysearch_json!; end
|
||||
|
||||
sig { void }
|
||||
def restore_gender!; end
|
||||
|
||||
@@ -1892,6 +2063,24 @@ class Domain::Post::FaPost
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_first_seen_entry_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Time), T.nilable(::Time)])) }
|
||||
def saved_change_to_fuzzysearch_checked_at; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_fuzzysearch_checked_at?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::Integer), T.nilable(::Integer)])) }
|
||||
def saved_change_to_fuzzysearch_entry_id; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_fuzzysearch_entry_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.untyped, T.untyped])) }
|
||||
def saved_change_to_fuzzysearch_json; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_fuzzysearch_json?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def saved_change_to_gender; end
|
||||
|
||||
@@ -2458,6 +2647,15 @@ class Domain::Post::FaPost
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_first_seen_entry_id?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_fuzzysearch_checked_at?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_fuzzysearch_entry_id?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_fuzzysearch_json?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_gender?; end
|
||||
|
||||
|
||||
@@ -457,7 +457,7 @@ class Domain::PostFile::InkbunnyPostFile
|
||||
def build_blob(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainPostFilesInkbunnyAux) }
|
||||
def build_domain_post_files_inkbunny_aux(*args, &blk); end
|
||||
def build_inkbunny_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def build_log_entry(*args, &blk); end
|
||||
@@ -472,10 +472,10 @@ class Domain::PostFile::InkbunnyPostFile
|
||||
def create_blob!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainPostFilesInkbunnyAux) }
|
||||
def create_domain_post_files_inkbunny_aux(*args, &blk); end
|
||||
def create_inkbunny_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainPostFilesInkbunnyAux) }
|
||||
def create_domain_post_files_inkbunny_aux!(*args, &blk); end
|
||||
def create_inkbunny_aux!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_log_entry(*args, &blk); end
|
||||
@@ -490,10 +490,10 @@ class Domain::PostFile::InkbunnyPostFile
|
||||
def create_post!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::DomainPostFilesInkbunnyAux)) }
|
||||
def domain_post_files_inkbunny_aux; end
|
||||
def inkbunny_aux; end
|
||||
|
||||
sig { params(value: T.nilable(::DomainPostFilesInkbunnyAux)).void }
|
||||
def domain_post_files_inkbunny_aux=(value); end
|
||||
def inkbunny_aux=(value); end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def log_entry; end
|
||||
@@ -511,7 +511,7 @@ class Domain::PostFile::InkbunnyPostFile
|
||||
def reload_blob; end
|
||||
|
||||
sig { returns(T.nilable(::DomainPostFilesInkbunnyAux)) }
|
||||
def reload_domain_post_files_inkbunny_aux; end
|
||||
def reload_inkbunny_aux; end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def reload_log_entry; end
|
||||
@@ -523,7 +523,7 @@ class Domain::PostFile::InkbunnyPostFile
|
||||
def reset_blob; end
|
||||
|
||||
sig { void }
|
||||
def reset_domain_post_files_inkbunny_aux; end
|
||||
def reset_inkbunny_aux; end
|
||||
|
||||
sig { void }
|
||||
def reset_log_entry; end
|
||||
|
||||
14
sorbet/rbi/dsl/domain/user/e621_user.rbi
generated
14
sorbet/rbi/dsl/domain/user/e621_user.rbi
generated
@@ -508,7 +508,7 @@ class Domain::User::E621User
|
||||
def build_avatar(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersE621Aux) }
|
||||
def build_domain_users_e621_aux(*args, &blk); end
|
||||
def build_e621_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::UserAvatar) }
|
||||
def create_avatar(*args, &blk); end
|
||||
@@ -517,16 +517,16 @@ class Domain::User::E621User
|
||||
def create_avatar!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersE621Aux) }
|
||||
def create_domain_users_e621_aux(*args, &blk); end
|
||||
def create_e621_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersE621Aux) }
|
||||
def create_domain_users_e621_aux!(*args, &blk); end
|
||||
def create_e621_aux!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::DomainUsersE621Aux)) }
|
||||
def domain_users_e621_aux; end
|
||||
def e621_aux; end
|
||||
|
||||
sig { params(value: T.nilable(::DomainUsersE621Aux)).void }
|
||||
def domain_users_e621_aux=(value); end
|
||||
def e621_aux=(value); end
|
||||
|
||||
sig { returns(T::Array[T.untyped]) }
|
||||
def faved_post_ids; end
|
||||
@@ -602,13 +602,13 @@ class Domain::User::E621User
|
||||
def reload_avatar; end
|
||||
|
||||
sig { returns(T.nilable(::DomainUsersE621Aux)) }
|
||||
def reload_domain_users_e621_aux; end
|
||||
def reload_e621_aux; end
|
||||
|
||||
sig { void }
|
||||
def reset_avatar; end
|
||||
|
||||
sig { void }
|
||||
def reset_domain_users_e621_aux; end
|
||||
def reset_e621_aux; end
|
||||
|
||||
sig { returns(T::Array[T.untyped]) }
|
||||
def uploaded_post_ids; end
|
||||
|
||||
14
sorbet/rbi/dsl/domain/user/fa_user.rbi
generated
14
sorbet/rbi/dsl/domain/user/fa_user.rbi
generated
@@ -529,7 +529,7 @@ class Domain::User::FaUser
|
||||
def build_avatar(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersFaAux) }
|
||||
def build_domain_users_fa_aux(*args, &blk); end
|
||||
def build_fa_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def build_last_gallery_page_log_entry(*args, &blk); end
|
||||
@@ -544,10 +544,10 @@ class Domain::User::FaUser
|
||||
def create_avatar!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersFaAux) }
|
||||
def create_domain_users_fa_aux(*args, &blk); end
|
||||
def create_fa_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersFaAux) }
|
||||
def create_domain_users_fa_aux!(*args, &blk); end
|
||||
def create_fa_aux!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_last_gallery_page_log_entry(*args, &blk); end
|
||||
@@ -562,10 +562,10 @@ class Domain::User::FaUser
|
||||
def create_last_user_page_log_entry!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::DomainUsersFaAux)) }
|
||||
def domain_users_fa_aux; end
|
||||
def fa_aux; end
|
||||
|
||||
sig { params(value: T.nilable(::DomainUsersFaAux)).void }
|
||||
def domain_users_fa_aux=(value); end
|
||||
def fa_aux=(value); end
|
||||
|
||||
sig { returns(T::Array[T.untyped]) }
|
||||
def faved_post_ids; end
|
||||
@@ -665,7 +665,7 @@ class Domain::User::FaUser
|
||||
def reload_avatar; end
|
||||
|
||||
sig { returns(T.nilable(::DomainUsersFaAux)) }
|
||||
def reload_domain_users_fa_aux; end
|
||||
def reload_fa_aux; end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def reload_last_gallery_page_log_entry; end
|
||||
@@ -677,7 +677,7 @@ class Domain::User::FaUser
|
||||
def reset_avatar; end
|
||||
|
||||
sig { void }
|
||||
def reset_domain_users_fa_aux; end
|
||||
def reset_fa_aux; end
|
||||
|
||||
sig { void }
|
||||
def reset_last_gallery_page_log_entry; end
|
||||
|
||||
22
sorbet/rbi/dsl/domain/user/inkbunny_user.rbi
generated
22
sorbet/rbi/dsl/domain/user/inkbunny_user.rbi
generated
@@ -498,7 +498,7 @@ class Domain::User::InkbunnyUser
|
||||
def build_deep_update_log_entry(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersInkbunnyAux) }
|
||||
def build_domain_users_inkbunny_aux(*args, &blk); end
|
||||
def build_inkbunny_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def build_shallow_update_log_entry(*args, &blk); end
|
||||
@@ -516,10 +516,10 @@ class Domain::User::InkbunnyUser
|
||||
def create_deep_update_log_entry!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersInkbunnyAux) }
|
||||
def create_domain_users_inkbunny_aux(*args, &blk); end
|
||||
def create_inkbunny_aux(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::DomainUsersInkbunnyAux) }
|
||||
def create_domain_users_inkbunny_aux!(*args, &blk); end
|
||||
def create_inkbunny_aux!(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::HttpLogEntry) }
|
||||
def create_shallow_update_log_entry(*args, &blk); end
|
||||
@@ -539,12 +539,6 @@ class Domain::User::InkbunnyUser
|
||||
sig { returns(T::Boolean) }
|
||||
def deep_update_log_entry_previously_changed?; end
|
||||
|
||||
sig { returns(T.nilable(::DomainUsersInkbunnyAux)) }
|
||||
def domain_users_inkbunny_aux; end
|
||||
|
||||
sig { params(value: T.nilable(::DomainUsersInkbunnyAux)).void }
|
||||
def domain_users_inkbunny_aux=(value); end
|
||||
|
||||
sig { returns(T::Array[T.untyped]) }
|
||||
def faved_post_ids; end
|
||||
|
||||
@@ -601,6 +595,12 @@ class Domain::User::InkbunnyUser
|
||||
sig { params(value: T::Enumerable[::Domain::User]).void }
|
||||
def followed_users=(value); end
|
||||
|
||||
sig { returns(T.nilable(::DomainUsersInkbunnyAux)) }
|
||||
def inkbunny_aux; end
|
||||
|
||||
sig { params(value: T.nilable(::DomainUsersInkbunnyAux)).void }
|
||||
def inkbunny_aux=(value); end
|
||||
|
||||
sig { returns(T::Array[T.untyped]) }
|
||||
def post_ids; end
|
||||
|
||||
@@ -622,7 +622,7 @@ class Domain::User::InkbunnyUser
|
||||
def reload_deep_update_log_entry; end
|
||||
|
||||
sig { returns(T.nilable(::DomainUsersInkbunnyAux)) }
|
||||
def reload_domain_users_inkbunny_aux; end
|
||||
def reload_inkbunny_aux; end
|
||||
|
||||
sig { returns(T.nilable(::HttpLogEntry)) }
|
||||
def reload_shallow_update_log_entry; end
|
||||
@@ -634,7 +634,7 @@ class Domain::User::InkbunnyUser
|
||||
def reset_deep_update_log_entry; end
|
||||
|
||||
sig { void }
|
||||
def reset_domain_users_inkbunny_aux; end
|
||||
def reset_inkbunny_aux; end
|
||||
|
||||
sig { void }
|
||||
def reset_shallow_update_log_entry; end
|
||||
|
||||
30
sorbet/rbi/dsl/domain_post_files_inkbunny_aux.rbi
generated
30
sorbet/rbi/dsl/domain_post_files_inkbunny_aux.rbi
generated
@@ -421,32 +421,32 @@ class DomainPostFilesInkbunnyAux
|
||||
end
|
||||
|
||||
module GeneratedAssociationMethods
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile::InkbunnyPostFile) }
|
||||
def build_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile::InkbunnyPostFile) }
|
||||
def create_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile::InkbunnyPostFile) }
|
||||
def create_main!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::Domain::PostFile::InkbunnyPostFile)) }
|
||||
def base_table; end
|
||||
def main; end
|
||||
|
||||
sig { params(value: T.nilable(::Domain::PostFile::InkbunnyPostFile)).void }
|
||||
def base_table=(value); end
|
||||
def main=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_changed?; end
|
||||
def main_changed?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_previously_changed?; end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile::InkbunnyPostFile) }
|
||||
def build_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile::InkbunnyPostFile) }
|
||||
def create_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::PostFile::InkbunnyPostFile) }
|
||||
def create_base_table!(*args, &blk); end
|
||||
def main_previously_changed?; end
|
||||
|
||||
sig { returns(T.nilable(::Domain::PostFile::InkbunnyPostFile)) }
|
||||
def reload_base_table; end
|
||||
def reload_main; end
|
||||
|
||||
sig { void }
|
||||
def reset_base_table; end
|
||||
def reset_main; end
|
||||
end
|
||||
|
||||
module GeneratedAssociationRelationMethods
|
||||
|
||||
2587
sorbet/rbi/dsl/domain_posts_e621_aux.rbi
generated
Normal file
2587
sorbet/rbi/dsl/domain_posts_e621_aux.rbi
generated
Normal file
File diff suppressed because it is too large
Load Diff
30
sorbet/rbi/dsl/domain_users_e621_aux.rbi
generated
30
sorbet/rbi/dsl/domain_users_e621_aux.rbi
generated
@@ -418,32 +418,32 @@ class DomainUsersE621Aux
|
||||
end
|
||||
|
||||
module GeneratedAssociationMethods
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::E621User) }
|
||||
def build_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::E621User) }
|
||||
def create_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::E621User) }
|
||||
def create_main!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::Domain::User::E621User)) }
|
||||
def base_table; end
|
||||
def main; end
|
||||
|
||||
sig { params(value: T.nilable(::Domain::User::E621User)).void }
|
||||
def base_table=(value); end
|
||||
def main=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_changed?; end
|
||||
def main_changed?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_previously_changed?; end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::E621User) }
|
||||
def build_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::E621User) }
|
||||
def create_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::E621User) }
|
||||
def create_base_table!(*args, &blk); end
|
||||
def main_previously_changed?; end
|
||||
|
||||
sig { returns(T.nilable(::Domain::User::E621User)) }
|
||||
def reload_base_table; end
|
||||
def reload_main; end
|
||||
|
||||
sig { void }
|
||||
def reset_base_table; end
|
||||
def reset_main; end
|
||||
end
|
||||
|
||||
module GeneratedAssociationRelationMethods
|
||||
|
||||
30
sorbet/rbi/dsl/domain_users_fa_aux.rbi
generated
30
sorbet/rbi/dsl/domain_users_fa_aux.rbi
generated
@@ -408,32 +408,32 @@ class DomainUsersFaAux
|
||||
end
|
||||
|
||||
module GeneratedAssociationMethods
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::FaUser) }
|
||||
def build_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::FaUser) }
|
||||
def create_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::FaUser) }
|
||||
def create_main!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::Domain::User::FaUser)) }
|
||||
def base_table; end
|
||||
def main; end
|
||||
|
||||
sig { params(value: T.nilable(::Domain::User::FaUser)).void }
|
||||
def base_table=(value); end
|
||||
def main=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_changed?; end
|
||||
def main_changed?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_previously_changed?; end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::FaUser) }
|
||||
def build_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::FaUser) }
|
||||
def create_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::FaUser) }
|
||||
def create_base_table!(*args, &blk); end
|
||||
def main_previously_changed?; end
|
||||
|
||||
sig { returns(T.nilable(::Domain::User::FaUser)) }
|
||||
def reload_base_table; end
|
||||
def reload_main; end
|
||||
|
||||
sig { void }
|
||||
def reset_base_table; end
|
||||
def reset_main; end
|
||||
end
|
||||
|
||||
module GeneratedAssociationRelationMethods
|
||||
|
||||
30
sorbet/rbi/dsl/domain_users_inkbunny_aux.rbi
generated
30
sorbet/rbi/dsl/domain_users_inkbunny_aux.rbi
generated
@@ -416,32 +416,32 @@ class DomainUsersInkbunnyAux
|
||||
end
|
||||
|
||||
module GeneratedAssociationMethods
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::InkbunnyUser) }
|
||||
def build_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::InkbunnyUser) }
|
||||
def create_main(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::InkbunnyUser) }
|
||||
def create_main!(*args, &blk); end
|
||||
|
||||
sig { returns(T.nilable(::Domain::User::InkbunnyUser)) }
|
||||
def base_table; end
|
||||
def main; end
|
||||
|
||||
sig { params(value: T.nilable(::Domain::User::InkbunnyUser)).void }
|
||||
def base_table=(value); end
|
||||
def main=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_changed?; end
|
||||
def main_changed?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def base_table_previously_changed?; end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::InkbunnyUser) }
|
||||
def build_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::InkbunnyUser) }
|
||||
def create_base_table(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(::Domain::User::InkbunnyUser) }
|
||||
def create_base_table!(*args, &blk); end
|
||||
def main_previously_changed?; end
|
||||
|
||||
sig { returns(T.nilable(::Domain::User::InkbunnyUser)) }
|
||||
def reload_base_table; end
|
||||
def reload_main; end
|
||||
|
||||
sig { void }
|
||||
def reset_base_table; end
|
||||
def reset_main; end
|
||||
end
|
||||
|
||||
module GeneratedAssociationRelationMethods
|
||||
|
||||
174
sorbet/rbi/dsl/flat_sst_entry.rbi
generated
174
sorbet/rbi/dsl/flat_sst_entry.rbi
generated
@@ -6,7 +6,6 @@
|
||||
|
||||
|
||||
class FlatSstEntry
|
||||
include GeneratedAttributeMethods
|
||||
extend CommonRelationMethods
|
||||
extend GeneratedRelationMethods
|
||||
|
||||
@@ -552,179 +551,6 @@ class FlatSstEntry
|
||||
def without_count; end
|
||||
end
|
||||
|
||||
module GeneratedAttributeMethods
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def contents; end
|
||||
|
||||
sig { params(value: T.nilable(::String)).returns(T.nilable(::String)) }
|
||||
def contents=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def contents?; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def contents_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def contents_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def contents_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def contents_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def contents_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.nilable(::String), to: T.nilable(::String)).returns(T::Boolean) }
|
||||
def contents_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def contents_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def contents_previous_change; end
|
||||
|
||||
sig { params(from: T.nilable(::String), to: T.nilable(::String)).returns(T::Boolean) }
|
||||
def contents_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def contents_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def contents_was; end
|
||||
|
||||
sig { void }
|
||||
def contents_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def id; end
|
||||
|
||||
sig { params(value: T.nilable(::String)).returns(T.nilable(::String)) }
|
||||
def id=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def id?; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def id_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def id_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def id_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def id_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def id_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.nilable(::String), to: T.nilable(::String)).returns(T::Boolean) }
|
||||
def id_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def id_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def id_previous_change; end
|
||||
|
||||
sig { params(from: T.nilable(::String), to: T.nilable(::String)).returns(T::Boolean) }
|
||||
def id_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def id_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def id_was; end
|
||||
|
||||
sig { void }
|
||||
def id_will_change!; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def key; end
|
||||
|
||||
sig { params(value: T.nilable(::String)).returns(T.nilable(::String)) }
|
||||
def key=(value); end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def key?; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def key_before_last_save; end
|
||||
|
||||
sig { returns(T.untyped) }
|
||||
def key_before_type_cast; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def key_came_from_user?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def key_change; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def key_change_to_be_saved; end
|
||||
|
||||
sig { params(from: T.nilable(::String), to: T.nilable(::String)).returns(T::Boolean) }
|
||||
def key_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def key_in_database; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def key_previous_change; end
|
||||
|
||||
sig { params(from: T.nilable(::String), to: T.nilable(::String)).returns(T::Boolean) }
|
||||
def key_previously_changed?(from: T.unsafe(nil), to: T.unsafe(nil)); end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def key_previously_was; end
|
||||
|
||||
sig { returns(T.nilable(::String)) }
|
||||
def key_was; end
|
||||
|
||||
sig { void }
|
||||
def key_will_change!; end
|
||||
|
||||
sig { void }
|
||||
def restore_contents!; end
|
||||
|
||||
sig { void }
|
||||
def restore_id!; end
|
||||
|
||||
sig { void }
|
||||
def restore_key!; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def saved_change_to_contents; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_contents?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def saved_change_to_id; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_id?; end
|
||||
|
||||
sig { returns(T.nilable([T.nilable(::String), T.nilable(::String)])) }
|
||||
def saved_change_to_key; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def saved_change_to_key?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_contents?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_id?; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def will_save_change_to_key?; end
|
||||
end
|
||||
|
||||
module GeneratedRelationMethods
|
||||
sig { returns(PrivateRelation) }
|
||||
def all; end
|
||||
|
||||
36
sorbet/rbi/dsl/http_log_entry.rbi
generated
36
sorbet/rbi/dsl/http_log_entry.rbi
generated
@@ -397,6 +397,18 @@ class HttpLogEntry
|
||||
end
|
||||
|
||||
module EnumMethodsModule
|
||||
sig { void }
|
||||
def performed_by_airvpn_1_netherlands!; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def performed_by_airvpn_1_netherlands?; end
|
||||
|
||||
sig { void }
|
||||
def performed_by_airvpn_2_san_jose!; end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def performed_by_airvpn_2_san_jose?; end
|
||||
|
||||
sig { void }
|
||||
def performed_by_dedipath_1!; end
|
||||
|
||||
@@ -643,6 +655,12 @@ class HttpLogEntry
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateAssociationRelation) }
|
||||
def none(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateAssociationRelation) }
|
||||
def not_performed_by_airvpn_1_netherlands(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateAssociationRelation) }
|
||||
def not_performed_by_airvpn_2_san_jose(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateAssociationRelation) }
|
||||
def not_performed_by_dedipath_1(*args, &blk); end
|
||||
|
||||
@@ -699,6 +717,12 @@ class HttpLogEntry
|
||||
end
|
||||
def per(num); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateAssociationRelation) }
|
||||
def performed_by_airvpn_1_netherlands(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateAssociationRelation) }
|
||||
def performed_by_airvpn_2_san_jose(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateAssociationRelation) }
|
||||
def performed_by_dedipath_1(*args, &blk); end
|
||||
|
||||
@@ -1998,6 +2022,12 @@ class HttpLogEntry
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateRelation) }
|
||||
def none(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateRelation) }
|
||||
def not_performed_by_airvpn_1_netherlands(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateRelation) }
|
||||
def not_performed_by_airvpn_2_san_jose(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateRelation) }
|
||||
def not_performed_by_dedipath_1(*args, &blk); end
|
||||
|
||||
@@ -2054,6 +2084,12 @@ class HttpLogEntry
|
||||
end
|
||||
def per(num); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateRelation) }
|
||||
def performed_by_airvpn_1_netherlands(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateRelation) }
|
||||
def performed_by_airvpn_2_san_jose(*args, &blk); end
|
||||
|
||||
sig { params(args: T.untyped, blk: T.untyped).returns(PrivateRelation) }
|
||||
def performed_by_dedipath_1(*args, &blk); end
|
||||
|
||||
|
||||
1
sorbet/rbi/dsl/rails/application_controller.rbi
generated
1
sorbet/rbi/dsl/rails/application_controller.rbi
generated
@@ -43,6 +43,7 @@ class Rails::ApplicationController
|
||||
include ::Domain::Users::FaUsersHelper
|
||||
include ::Domain::VisualSearchHelper
|
||||
include ::DomainSourceHelper
|
||||
include ::FaUriHelper
|
||||
include ::GoodJobHelper
|
||||
include ::IpAddressHelper
|
||||
include ::TimestampHelper
|
||||
|
||||
@@ -43,6 +43,7 @@ class Rails::Conductor::BaseController
|
||||
include ::Domain::Users::FaUsersHelper
|
||||
include ::Domain::VisualSearchHelper
|
||||
include ::DomainSourceHelper
|
||||
include ::FaUriHelper
|
||||
include ::GoodJobHelper
|
||||
include ::IpAddressHelper
|
||||
include ::TimestampHelper
|
||||
|
||||
1
sorbet/rbi/dsl/rails/health_controller.rbi
generated
1
sorbet/rbi/dsl/rails/health_controller.rbi
generated
@@ -43,6 +43,7 @@ class Rails::HealthController
|
||||
include ::Domain::Users::FaUsersHelper
|
||||
include ::Domain::VisualSearchHelper
|
||||
include ::DomainSourceHelper
|
||||
include ::FaUriHelper
|
||||
include ::GoodJobHelper
|
||||
include ::IpAddressHelper
|
||||
include ::TimestampHelper
|
||||
|
||||
16
sorbet/rbi/dsl/scraper/fuzzysearch_http_client_config.rbi
generated
Normal file
16
sorbet/rbi/dsl/scraper/fuzzysearch_http_client_config.rbi
generated
Normal file
@@ -0,0 +1,16 @@
|
||||
# typed: true
|
||||
|
||||
# DO NOT EDIT MANUALLY
|
||||
# This is an autogenerated file for dynamic methods in `Scraper::FuzzysearchHttpClientConfig`.
|
||||
# Please instead update this file by running `bin/tapioca dsl Scraper::FuzzysearchHttpClientConfig`.
|
||||
|
||||
|
||||
class Scraper::FuzzysearchHttpClientConfig
|
||||
sig { returns(ColorLogger) }
|
||||
def logger; end
|
||||
|
||||
class << self
|
||||
sig { returns(ColorLogger) }
|
||||
def logger; end
|
||||
end
|
||||
end
|
||||
@@ -16,7 +16,7 @@ FactoryBot.define do
|
||||
post_file.log_entry =
|
||||
create(
|
||||
:http_log_entry,
|
||||
url_str: post_file.url_str,
|
||||
uri_str: post_file.url_str,
|
||||
status_code: post_file.last_status_code,
|
||||
)
|
||||
end
|
||||
|
||||
213
spec/jobs/domain/fa/job/scan_fuzzysearch_job_spec.rb
Normal file
213
spec/jobs/domain/fa/job/scan_fuzzysearch_job_spec.rb
Normal file
@@ -0,0 +1,213 @@
|
||||
# typed: false
|
||||
require "rails_helper"
|
||||
|
||||
describe Domain::Fa::Job::ScanFuzzysearchJob do
|
||||
let(:http_client_mock) { instance_double("::Scraper::HttpClient") }
|
||||
before { Scraper::ClientFactory.http_client_mock = http_client_mock }
|
||||
|
||||
let(:client_mock_config) { [] }
|
||||
let!(:log_entries) do
|
||||
HttpClientMockHelpers.init_http_client_mock(
|
||||
http_client_mock,
|
||||
client_mock_config,
|
||||
)
|
||||
end
|
||||
|
||||
let(:fuzzysearch_response_51015903) do
|
||||
[
|
||||
{
|
||||
id: 51_015_903,
|
||||
file_id: 1_676_417_528,
|
||||
artist: "crimetxt",
|
||||
hash: 2_367_248_181_756_250_600,
|
||||
hash_str: "2367248181756250660",
|
||||
url:
|
||||
"https://d.furaffinity.net/art/crimetxt/1676417528/1676417528.crimetxt_2023-02-15_00_18_48.png",
|
||||
filename: "1676417528.crimetxt_2023-02-15_00_18_48.png",
|
||||
rating: "adult",
|
||||
posted_at: "2023-02-14T23:32:00Z",
|
||||
file_size: 2_188_273,
|
||||
sha256:
|
||||
"d488dabd8eb22398a228fb662eb520bb4daaac3a9ab0dc9be8b8c5e1b9522efb",
|
||||
updated_at: nil,
|
||||
deleted: false,
|
||||
tags: %w[some_tag another_tag],
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
let(:fuzzysearch_response_21275696) do
|
||||
[
|
||||
{
|
||||
id: 21_275_696,
|
||||
file_id: nil,
|
||||
artist: nil,
|
||||
hash: nil,
|
||||
hash_str: nil,
|
||||
url: nil,
|
||||
filename: nil,
|
||||
rating: nil,
|
||||
posted_at: nil,
|
||||
file_size: nil,
|
||||
sha256: nil,
|
||||
updated_at: "2023-08-16T08:02:27.746944Z",
|
||||
deleted: true,
|
||||
tags: [],
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
let(:fuzzysearch_response_53068507) do
|
||||
[
|
||||
{
|
||||
id: 53_068_507,
|
||||
file_id: 1_690_504_099,
|
||||
artist: "Meesh",
|
||||
hash: -5_278_701_664_616_650_000,
|
||||
hash_str: "-5278701664616649812",
|
||||
url:
|
||||
"https://d.furaffinity.net/art/meesh/1690504135/1690504099.meesh_pamperingjack3_crop.png",
|
||||
filename: "1690504099.meesh_pamperingjack3_crop.png",
|
||||
rating: "adult",
|
||||
posted_at: "2023-07-28T00:28:00Z",
|
||||
file_size: 555_926,
|
||||
sha256:
|
||||
"f47e974ef7e72c53fce5a52b28b7c34576eb26af04299155d1cc3912379b0dea",
|
||||
updated_at: nil,
|
||||
deleted: false,
|
||||
tags: %w[advertisement patreon female preview_limited beastars juno],
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
describe "post was marked removed" do
|
||||
let(:post) do
|
||||
create(
|
||||
:domain_post_fa_post,
|
||||
state: "removed",
|
||||
keywords: nil,
|
||||
fa_id: fa_id,
|
||||
)
|
||||
end
|
||||
|
||||
context "and fuzzysearch has post info" do
|
||||
let(:fa_id) { 51_015_903 }
|
||||
let(:client_mock_config) do
|
||||
[
|
||||
{
|
||||
uri:
|
||||
"https://api-next.fuzzysearch.net/v1/file/furaffinity?search=#{fa_id}",
|
||||
status_code: 200,
|
||||
content_type: "application/json",
|
||||
contents: fuzzysearch_response_51015903.to_json,
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
it "updates the post" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
expect(post.fuzzysearch_checked_at).to be_present
|
||||
expect(post.fuzzysearch_entry).to be_present
|
||||
expect(post.fuzzysearch_json).to be_present
|
||||
end
|
||||
|
||||
it "sets tags" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
expect(post.keywords).to eq(%w[some_tag another_tag])
|
||||
end
|
||||
|
||||
it "sets file" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
expect(post.file).to be_present
|
||||
expect(post.file.url_str).to eq(
|
||||
"https://d.furaffinity.net/art/crimetxt/1676417528/1676417528.crimetxt_2023-02-15_00_18_48.png",
|
||||
)
|
||||
end
|
||||
|
||||
it "sets the creator" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
expect(post.creator).to be_present
|
||||
expect(post.creator.url_name).to eq("crimetxt")
|
||||
end
|
||||
|
||||
it "enqueues a fur archiver post file job" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
job_args = SpecUtil.enqueued_job_args(Job::FaPostFurArchiverPostFileJob)
|
||||
expect(job_args).to match(
|
||||
[{ post_file: post.file, caused_by_entry: post.fuzzysearch_entry }],
|
||||
)
|
||||
end
|
||||
|
||||
context "the post file is already downloaded" do
|
||||
before do
|
||||
post.file = create(:domain_post_file, :has_file)
|
||||
post.save!
|
||||
end
|
||||
|
||||
it "does not enqueue a fur archiver post file job" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
job_args =
|
||||
SpecUtil.enqueued_job_args(Job::FaPostFurArchiverPostFileJob)
|
||||
expect(job_args).to be_empty
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "and fuzzysearch has no post info" do
|
||||
let(:fa_id) { 21_275_696 }
|
||||
let(:client_mock_config) do
|
||||
[
|
||||
{
|
||||
uri:
|
||||
"https://api-next.fuzzysearch.net/v1/file/furaffinity?search=#{fa_id}",
|
||||
status_code: 200,
|
||||
content_type: "application/json",
|
||||
contents: fuzzysearch_response_21275696.to_json,
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
it "does not set the creator" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
expect(post.creator).to be_nil
|
||||
end
|
||||
|
||||
it "does not create a file" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
expect(post.file).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context "and the artist name has capitalizations" do
|
||||
let(:fa_id) { 53_068_507 }
|
||||
let(:client_mock_config) do
|
||||
[
|
||||
{
|
||||
uri:
|
||||
"https://api-next.fuzzysearch.net/v1/file/furaffinity?search=#{fa_id}",
|
||||
status_code: 200,
|
||||
content_type: "application/json",
|
||||
contents: fuzzysearch_response_53068507.to_json,
|
||||
},
|
||||
]
|
||||
end
|
||||
|
||||
it "sets the creator" do
|
||||
perform_now({ post: })
|
||||
post.reload
|
||||
expect(post.creator).to be_present
|
||||
expect(post.creator.url_name).to eq("meesh")
|
||||
expect(post.creator.name).to eq("Meesh")
|
||||
expect(post.creator.full_name).to eq("Meesh")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user