paperclip-google-drive 0.3.0 → 0.3.1
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/README.md +12 -5
- data/lib/paperclip/storage/google_drive.rb +69 -33
- data/lib/paperclip/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7c2bb6eae67f447365e5f5e0a11a6a751582ba7
|
4
|
+
data.tar.gz: 151052f23e6e53c2b785ec0aa65897ea90903bbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02a3a5e97b90105dc8ac32789da4edb9e0074df2b863bcba7b6661e5bc469353f723c886a94bf18118bbffa0670e043e6b200492425eab44c9989b7d2e023b24
|
7
|
+
data.tar.gz: 79ccd25892080cb5b41894086524ec6f43575d983b93b6bb9a3ab4586c4447ab522624d3243fa470e0f4b5787f24ea9bdefa85830a77f370ba1fc03dd700c6ba
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
[](https://badge.fury.io/gh/degzcs%2Fpaperclip-googledrive)
|
3
3
|
[](https://codeclimate.com/github/degzcs/paperclip-googledrive)
|
4
4
|
|
5
|
-
|
5
|
+
PaperclipGoogleDrive is a gem that extends paperclip storage for Google Drive (V3). Works with Rails 3.x. and later.
|
6
6
|
IMPORTANT NOTE: This repo was forked and upgraded to use Google Drive V3.
|
7
7
|
|
8
8
|
## Installation
|
@@ -35,7 +35,7 @@ Google Drive is a free service for file storage files. In order to use this stor
|
|
35
35
|
```sh
|
36
36
|
$ rake google_drive:authorize"[path/to/client_secret.json, 'application_name']"
|
37
37
|
```
|
38
|
-
NOTE:
|
38
|
+
NOTE:
|
39
39
|
- the `path/to/client_secret.json` path is the file downloaded from Google console (it will be overrided with the fresh token).
|
40
40
|
- the `application_name` param is the name that you set for the application credentials on Google console.
|
41
41
|
|
@@ -86,7 +86,7 @@ class Product < ActiveRecord::Base
|
|
86
86
|
:google_drive_client_secret_path => "#{Rails.root}/config/client_secret.json"
|
87
87
|
:styles => { :medium => "300x300" },
|
88
88
|
:google_drive_options => {
|
89
|
-
:path => proc { |style| "#{
|
89
|
+
:path => proc { |style| "#{id}_#{photo.original_filename}_#{style}" },
|
90
90
|
:public_folder_id => 'AAAARRRRGGGBBBFFFFadsasdX'
|
91
91
|
}
|
92
92
|
end
|
@@ -98,9 +98,16 @@ Public/14_some_photo_medium.jpg
|
|
98
98
|
|
99
99
|
The another file is called some_photo_medium.jpg because style names (other than original) will always be appended to the filenames, for better management.
|
100
100
|
|
101
|
+
Also, you can use the resize feature provided by GDrive API, you only have to pass as parameter in the url params the option `:custom` and `width`, as follows:
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
some_product.photo.url(:custom, width: 500)
|
105
|
+
```
|
106
|
+
|
101
107
|
## Misc
|
102
108
|
|
103
|
-
Useful links
|
109
|
+
## Useful links
|
110
|
+
|
104
111
|
[Google APIs console](https://code.google.com/apis/console/)
|
105
112
|
|
106
113
|
[Google Drive scopes](https://developers.google.com/drive/scopes)
|
@@ -111,7 +118,7 @@ Useful links
|
|
111
118
|
|
112
119
|
## License
|
113
120
|
|
114
|
-
[MIT License](https://github.com/
|
121
|
+
[MIT License](https://github.com/degzcs/paperclip-googledrive/blob/master/LICENSE)
|
115
122
|
|
116
123
|
## Contributing
|
117
124
|
|
@@ -52,7 +52,7 @@ module Paperclip
|
|
52
52
|
@queued_for_write.each do |style, file|
|
53
53
|
raise FileExists, "file \"#{path(style)}\" already exists in your Google Drive" if exists?(path(style))
|
54
54
|
|
55
|
-
name, mime_type =
|
55
|
+
name, mime_type = filename_from(style), "#{ file.content_type }"
|
56
56
|
|
57
57
|
file_metadata = {
|
58
58
|
name: name,
|
@@ -95,28 +95,28 @@ module Paperclip
|
|
95
95
|
|
96
96
|
alias_method :google_drive, :google_api_client
|
97
97
|
|
98
|
-
#
|
99
|
-
# where 220 is the width in pixeles
|
98
|
+
# Retrives the origina file or this also could be used to scale images
|
99
|
+
# as Google does. e.i. `<url>=s220`, where 220 is the width in pixeles
|
100
|
+
# OR as Paperclip does.
|
100
101
|
# @params args [ Array ]
|
101
102
|
# @return [ String ]
|
102
103
|
# ex.
|
103
104
|
# 1. If you want the medium version of your image (Paperclip way)
|
104
105
|
# some_model.avatar.url(:medium)
|
105
|
-
# 2. If you want a custom
|
106
|
-
# some_model.avatar.url(:
|
106
|
+
# 2. If you want a custom thumbanil of your image/pdf (Google way)
|
107
|
+
# some_model.avatar.url(:custom_thumb, width: 500)
|
107
108
|
def url(*args)
|
108
109
|
if present?
|
109
110
|
style = args.first.is_a?(Symbol) ? args.first : default_style
|
110
111
|
options = args.last.is_a?(Hash) ? args.last : {}
|
111
|
-
if style == :
|
112
|
+
if style == :custom_thumb
|
112
113
|
custom_width = options[:width] || 220
|
113
|
-
file_name =
|
114
|
+
file_name = filename_from(default_style)
|
115
|
+
public_url_custom_thumbnail_from(file_name, custom_width)
|
114
116
|
else
|
115
|
-
|
116
|
-
file_name
|
117
|
+
file_name = filename_from(style)
|
118
|
+
public_url_for(file_name)
|
117
119
|
end
|
118
|
-
|
119
|
-
public_url_for(file_name, custom_width)
|
120
120
|
else
|
121
121
|
default_image
|
122
122
|
end
|
@@ -125,7 +125,7 @@ module Paperclip
|
|
125
125
|
# Gets full title/name
|
126
126
|
# @param style [ String ]
|
127
127
|
# @return [ String ]
|
128
|
-
def
|
128
|
+
def filename_from(style)
|
129
129
|
file_name = instance.instance_exec(style, &file_title)
|
130
130
|
style_suffix = (style != default_style ? "_#{style}" : "")
|
131
131
|
if original_extension.present? && file_name =~ /#{original_extension}$/
|
@@ -135,35 +135,51 @@ module Paperclip
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
alias_method :path, :
|
138
|
+
alias_method :path, :filename_from
|
139
|
+
|
140
|
+
# Gets the public url for a passed filename
|
141
|
+
# @param title [ String ]
|
142
|
+
# @return [ String ] with url
|
143
|
+
def public_url_for(title)
|
144
|
+
metadata_or_default_img_from(title) do |metadata|
|
145
|
+
# TODO: fix permission issues on the view with this command
|
146
|
+
# effective_url_from(metadata.web_content_link)
|
147
|
+
custom_thumbnail_image_for(metadata.thumbnail_link, 1000)
|
148
|
+
end
|
149
|
+
end
|
139
150
|
|
140
151
|
# Gets the public url for a passed filename
|
141
152
|
# @param title [ String ]
|
142
153
|
# @param custom_width [ Integer ]
|
143
154
|
# @return [ String ] with url
|
144
|
-
def
|
145
|
-
|
146
|
-
|
147
|
-
default_image
|
148
|
-
else
|
149
|
-
metadata = metadata_by_id(searched_id)
|
150
|
-
custom_image_for(metadata.thumbnail_link, custom_width)
|
155
|
+
def public_url_custom_thumbnail_from(title, custom_width)
|
156
|
+
metadata_or_default_img_from(title) do |metadata|
|
157
|
+
custom_thumbnail_image_for(metadata.thumbnail_link, custom_width)
|
151
158
|
end
|
152
159
|
end
|
153
160
|
|
154
161
|
# Retrieves the specific image with a custom size. It is resized by GDrive API if you
|
155
|
-
# pass the :
|
156
|
-
# which is inchaged to do the scaling process.
|
157
|
-
# @param drive_thumbnail_link [ String ]
|
158
|
-
# @param custom_width [ Integer ]
|
162
|
+
# pass the :custom_thumb as style option. In other cases, it removes the last parameter
|
163
|
+
# `=s220` which is inchaged to do the scaling process.
|
164
|
+
# @param drive_thumbnail_link [ String ] with the form: https://<url value>=s220
|
165
|
+
# @param custom_width [ Integer ] ex. 512
|
159
166
|
# @return [ String ]
|
160
|
-
def
|
167
|
+
def custom_thumbnail_image_for(drive_thumbnail_link, custom_width)
|
161
168
|
file_url, current_width = drive_thumbnail_link.split(/=s/)
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
169
|
+
"#{ file_url }=s#{ custom_width }"
|
170
|
+
end
|
171
|
+
|
172
|
+
# Gets the effective url from the web content link
|
173
|
+
# These are a series of steps to hack the way that GDrive API
|
174
|
+
# handle its urls. It consists in catch a Google::Apis::RedirectError error
|
175
|
+
# and take the correct url where is located the file.
|
176
|
+
# @param driver_web_content_link [ String ]
|
177
|
+
# @return [ String ]
|
178
|
+
def effective_url_from(drive_web_content_link)
|
179
|
+
redirect_url = drive_web_content_link.split(/&export=/)[0]
|
180
|
+
google_drive.http(:get, redirect_url) do |result, err|
|
181
|
+
err.header[:location].split('&continue=')[1]
|
182
|
+
end
|
167
183
|
end
|
168
184
|
|
169
185
|
# Takes the file title/name and search it in a given folder
|
@@ -192,7 +208,7 @@ module Paperclip
|
|
192
208
|
client = google_api_client
|
193
209
|
metadata = client.get_file(
|
194
210
|
file_id,
|
195
|
-
fields: 'id, name, thumbnailLink'
|
211
|
+
fields: 'id, name, thumbnailLink, webContentLink, webViewLink, trashed'
|
196
212
|
)
|
197
213
|
validate_metadata(metadata)
|
198
214
|
metadata
|
@@ -206,6 +222,8 @@ module Paperclip
|
|
206
222
|
raise 'the file id was not retrieved' if metadata.id.nil?
|
207
223
|
raise 'the file name was not retrieved' if metadata.name.nil?
|
208
224
|
raise 'the file thumbnail_link was not retrieved' if metadata.thumbnail_link.nil?
|
225
|
+
raise 'the file web_content_link was not retrieved' if metadata.web_content_link.nil?
|
226
|
+
raise 'the file trashed was not retrieved' if metadata.trashed.nil?
|
209
227
|
end
|
210
228
|
|
211
229
|
# Checks if the image already exits
|
@@ -222,12 +240,30 @@ module Paperclip
|
|
222
240
|
end
|
223
241
|
end
|
224
242
|
|
243
|
+
# Gets the file metadata if it exists
|
244
|
+
# in other case returns the defaul image
|
245
|
+
# @param title [ String ]
|
246
|
+
# @param block [ Proc ]
|
247
|
+
def metadata_or_default_img_from(title, &block)
|
248
|
+
searched_id = search_for_title(title) #return id if any or style
|
249
|
+
if searched_id.nil? # it finds some file
|
250
|
+
default_image
|
251
|
+
else
|
252
|
+
metadata = metadata_by_id(searched_id)
|
253
|
+
yield metadata
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
225
257
|
def default_image
|
226
258
|
if @google_drive_options[:default_url] #if default image is set
|
227
259
|
title = @google_drive_options[:default_url]
|
228
260
|
searched_id = search_for_title(title) # id
|
229
|
-
|
230
|
-
|
261
|
+
if searched_id.nil?
|
262
|
+
raise 'Default image not found, please double check its name'
|
263
|
+
else
|
264
|
+
metadata = metadata_by_id(searched_id)
|
265
|
+
effective_url_from(metadata.web_content_link)
|
266
|
+
end
|
231
267
|
else
|
232
268
|
'No picture' # ---- ?
|
233
269
|
end
|
data/lib/paperclip/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-google-drive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Gomez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: paperclip
|