mojo_magick 0.5.7 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
1
+ require_relative "test_helper"
2
2
 
3
3
  class MojoMagickOptBuilderTest < MiniTest::Test
4
4
  # These tests make the assumption that if we call #raw_command with the
@@ -10,120 +10,139 @@ class MojoMagickOptBuilderTest < MiniTest::Test
10
10
  end
11
11
 
12
12
  def test_annotate
13
- @builder.annotate 'blah'
14
- assert_equal '-annotate 0 blah', @builder.to_s
13
+ @builder.annotate "blah"
14
+ assert_equal %w[-annotate 0 blah], @builder.to_a
15
15
  end
16
16
 
17
17
  def test_annotate_with_escapeable_string
18
- @builder.annotate 'it\'s'
19
- assert_equal '-annotate 0 "it\'s"', @builder.to_s
18
+ @builder.annotate "it's"
19
+ assert_equal %w[-annotate 0 it's], @builder.to_a
20
20
  end
21
21
 
22
- def test_annotate_with_full_args
23
- @builder.annotate '5 it\'s'
24
- assert_equal '-annotate 5 "it\'s"', @builder.to_s
22
+ def test_annotate_with_multiple_args
23
+ @builder.annotate "5 it's"
24
+ assert_equal ["-annotate", "0", "5 it's"], @builder.to_a
25
+ end
26
+
27
+ def test_annotate_with_geometry_args
28
+ @builder.annotate "this thing", geometry: 3
29
+ assert_equal ["-annotate", "3", "this thing"], @builder.to_a
30
+ end
31
+
32
+ def test_annotate_with_full_array_args
33
+ @builder.annotate "this", "thing", geometry: 3
34
+ assert_equal ["-annotate", "3", "thisthing"], @builder.to_a
25
35
  end
26
36
 
27
37
  def test_option_builder_with_blocks
28
38
  # Passing in basic commands produces a string
29
- b = MojoMagick::OptBuilder.new
30
- b.image_block do
31
- b.background 'red'
39
+ @builder.image_block do
40
+ @builder.background "red"
32
41
  end
33
- b.image_block do
34
- b.background 'blue'
42
+ @builder.image_block do
43
+ @builder.background "blue"
35
44
  end
36
- assert_equal '\( -background red \) \( -background blue \)', b.to_s
45
+ assert_equal ['\(', "-background", "red", '\)', '\(', "-background", "blue", '\)'], @builder.to_a
37
46
  end
38
47
 
39
48
  def test_option_builder_with_hex_colors
40
- b = MojoMagick::OptBuilder.new
41
- b.background '#000000'
42
- assert_equal '-background "#000000"', b.to_s
49
+ @builder.background "#000000"
50
+ assert_equal %w[-background #000000], @builder.to_a
43
51
  end
44
52
 
45
53
  def test_option_builder
46
- # Passing in basic commands produces a string
47
- b = MojoMagick::OptBuilder.new
48
- b.strip
49
- b.repage
50
- assert_equal '-strip -repage', b.to_s
54
+ @builder.strip
55
+ @builder.repage
56
+ assert_equal %w[-strip -repage], @builder.to_a
57
+ end
51
58
 
52
- # Chaining commands works
53
- b = MojoMagick::OptBuilder.new.strip.repage
54
- assert_equal '-strip -repage', b.to_s
59
+ def test_opt_builder_chaining_commands
60
+ assert_equal %w[-strip -repage], @builder.strip.repage.to_a
61
+ end
55
62
 
63
+ def test_opt_builder_interpreting_bang_suffix
56
64
  # Bang (!) indicates the plus version of commands
57
- b = MojoMagick::OptBuilder.new
58
- b.repage
59
- b.repage!
60
- assert_equal '-repage +repage', b.to_s
61
65
 
62
- # Accepts raw data as-is
63
- b = MojoMagick::OptBuilder.new
64
- b.opt1
65
- b << 'a ! b !'
66
- b.opt2
67
- assert_equal '-opt1 a ! b ! -opt2', b.to_s
66
+ @builder.repage
67
+ @builder.repage!
68
+ assert_equal %w[-repage +repage], @builder.to_a
69
+ end
68
70
 
71
+ def test_opt_builder_pushing_raw_data
69
72
  # Treats an array of raw data as different arguments
70
- b = MojoMagick::OptBuilder.new
71
- b << ['leave this data', 'alone']
72
- assert_equal 'leave this data alone', b.to_s
73
-
74
- # String includes command arguments
75
- b = MojoMagick::OptBuilder.new
76
- b.extent '256x256+0+0'
77
- b.crop '64x64'
78
- assert_equal '-extent 256x256+0+0 -crop 64x64', b.to_s
79
-
80
- # Arguments are quoted (doublequote) if appropriate
81
- b = MojoMagick::OptBuilder.new
82
- b.comment 'white space'
83
- b.comment 'w&b'
84
- b.crop '6x6^'
85
- assert_equal '-comment "white space" -comment "w&b" -crop "6x6^"', b.to_s
86
-
87
- # Existing doublequotes are escaped
88
- b = MojoMagick::OptBuilder.new
89
- b.comment 'Fred "Woot" Rook'
90
- assert_equal '-comment "Fred \"Woot\" Rook"', b.to_s
91
73
 
74
+ @builder << ["leave this data", "alone"]
75
+ assert_equal ["leave this data", "alone"], @builder.to_a
76
+ end
77
+
78
+ def test_opt_builder_complex_command_arg
79
+ @builder.extent "256x256+0+0"
80
+ @builder.crop "64x64"
81
+ assert_equal %w[-extent 256x256+0+0 -crop 64x64], @builder.to_a
82
+ end
83
+
84
+ def test_opt_builder_multi_arg_command_quoting
92
85
  # Multi-argument commands should not be quoted together
93
- b = MojoMagick::OptBuilder.new
94
- b.set 'comment', 'the "best" comment'
95
- assert_equal '-set comment "the \"best\" comment"', b.to_s
96
86
 
87
+ @builder.set "comment", 'the "best" comment'
88
+ assert_equal ["-set", "comment", "the \"best\" comment"], @builder.to_a
89
+ end
90
+
91
+ def test_opt_builder_with_custom_commands_and_raw_data
92
+ # Accepts raw data as-is
93
+
94
+ @builder.opt1
95
+ @builder << "a ! b !"
96
+ @builder.opt2
97
+ assert_equal ["-opt1", "a ! b !", "-opt2"], @builder.to_a
98
+ end
99
+
100
+ def test_opt_builder_file_and_files
97
101
  # File and files are helper methods
98
- b = MojoMagick::OptBuilder.new
99
- b.files 'source.jpg', 'source2.jpg'
100
- b.append
101
- b.crop '64x64'
102
- b.file 'dest%d.jpg'
103
- assert_equal 'source.jpg source2.jpg -append -crop 64x64 dest%d.jpg', b.to_s
104
-
105
- # Files are quoted (doublequote) if appropriate
106
- b = MojoMagick::OptBuilder.new
107
- b.file 'probably on windows.jpg'
108
- assert_equal '"probably on windows.jpg"', b.to_s
109
-
110
- # Blob is a shortcut for the #tempfile helper method
111
- b = MojoMagick::OptBuilder.new
112
- b.blob 'binary data'
113
- filename = b.to_s
114
- File.open(filename, 'rb') do |f|
115
- assert_equal 'binary data', f.read
102
+
103
+ @builder.files "source.jpg", "source2.jpg"
104
+ @builder.append
105
+ @builder.crop "64x64"
106
+ @builder.file "dest%d.jpg"
107
+ assert_equal %w[source.jpg source2.jpg -append -crop 64x64 dest%d.jpg], @builder.to_a
108
+ end
109
+
110
+ def test_opt_builder_file_preserves_whitespace
111
+ @builder.file "probably on windows.jpg"
112
+ assert_equal ["probably on windows.jpg"], @builder.to_a
113
+ end
114
+
115
+ def test_opt_builder_comment
116
+ @builder.comment "white space"
117
+ @builder.comment "w&b"
118
+ @builder.crop "6x6^"
119
+ assert_equal ["-comment", "white space", "-comment", "w&b", "-crop", "6x6^"], @builder.to_a
120
+ end
121
+
122
+ def test_opt_builder_comment_with_quoted_elements
123
+ @builder.comment 'Fred "Woot" Rook'
124
+ assert_equal ["-comment", "Fred \"Woot\" Rook"], @builder.to_a
125
+ end
126
+
127
+ def test_opt_builder_blob_writes_data_to_temp_file
128
+ @builder.blob "binary data"
129
+
130
+ filename = @builder.to_a.first
131
+ File.open(filename, "rb") do |f|
132
+ assert_equal "binary data", f.read
116
133
  end
134
+ end
117
135
 
136
+ def test_opt_builder_label
118
137
  # label for text should use 'label:"the string"' if specified
119
138
  [%w[mylabel mylabel],
120
139
  ['my " label', '"my \" label"'],
121
- ['Rock it, cuz i said so!', '"Rock it, cuz i said so!"'],
140
+ ["Rock it, cuz i said so!", '"Rock it, cuz i said so!"'],
122
141
  ["it's like this", '"it\'s like this"'],
123
- ['#$%^&*', '"#$%^&*"']].each do |labels|
142
+ ["\#$%^&*", '"#$%^&*"']].each do |labels|
124
143
  b = MojoMagick::OptBuilder.new
125
144
  b.label labels[0]
126
- assert_equal "label:#{labels[1]}", b.to_s
145
+ assert_equal ["label:#{labels[1]}"], b.to_a
127
146
  end
128
147
  end
129
148
  end
data/test/test_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
- require 'minitest/autorun'
2
- require 'minitest/pride'
3
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'init'))
4
- require 'fileutils'
5
- require 'tempfile'
6
- require 'rspec/expectations'
1
+ require "simplecov"
2
+ SimpleCov.start
3
+
4
+ require "minitest/autorun"
5
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "init"))
6
+ require "fileutils"
7
+ require "tempfile"
metadata CHANGED
@@ -1,17 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojo_magick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.6.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Midgley
8
8
  - Elliot Nelson
