- Modified process_user_avatar method to enqueue Domain::UserAvatarJob for avatar downloads - Made Domain::UserAvatarJob concrete (removed abstract!) with generic HTTP client - Added smart avatar management: handles new avatars, URL changes, and pending re-enqueues - Added comprehensive test coverage for all avatar scenarios - Updated HTTP mocking in specs to use HttpClientMockHelpers pattern - Fixed caused_by_entry handling for chained HTTP requests - Updated .cursorrules with proper HTTP mocking documentation including caused_by_entry: :any The job now automatically downloads user avatars when scanning Bluesky users.
30 lines
782 B
Ruby
30 lines
782 B
Ruby
# typed: strict
|
|
module DomainSourceHelper
|
|
extend T::Sig
|
|
|
|
sig { returns(T::Hash[String, String]) }
|
|
def self.source_name_to_class_name
|
|
{
|
|
"furaffinity" => "Domain::Post::FaPost",
|
|
"e621" => "Domain::Post::E621Post",
|
|
"inkbunny" => "Domain::Post::InkbunnyPost",
|
|
"bluesky" => "Domain::Post::BlueskyPost",
|
|
}
|
|
end
|
|
|
|
sig { returns(T::Array[String]) }
|
|
def self.all_source_names
|
|
source_name_to_class_name.keys
|
|
end
|
|
|
|
sig { params(list: T::Array[String]).returns(T::Array[String]) }
|
|
def self.source_names_to_class_names(list)
|
|
list.map { |source| source_name_to_class_name[source] }.compact
|
|
end
|
|
|
|
sig { params(list: T::Array[String]).returns(T::Boolean) }
|
|
def self.has_all_sources?(list)
|
|
list.sort == all_source_names.sort
|
|
end
|
|
end
|