docsplit-paperclip-processor 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
@@ -0,0 +1,14 @@
1
+ New in 0.2.0:
2
+
3
+ API CHANGE: Rails.logger no longer called
4
+ Bug Fix: Was calling PaperclipError, now calls Paperclip::Error
5
+ Test Coverage: Specs added for DocsplitProcessor, DocsplitPdf, DocsplitImage.
6
+ Feature: Added docsplit as a dependency
7
+ Feature: Added rspec as a development dependency
8
+
9
+ New in 0.1.2:
10
+ Feature: Using FileMagic to determine MIME type
11
+
12
+ New in 0.1.1:
13
+ Feature: Passing PDF on if PDF conversion is attempted on a PDF
14
+ Feature: Added Docsplit.extract_image processor
@@ -16,6 +16,8 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_dependency "paperclip", "~> 2.4"
18
18
  s.add_dependency 'ruby-filemagic'
19
+ s.add_dependency 'docsplit'
20
+ s.add_development_dependency 'rspec'
19
21
 
20
22
  s.files = `git ls-files`.split("\n")
21
23
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
Binary file
data/fixtures/test.bin ADDED
Binary file
Binary file
Binary file
@@ -12,6 +12,10 @@ module Paperclip
12
12
  @attachment = attachment
13
13
  @basename = File.basename(@file.path, '.*')
14
14
  end
15
+
16
+ def src_path
17
+ File.expand_path(@src.path)
18
+ end
15
19
  end
16
20
 
17
21
  class DocsplitChaining < Processor
@@ -31,26 +35,24 @@ module Paperclip
31
35
  class DocsplitPdf < DocsplitProcessor
32
36
  def make
33
37
  begin
34
- src_path = File.expand_path(@src.path)
35
38
  dst_dir = Dir.tmpdir
36
39
  dst_path = File.join(dst_dir, "#{@basename}.pdf")
37
40
 
38
- if pdf_format?(src_path)
41
+ if pdf_format?
39
42
  dst_path = File.join(dst_dir, "_#{@basename}.pdf")
40
43
  FileUtils.copy_file(src_path, dst_path)
41
44
  else
42
45
  Docsplit.extract_pdf(src_path, :output => dst_dir)
43
46
  end
44
47
  rescue Exception => e
45
- Rails.logger.error e.message
46
- raise PaperclipError, "There was an error converting #{@basename} to pdf"
48
+ raise Paperclip::Error, "There was an error converting #{@basename} to pdf"
47
49
  end
48
50
  File.open(dst_path)
49
51
  end
50
52
 
51
- def pdf_format?(file)
53
+ def pdf_format?
52
54
  file_magic = FileMagic.new
53
- type = file_magic.file(file)
55
+ type = file_magic.file(src_path)
54
56
  file_magic.close
55
57
  type =~ /pdf/i
56
58
  end
@@ -59,17 +61,15 @@ module Paperclip
59
61
  class DocsplitImage < DocsplitProcessor
60
62
  def make
61
63
  begin
62
- src_path = File.expand_path(@src.path)
63
64
  dst_path = Dir.tmpdir
64
65
  pages = options[:pages] || [1]
65
66
  options = @options.merge(:output => dst_path)
66
67
 
67
68
  Docsplit.extract_images(src_path, options)
68
69
  rescue Exception => e
69
- Rails.logger.error e.message
70
- raise PaperclipError, "There was an error extracting images from #{@basename}"
70
+ raise Paperclip::Error, "There was an error extracting images from #{@basename}"
71
71
  end
72
72
  File.open(File.join(dst_path, "#{@basename}_#{pages.first}.#{@options[:format]}"))
73
73
  end
74
74
  end
75
- end
75
+ end
@@ -1,7 +1,7 @@
1
1
  module Docsplit
2
2
  module Paperclip
