tori 0.0.3 → 0.0.4
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 +22 -1
- data/lib/tori/backend/filesystem.rb +10 -5
- data/lib/tori/backend/s3.rb +47 -0
- data/lib/tori/config.rb +9 -1
- data/lib/tori/define.rb +5 -5
- data/lib/tori/file.rb +22 -11
- data/lib/tori/rails.rb +2 -2
- data/lib/tori/version.rb +1 -1
- data/lib/tori.rb +7 -2
- data/test/test_tori_config.rb +0 -4
- data/test/{test_tori_method_definition.rb → test_tori_define.rb} +8 -0
- data/test/test_tori_file.rb +24 -12
- metadata +5 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7b89b585791768dfdcae240e4f4901c8f047983e
         | 
| 4 | 
            +
              data.tar.gz: d7dd7fae6890630c058c31a80d8318bd7fe66b3f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: af4ec806666e726efcd93367ad5a566621d7018eebce285f74d37c0807371df9b9301e78f8c30bd477307c0ce0c11998eaa345cba13e7f290d06692b4a596d90
         | 
| 7 | 
            +
              data.tar.gz: c7864d0df3928c94ff43df756c822df1c424d4b76effbc68ef73d688c4ccd946c9ce4f1b4d2041c054f2291f2addab37e2a024c03c2df95dc0b0485cdad21027
         | 
    
        data/README.md
    CHANGED
    
    | @@ -56,7 +56,28 @@ app/views/photos/new.html.slim | |
| 56 56 | 
             
              = f.button 'Upload'
         | 
| 57 57 | 
             
            ```
         | 
| 58 58 |  | 
| 59 | 
            -
             | 
| 59 | 
            +
            You can read file.
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            ```ruby
         | 
| 62 | 
            +
            photo.image.read #=> image bin
         | 
| 63 | 
            +
            photo.image.exist? #=> exist check
         | 
| 64 | 
            +
            photo.image.to_s #=> filename
         | 
| 65 | 
            +
            ```
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            # Custom configure example
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            ```ruby
         | 
| 70 | 
            +
            # Save to S3 bucket.
         | 
| 71 | 
            +
            require 'tori/backend/s3'
         | 
| 72 | 
            +
            Tori.config.backend = Tori::Backend::S3.new('tori_bucket')
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            # Filename decided by model.class.name,id and hidden words.
         | 
| 75 | 
            +
            Tori.config.filename_callback do |model|
         | 
| 76 | 
            +
              "#{model.class.name}/#{Digest::SHA1.hexdigest "#{ENV["TORI_MAGICKWORD"]}/#{model.id}"}"
         | 
| 77 | 
            +
            end
         | 
| 78 | 
            +
            ```
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            # Default configure
         | 
| 60 81 |  | 
| 61 82 | 
             
            [https://github.com/ksss/tori/blob/master/lib/tori.rb](https://github.com/ksss/tori/blob/master/lib/tori.rb)
         | 
| 62 83 |  | 
| @@ -4,23 +4,28 @@ module Tori | |
| 4 4 | 
             
                  attr_accessor :root
         | 
| 5 5 | 
             
                  def initialize(root)
         | 
| 6 6 | 
             
                    @root = root
         | 
| 7 | 
            -
                    FileUtils.mkdir_p | 
| 7 | 
            +
                    FileUtils.mkdir_p @root.to_s
         | 
| 8 8 | 
             
                  end
         | 
| 9 9 |  | 
| 10 10 | 
             
                  def copy(form_path, to_filename)
         | 
| 11 | 
            -
                    IO.copy_stream | 
| 11 | 
            +
                    IO.copy_stream form_path.to_s, path(to_filename)
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 14 | 
             
                  def delete(filename)
         | 
| 15 | 
            -
                    ::File.unlink  | 
| 15 | 
            +
                    ::File.unlink path(filename)
         | 
| 16 16 | 
             
                  end
         | 
| 17 17 |  | 
| 18 18 | 
             
                  def exist?(filename)
         | 
| 19 | 
            -
                    ::File.exist?  | 
| 19 | 
            +
                    ::File.exist? path(filename)
         | 
| 20 20 | 
             
                  end
         | 
| 21 | 
            +
                  alias exists? exist?
         | 
| 21 22 |  | 
| 22 23 | 
             
                  def read(filename)
         | 
| 23 | 
            -
                    ::File.read  | 
| 24 | 
            +
                    ::File.read path(filename)
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def path(filename)
         | 
| 28 | 
            +
                    @root.join filename.to_s
         | 
| 24 29 | 
             
                  end
         | 
| 25 30 | 
             
                end
         | 
| 26 31 | 
             
              end
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            require 'aws-sdk'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Tori
         | 
| 4 | 
            +
              module Backend
         | 
| 5 | 
            +
                class S3
         | 
| 6 | 
            +
                  # You must be set bucket name.
         | 
| 7 | 
            +
                  #   And you can configurate to S3
         | 
| 8 | 
            +
                  #   But, you can also configurate by AWS.config()
         | 
| 9 | 
            +
                  #
         | 
| 10 | 
            +
                  # example:
         | 
| 11 | 
            +
                  #   Tori.config.backend = Tori::Backend::S3.new(
         | 
| 12 | 
            +
                  #     bucket: 'photos',
         | 
| 13 | 
            +
                  #     region: '...',
         | 
| 14 | 
            +
                  #     s3_encryption_key: '...'
         | 
| 15 | 
            +
                  #   )
         | 
| 16 | 
            +
                  def initialize(bucket:, **s3_config)
         | 
| 17 | 
            +
                    s3 = AWS::S3.new(s3_config)
         | 
| 18 | 
            +
                    @bucket = s3.buckets[bucket]
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def copy(form_path, filename)
         | 
| 22 | 
            +
                    object(filename).write(file: form_path)
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def delete(filename)
         | 
| 26 | 
            +
                    object(filename).delete
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def exist?(filename)
         | 
| 30 | 
            +
                    object(filename).exists?
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                  alias exists? exist?
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def read(filename)
         | 
| 35 | 
            +
                    object(filename).read
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def url(filename)
         | 
| 39 | 
            +
                    object(filename).url_for(:read)
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def object(filename)
         | 
| 43 | 
            +
                    @bucket.objects[filename]
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
    
        data/lib/tori/config.rb
    CHANGED
    
    | @@ -1,9 +1,17 @@ | |
| 1 1 | 
             
            module Tori
         | 
| 2 2 | 
             
              class Config
         | 
| 3 | 
            -
                attr_accessor :backend | 
| 3 | 
            +
                attr_accessor :backend
         | 
| 4 4 | 
             
                def initialize
         | 
| 5 5 | 
             
                  @backend = nil
         | 
| 6 6 | 
             
                  @filename_callback = nil
         | 
| 7 7 | 
             
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def filename_callback(&block)
         | 
| 10 | 
            +
                  if block_given?
         | 
| 11 | 
            +
                    @filename_callback = block
         | 
| 12 | 
            +
                  else
         | 
| 13 | 
            +
                    @filename_callback
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 8 16 | 
             
              end
         | 
| 9 17 | 
             
            end
         | 
    
        data/lib/tori/define.rb
    CHANGED
    
    | @@ -1,16 +1,16 @@ | |
| 1 1 | 
             
            module Tori
         | 
| 2 2 | 
             
              module Define
         | 
| 3 3 | 
             
                def tori(name)
         | 
| 4 | 
            -
                   | 
| 4 | 
            +
                  name_ivar = "@#{name}".to_sym
         | 
| 5 5 |  | 
| 6 6 | 
             
                  define_method(name) do
         | 
| 7 | 
            -
                    ivar = instance_variable_get  | 
| 8 | 
            -
                    instance_variable_set  | 
| 7 | 
            +
                    ivar = instance_variable_get name_ivar
         | 
| 8 | 
            +
                    instance_variable_set name_ivar, ivar || File.new(self)
         | 
| 9 9 | 
             
                  end
         | 
| 10 10 |  | 
| 11 11 | 
             
                  define_method("#{name}=") do |uploader|
         | 
| 12 | 
            -
                    file = File.new(self, uploader)
         | 
| 13 | 
            -
                    instance_variable_set  | 
| 12 | 
            +
                    file = File.new(self, from: uploader)
         | 
| 13 | 
            +
                    instance_variable_set name_ivar, file
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 | 
             
                end
         | 
| 16 16 | 
             
              end
         | 
    
        data/lib/tori/file.rb
    CHANGED
    
    | @@ -1,28 +1,39 @@ | |
| 1 1 | 
             
            module Tori
         | 
| 2 2 | 
             
              class File
         | 
| 3 | 
            -
                 | 
| 4 | 
            -
             | 
| 5 | 
            -
                def initialize(model, from = nil)
         | 
| 3 | 
            +
                def initialize(model, from: nil)
         | 
| 6 4 | 
             
                  @model = model
         | 
| 7 5 | 
             
                  @from = from
         | 
| 8 6 | 
             
                end
         | 
| 9 7 |  | 
| 10 | 
            -
                def  | 
| 8 | 
            +
                def name
         | 
| 11 9 | 
             
                  Tori.config.filename_callback.call(@model)
         | 
| 12 10 | 
             
                end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                def exist?
         | 
| 15 | 
            -
                  Tori.config.backend.exist?(to_s)
         | 
| 16 | 
            -
                end
         | 
| 11 | 
            +
                alias to_s name
         | 
| 17 12 |  | 
| 18 13 | 
             
                def copy?
         | 
| 19 | 
            -
                  !@model.nil? && !@from.nil? && @from.respond_to?(:path) && 0 <  | 
| 14 | 
            +
                  !@model.nil? && !@from.nil? && @from.respond_to?(:path) && 0 < name.length
         | 
| 20 15 | 
             
                rescue NameError => e
         | 
| 21 16 | 
             
                  false
         | 
| 22 17 | 
             
                end
         | 
| 23 18 |  | 
| 24 | 
            -
                def  | 
| 25 | 
            -
                  Tori.config.backend. | 
| 19 | 
            +
                def copy
         | 
| 20 | 
            +
                  Tori.config.backend.copy @from.path, name if copy?
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def delete
         | 
| 24 | 
            +
                  Tori.config.backend.delete name if exist?
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def respond_to_missing?(sym, include_private)
         | 
| 28 | 
            +
                  Tori.config.backend.respond_to?(sym, include_private)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def method_missing(sym)
         | 
| 32 | 
            +
                  if respond_to_missing?(sym, false)
         | 
| 33 | 
            +
                    Tori.config.backend.__send__ sym, name
         | 
| 34 | 
            +
                  else
         | 
| 35 | 
            +
                    fail NameError, "undefined local variable or method `#{sym}' for #{Tori.config.backend.inspect}"
         | 
| 36 | 
            +
                  end
         | 
| 26 37 | 
             
                end
         | 
| 27 38 | 
             
              end
         | 
| 28 39 | 
             
            end
         | 
    
        data/lib/tori/rails.rb
    CHANGED
    
    | @@ -16,12 +16,12 @@ module Tori | |
| 16 16 |  | 
| 17 17 | 
             
                  after_save do
         | 
| 18 18 | 
             
                    file = __send__ name
         | 
| 19 | 
            -
                     | 
| 19 | 
            +
                    file.copy
         | 
| 20 20 | 
             
                  end
         | 
| 21 21 |  | 
| 22 22 | 
             
                  after_destroy do
         | 
| 23 23 | 
             
                    file = __send__ name
         | 
| 24 | 
            -
                     | 
| 24 | 
            +
                    file.delete
         | 
| 25 25 | 
             
                  end
         | 
| 26 26 | 
             
                end
         | 
| 27 27 | 
             
              end
         | 
    
        data/lib/tori/version.rb
    CHANGED
    
    
    
        data/lib/tori.rb
    CHANGED
    
    | @@ -18,10 +18,15 @@ module Tori | |
| 18 18 | 
             
                    # Configure for file store backend instance.
         | 
| 19 19 | 
             
                    config.backend = Tori::Backend::FileSystem.new(Pathname("tmp/tori"))
         | 
| 20 20 |  | 
| 21 | 
            +
                    # You can also use S3 backend.
         | 