9
9
  - Jon Rogers
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-09-04 00:00:00.000000000 Z
13
+ date: 2021-05-01 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: bundle-audit
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: bundler
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
15
43
  - !ruby/object:Gem::Dependency
16
44
  name: minitest
17
45
  requirement: !ruby/object:Gem::Requirement
@@ -41,7 +69,7 @@ dependencies:
41
69
  - !ruby/object:Gem::Version
42
70
  version: '0'
43
71
  - !ruby/object:Gem::Dependency
44
- name: rspec-expectations
72
+ name: rubocop
45
73
  requirement: !ruby/object:Gem::Requirement
46
74
  requirements:
47
75
  - - ">="
@@ -55,7 +83,7 @@ dependencies:
55
83
  - !ruby/object:Gem::Version
56
84
  version: '0'
57
85
  - !ruby/object:Gem::Dependency
58
- name: simplecov
86
+ name: rubocop-performance
59
87
  requirement: !ruby/object:Gem::Requirement
60
88
  requirements:
61
89
  - - ">="
@@ -76,7 +104,12 @@ executables: []
76
104
  extensions: []
77
105
  extra_rdoc_files: []
78
106
  files:
107
+ - ".circleci/config.yml"
108
+ - ".github/dependabot.yml"
79
109
  - ".gitignore"
