class Riffer::Messages::User::FilePart
Constants
- MEDIA_TYPES
-
@rbs @url_string: String? @rbs @data: String? @rbs @downloaded_data: String? @rbs @data_bytes: String?
- SHA256_PATTERN
- SUPPORTED_MEDIA_TYPES
Attributes
Public Class Methods
Source
# File lib/riffer/messages/user/file_part.rb, line 63 def self.from_hash(file) return file if file.is_a?(Riffer::Messages::User::FilePart) url = file[:url] data = file[:data] media_type = file[:media_type] filename = file[:filename] sha256 = file[:sha256] if url new(url: url, data: data, media_type: media_type || detect_media_type(url), filename: filename, sha256: sha256) elsif data && media_type new(data: data, media_type: media_type, filename: filename, sha256: sha256) else raise Riffer::ArgumentError, "File hash must include :url or :data with :media_type" end end
Source
# File lib/riffer/messages/user/file_part.rb, line 57 def self.from_url(url, media_type: nil, filename: nil, sha256: nil) new(url: url, media_type: media_type || detect_media_type(url), filename: filename, sha256: sha256) end
Source
# File lib/riffer/messages/user/file_part.rb, line 37 def initialize(media_type:, data: nil, filename: nil, url: nil, sha256: nil) raise Riffer::ArgumentError, "Either data or url must be provided" if data.nil? && url.nil? unless SUPPORTED_MEDIA_TYPES.include?(media_type) raise Riffer::ArgumentError, "Unsupported media type: #{media_type}" end unless sha256.nil? || (sha256.is_a?(String) && sha256.match?(SHA256_PATTERN)) raise Riffer::ArgumentError, "Invalid sha256: #{sha256}" end @sha256 = sha256&.downcase @data = data @media_type = media_type @filename = filename @url_string = url end
Public Instance Methods
Source
# File lib/riffer/messages/user/file_part.rb, line 108 def cache_data_bytes(bytes) @data_bytes = bytes end
: (String) -> void
Source
# File lib/riffer/messages/user/file_part.rb, line 119 def cache_downloaded_data(data) @downloaded_data = data end
Source
# File lib/riffer/messages/user/file_part.rb, line 91 def data @data || @downloaded_data end
Source
# File lib/riffer/messages/user/file_part.rb, line 96 def data_bytes return @data_bytes if @data_bytes encoded = data return nil unless encoded @data_bytes = Base64.strict_decode64(encoded.gsub(/\s/, "")) rescue ArgumentError raise Riffer::FileEncodingError, "Invalid base64 data" end
: () -> String?
Source
# File lib/riffer/messages/user/file_part.rb, line 143 def document? !image? end
Source
# File lib/riffer/messages/user/file_part.rb, line 137 def image? media_type.start_with?("image/") end
Source
# File lib/riffer/messages/user/file_part.rb, line 113 def inline_data? !@data.nil? end
: () -> bool
Source
# File lib/riffer/messages/user/file_part.rb, line 149 def to_h hash = { media_type: media_type } #: Hash[Symbol, untyped] # Downloaded data is left out so persisted history stays free of megabytes # of base64; the in-memory cache still spares refetching on every turn. hash[:data] = @data if @data hash[:url] = @url_string if @url_string hash[:filename] = filename if filename hash[:sha256] = sha256 if sha256 hash end
Source
# File lib/riffer/messages/user/file_part.rb, line 131 def url? !@url_string.nil? end