tori 0.5.0 → 0.6.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 +1 -0
- data/lib/tori/backend/chain.rb +52 -0
- data/lib/tori/backend/filesystem.rb +4 -0
- data/lib/tori/backend/s3.rb +20 -0
- data/lib/tori/version.rb +1 -1
- data/lib/tori.rb +8 -6
- data/test/test_tori_backend_chain.rb +45 -0
- data/test/test_tori_backend_filesystem.rb +10 -0
- data/test/test_tori_backend_s3.rb +12 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da06eed7aefecd6c1a93ecc13aa940c11ebdc1b6
|
4
|
+
data.tar.gz: 095deaa57d6d8ac0f6f91fde433dcb8f37112443
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba156535d1288ff070d8211ae5caf6d8cd0760fecf3382ed2e49f3839865d9341ab913693b3d2c066a8a1f036b6f81bfc185efc45ce27a1dba03348b82760882
|
7
|
+
data.tar.gz: f23d6e28c92d609875dc3fa99d36cacd5edc9bde2254b4e0b9d00a225ba92abe6ff7bc9391f52e9f06ebe55f5eecc6533d807a22e451963401c55b5315d439f5
|
data/README.md
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
module Tori
|
2
|
+
module Backend
|
3
|
+
# Chain based on `exist?` method
|
4
|
+
# @example
|
5
|
+
# class Book < ActiveRecord::Base
|
6
|
+
# include Tori::Backend # short cut
|
7
|
+
#
|
8
|
+
# # If exist "lib/pdf" load this,
|
9
|
+
# # But nothing, Load from S3 "book" bucket.
|
10
|
+
# chain_backend = Chain.new(
|
11
|
+
# FileSystem.new(Pathname("lib/pdf")),
|
12
|
+
# S3.new(bucket: "book"),
|
13
|
+
# )
|
14
|
+
# tori :pdf, chain_backend do |model|
|
15
|
+
# "book/#{__tori__}/#{model.id}"
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
class Chain
|
19
|
+
class ExistError < StandardError
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(*backends)
|
23
|
+
@backends = backends
|
24
|
+
end
|
25
|
+
|
26
|
+
def backend(filename)
|
27
|
+
@backends.each do |b|
|
28
|
+
if b.exist?(filename)
|
29
|
+
return b
|
30
|
+
end
|
31
|
+
end
|
32
|
+
raise ExistError, "exist(#{filename}) backend not found"
|
33
|
+
end
|
34
|
+
|
35
|
+
def exist?(filename)
|
36
|
+
backend(filename)
|
37
|
+
rescue ExistError
|
38
|
+
false
|
39
|
+
else
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
def read(filename)
|
44
|
+
backend(filename).read(filename)
|
45
|
+
end
|
46
|
+
|
47
|
+
def open(filename, &block)
|
48
|
+
backend(filename).open(filename, &block)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/tori/backend/s3.rb
CHANGED
@@ -130,6 +130,26 @@ module Tori
|
|
130
130
|
signer.presigned_url(method, bucket: @bucket, key: filename)
|
131
131
|
end
|
132
132
|
|
133
|
+
def open(filename)
|
134
|
+
ext = ::File.extname(filename)
|
135
|
+
body = body(filename)
|
136
|
+
|
137
|
+
if block_given?
|
138
|
+
Tempfile.create([filename, ext]) do |f|
|
139
|
+
f.write body
|
140
|
+
f.fsync
|
141
|
+
f.rewind
|
142
|
+
yield f
|
143
|
+
end
|
144
|
+
else
|
145
|
+
f = Tempfile.open([filename, ext])
|
146
|
+
f.write body
|
147
|
+
f.fsync
|
148
|
+
f.rewind
|
149
|
+
f
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
133
153
|
def get_object(opts={})
|
134
154
|
client.get_object bucket: @bucket, **opts
|
135
155
|
end
|
data/lib/tori/version.rb
CHANGED
data/lib/tori.rb
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
require 'tori/backend/filesystem'
|
2
|
-
require 'tori/config'
|
3
|
-
require 'tori/context'
|
4
|
-
require 'tori/define'
|
5
|
-
require 'tori/file'
|
6
|
-
require 'tori/version'
|
7
1
|
require 'pathname'
|
8
2
|
require 'digest/sha1'
|
9
3
|
require "fileutils"
|
@@ -34,3 +28,11 @@ module Tori
|
|
34
28
|
end
|
35
29
|
end
|
36
30
|
end
|
31
|
+
|
32
|
+
require 'tori/backend/filesystem'
|
33
|
+
require 'tori/backend/chain'
|
34
|
+
require 'tori/config'
|
35
|
+
require 'tori/context'
|
36
|
+
require 'tori/define'
|
37
|
+
require 'tori/file'
|
38
|
+
require 'tori/version'
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestToriBackendChain < Test::Unit::TestCase
|
4
|
+
include Tori::Backend
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@filesystem1 = FileSystem.new(Pathname("test/tmp/tori/store1"))
|
8
|
+
File.open(@filesystem1.root.join("testfile-1"), 'w+'){ |f| f.write("text-1") }
|
9
|
+
|
10
|
+
@filesystem2 = FileSystem.new(Pathname("test/tmp/tori/store2"))
|
11
|
+
File.open(@filesystem2.root.join("testfile-2"), 'w+'){ |f| f.write("text-2") }
|
12
|
+
|
13
|
+
@backend = Chain.new(@filesystem1, @filesystem2)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "#backend" do
|
17
|
+
assert { @filesystem1 == @backend.backend("testfile-1") }
|
18
|
+
assert { @filesystem2 == @backend.backend("testfile-2") }
|
19
|
+
assert_raise(Chain::ExistError) { @backend.backend("testfile-3") }
|
20
|
+
end
|
21
|
+
|
22
|
+
test "#exist?" do
|
23
|
+
assert { true == @backend.exist?("testfile-1") }
|
24
|
+
assert { true == @backend.exist?("testfile-2") }
|
25
|
+
assert { false == @backend.exist?("testfile-3") }
|
26
|
+
end
|
27
|
+
|
28
|
+
test "read" do
|
29
|
+
assert { "text-1" == @backend.read("testfile-1") }
|
30
|
+
assert { "text-2" == @backend.read("testfile-2") }
|
31
|
+
assert_raise(Chain::ExistError) { @backend.read("testfile-3") }
|
32
|
+
end
|
33
|
+
|
34
|
+
test "open" do
|
35
|
+
@backend.open("testfile-1") do |f|
|
36
|
+
assert { "text-1" == f.read }
|
37
|
+
assert { "test/tmp/tori/store1/testfile-1" == f.path }
|
38
|
+
end
|
39
|
+
@backend.open("testfile-2") do |f|
|
40
|
+
assert { "text-2" == f.read }
|
41
|
+
assert { "test/tmp/tori/store2/testfile-2" == f.path }
|
42
|
+
end
|
43
|
+
assert_raise(Chain::ExistError) { @backend.read("testfile-3") }
|
44
|
+
end
|
45
|
+
end
|
@@ -18,6 +18,7 @@ class TestToriBackendFileSystem < Test::Unit::TestCase
|
|
18
18
|
|
19
19
|
test "#exist?" do
|
20
20
|
assert { true == @filesystem.exist?(".") }
|
21
|
+
assert { true == @filesystem.exist?("testfile") }
|
21
22
|
assert { false == @filesystem.exist?("nothing_file") }
|
22
23
|
end
|
23
24
|
|
@@ -55,4 +56,13 @@ class TestToriBackendFileSystem < Test::Unit::TestCase
|
|
55
56
|
@filesystem.write(Pathname.new("copyfile"), "string")
|
56
57
|
assert { "string" == @filesystem.read("copyfile") }
|
57
58
|
end
|
59
|
+
|
60
|
+
test "#open" do
|
61
|
+
@filesystem.open("testfile") do |f|
|
62
|
+
assert_instance_of File, f
|
63
|
+
end
|
64
|
+
f = @filesystem.open("testfile")
|
65
|
+
assert_instance_of File, f
|
66
|
+
f.close
|
67
|
+
end
|
58
68
|
end
|
@@ -111,6 +111,18 @@ class TestToriBackendS3 < Test::Unit::TestCase
|
|
111
111
|
assert_match @backend.bucket, @backend.public_url("testfile")
|
112
112
|
assert_match "testfile", @backend.public_url("testfile")
|
113
113
|
end
|
114
|
+
|
115
|
+
test "#open" do
|
116
|
+
path = nil
|
117
|
+
@backend.open("testfile") do |f|
|
118
|
+
assert_instance_of File, f
|
119
|
+
path = f.path
|
120
|
+
end
|
121
|
+
assert { false == File.exist?(path) }
|
122
|
+
f = @backend.open("testfile")
|
123
|
+
assert_instance_of Tempfile, f
|
124
|
+
f.close!
|
125
|
+
end
|
114
126
|
end
|
115
127
|
|
116
128
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tori
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ksss
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|
@@ -94,6 +94,7 @@ files:
|
|
94
94
|
- README.md
|
95
95
|
- Rakefile
|
96
96
|
- lib/tori.rb
|
97
|
+
- lib/tori/backend/chain.rb
|
97
98
|
- lib/tori/backend/filesystem.rb
|
98
99
|
- lib/tori/backend/s3.rb
|
99
100
|
- lib/tori/config.rb
|
@@ -104,6 +105,7 @@ files:
|
|
104
105
|
- lib/tori/version.rb
|
105
106
|
- test/test_helper.rb
|
106
107
|
- test/test_tori.rb
|
108
|
+
- test/test_tori_backend_chain.rb
|
107
109
|
- test/test_tori_backend_filesystem.rb
|
108
110
|
- test/test_tori_backend_s3.rb
|
109
111
|
- test/test_tori_config.rb
|
@@ -137,6 +139,7 @@ summary: Simple file uploader
|
|
137
139
|
test_files:
|
138
140
|
- test/test_helper.rb
|
139
141
|
- test/test_tori.rb
|
142
|
+
- test/test_tori_backend_chain.rb
|
140
143
|
- test/test_tori_backend_filesystem.rb
|
141
144
|
- test/test_tori_backend_s3.rb
|
142
145
|
- test/test_tori_config.rb
|