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 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