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 +4 -4
- data/README.md +16 -7
- data/lib/shrine/storage/sql.rb +21 -12
- data/shrine-sql.gemspec +2 -2
- metadata +12 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 390d8c1697c7dd5c6234658ed978505b68a5e920
|
4
|
+
data.tar.gz: c9a9428f60f34709aa857e83dfe9bd8d71b72863
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
41
|
-
|
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
|
-
|
44
|
+
# Assuming :store uses the SQL storage.
|
45
|
+
Shrine.plugin :download_endpoint, storages: [:store]
|
46
46
|
```
|
47
47
|
```rb
|
48
|
-
|
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:
|
data/lib/shrine/storage/sql.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
44
|
+
find(id).delete
|
43
45
|
end
|
44
46
|
|
45
47
|
def multi_delete(ids)
|
46
|
-
|
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.
|
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
|
-
|
90
|
+
find(id).get(:content)
|
82
91
|
end
|
83
92
|
|
84
93
|
def metadata(id)
|
85
|
-
|
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.
|
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.
|
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-
|
11
|
+
date: 2015-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: shrine
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
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: '
|
26
|
+
version: '1.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
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: :
|
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:
|
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:
|
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:
|