mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Go with site instead of store
Better fit for upload/download terminology.
This commit is contained in:
parent
f3fa8f4b06
commit
d30231e983
3 changed files with 68 additions and 3 deletions
|
@ -1,3 +1,5 @@
|
||||||
|
require "active_file/site"
|
||||||
|
|
||||||
# Schema: id, key, filename, content_type, metadata, byte_size, digest, created_at
|
# Schema: id, key, filename, content_type, metadata, byte_size, digest, created_at
|
||||||
class ActiveFile::Blob < ActiveRecord::Base
|
class ActiveFile::Blob < ActiveRecord::Base
|
||||||
self.table_name = "active_file_blobs"
|
self.table_name = "active_file_blobs"
|
||||||
|
@ -6,7 +8,7 @@ class ActiveFile::Blob < ActiveRecord::Base
|
||||||
store :metadata, coder: JSON
|
store :metadata, coder: JSON
|
||||||
|
|
||||||
class_attribute :verifier, default: -> { Rails.application.message_verifier('ActiveFile') }
|
class_attribute :verifier, default: -> { Rails.application.message_verifier('ActiveFile') }
|
||||||
class_attribute :storage
|
class_attribute :site
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def find_verified(signed_id)
|
def find_verified(signed_id)
|
||||||
|
@ -31,7 +33,7 @@ class ActiveFile::Blob < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete
|
def delete
|
||||||
storage.delete token
|
site.delete token
|
||||||
end
|
end
|
||||||
|
|
||||||
def purge
|
def purge
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
class ActiveFile::Store
|
class ActiveFile::Site
|
||||||
|
def initialize
|
||||||
|
end
|
||||||
|
|
||||||
def upload(key, data)
|
def upload(key, data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -23,4 +26,11 @@ class ActiveFile::Store
|
||||||
|
|
||||||
def move(from_key:, to_key:)
|
def move(from_key:, to_key:)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
private
|
||||||
|
def normalize_key(key)
|
||||||
|
# disallow "." and ".." segments in the key
|
||||||
|
key.split(%r[/]).reject { |s| s == "." || s == ".." }
|
||||||
|
end
|
||||||
end
|
end
|
53
lib/active_file/sites/disk_site.rb
Normal file
53
lib/active_file/sites/disk_site.rb
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
class ActiveFile::Sites::DiskSite < ActiveFile::Site
|
||||||
|
attr_reader :root
|
||||||
|
|
||||||
|
def initialize(root)
|
||||||
|
@root = root
|
||||||
|
end
|
||||||
|
|
||||||
|
def upload(key, data)
|
||||||
|
File.open(make_path_for(key), "wb") do |file|
|
||||||
|
while chunk = data.read(65536)
|
||||||
|
file.write(chunk)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def download(key)
|
||||||
|
if block_given?
|
||||||
|
open(key) do |file|
|
||||||
|
while data = file.read(65536)
|
||||||
|
yield data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
open(key, &:read)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete(key)
|
||||||
|
File.delete(path_for(key))
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
def size(key)
|
||||||
|
File.size(path_for(key))
|
||||||
|
end
|
||||||
|
|
||||||
|
def checksum(key)
|
||||||
|
Digest::MD5.file(path_for(key)).hexdigest
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def path_for(key)
|
||||||
|
File.join(root, folder_for(key), normalize(key))
|
||||||
|
end
|
||||||
|
|
||||||
|
def folder_for(key)
|
||||||
|
[key[0..1], key[2..3]].join("/")
|
||||||
|
end
|
||||||
|
|
||||||
|
def make_path_for(key)
|
||||||
|
path_for(key).tap { |path| FileUtils.mkdir_p File.dirname(path) }
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue