mojo_magick 0.5.4 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.circleci/config.yml +24 -0
- data/.github/dependabot.yml +8 -0
- data/.rubocop-common.yml +99 -0
- data/.rubocop-performance.yml +2 -0
- data/.rubocop-rspec.yml +33 -0
- data/.rubocop.yml +10 -0
- data/.ruby-version +1 -1
- data/Gemfile +6 -1
- data/Gemfile.lock +58 -10
- data/README.md +54 -2
- data/Rakefile +15 -12
- data/examples/animated_gif.rb +11 -14
- data/examples/composite.rb +11 -14
- data/init.rb +1 -3
- data/lib/image_magick/fonts.rb +6 -6
- data/lib/initializers/hash.rb +5 -1
- data/lib/mojo_magick.rb +191 -188
- data/lib/mojo_magick/command_status.rb +11 -0
- data/lib/mojo_magick/errors.rb +5 -0
- data/lib/mojo_magick/font.rb +4 -6
- data/lib/mojo_magick/opt_builder.rb +25 -34
- data/lib/mojo_magick/util/parser.rb +7 -48
- data/lib/mojo_magick/version.rb +1 -1
- data/mojo_magick.gemspec +20 -15
- data/test/fixtures/roll with it.jpg +0 -0
- data/test/font_test.rb +22 -28
- data/test/fonts_test.rb +4 -5
- data/test/mojo_magick_test.rb +282 -283
- data/test/opt_builder_test.rb +56 -49
- data/test/parser_test.rb +17 -18
- data/test/test_helper.rb +7 -5
- metadata +86 -23
- data/lib/image_magick/resource_limits.rb +0 -94
- data/test/resource_limits_test.rb +0 -51
@@ -1,94 +0,0 @@
|
|
1
|
-
# This module provides some mix-in methods to permit resource limitation commands in MojoMagick
|
2
|
-
module ImageMagick
|
3
|
-
module ResourceLimits
|
4
|
-
@@resource_limits = {}
|
5
|
-
|
6
|
-
# controls limits on memory and other resources for imagemagick.
|
7
|
-
# possible values for type can include:
|
8
|
-
# Area, Disk, File, Map, or Memory
|
9
|
-
# value is byte size for everything but Disk, where it's number of files
|
10
|
-
# type can be string or symbol.
|
11
|
-
# Just limiting Memory will not solve problems with imagemagick going out of
|
12
|
-
# control with resource consumption on certain bad files. You have to set disk,
|
13
|
-
# area and map limits too. Read up on imagemagick website for more.
|
14
|
-
# Different options have different units
|
15
|
-
# DISK: N GB
|
16
|
-
# AREA, MAP, MEMORY: N MB
|
17
|
-
# FILE: N num file handles
|
18
|
-
# Examples:
|
19
|
-
# # set disk to 5 gigabytes limit
|
20
|
-
# MiniMagick::Image::set_limit(:disk => 5)
|
21
|
-
# # set memory to 32mb, map to 64mb and disk to 0
|
22
|
-
# MiniMagick::Image::set_limit(:memory => 32, 'map' => 64, 'disk' => 0)
|
23
|
-
def set_limits(options)
|
24
|
-
mem_fix = 1
|
25
|
-
options.each do |resource, value|
|
26
|
-
@@resource_limits[resource.to_s.downcase.to_sym] = value.to_s
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# remove a limit
|
31
|
-
def remove_limits(*options)
|
32
|
-
mem_fix = 1
|
33
|
-
@@resource_limits.delete_if do |resource, value|
|
34
|
-
idx = options.index(resource)
|
35
|
-
resource == options.values_at(idx)[0].to_s.downcase.to_sym if idx
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# remove limits from resources
|
40
|
-
def unset_limits(options = {})
|
41
|
-
mem_fix = 1
|
42
|
-
@@resource_limits = {}
|
43
|
-
if options[:unset_env]
|
44
|
-
ENV["MAGICK_AREA_LIMIT"]=nil
|
45
|
-
ENV["MAGICK_MAP_LIMIT"]=nil
|
46
|
-
ENV["MAGICK_MEMORY_LIMIT"]=nil
|
47
|
-
ENV["MAGICK_DISK_LIMIT"]=nil
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# returns the default limits that imagemagick is using, when run with no "-limit" parameters
|
52
|
-
# options:
|
53
|
-
# :show_actual_values => true (default false) - will return integers instead of readable values
|
54
|
-
def get_default_limits(options = {})
|
55
|
-
mem_fix = 1
|
56
|
-
parse_limits(options.merge(:get_current_limits => false))
|
57
|
-
end
|
58
|
-
|
59
|
-
# returns the limits that imagemagick is running based on any "set_limits" calls
|
60
|
-
def get_current_limits(options = {})
|
61
|
-
mem_fix = 1
|
62
|
-
parse_limits(options.merge(:get_current_limits => true))
|
63
|
-
end
|
64
|
-
|
65
|
-
alias :get_limits :get_current_limits
|
66
|
-
|
67
|
-
def parse_limits(options)
|
68
|
-
show_actual_values = options[:show_actual_values]
|
69
|
-
if options[:get_current_limits]
|
70
|
-
raw_limits = self.raw_command('identify', '-list resource')
|
71
|
-
else
|
72
|
-
# we run a raw shell command here to obtain limits without applying command line limit params
|
73
|
-
raw_limits = `identify -list resource`
|
74
|
-
end
|
75
|
-
actual_values, readable_values = parser.parse_limits(raw_limits)
|
76
|
-
show_actual_values ? actual_values : readable_values
|
77
|
-
end # parse_limits
|
78
|
-
|
79
|
-
# returns a string suitable for passing as a set of imagemagick params
|
80
|
-
# that contains all the limit constraints
|
81
|
-
def get_limits_as_params
|
82
|
-
retval = ''
|
83
|
-
# we upcase the value here for newer versions of ImageMagick (>=6.8.x)
|
84
|
-
@@resource_limits.each do |type, value|
|
85
|
-
retval += " -limit #{type.to_s} #{value.upcase} "
|
86
|
-
end
|
87
|
-
retval
|
88
|
-
end
|
89
|
-
|
90
|
-
def parser
|
91
|
-
@parser ||= MojoMagick::Util::Parser.new
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require File::join(File::dirname(__FILE__), 'test_helper')
|
2
|
-
|
3
|
-
class ResourceLimitsTest < MiniTest::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@orig_limits = MojoMagick::get_default_limits
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_set_limits
|
10
|
-
# set area to 32mb limit
|
11
|
-
MojoMagick::set_limits(:area => '32mb')
|
12
|
-
new_limits = MojoMagick::get_current_limits
|
13
|
-
assert_equal '32mb', new_limits[:area].downcase
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_get_limits
|
17
|
-
assert(@orig_limits.size >= 7)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_resource_limits
|
21
|
-
orig_limits_test = @orig_limits.dup
|
22
|
-
orig_limits_test.delete_if do |resource, value|
|
23
|
-
assert [:throttle, :area, :map, :disk, :memory, :file, :thread, :time].include?(resource), "Found unexpected resource #{resource}"
|
24
|
-
true
|
25
|
-
end
|
26
|
-
assert_equal 0, orig_limits_test.size
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_get_current_limits
|
30
|
-
# remove limits on area
|
31
|
-
MojoMagick::remove_limits(:area)
|
32
|
-
new_limits = MojoMagick::get_current_limits
|
33
|
-
assert_equal @orig_limits[:area], new_limits[:area]
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_set_limits
|
37
|
-
# set memory to 64 mb, disk to 0 and
|
38
|
-
MojoMagick::set_limits(:memory => '64mb', :disk => '0b')
|
39
|
-
new_limits = MojoMagick::get_current_limits(:show_actual_values => true)
|
40
|
-
assert_equal 61, new_limits[:memory]
|
41
|
-
assert_equal 0, new_limits[:disk]
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_unset_limits
|
45
|
-
# return to original/default limit values
|
46
|
-
MojoMagick::unset_limits
|
47
|
-
new_limits = MojoMagick::get_current_limits
|
48
|
-
assert_equal @orig_limits, new_limits
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|