110
+ - ".rubocop-common.yml"
111
+ - ".rubocop-performance.yml"
112
+ - ".rubocop.yml"
80
113
  - ".ruby-version"
81
114
  - Gemfile
82
115
  - Gemfile.lock
@@ -87,25 +120,24 @@ files:
87
120
  - examples/composite.rb
88
121
  - init.rb
89
122
  - lib/image_magick/fonts.rb
90
- - lib/image_magick/resource_limits.rb
91
- - lib/initializers/hash.rb
92
123
  - lib/mojo_magick.rb
93
124
  - lib/mojo_magick/command_status.rb
125
+ - lib/mojo_magick/commands.rb
94
126
  - lib/mojo_magick/errors.rb
95
127
  - lib/mojo_magick/font.rb
96
128
  - lib/mojo_magick/opt_builder.rb
129
+ - lib/mojo_magick/util/font_parser.rb
97
130
  - lib/mojo_magick/util/parser.rb
98
131
  - lib/mojo_magick/version.rb
99
132
  - mojo_magick.gemspec
100
133
  - test/fixtures/5742.jpg
101
134
  - test/fixtures/not_an_image.jpg
135
+ - test/fixtures/roll with it.jpg
102
136
  - test/fixtures/zero_byte_image.jpg
137
+ - test/font_parser_test.rb
103
138
  - test/font_test.rb
