shrine-sql 1.0.0 → 1.0.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 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: