Class: ActiveStorage::Service::GCSService
  
  
  
Overview
  
    
Wraps the Google Cloud Storage as an Active Storage service. See ActiveStorage::Service for the generic API documentation that applies to all services.
   
 
  
  Instance Attribute Summary
  
  
  #name
  
    
      Instance Method Summary
      collapse
    
    
      
        - 
  
    
      #delete(key)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #delete_prefixed(prefix)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #download(key, &block)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #download_chunk(key, range)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #exist?(key)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #headers_for_direct_upload(key, checksum:, filename: nil, disposition: nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #initialize(public: false, **config)  ⇒ GCSService 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of GCSService. 
 
- 
  
    
      #update_metadata(key, content_type:, disposition: nil, filename: nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #upload(key, io, checksum: nil, content_type: nil, disposition: nil, filename: nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
- 
  
    
      #url_for_direct_upload(key, expires_in:, checksum:)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
build, configure, #open, #public?, #url
  
  Constructor Details
  
    
  
  
    #initialize(public: false, **config)  ⇒ GCSService 
  
  
  
  
    
Returns a new instance of GCSService.
   
 
  
  
    | 
10
11
12
13 | # File 'lib/active_storage/service/gcs_service.rb', line 10
def initialize(public: false, **config)
  @config = config
  @public = public
end | 
 
  
 
  
    Instance Method Details
    
      
  
  
    #delete(key)  ⇒ Object 
  
  
  
  
    | 
59
60
61
62
63
64
65 | # File 'lib/active_storage/service/gcs_service.rb', line 59
def delete(key)
  instrument :delete, key: key do
    file_for(key).delete
  rescue Google::Cloud::NotFoundError
      end
end | 
 
    
      
  
  
    #delete_prefixed(prefix)  ⇒ Object 
  
  
  
  
    | 
67
68
69
70
71
72
73
74
75 | # File 'lib/active_storage/service/gcs_service.rb', line 67
def delete_prefixed(prefix)
  instrument :delete_prefixed, prefix: prefix do
    bucket.files(prefix: prefix).all do |file|
      file.delete
    rescue Google::Cloud::NotFoundError
          end
  end
end | 
 
    
      
  
  
    #download(key, &block)  ⇒ Object 
  
  
  
  
    | 
28
29
30
31
32
33
34
35
36
37
38
39
40 | # File 'lib/active_storage/service/gcs_service.rb', line 28
def download(key, &block)
  if block_given?
    instrument :streaming_download, key: key do
      stream(key, &block)
    end
  else
    instrument :download, key: key do
      file_for(key).download.string
    rescue Google::Cloud::NotFoundError
      raise ActiveStorage::FileNotFoundError
    end
  end
end | 
 
    
      
  
  
    #download_chunk(key, range)  ⇒ Object 
  
  
  
  
    | 
51
52
53
54
55
56
57 | # File 'lib/active_storage/service/gcs_service.rb', line 51
def download_chunk(key, range)
  instrument :download_chunk, key: key, range: range do
    file_for(key).download(range: range).string
  rescue Google::Cloud::NotFoundError
    raise ActiveStorage::FileNotFoundError
  end
end | 
 
    
      
  
  
    #exist?(key)  ⇒ Boolean 
  
  
  
  
    | 
77
78
79
80
81
82
83 | # File 'lib/active_storage/service/gcs_service.rb', line 77
def exist?(key)
  instrument :exist, key: key do |payload|
    answer = file_for(key).exists?
    payload[:exist] = answer
    answer
  end
end | 
 
    
      
  
  
    | 
95
96
97
98
99 | # File 'lib/active_storage/service/gcs_service.rb', line 95
def (key, checksum:, filename: nil, disposition: nil, **)
  content_disposition = content_disposition_with(type: disposition, filename: filename) if filename
  { "Content-MD5" => checksum, "Content-Disposition" => content_disposition }
end | 
 
    
      
  
  
    | 
42
43
44
45
46
47
48
49 | # File 'lib/active_storage/service/gcs_service.rb', line 42
def update_metadata(key, content_type:, disposition: nil, filename: nil)
  instrument :update_metadata, key: key, content_type: content_type, disposition: disposition do
    file_for(key).update do |file|
      file.content_type = content_type
      file.content_disposition = content_disposition_with(type: disposition, filename: filename) if disposition && filename
    end
  end
end | 
 
    
      
  
  
    #upload(key, io, checksum: nil, content_type: nil, disposition: nil, filename: nil)  ⇒ Object 
  
  
  
  
    | 
15
16
17
18
19
20
21
22
23
24
25
26 | # File 'lib/active_storage/service/gcs_service.rb', line 15
def upload(key, io, checksum: nil, content_type: nil, disposition: nil, filename: nil)
  instrument :upload, key: key, checksum: checksum do
                    content_disposition = content_disposition_with(type: disposition, filename: filename) if disposition && filename
    bucket.create_file(io, key, md5: checksum, content_type: content_type, content_disposition: content_disposition)
  rescue Google::Cloud::InvalidArgumentError
    raise ActiveStorage::IntegrityError
  end
end | 
 
    
      
  
  
    #url_for_direct_upload(key, expires_in:, checksum:)  ⇒ Object 
  
  
  
  
    | 
85
86
87
88
89
90
91
92
93 | # File 'lib/active_storage/service/gcs_service.rb', line 85
def url_for_direct_upload(key, expires_in:, checksum:, **)
  instrument :url, key: key do |payload|
    generated_url = bucket.signed_url key, method: "PUT", expires: expires_in, content_md5: checksum
    payload[:url] = generated_url
    generated_url
  end
end |