paperclip-deflater 0.0.1 → 0.0.2
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/VERSION +1 -1
- data/lib/paperclip-deflater.rb +1 -5
- data/lib/paperclip/deflater.rb +8 -0
- data/lib/paperclip/deflater/version.rb +5 -0
- data/lib/paperclip/processors/deflater.rb +8 -20
- data/lib/paperclip/processors/deflater_base.rb +33 -0
- data/lib/paperclip/processors/gzip.rb +27 -0
- data/paperclip-deflater.gemspec +2 -2
- data/spec/fixtures/files/test.txt +1 -0
- data/spec/paperclip/processors/deflater_base_spec.rb +34 -0
- data/spec/paperclip/processors/deflater_spec.rb +9 -14
- data/spec/paperclip/processors/gzip_spec.rb +27 -0
- data/spec/support/files.rb +4 -0
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49bed0decc83cf5c31363c8157336688cad43572
|
4
|
+
data.tar.gz: b7422ea22f63a8bf21734bfbfa97093e325d40c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3beb013f2adebd189bf8b5e0e9dc162b83c2a29b0caf228bded75a9c04a6b6d52db4847400fc0ba6cd5b374a319cc056d06084ed76b4b5ddbb18ce543272d90c
|
7
|
+
data.tar.gz: 5be6bef8b0bf9b82181195598cc953e3171fd7d950f487270ff4d407a2af4b247f144787f3a8725a35ae3d9c1cae8904efb99f9bc71f64de7d00786c6253538d
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/paperclip-deflater.rb
CHANGED
@@ -1,39 +1,27 @@
|
|
1
|
-
|
2
|
-
require 'paperclip/processor'
|
3
|
-
require 'zlib'
|
4
|
-
require 'tempfile'
|
1
|
+
require_relative 'deflater_base'
|
5
2
|
|
6
3
|
module Paperclip
|
7
4
|
module Processors
|
8
|
-
class Deflater <
|
9
|
-
VERSION = ::File.read(::File.expand_path('../../../../VERSION', __FILE__)).to_s.strip
|
10
|
-
|
5
|
+
class Deflater < DeflaterBase
|
11
6
|
def initialize(file, options = {}, attachment = nil)
|
12
7
|
super
|
13
|
-
@
|
14
|
-
@deflate_options = @options[:deflate_options] || {}
|
15
|
-
@current_format = File.extname(@file.path)
|
16
|
-
@basename = File.basename(@file.path, @current_format)
|
8
|
+
@deflate_options = @options[:deflate_options] || {}
|
17
9
|
end
|
18
10
|
|
19
|
-
|
20
|
-
src = @file
|
21
|
-
|
22
|
-
should_deflate = @attachment.instance_read(:deflate)
|
23
|
-
return src if should_deflate == false
|
11
|
+
private
|
24
12
|
|
13
|
+
def make_impl
|
25
14
|
level = @deflate_options[:level]
|
26
15
|
window_bits = @deflate_options[:window_bits]
|
27
16
|
memlevel = @deflate_options[:memlevel]
|
28
17
|
strategy = @deflate_options[:strategy]
|
29
18
|
|
30
|
-
dst =
|
31
|
-
dst.binmode
|
19
|
+
dst = create_tempfile
|
32
20
|
zd = Zlib::Deflate.new(level, window_bits, memlevel, strategy)
|
33
|
-
dst.write zd.deflate(
|
21
|
+
dst.write zd.deflate(@file.read)
|
22
|
+
zd.close
|
34
23
|
dst.flush
|
35
24
|
dst.rewind
|
36
|
-
zd.close
|
37
25
|
|
38
26
|
dst
|
39
27
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'paperclip/processor'
|
2
|
+
require 'zlib'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module Paperclip
|
6
|
+
module Processors
|
7
|
+
class DeflaterBase < ::Paperclip::Processor
|
8
|
+
def initialize(file, options = {}, attachment = nil)
|
9
|
+
super
|
10
|
+
@format = @options[:format]
|
11
|
+
@current_format = File.extname(@file.path)
|
12
|
+
@basename = File.basename(@file.path, @current_format)
|
13
|
+
end
|
14
|
+
|
15
|
+
def make
|
16
|
+
return @file if @attachment.instance_read(:deflate) == false
|
17
|
+
make_impl
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def make_impl
|
23
|
+
raise NotImplementedError
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_tempfile
|
27
|
+
f = Tempfile.new([@basename, @format ? ".#{@format}" : ''])
|
28
|
+
f.binmode
|
29
|
+
f
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'deflater_base'
|
2
|
+
|
3
|
+
module Paperclip
|
4
|
+
module Processors
|
5
|
+
class Gzip < DeflaterBase
|
6
|
+
def initialize(file, options = {}, attachment = nil)
|
7
|
+
super
|
8
|
+
@gzip_options = @options[:gzip_options] || {}
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def make_impl
|
14
|
+
level = @gzip_options[:level]
|
15
|
+
strategy = @gzip_options[:strategy]
|
16
|
+
|
17
|
+
dst = create_tempfile
|
18
|
+
gz = Zlib::GzipWriter.new(dst, level, strategy)
|
19
|
+
gz.write(@file.read)
|
20
|
+
gz.close
|
21
|
+
dst.open
|
22
|
+
|
23
|
+
dst
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/paperclip-deflater.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require File.expand_path('../lib/paperclip/
|
1
|
+
require File.expand_path('../lib/paperclip/deflater/version', __FILE__)
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = "paperclip-deflater"
|
5
|
-
gem.version = Paperclip::
|
5
|
+
gem.version = Paperclip::Deflater::VERSION
|
6
6
|
gem.platform = Gem::Platform::RUBY
|
7
7
|
gem.authors = ["Daisuke Taniwaki"]
|
8
8
|
gem.email = ["daisuketaniwaki@gmail.com"]
|
@@ -0,0 +1 @@
|
|
1
|
+
test
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Paperclip::Processors::DeflaterBase do
|
4
|
+
let(:attachment) { double }
|
5
|
+
let(:should_deflate) { true }
|
6
|
+
let(:options) { {} }
|
7
|
+
let(:file) { test_file }
|
8
|
+
subject { Paperclip::Processors::DeflaterBase.new(file, options, attachment) }
|
9
|
+
before do
|
10
|
+
allow(attachment).to receive(:instance_read).with(:deflate).and_return(should_deflate)
|
11
|
+
end
|
12
|
+
describe "#make" do
|
13
|
+
context "deflate setting is false" do
|
14
|
+
let(:should_deflate) { false }
|
15
|
+
it "returns original" do
|
16
|
+
expect(subject.make).to eq(file)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
describe "private methods" do
|
21
|
+
describe "#make_impl" do
|
22
|
+
it "raises an exception" do
|
23
|
+
expect{ subject.send(:make_impl) }.to raise_error(NotImplementedError)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
describe "create_tempfile" do
|
27
|
+
it "returns a tempfile" do
|
28
|
+
f = subject.send(:create_tempfile)
|
29
|
+
expect(f).to be_a Tempfile
|
30
|
+
expect(f.binmode?).to be true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,27 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe Paperclip::Processors::Deflater do
|
4
5
|
let(:attachment) { double }
|
5
6
|
let(:should_deflate) { true }
|
6
7
|
let(:options) { {} }
|
7
|
-
let(:file) {
|
8
|
+
let(:file) { test_file }
|
8
9
|
subject { Paperclip::Processors::Deflater.new(file, options, attachment) }
|
9
10
|
before do
|
10
11
|
allow(attachment).to receive(:instance_read).with(:deflate).and_return(should_deflate)
|
11
|
-
file.write 'test'
|
12
|
-
file.rewind
|
13
12
|
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
it "does not deflate the file" do
|
22
|
-
dst = subject.make
|
23
|
-
out = File.open(dst.path).read
|
24
|
-
expect(out).to eq("test")
|
13
|
+
describe "private methods" do
|
14
|
+
describe "#make_impl" do
|
15
|
+
it "deflates the file" do
|
16
|
+
dst = subject.make
|
17
|
+
data = dst.read
|
18
|
+
expect(data.unpack('H*').first).to eq("x\x9C".unpack('H*').first)
|
19
|
+
end
|
25
20
|
end
|
26
21
|
end
|
27
22
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Paperclip::Processors::Gzip do
|
5
|
+
let(:attachment) { double }
|
6
|
+
let(:should_deflate) { true }
|
7
|
+
let(:options) { {} }
|
8
|
+
let(:file) { test_file }
|
9
|
+
subject { Paperclip::Processors::Gzip.new(file, options, attachment) }
|
10
|
+
before do
|
11
|
+
allow(attachment).to receive(:instance_read).with(:deflate).and_return(should_deflate)
|
12
|
+
end
|
13
|
+
describe "private methods" do
|
14
|
+
describe "#make_impl" do
|
15
|
+
before do
|
16
|
+
allow(file).to receive(:mtime).and_return(Time.new(2000, 1, 2, 3, 4, 5))
|
17
|
+
end
|
18
|
+
it "deflates the file" do
|
19
|
+
dst = subject.make
|
20
|
+
data = dst.read
|
21
|
+
expect(data[0..3]).to eq("\u001F\x8B\b\u0000")
|
22
|
+
# data[4..7] is modified time and it changes
|
23
|
+
expect(data[8..-1]).to eq("\u0000\u0003+I-.\xE1\u0002\u0000\xC65\xB9;\u0005\u0000\u0000\u0000")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-deflater
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daisuke Taniwaki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: paperclip
|
@@ -81,10 +81,18 @@ files:
|
|
81
81
|
- Rakefile
|
82
82
|
- VERSION
|
83
83
|
- lib/paperclip-deflater.rb
|
84
|
+
- lib/paperclip/deflater.rb
|
85
|
+
- lib/paperclip/deflater/version.rb
|
84
86
|
- lib/paperclip/processors/deflater.rb
|
87
|
+
- lib/paperclip/processors/deflater_base.rb
|
88
|
+
- lib/paperclip/processors/gzip.rb
|
85
89
|
- paperclip-deflater.gemspec
|
90
|
+
- spec/fixtures/files/test.txt
|
91
|
+
- spec/paperclip/processors/deflater_base_spec.rb
|
86
92
|
- spec/paperclip/processors/deflater_spec.rb
|
93
|
+
- spec/paperclip/processors/gzip_spec.rb
|
87
94
|
- spec/spec_helper.rb
|
95
|
+
- spec/support/files.rb
|
88
96
|
homepage: https://github.com/dtaniwaki/paperclip-deflater
|
89
97
|
licenses:
|
90
98
|
- MIT
|
@@ -110,5 +118,9 @@ signing_key:
|
|
110
118
|
specification_version: 4
|
111
119
|
summary: Deflate Processor for Paperclip
|
112
120
|
test_files:
|
121
|
+
- spec/fixtures/files/test.txt
|
122
|
+
- spec/paperclip/processors/deflater_base_spec.rb
|
113
123
|
- spec/paperclip/processors/deflater_spec.rb
|
124
|
+
- spec/paperclip/processors/gzip_spec.rb
|
114
125
|
- spec/spec_helper.rb
|
126
|
+
- spec/support/files.rb
|