paperclip-dropbox 1.1.7 → 1.2.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/README.md +20 -3
- data/lib/paperclip/storage/dropbox.rb +15 -5
- data/lib/paperclip/storage/dropbox/generator_factory.rb +18 -0
- data/lib/paperclip/storage/dropbox/path_generator.rb +0 -1
- data/lib/paperclip/storage/dropbox/private_url_generator.rb +13 -0
- data/lib/paperclip/storage/dropbox/public_url_generator.rb +16 -0
- data/lib/paperclip/storage/dropbox/url_generator.rb +3 -13
- data/paperclip-dropbox.gemspec +1 -1
- metadata +31 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37ae3b2982b4e495d0ff1d022ced7c34f7fc4d48
|
4
|
+
data.tar.gz: 7f1e5a3e82be45d4afd68a7a9f680aab64112cf0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82c92a76e6e5bd9c5cd2e37d64a16ad2c1812214223acd917b65da8a509a2b3886a712b44eb591bcb815e3d217223a109025a9d7af3a591cc68b09d48eb75dc8
|
7
|
+
data.tar.gz: 058cbce37ecc26149108f7d12a8d855d89330d21aa265d06dcc87c3749ced8f1367e42eb888a0676576d91ef872081972a093e1c133a02a8a7e732327ca3b65e
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ This gem extends [Paperclip](https://github.com/thoughtbot/paperclip) with
|
|
6
6
|
## Setup
|
7
7
|
|
8
8
|
```ruby
|
9
|
-
gem "paperclip-dropbox", ">= 1"
|
9
|
+
gem "paperclip-dropbox", ">= 1.1.7"
|
10
10
|
```
|
11
11
|
|
12
12
|
Example:
|
@@ -28,12 +28,14 @@ app_secret: "..."
|
|
28
28
|
access_token: "..."
|
29
29
|
access_token_secret: "..."
|
30
30
|
user_id: "..."
|
31
|
-
access_type: "
|
31
|
+
access_type: "dropbox|app_folder"
|
32
32
|
```
|
33
33
|
|
34
34
|
In order to fill these in, you must [create a Dropbox app](https://www.dropbox.com/developers/apps)
|
35
35
|
and authorize it. There are two types of Dropbox apps: **App folder** or **Full Dropbox**. You can read
|
36
36
|
about the differences and gotchas in [this wiki](https://github.com/janko-m/paperclip-dropbox/wiki/Access-types).
|
37
|
+
When you decide, don't forget to put `"dropbox"` or `"app_folder"` as the `:access_type`
|
38
|
+
in your credentials.
|
37
39
|
|
38
40
|
After you have created an app, you will be given the "App key" and "App secret". Provide
|
39
41
|
these and the access type to the authorization Rake task:
|
@@ -89,6 +91,7 @@ This is a hash containing any of the following options:
|
|
89
91
|
- `:environment` – String, the environment name to use for selecting namespaced
|
90
92
|
credentials in a non-Rails app
|
91
93
|
|
94
|
+
|
92
95
|
For example:
|
93
96
|
|
94
97
|
```ruby
|
@@ -102,6 +105,20 @@ end
|
|
102
105
|
|
103
106
|
In Rails you don't need to specify it.
|
104
107
|
|
108
|
+
### The `:dropbox_visilbility` option
|
109
|
+
This is a string "public" (default) or "private".
|
110
|
+
- "public" - Files will be placed in your "Public" directory in dropbox and will the public urls will be used to access the files (not http request required to get a url for the file)
|
111
|
+
- "private" - Files can be placed in any dropbox directory (set your :path attachment option) and private, expiring urls (4 hours) will be generated each time you access this file. Private can only be used with the 'dropbox' access type.
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
class User < ActiveRecord::Base
|
115
|
+
has_attached_file :avatar,
|
116
|
+
:storage => :dropbox,
|
117
|
+
:dropbox_credentials => Rails.root.join("config/dropbox.yml"),
|
118
|
+
:dropbox_visibility: 'public'
|
119
|
+
end
|
120
|
+
```
|
121
|
+
|
105
122
|
### The `:path` option
|
106
123
|
|
107
124
|
To change the path of the file, use Paperclip's `:path` option:
|
@@ -110,7 +127,7 @@ To change the path of the file, use Paperclip's `:path` option:
|
|
110
127
|
:path => ":style/:id_:filename" # Defaults to ":filename"
|
111
128
|
```
|
112
129
|
|
113
|
-
In "Full Dropbox" mode it will automatically be searched in the `Public` folder,
|
130
|
+
In "Full Dropbox" mode with "public" visibility it will automatically be searched in the `Public` folder,
|
114
131
|
so there is not need to specify it.
|
115
132
|
|
116
133
|
### URL options
|
@@ -1,9 +1,10 @@
|
|
1
1
|
require "dropbox_sdk"
|
2
2
|
require "active_support/core_ext/hash/keys"
|
3
3
|
require "paperclip/storage/dropbox/path_generator"
|
4
|
-
require "paperclip/storage/dropbox/
|
4
|
+
require "paperclip/storage/dropbox/generator_factory"
|
5
5
|
require "paperclip/storage/dropbox/credentials"
|
6
6
|
|
7
|
+
|
7
8
|
module Paperclip
|
8
9
|
module Storage
|
9
10
|
module Dropbox
|
@@ -12,8 +13,12 @@ module Paperclip
|
|
12
13
|
@options[:dropbox_options] ||= {}
|
13
14
|
@options[:dropbox_credentials] = fetch_credentials
|
14
15
|
@options[:path] = nil if @options[:path] == self.class.default_options[:path]
|
16
|
+
@options[:dropbox_visibility] ||= "public"
|
17
|
+
|
15
18
|
@path_generator = PathGenerator.new(self, @options)
|
16
|
-
@url_generator =
|
19
|
+
@url_generator = GeneratorFactory.build_url_generator(self, @options)
|
20
|
+
|
21
|
+
dropbox_client # Force creation of dropbox_client
|
17
22
|
end
|
18
23
|
end
|
19
24
|
|
@@ -39,7 +44,9 @@ module Paperclip
|
|
39
44
|
end
|
40
45
|
|
41
46
|
def path(style = default_style)
|
42
|
-
@path_generator.generate(style)
|
47
|
+
path = @path_generator.generate(style)
|
48
|
+
path = File.join("Public", path) if public_dropbox?
|
49
|
+
path
|
43
50
|
end
|
44
51
|
|
45
52
|
def copy_to_local_file(style = default_style, destination_path)
|
@@ -66,8 +73,11 @@ module Paperclip
|
|
66
73
|
end
|
67
74
|
end
|
68
75
|
|
69
|
-
def
|
70
|
-
|
76
|
+
def public_dropbox?
|
77
|
+
@options[:dropbox_credentials][:access_type] == "dropbox" &&
|
78
|
+
@options[:dropbox_visibility] == "public"
|
79
|
+
end
|
80
|
+
|
71
81
|
|
72
82
|
private
|
73
83
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "paperclip/storage/dropbox/private_url_generator"
|
2
|
+
require "paperclip/storage/dropbox/public_url_generator"
|
3
|
+
module Paperclip
|
4
|
+
module Storage
|
5
|
+
module Dropbox
|
6
|
+
module GeneratorFactory
|
7
|
+
def self.build_url_generator(storage, options)
|
8
|
+
if options[:dropbox_credentials][:access_type] == "app_folder" || options[:dropbox_visibility] == "private"
|
9
|
+
PrivateUrlGenerator.new(storage, options)
|
10
|
+
elsif options[:dropbox_credentials][:access_type] == "dropbox"
|
11
|
+
PublicUrlGenerator.new(storage, options)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "paperclip/storage/dropbox/url_generator"
|
2
|
+
module Paperclip
|
3
|
+
module Storage
|
4
|
+
module Dropbox
|
5
|
+
class PrivateUrlGenerator < UrlGenerator
|
6
|
+
def file_url(style)
|
7
|
+
@attachment.dropbox_client.media(@attachment.path(style))["url"]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "paperclip/storage/dropbox/url_generator"
|
2
|
+
module Paperclip
|
3
|
+
module Storage
|
4
|
+
module Dropbox
|
5
|
+
class PublicUrlGenerator < UrlGenerator
|
6
|
+
def file_url(style)
|
7
|
+
url = URI.parse("https://dl.dropboxusercontent.com/u/#{user_id}/")
|
8
|
+
path = @attachment.path(style)
|
9
|
+
path = path.match(/^Public\//).try(:post_match)
|
10
|
+
url.merge!(path)
|
11
|
+
url.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -3,6 +3,7 @@ require "uri"
|
|
3
3
|
module Paperclip
|
4
4
|
module Storage
|
5
5
|
module Dropbox
|
6
|
+
|
6
7
|
class UrlGenerator
|
7
8
|
def initialize(attachment, attachment_options)
|
8
9
|
@attachment = attachment
|
@@ -11,7 +12,7 @@ module Paperclip
|
|
11
12
|
|
12
13
|
def generate(style, options)
|
13
14
|
if @attachment.present?
|
14
|
-
url =
|
15
|
+
url = file_url(style)
|
15
16
|
url = URI.parse(url)
|
16
17
|
url.query = [url.query, "dl=1"].compact.join("&") if options[:download]
|
17
18
|
url.to_s
|
@@ -22,22 +23,11 @@ module Paperclip
|
|
22
23
|
|
23
24
|
private
|
24
25
|
|
25
|
-
def private_url(style)
|
26
|
-
@attachment.dropbox_client.media(@attachment.path(style))["url"]
|
27
|
-
end
|
28
|
-
|
29
|
-
def public_url(style)
|
30
|
-
url = URI.parse("https://dl.dropboxusercontent.com/u/#{user_id}/")
|
31
|
-
path = @attachment.path(style)
|
32
|
-
path = path.match(/^Public\//).post_match
|
33
|
-
url.merge!(path)
|
34
|
-
url.to_s
|
35
|
-
end
|
36
|
-
|
37
26
|
def user_id
|
38
27
|
@attachment_options[:dropbox_credentials][:user_id]
|
39
28
|
end
|
40
29
|
end
|
30
|
+
|
41
31
|
end
|
42
32
|
end
|
43
33
|
end
|
data/paperclip-dropbox.gemspec
CHANGED
metadata
CHANGED
@@ -1,131 +1,131 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-dropbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Janko Marohnić
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: paperclip
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.1'
|
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
26
|
version: '3.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: dropbox-sdk
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
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
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '2.11'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.11'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: vcr
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '2.6'
|
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
82
|
version: '2.6'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: webmock
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '1.8'
|
90
|
-
- - <
|
90
|
+
- - "<"
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '1.10'
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '1.8'
|
100
|
-
- - <
|
100
|
+
- - "<"
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '1.10'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: activerecord
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
|
-
- -
|
107
|
+
- - ">="
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '3.2'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
|
-
- -
|
114
|
+
- - ">="
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '3.2'
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: rest-client
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
|
-
- -
|
121
|
+
- - ">="
|
122
122
|
- !ruby/object:Gem::Version
|
123
123
|
version: '1.6'
|
124
124
|
type: :development
|
125
125
|
prerelease: false
|
126
126
|
version_requirements: !ruby/object:Gem::Requirement
|
127
127
|
requirements:
|
128
|
-
- -
|
128
|
+
- - ">="
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '1.6'
|
131
131
|
description: Extends Paperclip with Dropbox storage.
|
@@ -135,17 +135,20 @@ executables: []
|
|
135
135
|
extensions: []
|
136
136
|
extra_rdoc_files: []
|
137
137
|
files:
|
138
|
+
- LICENSE
|
139
|
+
- README.md
|
140
|
+
- lib/paperclip-dropbox.rb
|
141
|
+
- lib/paperclip/dropbox.rb
|
138
142
|
- lib/paperclip/dropbox/railtie.rb
|
139
143
|
- lib/paperclip/dropbox/rake.rb
|
140
144
|
- lib/paperclip/dropbox/tasks.rake
|
141
|
-
- lib/paperclip/dropbox.rb
|
145
|
+
- lib/paperclip/storage/dropbox.rb
|
142
146
|
- lib/paperclip/storage/dropbox/credentials.rb
|
147
|
+
- lib/paperclip/storage/dropbox/generator_factory.rb
|
143
148
|
- lib/paperclip/storage/dropbox/path_generator.rb
|
149
|
+
- lib/paperclip/storage/dropbox/private_url_generator.rb
|
150
|
+
- lib/paperclip/storage/dropbox/public_url_generator.rb
|
144
151
|
- lib/paperclip/storage/dropbox/url_generator.rb
|
145
|
-
- lib/paperclip/storage/dropbox.rb
|
146
|
-
- lib/paperclip-dropbox.rb
|
147
|
-
- README.md
|
148
|
-
- LICENSE
|
149
152
|
- paperclip-dropbox.gemspec
|
150
153
|
homepage: https://github.com/janko-m/paperclip-dropbox
|
151
154
|
licenses:
|
@@ -157,17 +160,17 @@ require_paths:
|
|
157
160
|
- lib
|
158
161
|
required_ruby_version: !ruby/object:Gem::Requirement
|
159
162
|
requirements:
|
160
|
-
- -
|
163
|
+
- - ">="
|
161
164
|
- !ruby/object:Gem::Version
|
162
165
|
version: 1.9.2
|
163
166
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
167
|
requirements:
|
165
|
-
- -
|
168
|
+
- - ">="
|
166
169
|
- !ruby/object:Gem::Version
|
167
170
|
version: '0'
|
168
171
|
requirements: []
|
169
172
|
rubyforge_project:
|
170
|
-
rubygems_version: 2.0
|
173
|
+
rubygems_version: 2.2.0
|
171
174
|
signing_key:
|
172
175
|
specification_version: 4
|
173
176
|
summary: Extends Paperclip with Dropbox storage.
|