tori 0.0.2 → 0.0.3
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/.gitignore +1 -0
- data/lib/tori/backend/filesystem.rb +12 -3
- data/lib/tori/define.rb +5 -9
- data/lib/tori/file.rb +28 -0
- data/lib/tori/rails.rb +5 -8
- data/lib/tori/version.rb +1 -1
- data/lib/tori.rb +3 -2
- data/test/test_tori_backend_filesystem.rb +23 -5
- data/test/test_tori_file.rb +40 -0
- data/test/test_tori_method_definition.rb +0 -4
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0767923af262a5dce13b472e5634d2a9d0bfffde
|
4
|
+
data.tar.gz: dc11c7a9aa7c1c6404f87423971b273aaf22df8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc9a89e774b0e2749a2f285895f40800dbbd89f7a193a6ff96838e2ec791d639ba3a8cee45b0cf1ee8fa3903cb28bcef8d16acbf344da1559a4fea4001e55c5e
|
7
|
+
data.tar.gz: 1b206a55b212aa7a415f9feb696eb1c5d79cf8cbd72777e25cbb309f81cdb6eef240512e92864593b8b307e040a638efebc95f89ebd7c377038ad2b1aeb062bd
|
data/.gitignore
CHANGED
@@ -1,17 +1,26 @@
|
|
1
1
|
module Tori
|
2
2
|
module Backend
|
3
3
|
class FileSystem
|
4
|
+
attr_accessor :root
|
4
5
|
def initialize(root)
|
5
6
|
@root = root
|
6
7
|
FileUtils.mkdir_p(@root.to_s)
|
7
8
|
end
|
8
9
|
|
9
|
-
def copy(
|
10
|
-
IO.copy_stream(
|
10
|
+
def copy(form_path, to_filename)
|
11
|
+
IO.copy_stream(form_path.to_s, @root.join(to_filename.to_s))
|
11
12
|
end
|
12
13
|
|
13
14
|
def delete(filename)
|
14
|
-
File.unlink @root.join(filename)
|
15
|
+
::File.unlink @root.join(filename.to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def exist?(filename)
|
19
|
+
::File.exist? @root.join(filename.to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
def read(filename)
|
23
|
+
::File.read @root.join(filename.to_s)
|
15
24
|
end
|
16
25
|
end
|
17
26
|
end
|
data/lib/tori/define.rb
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
module Tori
|
2
2
|
module Define
|
3
3
|
def tori(name)
|
4
|
-
|
5
|
-
name_ivar = "@#{name}".to_sym
|
6
|
-
name_hash_ivar = "@#{name}_hash".to_sym
|
4
|
+
name_file_ivar = "@#{name}_file".to_sym
|
7
5
|
|
8
6
|
define_method(name) do
|
9
|
-
instance_variable_get
|
7
|
+
ivar = instance_variable_get name_file_ivar
|
8
|
+
instance_variable_set name_file_ivar, ivar || File.new(self)
|
10
9
|
end
|
11
10
|
|
12
11
|
define_method("#{name}=") do |uploader|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
define_method(name_hash_get) do
|
17
|
-
Tori.config.filename_callback.call(self)
|
12
|
+
file = File.new(self, uploader)
|
13
|
+
instance_variable_set name_file_ivar, file
|
18
14
|
end
|
19
15
|
end
|
20
16
|
end
|
data/lib/tori/file.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module Tori
|
2
|
+
class File
|
3
|
+
attr_accessor :from
|
4
|
+
|
5
|
+
def initialize(model, from = nil)
|
6
|
+
@model = model
|
7
|
+
@from = from
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
Tori.config.filename_callback.call(@model)
|
12
|
+
end
|
13
|
+
|
14
|
+
def exist?
|
15
|
+
Tori.config.backend.exist?(to_s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def copy?
|
19
|
+
!@model.nil? && !@from.nil? && @from.respond_to?(:path) && 0 < to_s.length
|
20
|
+
rescue NameError => e
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
def read
|
25
|
+
Tori.config.backend.read(to_s)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/tori/rails.rb
CHANGED
@@ -9,22 +9,19 @@ module Tori
|
|
9
9
|
#
|
10
10
|
# @example:
|
11
11
|
# class Photo < ActiveRecord::Base
|
12
|
-
# tori :image
|
12
|
+
# tori :image
|
13
13
|
# end
|
14
14
|
def tori(name)
|
15
15
|
super
|
16
16
|
|
17
|
-
name_hash_get = "#{name}_hash".to_sym
|
18
|
-
|
19
17
|
after_save do
|
20
|
-
|
21
|
-
|
22
|
-
Tori.config.backend.copy(uploader.path, filename) if uploader && filename
|
18
|
+
file = __send__ name
|
19
|
+
Tori.config.backend.copy(file.from.path, file.to_s) if file.from && file.copy?
|
23
20
|
end
|
24
21
|
|
25
22
|
after_destroy do
|
26
|
-
|
27
|
-
Tori.config.backend.delete(
|
23
|
+
file = __send__ name
|
24
|
+
Tori.config.backend.delete(file.to_s) if file.exist?
|
28
25
|
end
|
29
26
|
end
|
30
27
|
end
|
data/lib/tori/version.rb
CHANGED
data/lib/tori.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'tori/backend/filesystem'
|
2
2
|
require 'tori/config'
|
3
3
|
require 'tori/define'
|
4
|
+
require 'tori/file'
|
4
5
|
require 'tori/version'
|
5
6
|
require 'pathname'
|
6
|
-
require 'digest/
|
7
|
+
require 'digest/sha1'
|
7
8
|
require "fileutils"
|
8
9
|
|
9
10
|
module Tori
|
@@ -21,7 +22,7 @@ module Tori
|
|
21
22
|
# It's call when decide filename hash.
|
22
23
|
# `filename_callback` must be have `call` method.
|
23
24
|
config.filename_callback = ->(model) do
|
24
|
-
Digest::
|
25
|
+
Digest::SHA1.hexdigest "#{model.class.name}/#{model.id}"
|
25
26
|
end
|
26
27
|
end
|
27
28
|
end
|
@@ -3,15 +3,33 @@ require 'test_helper'
|
|
3
3
|
class TestToriBackendFileSystem < Test::Unit::TestCase
|
4
4
|
class Uploader
|
5
5
|
def path
|
6
|
-
"/tmp/
|
6
|
+
"test/tmp/uploader"
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
path = Pathname("tmp/tori/
|
12
|
-
|
10
|
+
setup do
|
11
|
+
path = Pathname("test/tmp/tori/store")
|
12
|
+
@filesystem = Tori::Backend::FileSystem.new(path)
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
+
teardown do
|
16
|
+
FileUtils.rm_rf("test/tmp")
|
17
|
+
end
|
18
|
+
|
19
|
+
test "#initialize" do
|
20
|
+
assert_instance_of Tori::Backend::FileSystem, @filesystem
|
15
21
|
assert_raise(ArgumentError){ Tori::Backend::FileSystem.new }
|
16
22
|
end
|
23
|
+
|
24
|
+
test "#exist?" do
|
25
|
+
assert { true == @filesystem.exist?(".") }
|
26
|
+
assert { false == @filesystem.exist?("nothing_file") }
|
27
|
+
end
|
28
|
+
|
29
|
+
test "#read" do
|
30
|
+
FileUtils.touch @filesystem.root.join("readfile")
|
31
|
+
assert { "" == @filesystem.read("readfile") }
|
32
|
+
File.unlink @filesystem.root.join("readfile")
|
33
|
+
assert_raise(Errno::ENOENT){ @filesystem.read("nothing_file") }
|
34
|
+
end
|
17
35
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestToriDefine < Test::Unit::TestCase
|
4
|
+
setup do
|
5
|
+
@orig = Tori.config.filename_callback
|
6
|
+
Tori.config.filename_callback = ->(model){
|
7
|
+
model
|
8
|
+
}
|
9
|
+
Tori.config.backend = Tori::Backend::FileSystem.new Pathname("test").join("tmp")
|
10
|
+
end
|
11
|
+
|
12
|
+
teardown do
|
13
|
+
Tori.config.filename_callback = @orig
|
14
|
+
FileUtils.rm_rf("test/tmp")
|
15
|
+
end
|
16
|
+
|
17
|
+
class Dammy
|
18
|
+
def path
|
19
|
+
"path"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
test "#initialize" do
|
24
|
+
assert_instance_of Tori::File, Tori::File.new(nil, nil)
|
25
|
+
end
|
26
|
+
|
27
|
+
test "#to_s" do
|
28
|
+
assert { "test" == Tori::File.new("test", nil).to_s }
|
29
|
+
end
|
30
|
+
|
31
|
+
test "#exist?" do
|
32
|
+
assert { true == Tori::File.new(__FILE__, nil).exist? }
|
33
|
+
assert { false == Tori::File.new("nothing_file", nil).exist? }
|
34
|
+
end
|
35
|
+
|
36
|
+
test "#copy?" do
|
37
|
+
assert { false == Tori::File.new(__FILE__, nil).copy? }
|
38
|
+
assert { true == Tori::File.new(__FILE__, Dammy.new).copy? }
|
39
|
+
end
|
40
|
+
end
|
@@ -4,14 +4,10 @@ class TestToriDefine < Test::Unit::TestCase
|
|
4
4
|
class Dammy
|
5
5
|
extend Tori::Define
|
6
6
|
tori :test_image
|
7
|
-
def id
|
8
|
-
"dammy"
|
9
|
-
end
|
10
7
|
end
|
11
8
|
|
12
9
|
test "#tori" do
|
13
10
|
assert_respond_to Dammy.new, :test_image
|
14
11
|
assert_respond_to Dammy.new, :test_image=
|
15
|
-
assert_respond_to Dammy.new, :test_image_hash
|
16
12
|
end
|
17
13
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tori
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ksss
|
@@ -68,12 +68,14 @@ files:
|
|
68
68
|
- lib/tori/backend/filesystem.rb
|
69
69
|
- lib/tori/config.rb
|
70
70
|
- lib/tori/define.rb
|
71
|
+
- lib/tori/file.rb
|
71
72
|
- lib/tori/rails.rb
|
72
73
|
- lib/tori/version.rb
|
73
74
|
- test/test_helper.rb
|
74
75
|
- test/test_tori.rb
|
75
76
|
- test/test_tori_backend_filesystem.rb
|
76
77
|
- test/test_tori_config.rb
|
78
|
+
- test/test_tori_file.rb
|
77
79
|
- test/test_tori_method_definition.rb
|
78
80
|
- tori.gemspec
|
79
81
|
homepage: https://github.com/ksss/tori
|
@@ -105,4 +107,5 @@ test_files:
|
|
105
107
|
- test/test_tori.rb
|
106
108
|
- test/test_tori_backend_filesystem.rb
|
107
109
|
- test/test_tori_config.rb
|
110
|
+
- test/test_tori_file.rb
|
108
111
|
- test/test_tori_method_definition.rb
|