| 22 | 
            +
                    # It take 'aws-sdk' gem.
         | 
| 23 | 
            +
                    # S3 example
         | 
| 24 | 
            +
                    #   require 'tori/backend/s3'
         | 
| 25 | 
            +
                    #   config.backend = Tori::Backend::S3.new('tori_bucket')
         | 
| 26 | 
            +
             | 
| 21 27 | 
             
                    # Filename hashing method
         | 
| 22 28 | 
             
                    #   It's call when decide filename hash.
         | 
| 23 | 
            -
                     | 
| 24 | 
            -
                    config.filename_callback = ->(model) do
         | 
| 29 | 
            +
                    config.filename_callback do |model|
         | 
| 25 30 | 
             
                      Digest::SHA1.hexdigest "#{model.class.name}/#{model.id}"
         | 
| 26 31 | 
             
                    end
         | 
| 27 32 | 
             
                  end
         | 
    
        data/test/test_tori_config.rb
    CHANGED
    
    | @@ -4,9 +4,5 @@ class TestToriConfig < Test::Unit::TestCase | |
| 4 4 | 
             
              test "#initialize" do
         | 
| 5 5 | 
             
                i = Tori::Config.new
         | 
| 6 6 | 
             
                assert_instance_of Tori::Config, i
         | 
| 7 | 
            -
                assert_respond_to i, :backend
         | 
| 8 | 
            -
                assert_respond_to i, :backend=
         | 
| 9 | 
            -
                assert_respond_to i, :filename_callback
         | 
| 10 | 
            -
                assert_respond_to i, :filename_callback=
         | 
| 11 7 | 
             
              end
         | 
| 12 8 | 
             
            end
         | 
| @@ -6,8 +6,16 @@ class TestToriDefine < Test::Unit::TestCase | |
| 6 6 | 
             
                tori :test_image
         | 
| 7 7 | 
             
              end
         | 
| 8 8 |  | 
| 9 | 
            +
              class Uploader
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 9 12 | 
             
              test "#tori" do
         | 
| 10 13 | 
             
                assert_respond_to Dammy.new, :test_image
         | 
| 11 14 | 
             
                assert_respond_to Dammy.new, :test_image=
         | 
| 12 15 | 
             
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              test "defined methods" do
         | 
| 18 | 
            +
                assert_instance_of Uploader, Dammy.new.test_image = Uploader.new
         | 
| 19 | 
            +
                assert_instance_of Tori::File, Dammy.new.test_image
         | 
| 20 | 
            +
              end
         | 
| 13 21 | 
             
            end
         | 
    
        data/test/test_tori_file.rb
    CHANGED
    
    | @@ -3,38 +3,50 @@ require 'test_helper' | |
| 3 3 | 
             
            class TestToriDefine < Test::Unit::TestCase
         | 
| 4 4 | 
             
              setup do
         | 
| 5 5 | 
             
                @orig = Tori.config.filename_callback
         | 
| 6 | 
            -
                Tori.config.filename_callback  | 
| 6 | 
            +
                Tori.config.filename_callback do |model|
         | 
| 7 7 | 
             
                  model
         | 
| 8 | 
            -
                 | 
| 8 | 
            +
                end
         | 
| 9 9 | 
             
                Tori.config.backend = Tori::Backend::FileSystem.new Pathname("test").join("tmp")
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              teardown do
         | 
| 13 | 
            -
                Tori.config.filename_callback  | 
| 13 | 
            +
                Tori.config.filename_callback &@orig
         | 
| 14 14 | 
             
                FileUtils.rm_rf("test/tmp")
         | 
| 15 15 | 
             
              end
         | 
| 16 16 |  | 
| 17 | 
            -
              class  | 
| 17 | 
            +
              class From
         | 
| 18 18 | 
             
                def path
         | 
| 19 | 
            -
                   | 
| 19 | 
            +
                  __FILE__
         | 
| 20 20 | 
             
                end
         | 
| 21 21 | 
             
              end
         | 
| 22 22 |  | 
| 23 23 | 
             
              test "#initialize" do
         | 
