shrine-fog 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9190a56cee70da72f752a7cdb9f0f499b48467bf
4
- data.tar.gz: 44f829d6eb84aae145249df2fbaefb747f2df8b3
3
+ metadata.gz: 7b9e07ed2d525e24b90ce0fe67604e3bc70861ed
4
+ data.tar.gz: bd70496c2fd9f3dfa8b010c98331826ec34c20b6
5
5
  SHA512:
6
- metadata.gz: 3cff6c69c740f5051afc4e723feb600fb17a7c2f1a69390bcb7ac78d4586797591f5b99dcc06c51018f91bf8e67944b5b635d00f45a40aba0a8e36d29d5b911b
7
- data.tar.gz: 41d45e6eb1b5c3a0e7d69ee8696719a89c8316bb4176c06acebb7d086c75cc841f2ac00fe4030fe5141c09050ccc819e87e82f9317e91a558619ba49a5d0e157
6
+ metadata.gz: feb342d3a69e6398f00ae18b9992e2392bc148e1dc5843f0acb44e946961dca4554c3bb24083c92ab36bb9016de94cf97f84fcaec4e1cad4b69ed535baf45fbe
7
+ data.tar.gz: f3857955d172503f8477c50668a1f17f365252e19b4cbdb4dd443667ca44102f5ba46b87f1828a68a95af1981c43e49edee0ae75e74650a17d902f9e4a5a083a
data/README.md CHANGED
@@ -6,7 +6,7 @@ Provides [Fog] storage for [Shrine].
6
6
 
7
7
  ```ruby
8
8
  gem "shrine-fog"
9
- gem "fog-xyz # Fog gem for the storage you want to use
9
+ gem "fog-xyz" # Fog gem for the storage you want to use
10
10
  ```
11
11
 
12
12
  ## Usage
@@ -15,6 +15,7 @@ Require the appropriate Fog gem, and assign the parameters for initializing
15
15
  the storage:
16
16
 
17
17
  ```rb
18
+ require "shrine/storage/fog"
18
19
  require "fog/google"
19
20
 
20
21
  Shrine.storages[:store] = Shrine::Storage::Fog.new(
@@ -28,6 +29,7 @@ Shrine.storages[:store] = Shrine::Storage::Fog.new(
28
29
  You can also assign a Fog storage object as the `:connection`:
29
30
 
30
31
  ```rb
32
+ require "shrine/storage/fog"
31
33
  require "fog/google"
32
34
 
33
35
  google = Fog::Storage.new(
@@ -42,15 +44,58 @@ Shrine.storages[:store] = Shrine::Storage::Fog.new(
42
44
  )
43
45
  ```
44
46
 
45
- ## S3 or Filesystem
47
+ If both cache and store are a Fog storage, the uploaded file is copied to store
48
+ instead of reuploaded.
49
+
50
+ ### URLs
51
+
52
+ By default the shrine-fog will generate public unsigned URLs, but if you want
53
+ to change that tell Fog not to store files publicly, you can set `:public` to
54
+ false:
55
+
56
+ ```rb
57
+ fog = Shrine::Storage::Fog.new(**fog_options)
58
+ fog.url("image.jpg") #=> "https://my-bucket.s3-eu-west-1.amazonaws.com/image.jpg"
59
+
60
+ fog = Shrine::Storage::Fog.new(public: false, **fog_options)
61
+ fog.url("image.jpg") #=> "https://my-bucket.s3-eu-west-1.amazonaws.com/foo?X-Amz-Expires=3600&X-Amz-Date=20151217T102105Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIJF55TMZZY45UT6Q/20151217/eu-west-1/s3/aws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=6908d8cd85ce4469f141a36955611f26d29ae7919eb8a6cba28f9194a92d96c3"
62
+ ```
63
+
64
+ The signed URLs by default expire in 1 hour, you set `:expires` to number of
65
+ seconds you want the URL to expire:
66
+
67
+ ```rb
68
+ Shrine::Storage::Fog.new(expires: 24*60*60, **fog_options) # expires in 1 day
69
+ ```
70
+
71
+ ### S3 or Filesystem
46
72
 
47
73
  If you want to store your files to Amazon S3 or the filesystem, you should use
48
74
  the storages that ship with Shrine (instead of [fog-aws] or [fog-local]) as
49
75
  they are much more advanced.
50
76
 
77
+ ## Running tests
78
+
79
+ Tests use [fog-aws], so you'll have to create an `.env` file with appropriate
80
+ credentials:
81
+
82
+ ```sh
83
+ # .env
84
+ S3_ACCESS_KEY_ID="..."
85
+ S3_SECRET_ACCESS_KEY="..."
86
+ S3_REGION="..."
87
+ S3_BUCKET="..."
88
+ ```
89
+
90
+ Afterwards you can run the tests:
91
+
92
+ ```sh
93
+ $ bundle exec rake test
94
+ ```
95
+
51
96
  ## License
52
97
 
53
- [MIT](http://opensource.org/licenses/MIT).
98
+ [MIT](http://opensource.org/licenses/MIT)
54
99
 
55
100
  [Fog]: http://fog.io/
56
101
  [Shrine]: https://github.com/janko-m/shrine
@@ -1,15 +1,17 @@
1
1
  require "down"
2
+ require "uri"
2
3
 
3
4
  class Shrine
4
5
  module Storage
5
6
  class Fog
6
7
  attr_reader :connection, :directory, :prefix
7
8
 
8
- def initialize(directory:, prefix: nil, public: true, connection: nil, **options)
9
+ def initialize(directory:, prefix: nil, public: true, expires: 3600, connection: nil, **options)
9
10
  @connection = connection || ::Fog::Storage.new(options)
10
11
  @directory = @connection.directories.new(key: directory)
11
12
  @prefix = prefix
12
13
  @public = public
14
+ @expires = expires
13
15
  end
14
16
 
15
17
  def upload(io, id, metadata = {})
@@ -37,11 +39,18 @@ class Shrine
37
39
  end
38
40
 
39
41
  def delete(id)
40
- head(id).destroy
42
+ file(id).destroy
41
43
  end
42
44
 
43
45
  def url(id, **options)
44
- head(id).public_url
46
+ signed_url = file(id).url(Time.now + @expires, **options)
47
+ if @public
48
+ uri = URI(signed_url)
49
+ uri.query = nil
50
+ uri.to_s
51
+ else
52
+ signed_url
53
+ end
45
54
  end
46
55
 
47
56
  def clear!(confirm = nil)
@@ -51,6 +60,10 @@ class Shrine
51
60
 
52
61
  protected
53
62
 
63
+ def file(id)
64
+ directory.files.new(key: path(id))
65
+ end
66
+
54
67
  def get(id)
55
68
  directory.files.get(path(id))
56
69
  end
data/shrine-fog.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "shrine-fog"
3
- gem.version = "0.1.0"
3
+ gem.version = "0.1.1"
4
4
 
5
5
  gem.required_ruby_version = ">= 2.1"
6
6
 
@@ -16,6 +16,7 @@ Gem::Specification.new do |gem|
16
16
 
17
17
  gem.add_development_dependency "down", ">= 1.0.3"
18
18
 
19
+ gem.add_development_dependency "rake"
19
20
  gem.add_development_dependency "fog-aws"
20
21
  gem.add_development_dependency "mime-types"
21
22
  gem.add_development_dependency "dotenv"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shrine-fog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janko Marohnić
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-05 00:00:00.000000000 Z
11
+ date: 2015-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: down
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: fog-aws
29
43
  requirement: !ruby/object:Gem::Requirement