Class: Dato::Upload::File
- Inherits:
-
Object
- Object
- Dato::Upload::File
- Defined in:
- lib/dato/upload/file.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#source ⇒ Object
readonly
Returns the value of attribute source.
Instance Method Summary collapse
- #file ⇒ Object
- #filename ⇒ Object
- #format_resource(upload_request) ⇒ Object
- #http_source? ⇒ Boolean
-
#initialize(client, source) ⇒ File
constructor
A new instance of File.
- #upload ⇒ Object
Constructor Details
#initialize(client, source) ⇒ File
Returns a new instance of File.
12 13 14 15 |
# File 'lib/dato/upload/file.rb', line 12 def initialize(client, source) @client = client @source = source end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
10 11 12 |
# File 'lib/dato/upload/file.rb', line 10 def client @client end |
#source ⇒ Object (readonly)
Returns the value of attribute source.
10 11 12 |
# File 'lib/dato/upload/file.rb', line 10 def source @source end |
Instance Method Details
#file ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/dato/upload/file.rb', line 17 def file @file ||= if http_source? Tempfile.new('file').tap do |file| Downloadr::HTTP.new(source, file).download end else ::File.new(::File.(source)) end end |
#filename ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/dato/upload/file.rb', line 34 def filename if http_source? ::File.basename(source) else ::File.basename(file.path) end end |
#format_resource(upload_request) ⇒ Object
60 61 62 63 64 65 66 |
# File 'lib/dato/upload/file.rb', line 60 def format_resource(upload_request) { path: upload_request[:id], size: ::File.size(file.path), format: ::File.extname(::File.basename(file.path)).delete('.') } end |
#http_source? ⇒ Boolean
27 28 29 30 31 32 |
# File 'lib/dato/upload/file.rb', line 27 def http_source? uri = Addressable::URI.parse(source) uri.scheme == 'http' || uri.scheme == 'https' rescue Addressable::URI::InvalidURIError false end |
#upload ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/dato/upload/file.rb', line 42 def upload upload_request = client.upload_requests.create(filename: filename) uri = URI.parse(upload_request[:url]) request = Net::HTTP::Put.new( uri, 'x-amz-acl' => 'public-read' ) request.body = file.read http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.request(request) format_resource(upload_request) end |