| 24 | 
            -
                assert_instance_of Tori::File, Tori::File.new(nil | 
| 24 | 
            +
                assert_instance_of Tori::File, Tori::File.new(nil)
         | 
| 25 | 
            +
                assert_instance_of Tori::File, Tori::File.new(nil, from: nil)
         | 
| 25 26 | 
             
              end
         | 
| 26 27 |  | 
| 27 | 
            -
              test "# | 
| 28 | 
            -
                assert { "test" == Tori::File.new("test" | 
| 28 | 
            +
              test "#name" do
         | 
| 29 | 
            +
                assert { "test" == Tori::File.new("test").name }
         | 
| 29 30 | 
             
              end
         | 
| 30 31 |  | 
| 31 32 | 
             
              test "#exist?" do
         | 
| 32 | 
            -
                assert { true == Tori::File.new(__FILE__ | 
| 33 | 
            -
                assert { false == Tori::File.new("nothing_file" | 
| 33 | 
            +
                assert { true == Tori::File.new(__FILE__).exist? }
         | 
| 34 | 
            +
                assert { false == Tori::File.new("nothing_file").exist? }
         | 
| 34 35 | 
             
              end
         | 
| 35 36 |  | 
| 36 37 | 
             
              test "#copy?" do
         | 
| 37 | 
            -
                assert { false == Tori::File.new(__FILE__ | 
| 38 | 
            -
                assert { true == Tori::File.new(__FILE__,  | 
| 38 | 
            +
                assert { false == Tori::File.new(__FILE__).copy? }
         | 
| 39 | 
            +
                assert { true == Tori::File.new(__FILE__, from: From.new).copy? }
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              test "copy" do
         | 
| 43 | 
            +
                assert { false == File.exist?("test/tmp/copy") }
         | 
| 44 | 
            +
                Tori::File.new("copy", from: From.new).copy
         | 
| 45 | 
            +
                assert { true == File.exist?("test/tmp/copy") }
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              test "#method_missing" do
         | 
| 49 | 
            +
                assert { true == Tori::File.new(nil).respond_to?(:read) }
         | 
| 50 | 
            +
                assert_raise(NameError) { Tori::File.new(nil).undefined }
         | 
| 39 51 | 
             
              end
         | 
| 40 52 | 
             
            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.0. | 
| 4 | 
            +
              version: 0.0.4
         | 
| 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 | 
            +
            date: 2015-02-03 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -66,6 +66,7 @@ files: | |
| 66 66 | 
             
            - Rakefile
         | 
| 67 67 | 
             
            - lib/tori.rb
         | 
| 68 68 | 
             
            - lib/tori/backend/filesystem.rb
         | 
| 69 | 
            +
            - lib/tori/backend/s3.rb
         | 
| 69 70 | 
             
            - lib/tori/config.rb
         | 
| 70 71 | 
             
            - lib/tori/define.rb
         | 
| 71 72 | 
             
            - lib/tori/file.rb
         | 
| @@ -75,8 +76,8 @@ files: | |
| 75 76 | 
             
            - test/test_tori.rb
         | 
| 76 77 | 
             
            - test/test_tori_backend_filesystem.rb
         | 
| 77 78 | 
             
            - test/test_tori_config.rb
         | 
| 79 | 
            +
            - test/test_tori_define.rb
         | 
| 78 80 | 
             
            - test/test_tori_file.rb
         | 
| 79 | 
            -
            - test/test_tori_method_definition.rb
         | 
| 80 81 | 
             
            - tori.gemspec
         | 
| 81 82 | 
             
            homepage: https://github.com/ksss/tori
         | 
| 82 83 | 
             
            licenses:
         | 
| @@ -107,5 +108,5 @@ test_files: | |
| 107 108 | 
             
            - test/test_tori.rb
         | 
| 108 109 | 
             
            - test/test_tori_backend_filesystem.rb
         | 
| 109 110 | 
             
            - test/test_tori_config.rb
         | 
| 111 | 
            +
            - test/test_tori_define.rb
         | 
| 110 112 | 
             
            - test/test_tori_file.rb
         | 
| 111 | 
            -
            - test/test_tori_method_definition.rb
         |