3
3
  module Processor
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::DocsplitProcessor do
4
+ it "has an accessible file attribute" do
5
+ d = Paperclip::DocsplitProcessor.new(File.open("./fixtures/word_xml.docx"))
6
+ d.src.path.should eq(File.open("./fixtures/word_xml.docx").path)
7
+ end
8
+
9
+ it "has an accessible options hash attribute" do
10
+ options = {:option_1 => 1, :option_2 => 2}
11
+ d = Paperclip::DocsplitProcessor.new(File.open("./fixtures/word_xml.docx"), options)
12
+ d.options.should eq(options)
13
+ end
14
+
15
+ it "has an accessible Paperclip::Attachment attribute" do
16
+ attachment = Paperclip::Attachment.new(nil, nil)
17
+
18
+ d = Paperclip::DocsplitProcessor.new(File.open("./fixtures/word_xml.docx"), {}, attachment)
19
+ d.attachment.should eq(attachment)
20
+ end
21
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::DocsplitImage do
4
+ def pdf_jpg_images
5
+ Dir.entries(Dir.tmpdir).reject{ |x| !(x =~ /twopage_\d.jpg/) }
6
+ end
7
+
8
+ context "with a valid pdf file attachment" do
9
+ before(:all) do
10
+ pdf_jpg_images.each do |tempfile|
11
+ File.delete(File.join(Dir.tmpdir, tempfile))
12
+ end
13
+
14
+ @file = File.open("./fixtures/twopage.pdf")
15
+ @processor = Paperclip::DocsplitImage.new(@file, {:format => :jpg, :size => "50x50"})
16
+ @output = @processor.make
17
+ end
18
+
19
+ after(:all) do
20
+ @file.close
21
+ end
22
+
23
+ it "#make generates an image for each page of the document" do
24
+ pdf_jpg_images.count.should eq(2)
25
+ end
26
+
27
+ it "#make generates images at the specified resolution" do
28
+ cmd = %Q[identify -format "%wx%h" "#{@output.path}"]
29
+ `#{cmd}`.chomp.should eq("39x50")
30
+ end
31
+
32
+ it "#make generates images in the specified format" do
33
+ pdf_jpg_images.each do |output_file|
34
+ FileMagic.new.file(File.join(Dir.tmpdir, output_file)).should =~ /jpeg/i
35
+ end
36
+ end
37
+
38
+ it "#make returns the image of the first page" do
39
+ File.basename(@output).should eq('twopage_1.jpg')
40
+ end
41
+ end
42
+
43
+ context "when processing fails" do
44
+ it "#make raises an error if the processing was unsuccessful" do
45
+ @file = File.open("./fixtures/twopage.pdf")
46
+ Dir.stub!(:tmpdir).and_return(:raise)
47
+
48
+ lambda {
49
+ Paperclip::DocsplitImage.new(@file, {:format => :jpg}).make
50
+ }.should raise_error(Paperclip::Error)
51
+
52
+ @file.close
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Paperclip::DocsplitPdf do
4
+ def make_output
5
+ Paperclip::DocsplitPdf.new(@file).make
6
+ end
7
+
8
+ context "with a Microsoft Word .docx file" do
9
+ before(:all) do
10
+ @file = File.open("./fixtures/word_xml.docx")
11
+ @output = make_output
12
+ end
13
+
14
+ after(:all) do
15
+ @file.close
16
+ end
17
+
18
+ describe "produces a file with a .pdf extension" do
19
+ it "names the converted document with a .pdf extension" do
20
+ File.extname(@output.path).should eq(".pdf")
21
+ end
22
+
23
+ it "produces PDF-format file" do
24
+ FileMagic.new.file(@output.path).should =~ /pdf/i
25
+ end
26
+ end
27
+ end
28
+
29
+ it "passes the document on if it is already a PDF" do
30
+ @file = File.open("./fixtures/portable_document_format.pdf")
31
+
32
+ lambda {
33
+ FileMagic.new.file(make_output.path).should =~ /pdf/i
34
+ }.should_not raise_error
35
+
36
+ @file.close
37
+ end
38
+
39
+ it "raises an error if PDF conversion was unsuccessful" do
40
+ @file = File.open("./fixtures/test.bin")
41
+ Dir.stub!(:tmpdir).and_return(:raise)
42
+
43
+ lambda {
44
+ make_output
45
+ }.should raise_error(Paperclip::Error)
46
+
47
+ @file.close
48
+ end
49
+
50
+ describe "#pdf_format?" do
51
+ it "identifies a PDF document as a PDF" do
52
+ processor = Paperclip::DocsplitPdf.new(File.open("./fixtures/portable_document_format.pdf"))
53
+ processor.pdf_format?.should be_true
54
+ end
55
+
56
+ it "identifies a non-PDF document as not a PDF" do
57
+ processor = Paperclip::DocsplitPdf.new(File.open("./fixtures/word_xml.docx"))
58
+ processor.pdf_format?.should be_false
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,7 @@
1
+ require "paperclip"
2
+ require "filemagic"
3
+ require "docsplit"
4
+ require "docsplit-paperclip-processor"
5
+
6
+ require 'rspec'
7
+ require 'rspec/autorun'
metadata CHANGED
@@ -1,100 +1,132 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: docsplit-paperclip-processor
3
- version: !ruby/object:Gem::Version
4
- hash: 31
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 2
10
- version: 0.1.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Tien Le
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-05-08 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: paperclip
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 11
29
- segments:
30
- - 2
31
- - 4
32
- version: "2.4"
20
+ - !ruby/object:Gem::Version
21
+ version: '2.4'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.4'
30
+ - !ruby/object:Gem::Dependency
36
31
  name: ruby-filemagic
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
37
39
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
39
41
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: docsplit
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
47
54
  type: :runtime
