paperclip_utils 1.2.2 → 1.3.0
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 +30 -11
- data/lib/paperclip_processors/pdf_merge.rb +69 -0
- data/lib/paperclip_processors/xls_to_csv.rb +72 -0
- data/lib/paperclip_utils/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b4320db1228b252e0ec23254e663d9814219859
|
4
|
+
data.tar.gz: be9dc86758d73abff8b65e1f0551a0b87d3e7d0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb2afa7f6bcbb7170a5bd8643fcb1e265325acef96b0556010dff0e881e436a678b3db3a9882067457b66c76ef1fc6ce944d898c7b998a6ac77b5d5a475683f2
|
7
|
+
data.tar.gz: 85456b448b69026c6ab90ac67f0f7b8d77f6eb509cffcc00c8104164a7013dc05582b8565ed6a4fe797d2d97aaf9e220c7c5f9ff9ac5c3c05584d57bfdb282ff
|
data/README.md
CHANGED
@@ -1,24 +1,26 @@
|
|
1
1
|
# Paperclip Utils
|
2
2
|
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=VKY8YAWAS5XRQ&lc=CA&item_name=Weston%20Ganger&item_number=paperclip_utils¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHostedGuest" target="_blank" title="Donate"><img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" alt="Donate"/></a>
|
3
3
|
|
4
|
-
Paperclip Utils is a helper class for easier dynamic processors and styles on your Paperclip file uploads
|
4
|
+
Paperclip Utils is a helper class for easier dynamic processors and styles on your Paperclip file uploads. It also has a collection of custom Paperclip processors.
|
5
5
|
|
6
6
|
|
7
7
|
# Install
|
8
8
|
```ruby
|
9
|
+
# requires ruby >= 2.0
|
9
10
|
gem install paperclip_utils
|
10
11
|
```
|
11
12
|
|
13
|
+
# Custom Processors
|
14
|
+
**Ghostscript** - `:ghostscript` - Fixes black boxes and errors thumbnail processing for PDF files. This is automatically included if processors includes :thumbnail which it does by default
|
12
15
|
|
13
|
-
|
14
|
-
```ruby
|
15
|
-
Paperclip::Utils.get_processors(content_type, processors_if_allowed, fallback_processors, allowed_content_types)
|
16
|
+
**XLS to CSV** - `:xls_to_csv` - Converts XLS/XLSX files to CSV
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
**PDF Merge** - `:pdf_merge` - A way to handle multiple pdf uploads, requires some custom wiring, must add a `pdf_files` method to your model and temporarily save files with this though.
|
19
|
+
|
20
|
+
Check the processor source to see examples if required. [See all processors & examples here](https://github.com/westonganger/paperclip_utils/tree/master/lib/paperclip_processors).
|
19
21
|
|
20
22
|
|
21
|
-
# Usage
|
23
|
+
# Helper Methods Usage
|
22
24
|
```ruby
|
23
25
|
class Post < ActiveRecord::Base
|
24
26
|
has_attachment :my_attachment,
|
@@ -27,18 +29,35 @@ class Post < ActiveRecord::Base
|
|
27
29
|
path: "public/system/:class/:attachment/:id_partition/:style/:filename",
|
28
30
|
url: "#{ActionController::Base.relative_url_root}/system/:class/:attachment/:id_partition/:style/:filename"
|
29
31
|
end
|
32
|
+
|
33
|
+
# OR using any or all of the custom options
|
34
|
+
|
35
|
+
class Post < ActiveRecord::Base
|
36
|
+
has_attachment :my_attachment,
|
37
|
+
styles: lambda{|x| Paperclip::Utils.get_styles(x.instance.my_attachment.content_type, styles: {preview: "800x600>", thumb: "100x100>"}, fallback_styles: nil, allowed_content_types: ['application/pdf']) },
|
38
|
+
processors: lambda{|x| Paperclip::Utils.get_processors(x.my_attachment.content_type, processors: [:thumbnail, :some_other_custom_processor], fallback_processors: [:another_custom_processor], allowed_content_types: ['application/pdf']) },
|
39
|
+
path: "public/system/:class/:attachment/:id_partition/:style/:filename",
|
40
|
+
url: "#{ActionController::Base.relative_url_root}/system/:class/:attachment/:id_partition/:style/:filename"
|
41
|
+
end
|
30
42
|
```
|
31
43
|
|
44
|
+
# Helper Methods & Options
|
32
45
|
|
46
|
+
<br>
|
47
|
+
#### `get_styles(content_type, *optional_options)`
|
48
|
+
**styles** - Array - Default: `[:thumbnail]`
|
33
49
|
|
34
|
-
|
50
|
+
**fallback_styles** - Hash - Default -`{}`
|
35
51
|
|
36
|
-
**
|
52
|
+
**allowed_content_types** - Array - Default: `['application/pdf', 'image/png', 'image/x-png', 'image/gif', 'image/jpeg', 'image/pjpeg', 'image/jpg', 'image/tif, ''image/tiff', 'image/x-tiff']`
|
37
53
|
|
38
|
-
|
54
|
+
<br>
|
55
|
+
#### `get_processors(content_type, *optional_options)`
|
56
|
+
**processors** - Array - Default: `[:ghostscript, :thumbnail]` - Notes: Automatically includes ghostscript processor if processors includes :thumbnail which it does by default
|
39
57
|
|
40
|
-
**
|
58
|
+
**fallback_processors** - Array - Default: `[]`
|
41
59
|
|
60
|
+
**allowed_content_types** - Array - Default: `['application/pdf', 'image/png', 'image/x-png', 'image/gif', 'image/jpeg', 'image/pjpeg', 'image/jpg', 'image/tif, ''image/tiff', 'image/x-tiff']`
|
42
61
|
|
43
62
|
|
44
63
|
# Credits
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Merge pdf files (for transmittals)
|
2
|
+
#https://gist.github.com/jessieay/5832466
|
3
|
+
# Ex. http://stackoverflow.com/questions/17203270/combine-multi-page-pdfs-into-one-pdf-with-imagemagick
|
4
|
+
#
|
5
|
+
# First save your files to a temporary location then save your model with any arbitrary file attached which will not be saved.
|
6
|
+
#
|
7
|
+
# Example Model:
|
8
|
+
# class SomeCsvAttachement < ActiveRecord::Base
|
9
|
+
# has_attached_file :data,
|
10
|
+
# path: ":rails_root/data/some_csv_attachements/:id_partition/:basename.:extension",
|
11
|
+
# processors: [:pdf_merge]
|
12
|
+
#
|
13
|
+
# def pdf_files
|
14
|
+
# base_path = File.join(Rails.root, 'tmp')
|
15
|
+
#
|
16
|
+
# # Specific files
|
17
|
+
# [ File.join(base_path, 'path/to/file.pdf'), File.join(base_path, 'another/file/path.pdf') ]
|
18
|
+
#
|
19
|
+
# # Or all files in a folder
|
20
|
+
# Dir.glob(File.join(base_path,"/path/to/folder/*"))
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# validates_attachment_content_type :data, content_type: ['application/pdf']
|
24
|
+
# end
|
25
|
+
|
26
|
+
module Paperclip
|
27
|
+
class PdfMerge < Processor
|
28
|
+
|
29
|
+
def initialize file, options = {}, attachment = nil
|
30
|
+
super
|
31
|
+
@format = File.extname(@file.path)
|
32
|
+
@basename = File.basename(@file.path, @format)
|
33
|
+
@files = attachment.instance.pdf_files
|
34
|
+
end
|
35
|
+
|
36
|
+
def make
|
37
|
+
src = @file
|
38
|
+
if @current_format && @current_format.downcase == '.pdf'
|
39
|
+
dst = Tempfile.new([@basename, @format])
|
40
|
+
dst.binmode
|
41
|
+
|
42
|
+
file_paths = @files.map {|file| "#{Rails.root}/tmp/#{file.original_filename}"}
|
43
|
+
|
44
|
+
all_page_file_paths = ""
|
45
|
+
|
46
|
+
file_paths.each do |file_path|
|
47
|
+
pdf = PDF::Reader.new(file_path)
|
48
|
+
count = pdf.page_count
|
49
|
+
counter = 0
|
50
|
+
|
51
|
+
count.times do
|
52
|
+
all_page_file_paths += "#{file_path}[#{counter}] "
|
53
|
+
counter += 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
Paperclip.run(
|
58
|
+
'convert',
|
59
|
+
"-density 150 #{all_page_file_paths} #{File.expand_path(dst.path)}"
|
60
|
+
)
|
61
|
+
|
62
|
+
return dst
|
63
|
+
else
|
64
|
+
return src
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# https://github.com/igor-alexandrov/xls_to_csv-paperclip-processor
|
2
|
+
#
|
3
|
+
# Example Model:
|
4
|
+
# class SomeCsvAttachement < ActiveRecord::Base
|
5
|
+
# has_attached_file :data,
|
6
|
+
# styles: {
|
7
|
+
# converted: {
|
8
|
+
# format: "csv",
|
9
|
+
# params: "-c, -q 3"
|
10
|
+
# }
|
11
|
+
# },
|
12
|
+
# path: ":rails_root/data/some_csv_attachements/:id_partition/:basename.:extension",
|
13
|
+
# processors: [:xls_to_csv]
|
14
|
+
#
|
15
|
+
# validates_attachment_content_type :data, content_type: ['text/csv','text/comma-separated-values','text/csv','application/csv','application/excel','application/vnd.ms-excel','application/vnd.msexcel','text/anytext','text/plain']
|
16
|
+
# end
|
17
|
+
|
18
|
+
class Paperclip::XlsToCsv < Paperclip::Processor
|
19
|
+
attr_accessor :file, :params, :format
|
20
|
+
|
21
|
+
def initialize(file, options = {}, attachment = nil)
|
22
|
+
super
|
23
|
+
|
24
|
+
@file = file
|
25
|
+
@params = options[:params]
|
26
|
+
@current_format = File.extname(@file.path)
|
27
|
+
@basename = File.basename(@file.path, @current_format)
|
28
|
+
@format = options[:format]
|
29
|
+
end
|
30
|
+
|
31
|
+
def make
|
32
|
+
src = @file
|
33
|
+
|
34
|
+
if @current_format && ['.xls','xlsx'].include?(@current_format.downcase)
|
35
|
+
dst = Tempfile.new([@basename, @format ? "#{@format}" : 'csv'].compact.join("."))
|
36
|
+
begin
|
37
|
+
Paperclip.run(self.command, self.parameters(src, dst))
|
38
|
+
rescue StandardError => e
|
39
|
+
raise "There was an error converting #{@basename} to csv: #{e.message}"
|
40
|
+
end
|
41
|
+
return dst
|
42
|
+
else
|
43
|
+
return src
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
def command
|
50
|
+
case @current_format
|
51
|
+
when '.xls'
|
52
|
+
'xls2csv'
|
53
|
+
when '.xlsx'
|
54
|
+
'xlsx2csv'
|
55
|
+
else
|
56
|
+
'cp'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def parameters(src, dst)
|
61
|
+
p = []
|
62
|
+
|
63
|
+
if self.command == 'xls2csv'
|
64
|
+
p << [@params, File.expand_path(src.path).shellescape, "> #{File.expand_path(dst.path).shellescape}"]
|
65
|
+
else
|
66
|
+
p << [File.expand_path(src.path).shellescape, File.expand_path(dst.path).shellescape]
|
67
|
+
end
|
68
|
+
|
69
|
+
p.flatten.compact.join(" ").strip.squeeze(" ")
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Weston Ganger
|
@@ -106,6 +106,8 @@ files:
|
|
106
106
|
- README.md
|
107
107
|
- Rakefile
|
108
108
|
- lib/paperclip_processors/ghostscript.rb
|
109
|
+
- lib/paperclip_processors/pdf_merge.rb
|
110
|
+
- lib/paperclip_processors/xls_to_csv.rb
|
109
111
|
- lib/paperclip_utils.rb
|
110
112
|
- lib/paperclip_utils/version.rb
|
111
113
|
- test/database.yml
|