104
- - test/fonts_test.rb
105
139
  - test/mojo_magick_test.rb
106
140
  - test/opt_builder_test.rb
107
- - test/parser_test.rb
108
- - test/resource_limits_test.rb
109
141
  - test/test_helper.rb
110
142
  homepage: http://github.com/rcode5/mojo_magick
111
143
  licenses:
@@ -127,7 +159,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
159
  requirements:
128
160
  - - ">="
129
161
  - !ruby/object:Gem::Version
130
- version: '0'
162
+ version: 2.6.0
131
163
  required_rubygems_version: !ruby/object:Gem::Requirement
132
164
  requirements:
133
165
  - - ">="
@@ -135,18 +167,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
167
  version: '0'
136
168
  requirements: []
137
169
  rubygems_version: 3.0.3
138
- signing_key:
170
+ signing_key:
139
171
  specification_version: 4
140
- summary: mojo_magick-0.5.7
172
+ summary: mojo_magick-0.6.5
141
173
  test_files:
142
174
  - test/fixtures/5742.jpg
143
175
  - test/fixtures/not_an_image.jpg
176
+ - test/fixtures/roll with it.jpg
144
177
  - test/fixtures/zero_byte_image.jpg
178
+ - test/font_parser_test.rb
145
179
  - test/font_test.rb
146
- - test/fonts_test.rb
147
180
  - test/mojo_magick_test.rb
148
181
  - test/opt_builder_test.rb
149
- - test/parser_test.rb
150
- - test/resource_limits_test.rb
151
182
  - test/test_helper.rb
152
183
  ...
@@ -1,91 +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
- options.each do |resource, value|
25
- @@resource_limits[resource.to_s.downcase.to_sym] = value.to_s
26
- end
27
- end
28
-
29
- # remove a limit
30
- def remove_limits(*options)
31
- @@resource_limits.delete_if do |resource, _value|
32
- idx = options.index(resource)
33
- resource == options.values_at(idx)[0].to_s.downcase.to_sym if idx
34
- end
35
- end
36
-
37
- # remove limits from resources
38
- def unset_limits(options = {})
39
- @@resource_limits = {}
40
- if options[:unset_env]
41
- ENV['MAGICK_AREA_LIMIT'] = nil
42
- ENV['MAGICK_MAP_LIMIT'] = nil
43
- ENV['MAGICK_MEMORY_LIMIT'] = nil
44
- ENV['MAGICK_DISK_LIMIT'] = nil
45
- end
46
- end
47
-
48
- # returns the default limits that imagemagick is using, when run with no "-limit" parameters
49
- # options:
50
- # :show_actual_values => true (default false) - will return integers instead of readable values
51
- def get_default_limits(options = {})
52
- parse_limits(options.merge(get_current_limits: false))
53
- end
54
-
55
- # returns the limits that imagemagick is running based on any "set_limits" calls
56
- def get_current_limits(options = {})
57
- parse_limits(options.merge(get_current_limits: true))
58
- end
59
-
60
- alias get_limits get_current_limits
61
-
62
- def parse_limits(options)
63
- show_actual_values = options[:show_actual_values]
64
- if options[:get_current_limits]
65
- status = execute('identify', '-list resource')
66
- raw_limits = status.return_value
67
- else
68
- # we run a raw shell command here to obtain
69
- # limits without applying command line limit params
70
- raw_limits = `identify -list resource`
71
- end
72
- actual_values, readable_values = parser.parse_limits(raw_limits)
73
- show_actual_values ? actual_values : readable_values
74
- end # parse_limits
75
-
76
- # returns a string suitable for passing as a set of imagemagick params
77
- # that contains all the limit constraints
78
- def get_limits_as_params
79
- retval = ''
80
- # we upcase the value here for newer versions of ImageMagick (>=6.8.x)
81
- @@resource_limits.each do |type, value|
82
- retval += " -limit #{type} #{value.upcase} "
83
- end
84
- retval
85
- end
86
-
87
- def parser
88
- @parser ||= MojoMagick::Util::Parser.new
89
- end
90
- end
91
- end