48
- version_requirements: *id002
49
- description: This gem is simple Paperclip processor which uses Docsplit to convert uploaded files to pdf, or extract information/thumbnails from them
50
- email:
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: This gem is simple Paperclip processor which uses Docsplit to convert
79
+ uploaded files to pdf, or extract information/thumbnails from them
80
+ email:
51
81
  - tienlx@gmail.com
52
82
  executables: []
53
-
54
83
  extensions: []
55
-
56
84
  extra_rdoc_files: []
57
-
58
- files:
85
+ files:
59
86
  - .gitignore
87
+ - CHANGELOG
60
88
  - Gemfile
61
89
  - README.md
62
90
  - Rakefile
63
91
  - docsplit-paperclip-processor.gemspec
92
+ - fixtures/not_a_docx.docx
93
+ - fixtures/portable_document_format.pdf
94
+ - fixtures/test.bin
95
+ - fixtures/twopage.pdf
96
+ - fixtures/word_xml.docx
64
97
  - lib/docsplit-paperclip-processor.rb
65
98
  - lib/docsplit-paperclip-processor/version.rb
99
+ - spec/docsplit-paperclip-processor_spec.rb
100
+ - spec/docsplit_image_spec.rb
101
+ - spec/docsplit_pdf_spec.rb
102
+ - spec/spec_helper.rb
66
103
  homepage: https://github.com/tienle/docsplit-paperclip-processor
67
104
  licenses: []
68
-
69
105
  post_install_message:
70
106
  rdoc_options: []
71
-
72
- require_paths:
107
+ require_paths:
73
108
  - lib
74
- required_ruby_version: !ruby/object:Gem::Requirement
109
+ required_ruby_version: !ruby/object:Gem::Requirement
75
110
  none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- hash: 3
80
- segments:
81
- - 0
82
- version: "0"
83
- required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ! '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
116
  none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- hash: 3
89
- segments:
90
- - 0
91
- version: "0"
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
92
121
  requirements: []
93
-
94
122
  rubyforge_project: docsplit-paperclip-processor
95
- rubygems_version: 1.8.6
123
+ rubygems_version: 1.8.24
96
124
  signing_key:
97
125
  specification_version: 3
98
126
  summary: A Paperclip processor for Docsplit
99
- test_files: []
100
-
127
+ test_files:
128
+ - spec/docsplit-paperclip-processor_spec.rb
129
+ - spec/docsplit_image_spec.rb
130
+ - spec/docsplit_pdf_spec.rb
131
+ - spec/spec_helper.rb
132
+ has_rdoc: