class Shrine::Storage::Sql
Attributes
database[R]
table[R]
Public Class Methods
new(database:, table:)
click to toggle source
# File lib/shrine/storage/sql.rb, line 12 def initialize(database:, table:) @database = database @table = table end
Public Instance Methods
clear!() { |dataset| ... }
click to toggle source
# File lib/shrine/storage/sql.rb, line 39 def clear! dataset = self.dataset dataset = yield dataset if block_given? dataset.delete end
dataset()
click to toggle source
# File lib/shrine/storage/sql.rb, line 45 def dataset database[table] end
delete(id)
click to toggle source
# File lib/shrine/storage/sql.rb, line 32 def delete(id) find(id).delete end
exists?(id)
click to toggle source
# File lib/shrine/storage/sql.rb, line 28 def exists?(id) !find(id).empty? end
open(id, **)
click to toggle source
# File lib/shrine/storage/sql.rb, line 22 def open(id, **) StringIO.new(content(id)) rescue Sequel::NoMatchingRow fail Shrine::FileNotFound, "file #{id.inspect} not found on storage" end
upload(io, id, **options)
click to toggle source
# File lib/shrine/storage/sql.rb, line 17 def upload(io, id, **options) generated_id = store(io, id, **options) id.replace(generated_id.to_s + File.extname(id)) end
url(id, **options)
click to toggle source
# File lib/shrine/storage/sql.rb, line 36 def url(id, **options) end
Protected Instance Methods
find(id_or_ids)
click to toggle source
# File lib/shrine/storage/sql.rb, line 51 def find(id_or_ids) ids = Array(id_or_ids).map { |s| File.basename(s, ".*") } dataset.where(id: ids) end
Private Instance Methods
content(id)
click to toggle source
# File lib/shrine/storage/sql.rb, line 86 def content(id) find(id).first![:content].to_s end
copy(io, id, shrine_metadata: {}, **options)
click to toggle source
# File lib/shrine/storage/sql.rb, line 75 def copy(io, id, shrine_metadata: {}, **options) record_dataset = io.storage.find(io.id).select(:content, :metadata) record_dataset = record_dataset.select_append(Sequel::CURRENT_TIMESTAMP.as(:created_at)) if database.schema(table).assoc(:created_at) dataset.insert(record_dataset.columns, record_dataset) end
copyable?(io, id)
click to toggle source
# File lib/shrine/storage/sql.rb, line 82 def copyable?(io, id) io.is_a?(UploadedFile) && io.storage.is_a?(Storage::Sql) end
insert(io, id, shrine_metadata: {}, **options)
click to toggle source
# File lib/shrine/storage/sql.rb, line 66 def insert(io, id, shrine_metadata: {}, **options) record = {} record[:content] = Sequel::SQL::Blob.new(io.read) record[:metadata] = shrine_metadata.to_json record[:created_at] = Sequel::CURRENT_TIMESTAMP if database.schema(table).assoc(:created_at) dataset.insert(record) end
metadata(id)
click to toggle source
# File lib/shrine/storage/sql.rb, line 90 def metadata(id) find(id).first![:metadata] end
store(io, id, **options)
click to toggle source
# File lib/shrine/storage/sql.rb, line 58 def store(io, id, **options) if copyable?(io, id) copy(io, id, **options) else insert(io, id, **options) end end