paperclip-dimension-validator 0.1.0 → 0.1.1
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3eadc6df06e33aa0236d1b139f63eafb0cb13391
|
4
|
+
data.tar.gz: d56a47f5c0ee1dc3d4118653577620f1a812cb04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b230d0edef2aaa22c8d5f1711dee58a19e7ce5bcb538cf236931ad87c6bdb16b0e99b6a7eb5f2c0018695f6ffa0afc4a1e215feb65275edf785a23dc1a19e62
|
7
|
+
data.tar.gz: c9ba385711d79e7759f4052e22c0d1edbf5ef690fc4738a0bfbcb8451295dbdf41ec4caf46cded6ce4fc384eaca72f3fab83274eaf9ed0d1b60d0709be55f065
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
|
3
|
+
module Paperclip
|
4
|
+
module Shoulda
|
5
|
+
module Matchers
|
6
|
+
def validate_attachment_dimensions(name)
|
7
|
+
ValidateAttachmentDimensionsMatcher.new(name)
|
8
|
+
end
|
9
|
+
|
10
|
+
class ValidateAttachmentDimensionsMatcher
|
11
|
+
def initialize(attachment_name)
|
12
|
+
unless defined?(ChunkyPNG)
|
13
|
+
puts 'WARNING: Add chunky_png or oily_png to your Gemfile to use paperclip dimension matchers'
|
14
|
+
end
|
15
|
+
|
16
|
+
@attachment_name = attachment_name
|
17
|
+
end
|
18
|
+
|
19
|
+
def height(height)
|
20
|
+
@height = height
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def width(width)
|
25
|
+
@width = width
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
def matches?(subject)
|
30
|
+
@subject = subject
|
31
|
+
@subject = @subject.new if @subject.class == Class
|
32
|
+
shorter_than_height? && taller_than_height? && smaller_than_width? && larger_than_width?
|
33
|
+
end
|
34
|
+
|
35
|
+
def failure_message
|
36
|
+
message = "Attachment #{@attachment_name} must have"
|
37
|
+
message += " a height of #{@height}px" if @height
|
38
|
+
message += " and" if @height && @width
|
39
|
+
message += " a width of #{@width}px" if @width
|
40
|
+
end
|
41
|
+
|
42
|
+
def failure_message_when_negated
|
43
|
+
message = "Attachment #{@attachment_name} cannot have"
|
44
|
+
message += " a height of #{@height}px" if @height
|
45
|
+
message += " and" if @height && @width
|
46
|
+
message += " a width of #{@width}px" if @width
|
47
|
+
end
|
48
|
+
alias negative_failure_message failure_message_when_negated
|
49
|
+
|
50
|
+
def description
|
51
|
+
"validate width and height in pixels for attachment #{@attachment_name}"
|
52
|
+
end
|
53
|
+
|
54
|
+
protected
|
55
|
+
def validation_with_height(height)
|
56
|
+
@subject.send(@attachment_name).assign(generate_png(height, @width))
|
57
|
+
@subject.valid?
|
58
|
+
@subject.errors[@attachment_name].include?("must have a height of #{@height}px was #{height}px")
|
59
|
+
end
|
60
|
+
|
61
|
+
def validation_with_width(width)
|
62
|
+
@subject.send(@attachment_name).assign(generate_png(@height, width))
|
63
|
+
@subject.valid?
|
64
|
+
@subject.errors[@attachment_name].include?("must have a width of #{@width}px was #{width}px")
|
65
|
+
end
|
66
|
+
|
67
|
+
def shorter_than_height?
|
68
|
+
@height.nil? || validation_with_height(@height - 1)
|
69
|
+
end
|
70
|
+
|
71
|
+
def taller_than_height?
|
72
|
+
@height.nil? || validation_with_height(@height + 1)
|
73
|
+
end
|
74
|
+
|
75
|
+
def smaller_than_width?
|
76
|
+
@width.nil? || validation_with_width(@width - 1)
|
77
|
+
end
|
78
|
+
|
79
|
+
def larger_than_width?
|
80
|
+
@width.nil? || validation_with_width(@width + 1)
|
81
|
+
end
|
82
|
+
|
83
|
+
def generate_png(height, width)
|
84
|
+
file = Tempfile.new([Time.now.to_i.to_s, '.png'])
|
85
|
+
file.binmode
|
86
|
+
ChunkyPNG::Image.new(width || 1, height || 1, ChunkyPNG::Color('black')).save(file.path)
|
87
|
+
file
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -10,12 +10,18 @@ module Paperclip
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def validate_each(record, attribute, value)
|
13
|
-
|
13
|
+
return unless value.queued_for_write[:original]
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
begin
|
16
|
+
dimensions = Paperclip::Geometry.from_file(value.queued_for_write[:original].path)
|
17
|
+
|
18
|
+
[:height, :width].each do |dimension|
|
19
|
+
if options[dimension] && dimensions.send(dimension) != options[dimension].to_f
|
20
|
+
record.errors.add(attribute.to_sym, :dimension, dimension_type: dimension.to_s, dimension: options[dimension], actual_dimension: dimensions.send(dimension).to_i)
|
21
|
+
end
|
18
22
|
end
|
23
|
+
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
|
24
|
+
Paperclip.log("cannot validate dimensions on #{attribute}")
|
19
25
|
end
|
20
26
|
end
|
21
27
|
end
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "paperclip-dimension-validator"
|
7
|
-
spec.version = '0.1.
|
7
|
+
spec.version = '0.1.1'
|
8
8
|
spec.authors = ["Anthony Smith"]
|
9
9
|
spec.email = ["anthony@sticksnleaves.com"]
|
10
10
|
spec.description = %q{Validate image height and width for Paperclip}
|
@@ -17,7 +17,6 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_dependency 'activerecord', '>= 3.1'
|
21
20
|
spec.add_dependency 'paperclip', '>= 4.0.0'
|
22
21
|
|
23
22
|
spec.add_development_dependency "bundler", "~> 1.3"
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-dimension-validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: activerecord
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3.1'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '3.1'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: paperclip
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +66,7 @@ files:
|
|
80
66
|
- Rakefile
|
81
67
|
- lib/locales/en.yml
|
82
68
|
- lib/paperclip-dimension-validator.rb
|
69
|
+
- lib/paperclip/matchers/validate_attachment_dimensions_matcher.rb
|
83
70
|
- lib/paperclip/validators/attachment_dimensions_validator.rb
|
84
71
|
- paperclip-dimension-validator.gemspec
|
85
72
|
homepage: https://github.com/anthonator/paperclip-dimension-validator
|