shrine-sql 1.0.0 → 1.0.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: e3ce6de1e86bfa4b3bbcc7f3e6f066d826b6f946
4
- data.tar.gz: e3e3233a2f828548bc775c04b4a2e8071ae9dccd
3
+ metadata.gz: 390d8c1697c7dd5c6234658ed978505b68a5e920
4
+ data.tar.gz: c9a9428f60f34709aa857e83dfe9bd8d71b72863
5
5
  SHA512:
6
- metadata.gz: f25aa9d884a6393c7f0c4e87dbbae48fbeb13e4f5816f39efc6e202ff6ab346837bd36449c4352a6b81de8384f59b93ea00a3ddc0fd188cdb5e37d3fadf60e25
7
- data.tar.gz: 03bc507da8227201add9b53a8bc29b66f7dbcccc426a1b7f22ae73a8800f65855411f22c15ecf29148d219d2ead2a3d3d437ea5249c9a786c8e259140919974a
6
+ metadata.gz: e87f71d1e8b0591713edfdeca6330caa2514373b35f26b86e5ecde01c0e3c8503bd90b9fccbd4de313dffd700e4e27a47fdbb63bde4e665bad036fc83d66b05b
7
+ data.tar.gz: eb0e2108cce021bf4be832767c1fe27397a757734e5acf639a736472e544e3ac53c14ae5c82890bd97a3f1d0b87b43223622f3df032d73518e4c2ac258b770b4
data/README.md CHANGED
@@ -37,24 +37,33 @@ Sequel.
37
37
 
38
38
  ### URL
39
39
 
40
- The shrine-sql storage itself doesn't provide any kind of URL, but you can load
41
- the `data_uri` plugin, which provides `UploadedFile#data_uri` which returns the
42
- data URI of the file, which you can display in the browser:
40
+ By itself shrine-sql doesn't provide URLs to files, but they can be streamed
41
+ via a URL with the `download_endpoint` plugin:
43
42
 
44
43
  ```rb
45
- Shrine.plugin :data_uri
44
+ # Assuming :store uses the SQL storage.
45
+ Shrine.plugin :download_endpoint, storages: [:store]
46
46
  ```
47
47
  ```rb
48
- user.avatar.data_uri #=> "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA"
48
+ Rails.application.routes.draw do
49
+ mount Shrine::DownloadEndpoint => "/attachments"
50
+ end
51
+ ```
52
+ ```rb
53
+ user.avatar_url #=> "/attachments/store/938432984643.jpg"
49
54
  ```
50
-
51
- Note that `UploadedFile#data_uri` is available starting from Shrine 1.1.
52
55
 
53
56
  ### Indices
54
57
 
55
58
  It is recommended that you add a unique index to the "id" column, for faster
56
59
  lookups.
57
60
 
61
+ ## Copying
62
+
63
+ If you're using the SQL storage for both cache and store, moving from cache to
64
+ store will copy the record using SQL instead "reuploading" it, which means the
65
+ file contents won't be read into memory.
66
+
58
67
  ## Contributing
59
68
 
60
69
  You can run the tests with Rake:
@@ -1,3 +1,4 @@
1
+ require "shrine"
1
2
  require "sequel"
2
3
  require "stringio"
3
4
  require "json"
@@ -14,17 +15,19 @@ class Shrine
14
15
 
15
16
  def upload(io, id, metadata = {})
16
17
  generated_id = store(io, id, metadata)
17
- id.replace(generated_id.to_s)
18
+ id.replace(generated_id.to_s + File.extname(id))
18
19
  end
19
20
 
20
21
  def download(id)
21
- metadata = JSON.parse(metadata(id))
22
- extname = File.extname(metadata["filename"].to_s)
23
- tempfile = Tempfile.new(["shrine", extname], binmode: true)
22
+ tempfile = Tempfile.new(["shrine", File.extname(id)], binmode: true)
24
23
  File.write(tempfile.path, content(id))
25
24
  tempfile
26
25
  end
27
26
 
27
+ def stream(id)
28
+ yield content(id)
29
+ end
30
+
28
31
  def open(id)
29
32
  StringIO.new(content(id))
30
33
  end
@@ -34,19 +37,18 @@ class Shrine
34
37
  end
35
38
 
36
39
  def exists?(id)
37
- this = dataset.where(id: id).limit(1)
38
- !this.get(Sequel::SQL::AliasedExpression.new(1, :one)).nil?
40
+ !find(id).get(Sequel::SQL::AliasedExpression.new(1, :one)).nil?
39
41
  end
40
42
 
41
43
  def delete(id)
42
- dataset.where(id: id).delete
44
+ find(id).delete
43
45
  end
44
46
 
45
47
  def multi_delete(ids)
46
- dataset.where(id: ids).delete
48
+ find(ids).delete
47
49
  end
48
50
 
49
- def url(id, options = {})
51
+ def url(id, **options)
50
52
  end
51
53
 
52
54
  def clear!(confirm = nil)
@@ -54,6 +56,13 @@ class Shrine
54
56
  dataset.delete
55
57
  end
56
58
 
59
+ protected
60
+
61
+ def find(id_or_ids)
62
+ ids = Array(id_or_ids).map { |s| File.basename(s, ".*") }
63
+ dataset.where(id: ids).limit(ids.count)
64
+ end
65
+
57
66
  private
58
67
 
59
68
  def store(io, id, metadata)
@@ -69,7 +78,7 @@ class Shrine
69
78
  end
70
79
 
71
80
  def copy(io, id, metadata)
72
- record = io.storage.dataset.where(id: io.id).select(:content, :metadata)
81
+ record = io.storage.find(io.id).select(:content, :metadata)
73
82
  dataset.insert([:content, :metadata], record)
74
83
  end
75
84
 
@@ -78,11 +87,11 @@ class Shrine
78
87
  end
79
88
 
80
89
  def content(id)
81
- dataset.where(id: id).get(:content)
90
+ find(id).get(:content)
82
91
  end
83
92
 
84
93
  def metadata(id)
85
- dataset.where(id: id).get(:metadata)
94
+ find(id).get(:metadata)
86
95
  end
87
96
  end
88
97
  end
data/shrine-sql.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "shrine-sql"
3
- gem.version = "1.0.0"
3
+ gem.version = "1.0.1"
4
4
 
5
5
  gem.required_ruby_version = ">= 2.1"
6
6
 
@@ -13,10 +13,10 @@ Gem::Specification.new do |gem|
13
13
  gem.files = Dir["README.md", "LICENSE.txt", "lib/**/*.rb", "shrine-sql.gemspec"]
14
14
  gem.require_path = "lib"
15
15
 
16
+ gem.add_dependency "shrine", "~> 1.1"
16
17
  gem.add_dependency "sequel"
17
18
 
18
19
  gem.add_development_dependency "sqlite3"
19
20
  gem.add_development_dependency "rake"
20
- gem.add_development_dependency "shrine"
21
21
  gem.add_development_dependency "minitest"
22
22
  end
metadata CHANGED
@@ -1,37 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shrine-sql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.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-18 00:00:00.000000000 Z
11
+ date: 2015-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sequel
14
+ name: shrine
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.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
- version: '0'
26
+ version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sqlite3
28
+ name: sequel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: shrine
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -116,3 +116,4 @@ signing_key:
116
116
  specification_version: 4
117
117
  summary: Provides SQL database storage for Shrine.
118
118
  test_files: []
119
+ has_rdoc: