carrierwave-google-storage 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/carrierwave-google-storage.gemspec +22 -21
- data/lib/carrierwave-google-storage.rb +15 -12
- data/lib/carrierwave/google/storage/version.rb +3 -1
- data/lib/carrierwave/storage/gcloud.rb +35 -8
- data/lib/carrierwave/storage/gcloud_file.rb +27 -37
- data/lib/carrierwave/utilities/uri.rb +23 -0
- metadata +19 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5dfca5548a4c471cf6e394371707876c087c8ca
|
4
|
+
data.tar.gz: 499ef7b488e98cbc81cbb79a3267ffac4e4fd360
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5696f16b95a947270b694f626f7eebd2664b1c9148ec3646eb64705127ae089d9d6815fecda973abd7498b13bde0e4e958d45d356547dd2618e809eb12bba3f
|
7
|
+
data.tar.gz: 4bbfb4067e0e012b6ad017ae76906990b8f71bccf4d7402bcae25f24f05432122cc9a752a2b5dbb599d9a2e0b3edd7ac3bff232447a2790148d84b66f09e3465
|
data/.travis.yml
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
sudo: false
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
|
-
- 2.0.0
|
5
4
|
- 2.1.0
|
6
5
|
- 2.2.0
|
7
6
|
- 2.3.0
|
7
|
+
- 2.4.1
|
8
8
|
before_install:
|
9
9
|
- openssl aes-256-cbc -K $encrypted_121e786cd5aa_key -iv $encrypted_121e786cd5aa_iv -in .gcp-keyfile.json.enc -out .gcp-keyfile.json -d
|
10
10
|
- gem install bundler -v 1.12.1
|
@@ -1,35 +1,36 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'carrierwave/google/storage/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'carrierwave-google-storage'
|
8
9
|
spec.version = Carrierwave::Google::Storage::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
10
|
+
spec.authors = ['Jasdeep Singh']
|
11
|
+
spec.email = ['narang.jasdeep@gmail.com']
|
11
12
|
|
12
|
-
spec.summary = %q
|
13
|
-
spec.description = %q
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
13
|
+
spec.summary = %q(Use gcloud for Google Cloud Storage support in CarrierWave.)
|
14
|
+
spec.description = %q(A slimmer alternative to using Fog for Google Cloud Storage support in CarrierWave. Heavily inspired from carrierwave-aws)
|
15
|
+
spec.homepage = 'https://github.com/metaware/carrierwave-google-storage'
|
16
|
+
spec.license = 'MIT'
|
16
17
|
|
17
18
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
-
spec.bindir =
|
19
|
+
spec.bindir = 'exe'
|
19
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
-
spec.require_paths = [
|
21
|
-
|
22
|
-
spec.add_dependency '
|
23
|
-
spec.add_dependency '
|
24
|
-
if RUBY_VERSION >=
|
25
|
-
spec.add_dependency 'activemodel',
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_dependency 'carrierwave', '~> 1.2.0'
|
24
|
+
spec.add_dependency 'google-cloud-storage', '~> 1.9.0'
|
25
|
+
if RUBY_VERSION >= '2.2.2'
|
26
|
+
spec.add_dependency 'activemodel', '>= 3.2.0'
|
26
27
|
else
|
27
|
-
spec.add_dependency 'activemodel',
|
28
|
+
spec.add_dependency 'activemodel', '~> 4.2.7'
|
28
29
|
end
|
29
30
|
|
30
|
-
spec.add_development_dependency
|
31
|
-
spec.add_development_dependency
|
32
|
-
spec.add_development_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
31
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
32
|
+
spec.add_development_dependency 'pry', '~> 0.10.3'
|
33
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
34
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
35
|
+
spec.add_development_dependency 'uri-query_params', '~> 0.7.1'
|
35
36
|
end
|
@@ -6,18 +6,21 @@ require 'carrierwave/storage/gcloud_file'
|
|
6
6
|
require 'carrierwave/storage/gcloud_options'
|
7
7
|
require 'carrierwave/support/uri_filename'
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
module CarrierWave
|
10
|
+
module Uploader
|
11
|
+
class Base
|
12
12
|
|
13
|
-
|
14
|
-
add_config :gcloud_bucket
|
15
|
-
add_config :gcloud_bucket_is_public
|
16
|
-
add_config :gcloud_credentials
|
17
|
-
add_config :gcloud_authenticated_url_expiration
|
13
|
+
ConfigurationError = Class.new(StandardError)
|
18
14
|
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
add_config :gcloud_attributes
|
16
|
+
add_config :gcloud_bucket
|
17
|
+
add_config :gcloud_bucket_is_public
|
18
|
+
add_config :gcloud_credentials
|
19
|
+
add_config :gcloud_authenticated_url_expiration
|
22
20
|
|
23
|
-
|
21
|
+
configure do |config|
|
22
|
+
config.storage_engines[:gcloud] = 'CarrierWave::Storage::Gcloud'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module CarrierWave
|
2
4
|
module Storage
|
3
5
|
class Gcloud < Abstract
|
4
|
-
|
5
6
|
def self.connection_cache
|
6
7
|
@connection_cache ||= {}
|
7
8
|
end
|
@@ -9,28 +10,54 @@ module CarrierWave
|
|
9
10
|
def self.clear_connection_cache!
|
10
11
|
@connection_cache = {}
|
11
12
|
end
|
12
|
-
|
13
|
+
|
13
14
|
def store!(file)
|
14
|
-
|
15
|
+
GcloudFile.new(uploader, connection, uploader.store_path).tap do |gcloud_file|
|
15
16
|
gcloud_file.store(file)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
20
|
def retrieve!(identifier)
|
20
|
-
|
21
|
+
GcloudFile.new(uploader, connection, uploader.store_path(identifier))
|
22
|
+
end
|
23
|
+
|
24
|
+
def cache!(file)
|
25
|
+
GcloudFile.new(uploader, connection, uploader.cache_path).tap do |gcloud_file|
|
26
|
+
gcloud_file.store(file)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def retrieve_from_cache!(identifier)
|
31
|
+
GcloudFile.new(uploader, connection, uploader.cache_path(identifier))
|
32
|
+
end
|
33
|
+
|
34
|
+
def clean_cache!(_seconds)
|
35
|
+
raise 'use Object Lifecycle Management to clean the cache'
|
21
36
|
end
|
22
37
|
|
23
38
|
def connection
|
24
39
|
@connection ||= begin
|
25
|
-
|
40
|
+
conn_cache = self.class.connection_cache
|
26
41
|
ENV['SSL_CERT_FILE'] = cert_path
|
27
|
-
|
42
|
+
conn_cache[credentials] ||= ::Google::Cloud.new(
|
43
|
+
credentials[:gcloud_project] || ENV['GCLOUD_PROJECT'],
|
44
|
+
credentials[:gcloud_keyfile] || ENV['GCLOUD_KEYFILE']
|
45
|
+
).storage.bucket(uploader.gcloud_bucket)
|
28
46
|
end
|
29
47
|
end
|
30
48
|
|
31
49
|
def credentials
|
32
|
-
uploader.gcloud_credentials
|
50
|
+
uploader.gcloud_credentials || {}
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def cert_path
|
56
|
+
@cert_path ||= begin
|
57
|
+
gem_path = Gem.loaded_specs['google-api-client'].full_gem_path
|
58
|
+
gem_path + '/lib/cacerts.pem'
|
59
|
+
end
|
33
60
|
end
|
34
61
|
end
|
35
62
|
end
|
36
|
-
end
|
63
|
+
end
|
@@ -1,39 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module CarrierWave
|
2
4
|
module Storage
|
3
5
|
class GcloudFile
|
4
|
-
|
6
|
+
GCLOUD_STORAGE_URL = 'https://storage.googleapis.com'
|
7
|
+
|
5
8
|
attr_writer :file
|
6
|
-
attr_accessor :uploader, :connection, :path,
|
7
|
-
:gcloud_options, :file_exists
|
9
|
+
attr_accessor :uploader, :connection, :path, :gcloud_options, :file_exists
|
8
10
|
|
9
11
|
delegate :content_type, :size, to: :file
|
10
12
|
|
11
13
|
def initialize(uploader, connection, path)
|
12
|
-
@uploader
|
14
|
+
@uploader = uploader
|
15
|
+
@connection = connection
|
16
|
+
@path = path
|
13
17
|
end
|
14
18
|
|
15
19
|
def file
|
16
|
-
|
17
|
-
@file
|
18
|
-
end
|
19
|
-
alias_method :to_file, :file
|
20
|
-
|
21
|
-
def retrieve
|
22
|
-
by_verifying_existence { @file ||= bucket.file(path) }
|
23
|
-
self
|
24
|
-
end
|
25
|
-
|
26
|
-
def by_verifying_existence(&block)
|
27
|
-
begin
|
28
|
-
self.file_exists = true
|
29
|
-
yield
|
30
|
-
rescue Exception => exception
|
31
|
-
self.file_exists = false if (exception.class == ::Google::Cloud::Error::NotFoundError) && (exception.message == "Not Found")
|
32
|
-
end
|
20
|
+
@file ||= bucket.file(path)
|
33
21
|
end
|
22
|
+
alias to_file file
|
34
23
|
|
35
24
|
def attributes
|
36
|
-
return unless
|
25
|
+
return unless exists?
|
37
26
|
{
|
38
27
|
content_type: file.content_type,
|
39
28
|
size: file.size,
|
@@ -41,15 +30,15 @@ module CarrierWave
|
|
41
30
|
etag: file.etag
|
42
31
|
}
|
43
32
|
end
|
44
|
-
|
33
|
+
|
45
34
|
def delete
|
46
35
|
deleted = file.delete
|
47
|
-
|
36
|
+
@file = nil if deleted
|
48
37
|
deleted
|
49
38
|
end
|
50
|
-
|
39
|
+
|
51
40
|
def exists?
|
52
|
-
|
41
|
+
!file.nil?
|
53
42
|
end
|
54
43
|
|
55
44
|
def extension
|
@@ -62,14 +51,17 @@ module CarrierWave
|
|
62
51
|
end
|
63
52
|
|
64
53
|
def read
|
65
|
-
tmp_file = Tempfile.new(
|
54
|
+
tmp_file = Tempfile.new(
|
55
|
+
CarrierWave::Support::UriFilename.filename(file.name)
|
56
|
+
)
|
66
57
|
(file.download tmp_file.path, verify: :all).read
|
67
58
|
end
|
68
59
|
|
69
60
|
def store(new_file)
|
70
|
-
new_file_path = uploader.filename ?
|
71
|
-
|
72
|
-
|
61
|
+
new_file_path = uploader.filename ? uploader.filename : new_file.filename
|
62
|
+
bucket.create_file(
|
63
|
+
new_file.path, path, content_type: new_file.content_type
|
64
|
+
)
|
73
65
|
self
|
74
66
|
end
|
75
67
|
|
@@ -78,28 +70,26 @@ module CarrierWave
|
|
78
70
|
end
|
79
71
|
|
80
72
|
def url(options = {})
|
81
|
-
return unless file_exists
|
82
73
|
uploader.gcloud_bucket_is_public ? public_url : authenticated_url
|
83
74
|
end
|
84
|
-
|
75
|
+
|
85
76
|
def authenticated_url(options = {})
|
86
|
-
|
77
|
+
bucket.signed_url(path, options)
|
87
78
|
end
|
88
79
|
|
89
80
|
def public_url
|
90
81
|
if uploader.asset_host
|
91
82
|
"#{uploader.asset_host}/#{path}"
|
92
83
|
else
|
93
|
-
|
84
|
+
"#{GCLOUD_STORAGE_URL}/#{uploader.gcloud_bucket}/#{@path}"
|
94
85
|
end
|
95
86
|
end
|
96
87
|
|
97
88
|
private
|
98
89
|
|
99
90
|
def bucket
|
100
|
-
|
91
|
+
connection
|
101
92
|
end
|
102
|
-
|
103
93
|
end
|
104
94
|
end
|
105
|
-
end
|
95
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module CarrierWave
|
4
|
+
module Utilities
|
5
|
+
module Uri
|
6
|
+
# based on Ruby < 2.0's URI.encode
|
7
|
+
SAFE_STRING = URI::REGEXP::PATTERN::UNRESERVED + '\/'
|
8
|
+
UNSAFE = Regexp.new("[^#{SAFE_STRING}]", false)
|
9
|
+
|
10
|
+
private
|
11
|
+
def encode_path(path)
|
12
|
+
path.to_s.gsub(UNSAFE) do
|
13
|
+
us = $&
|
14
|
+
tmp = ''
|
15
|
+
us.each_byte do |uc|
|
16
|
+
tmp << sprintf('%%%02X', uc)
|
17
|
+
end
|
18
|
+
tmp
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end # Uri
|
22
|
+
end # Utilities
|
23
|
+
end # CarrierWave
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carrierwave-google-storage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jasdeep Singh
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: carrierwave
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: google-cloud-storage
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.9.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.9.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: activemodel
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,47 +67,47 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.12'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 0.10.3
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 0.10.3
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '10.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '10.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0
|
103
|
+
version: '3.0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0
|
110
|
+
version: '3.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: uri-query_params
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,6 +149,7 @@ files:
|
|
149
149
|
- lib/carrierwave/storage/gcloud_file.rb
|
150
150
|
- lib/carrierwave/storage/gcloud_options.rb
|
151
151
|
- lib/carrierwave/support/uri_filename.rb
|
152
|
+
- lib/carrierwave/utilities/uri.rb
|
152
153
|
homepage: https://github.com/metaware/carrierwave-google-storage
|
153
154
|
licenses:
|
154
155
|
- MIT
|
@@ -169,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
170
|
version: '0'
|
170
171
|
requirements: []
|
171
172
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.
|
173
|
+
rubygems_version: 2.6.14
|
173
174
|
signing_key:
|
174
175
|
specification_version: 4
|
175
176
|
summary: Use gcloud for Google Cloud Storage support in CarrierWave.
|