tori 0.0.2 → 0.0.3

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: f5563a0b24b7c620e8e0e020e2b4b8c3820dcf11
4
- data.tar.gz: 16681e5518f0836d94459819c097ba7e774e8e38
3
+ metadata.gz: 0767923af262a5dce13b472e5634d2a9d0bfffde
4
+ data.tar.gz: dc11c7a9aa7c1c6404f87423971b273aaf22df8b
5
5
  SHA512:
6
- metadata.gz: 9f145b9389b2623ccf0b7f60999b819f123e69fd1b1d784c830449ab1df6a148ad36c5eb01fad6020abbe34df0303186a9a9289ab562bc46dbd0c68466350f67
7
- data.tar.gz: 89a1c87b3b89c221d07695389c531083f0ebb61e2715b6444355a9f7c9e6af1885ecf7f528f7495554bda1bd2df23847d6b6f08f971a5a85e04fcc7f1218ee06
6
+ metadata.gz: bc9a89e774b0e2749a2f285895f40800dbbd89f7a193a6ff96838e2ec791d639ba3a8cee45b0cf1ee8fa3903cb28bcef8d16acbf344da1559a4fea4001e55c5e
7
+ data.tar.gz: 1b206a55b212aa7a415f9feb696eb1c5d79cf8cbd72777e25cbb309f81cdb6eef240512e92864593b8b307e040a638efebc95f89ebd7c377038ad2b1aeb062bd
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  Gemfile.lock
2
2
  pkg
3
+ tmp
@@ -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(uploader, filename)
10
- IO.copy_stream(uploader, @root.join(filename))
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
- name_hash_get = "#{name}_hash".to_sym
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 name_ivar
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
- instance_variable_set name_ivar, uploader
14
- end
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, id: :id
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
- uploader = __send__ name
21
- filename = __send__ name_hash_get
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
- filename = __send__ name_hash_get
27
- Tori.config.backend.delete(filename) if filename
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
@@ -1,3 +1,3 @@
1
1
  module Tori
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
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/md5'
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::MD5.hexdigest "#{model.class.name}/#{model.id}"
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/tori/test"
6
+ "test/tmp/uploader"
7
7
  end
8
8
  end
9
9
 
10
- test "#initialize" do
11
- path = Pathname("tmp/tori/test")
12
- i = Tori::Backend::FileSystem.new(path)
10
+ setup do
11
+ path = Pathname("test/tmp/tori/store")
12
+ @filesystem = Tori::Backend::FileSystem.new(path)
13
+ end
13
14
 
14
- assert_instance_of Tori::Backend::FileSystem, i
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.2
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