Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
paperclip
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ikcrm_common
paperclip
Commits
51bb0f9f
Commit
51bb0f9f
authored
Mar 30, 2012
by
Prem Sichanugrist
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding Attachment#geometry to get file's dimension
Fixes #768
parent
7088f5b9
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
195 additions
and
154 deletions
+195
-154
lib/paperclip/attachment.rb
+5
-0
lib/paperclip/geometry.rb
+5
-0
test/attachment_test.rb
+15
-0
test/geometry_test.rb
+170
-154
No files found.
lib/paperclip/attachment.rb
View file @
51bb0f9f
...
...
@@ -319,6 +319,11 @@ module Paperclip
instance
.
send
(
getter
)
if
responds
||
attr
.
to_s
==
"file_name"
end
# Returns a geometry object which you can get the image's dimension.
def
geometry
(
style
=
:original
)
Geometry
.
from_file
(
path
(
style
))
end
private
def
path_option
...
...
lib/paperclip/geometry.rb
View file @
51bb0f9f
...
...
@@ -11,6 +11,11 @@ module Paperclip
@modifier
=
modifier
end
# Returns the equality based on height, width, and modifier
def
==
(
other
)
height
==
other
.
height
&&
width
==
other
.
width
&&
modifier
==
other
.
modifier
end
# Uses ImageMagick to determing the dimensions of a file, passed in as either a
# File or path.
# NOTE: (race cond) Do not reassign the 'file' variable inside this method as it is likely to be
...
...
test/attachment_test.rb
View file @
51bb0f9f
...
...
@@ -1158,4 +1158,19 @@ class AttachmentTest < Test::Unit::TestCase
end
end
context
"attachment's geometry"
do
setup
do
rebuild_model
@dummy
=
Dummy
.
new
@file
=
File
.
new
(
File
.
join
(
File
.
dirname
(
__FILE__
),
"fixtures"
,
"5k.png"
),
'rb'
)
@dummy
.
avatar
=
@file
@dummy
.
save!
@attachment
=
@dummy
.
avatar
@geometry
=
Paperclip
::
Geometry
.
from_file
(
@file
.
path
)
end
should
"return a correct geometry object"
do
assert_equal
@geometry
,
@attachment
.
geometry
end
end
end
test/geometry_test.rb
View file @
51bb0f9f
require
'./test/helper'
class
GeometryTest
<
Test
::
Unit
::
TestCase
context
"Paperclip::Geometry"
do
should
"correctly report its given dimensions"
do
assert
@geo
=
Paperclip
::
Geometry
.
new
(
1024
,
768
)
assert_equal
1024
,
@geo
.
width
assert_equal
768
,
@geo
.
height
context
"equality check"
do
should
"return true when width, height, modifier are all the same"
do
assert_equal
Paperclip
::
Geometry
.
new
(
100
,
100
,
"foo"
),
Paperclip
::
Geometry
.
new
(
100
,
100
,
"foo"
)
end
should
"set height to 0 if height dimension is missing"
do
assert
@geo
=
Paperclip
::
Geometry
.
new
(
1024
)
assert_equal
1024
,
@geo
.
width
assert_equal
0
,
@geo
.
height
should
"return false if width, height, modifier are not the same"
do
assert_not_equal
Paperclip
::
Geometry
.
new
(
100
,
100
,
"foo"
),
Paperclip
::
Geometry
.
new
(
100
,
200
,
"foo"
)
assert_not_equal
Paperclip
::
Geometry
.
new
(
100
,
100
,
"foo"
),
Paperclip
::
Geometry
.
new
(
200
,
100
,
"foo"
)
assert_not_equal
Paperclip
::
Geometry
.
new
(
100
,
100
,
"foo"
),
Paperclip
::
Geometry
.
new
(
100
,
100
,
"bar"
)
end
end
should
"set width to 0 if width dimension is missing
"
do
assert
@geo
=
Paperclip
::
Geometry
.
new
(
nil
,
768
)
assert_equal
0
,
@geo
.
width
assert_equal
768
,
@geo
.
height
end
should
"correctly report its given dimensions
"
do
assert
@geo
=
Paperclip
::
Geometry
.
new
(
1024
,
768
)
assert_equal
1024
,
@geo
.
width
assert_equal
768
,
@geo
.
height
end
should
"be generated from a WxH-formatted str
ing"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x600"
)
assert_equal
800
,
@geo
.
width
assert_equal
60
0
,
@geo
.
height
end
should
"set height to 0 if height dimension is miss
ing"
do
assert
@geo
=
Paperclip
::
Geometry
.
new
(
1024
)
assert_equal
1024
,
@geo
.
width
assert_equal
0
,
@geo
.
height
end
should
"be generated from a xH-formatted str
ing"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"x600"
)
assert_equal
0
,
@geo
.
width
assert_equal
600
,
@geo
.
height
end
should
"set width to 0 if width dimension is miss
ing"
do
assert
@geo
=
Paperclip
::
Geometry
.
new
(
nil
,
768
)
assert_equal
0
,
@geo
.
width
assert_equal
768
,
@geo
.
height
end
should
"be generated from a Wx
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x
"
)
assert_equal
800
,
@geo
.
width
assert_equal
0
,
@geo
.
height
end
should
"be generated from a WxH
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x600
"
)
assert_equal
800
,
@geo
.
width
assert_equal
60
0
,
@geo
.
height
end
should
"be generated from a W
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"8
00"
)
assert_equal
80
0
,
@geo
.
width
assert_equal
0
,
@geo
.
height
end
should
"be generated from a xH
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"x6
00"
)
assert_equal
0
,
@geo
.
width
assert_equal
60
0
,
@geo
.
height
end
should
"ensure the modifier is nil if not present"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"123x456"
)
assert_nil
@geo
.
modifier
end
should
"be generated from a Wx-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x"
)
assert_equal
800
,
@geo
.
width
assert_equal
0
,
@geo
.
height
end
should
"treat x and X the same in geometries"
do
@lower
=
Paperclip
::
Geometry
.
parse
(
"123x456"
)
@upper
=
Paperclip
::
Geometry
.
parse
(
"123X456"
)
assert_equal
123
,
@lower
.
width
assert_equal
123
,
@upper
.
width
assert_equal
456
,
@lower
.
height
assert_equal
456
,
@upper
.
height
end
should
"be generated from a W-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800"
)
assert_equal
800
,
@geo
.
width
assert_equal
0
,
@geo
.
height
end
[
'>'
,
'<'
,
'#'
,
'@'
,
'%'
,
'^'
,
'!'
,
nil
].
each
do
|
mod
|
should
"ensure the modifier
#{
mod
.
inspect
}
is preserved"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"123x456
#{
mod
}
"
)
assert_equal
mod
,
@geo
.
modifier
assert_equal
"123x456
#{
mod
}
"
,
@geo
.
to_s
end
end
should
"ensure the modifier is nil if not present"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"123x456"
)
assert_nil
@geo
.
modifier
end
[
'>'
,
'<'
,
'#'
,
'@'
,
'%'
,
'^'
,
'!'
,
nil
].
each
do
|
mod
|
should
"ensure the modifier
#{
mod
.
inspect
}
is preserved with no height"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"123x
#{
mod
}
"
)
assert_equal
mod
,
@geo
.
modifier
assert_equal
"123
#{
mod
}
"
,
@geo
.
to_s
end
end
should
"treat x and X the same in geometries"
do
@lower
=
Paperclip
::
Geometry
.
parse
(
"123x456"
)
@upper
=
Paperclip
::
Geometry
.
parse
(
"123X456"
)
assert_equal
123
,
@lower
.
width
assert_equal
123
,
@upper
.
width
assert_equal
456
,
@lower
.
height
assert_equal
456
,
@upper
.
height
end
should
"make sure the modifier gets passed during transformation_to"
do
assert
@src
=
Paperclip
::
Geometry
.
parse
(
"123x456"
)
assert
@dst
=
Paperclip
::
Geometry
.
parse
(
"123x456>"
)
assert_equal
[
"123x456>"
,
nil
],
@src
.
transformation_to
(
@dst
)
[
'>'
,
'<'
,
'#'
,
'@'
,
'%'
,
'^'
,
'!'
,
nil
].
each
do
|
mod
|
should
"ensure the modifier
#{
mod
.
inspect
}
is preserved"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"123x456
#{
mod
}
"
)
assert_equal
mod
,
@geo
.
modifier
assert_equal
"123x456
#{
mod
}
"
,
@geo
.
to_s
end
end
should
"generate correct ImageMagick formatting string for W-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800"
)
assert_equal
"800"
,
@geo
.
to_s
[
'>'
,
'<'
,
'#'
,
'@'
,
'%'
,
'^'
,
'!'
,
nil
].
each
do
|
mod
|
should
"ensure the modifier
#{
mod
.
inspect
}
is preserved with no height"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"123x
#{
mod
}
"
)
assert_equal
mod
,
@geo
.
modifier
assert_equal
"123
#{
mod
}
"
,
@geo
.
to_s
end
end
should
"generate correct ImageMagick formatting string for Wx-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x"
)
assert_equal
"800"
,
@geo
.
to_s
end
should
"make sure the modifier gets passed during transformation_to"
do
assert
@src
=
Paperclip
::
Geometry
.
parse
(
"123x456"
)
assert
@dst
=
Paperclip
::
Geometry
.
parse
(
"123x456>"
)
assert_equal
[
"123x456>"
,
nil
],
@src
.
transformation_to
(
@dst
)
end
should
"generate correct ImageMagick formatting string for xH
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"x6
00"
)
assert_equal
"x6
00"
,
@geo
.
to_s
end
should
"generate correct ImageMagick formatting string for W
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"8
00"
)
assert_equal
"8
00"
,
@geo
.
to_s
end
should
"generate correct ImageMagick formatting string for WxH
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x600
"
)
assert_equal
"800x6
00"
,
@geo
.
to_s
end
should
"generate correct ImageMagick formatting string for Wx
-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x
"
)
assert_equal
"8
00"
,
@geo
.
to_s
end
should
"be generated from a file"
do
file
=
File
.
join
(
File
.
dirname
(
__FILE__
),
"fixtures"
,
"5k.png"
)
file
=
File
.
new
(
file
,
'rb'
)
assert_nothing_raised
{
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
assert
@geo
.
height
>
0
assert
@geo
.
width
>
0
end
should
"generate correct ImageMagick formatting string for xH-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"x600"
)
assert_equal
"x600"
,
@geo
.
to_s
end
should
"be generated from a file path"
do
file
=
File
.
join
(
File
.
dirname
(
__FILE__
),
"fixtures"
,
"5k.png"
)
assert_nothing_raised
{
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
assert
@geo
.
height
>
0
assert
@geo
.
width
>
0
end
should
"generate correct ImageMagick formatting string for WxH-formatted string"
do
assert
@geo
=
Paperclip
::
Geometry
.
parse
(
"800x600"
)
assert_equal
"800x600"
,
@geo
.
to_s
end
should
"not generate from a bad file"
do
file
=
"/home/This File Does Not Exist.omg"
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"be generated from a file"
do
file
=
File
.
join
(
File
.
dirname
(
__FILE__
),
"fixtures"
,
"5k.png"
)
file
=
File
.
new
(
file
,
'rb'
)
assert_nothing_raised
{
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
assert
@geo
.
height
>
0
assert
@geo
.
width
>
0
end
should
"not generate from a blank filename"
do
file
=
""
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"be generated from a file path"
do
file
=
File
.
join
(
File
.
dirname
(
__FILE__
),
"fixtures"
,
"5k.png"
)
assert_nothing_raised
{
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
assert
@geo
.
height
>
0
assert
@geo
.
width
>
0
end
should
"not generate from a nil
file"
do
file
=
nil
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"not generate from a bad
file"
do
file
=
"/home/This File Does Not Exist.omg"
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"not generate from a file with no path"
do
file
=
mock
(
"file"
,
:path
=>
""
)
file
.
stubs
(
:respond_to?
).
with
(
:path
).
returns
(
true
)
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"not generate from a blank filename"
do
file
=
""
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"let us know when a command isn't found versus a processing error"
do
old_path
=
ENV
[
'PATH'
]
begin
should
"not generate from a nil file"
do
file
=
nil
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"not generate from a file with no path"
do
file
=
mock
(
"file"
,
:path
=>
""
)
file
.
stubs
(
:respond_to?
).
with
(
:path
).
returns
(
true
)
assert_raise
(
Paperclip
::
Errors
::
NotIdentifiedByImageMagickError
){
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
}
end
should
"let us know when a command isn't found versus a processing error"
do
old_path
=
ENV
[
'PATH'
]
begin
silence_stream
(
STDERR
)
do
ENV
[
'PATH'
]
=
''
assert_raises
(
Paperclip
::
Errors
::
CommandNotFoundError
)
do
file
=
File
.
join
(
File
.
dirname
(
__FILE__
),
"fixtures"
,
"5k.png"
)
@geo
=
Paperclip
::
Geometry
.
from_file
(
file
)
end
ensure
ENV
[
'PATH'
]
=
old_path
end
ensure
ENV
[
'PATH'
]
=
old_path
end
end
[[
'vertical'
,
900
,
1440
,
true
,
false
,
false
,
1440
,
900
,
0.625
],
[
'horizontal'
,
1024
,
768
,
false
,
true
,
false
,
1024
,
768
,
1.3333
],
[
'square'
,
100
,
100
,
false
,
false
,
true
,
100
,
100
,
1
]].
each
do
|
args
|
context
"performing calculations on a
#{
args
[
0
]
}
viewport"
do
setup
do
@geo
=
Paperclip
::
Geometry
.
new
(
args
[
1
],
args
[
2
])
end
[[
'vertical'
,
900
,
1440
,
true
,
false
,
false
,
1440
,
900
,
0.625
],
[
'horizontal'
,
1024
,
768
,
false
,
true
,
false
,
1024
,
768
,
1.3333
],
[
'square'
,
100
,
100
,
false
,
false
,
true
,
100
,
100
,
1
]].
each
do
|
args
|
context
"performing calculations on a
#{
args
[
0
]
}
viewport"
do
setup
do
@geo
=
Paperclip
::
Geometry
.
new
(
args
[
1
],
args
[
2
])
end
should
"
#{
args
[
3
]
?
""
:
"not"
}
be vertical"
do
assert_equal
args
[
3
],
@geo
.
vertical?
end
should
"
#{
args
[
3
]
?
""
:
"not"
}
be vertical"
do
assert_equal
args
[
3
],
@geo
.
vertical?
end
should
"
#{
args
[
4
]
?
""
:
"not"
}
be horizontal"
do
assert_equal
args
[
4
],
@geo
.
horizontal?
end
should
"
#{
args
[
4
]
?
""
:
"not"
}
be horizontal"
do
assert_equal
args
[
4
],
@geo
.
horizontal?
end
should
"
#{
args
[
5
]
?
""
:
"not"
}
be square"
do
assert_equal
args
[
5
],
@geo
.
square?
end
should
"
#{
args
[
5
]
?
""
:
"not"
}
be square"
do
assert_equal
args
[
5
],
@geo
.
square?
end
should
"report that
#{
args
[
6
]
}
is the larger dimension"
do
assert_equal
args
[
6
],
@geo
.
larger
end
should
"report that
#{
args
[
6
]
}
is the larger dimension"
do
assert_equal
args
[
6
],
@geo
.
larger
end
should
"report that
#{
args
[
7
]
}
is the smaller dimension"
do
assert_equal
args
[
7
],
@geo
.
smaller
end
should
"report that
#{
args
[
7
]
}
is the smaller dimension"
do
assert_equal
args
[
7
],
@geo
.
smaller
end
should
"have an aspect ratio of
#{
args
[
8
]
}
"
do
assert_in_delta
args
[
8
],
@geo
.
aspect
,
0.0001
end
should
"have an aspect ratio of
#{
args
[
8
]
}
"
do
assert_in_delta
args
[
8
],
@geo
.
aspect
,
0.0001
end
end
end
[[
[
1000
,
100
],
[
64
,
64
],
"x64"
,
"64x64+288+0"
],
[
[
100
,
1000
],
[
50
,
950
],
"x950"
,
"50x950+22+0"
],
[
[
100
,
1000
],
[
50
,
25
],
"50x"
,
"50x25+0+237"
]].
each
do
|
args
|
context
"of
#{
args
[
0
].
inspect
}
and given a Geometry
#{
args
[
1
].
inspect
}
and sent transform_to"
do
setup
do
@geo
=
Paperclip
::
Geometry
.
new
(
*
args
[
0
])
@dst
=
Paperclip
::
Geometry
.
new
(
*
args
[
1
])
@scale
,
@crop
=
@geo
.
transformation_to
@dst
,
true
end
[[
[
1000
,
100
],
[
64
,
64
],
"x64"
,
"64x64+288+0"
],
[
[
100
,
1000
],
[
50
,
950
],
"x950"
,
"50x950+22+0"
],
[
[
100
,
1000
],
[
50
,
25
],
"50x"
,
"50x25+0+237"
]].
each
do
|
args
|
context
"of
#{
args
[
0
].
inspect
}
and given a Geometry
#{
args
[
1
].
inspect
}
and sent transform_to"
do
setup
do
@geo
=
Paperclip
::
Geometry
.
new
(
*
args
[
0
])
@dst
=
Paperclip
::
Geometry
.
new
(
*
args
[
1
])
@scale
,
@crop
=
@geo
.
transformation_to
@dst
,
true
end
should
"be able to return the correct scaling transformation geometry
#{
args
[
2
]
}
"
do
assert_equal
args
[
2
],
@scale
end
should
"be able to return the correct scaling transformation geometry
#{
args
[
2
]
}
"
do
assert_equal
args
[
2
],
@scale
end
should
"be able to return the correct crop transformation geometry
#{
args
[
3
]
}
"
do
assert_equal
args
[
3
],
@crop
end
should
"be able to return the correct crop transformation geometry
#{
args
[
3
]
}
"
do
assert_equal
args
[
3
],
@crop
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment