mojo_magick 0.6.2 → 0.6.6

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
  SHA256:
3
- metadata.gz: 7eb294af1589ca062245a0197a4a442f25c584fbbcbe7745d07f8976d6282c3d
4
- data.tar.gz: ddb865f0d484815352da4c5182d3674e94ec0296c1b8fb5d8579d7c461397cc1
3
+ metadata.gz: 2c213904c4dec75bf109ead8955bdc1421fb80d722929b2072af0ec679b1dc0e
4
+ data.tar.gz: 8c7baf9c786f55d456c05cea837c6c44986b2687c43e0027efdc927e024fe458
5
5
  SHA512:
6
- metadata.gz: 00fe14025e466113053a171d7866e32cbd9c20a011efc84ca543dba8cf62ef892c9b3c96f5a4cdcf11fd524fec939f11c806687668c57c5e6df0324ff8778e03
7
- data.tar.gz: 76c39990bc119753db01f883b5592f179e2c36eb2c3f4a0f401f87ea548bfab39c9de664f6d8de4b19576a83c285a5d42fc62df25972c65d7ce8fd313e1068b4
6
+ metadata.gz: 5b061d3bcbd1ca715a993b6028ac42a50114927a38bcf033fc9f3497fa8bc2a317e123f4b331c7266a7f713be344a0b8b020e81308b0724467673cf9c57a2c79
7
+ data.tar.gz: 047fff2383ad8914fdde29001e139ec346a029782e6760eb9701f9c9105cab6839a6d7f8c625e5a3eac52ee2d4c811c83467c428790031b01aa3484cf09d6e29
data/.circleci/config.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  version: 2.1
2
2
  orbs:
3
- ruby: circleci/ruby@1.1.2
3
+ ruby: circleci/ruby@1.1.4
4
4
 
5
5
  jobs:
6
6
  build:
@@ -22,3 +22,4 @@ jobs:
22
22
  - run:
23
23
  name: audit
24
24
  command: bundle exec bundle-audit update && bundle exec bundle-audit check
25
+ - ruby/rubocop-check
data/.rubocop.yml CHANGED
@@ -5,6 +5,7 @@ inherit_from:
5
5
  - ./.rubocop-common.yml
6
6
  - ./.rubocop-performance.yml
7
7
 
8
- Metrics/MethodLength:
9
- Exclude:
10
- - "**/*test.rb"
8
+ Metrics/CyclomaticComplexity:
9
+ Max: 10
10
+ Metrics/PerceivedComplexity:
11
+ Max: 10
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  group :test, :development do
4
- gem 'irb', require: false
5
- gem 'simplecov', require: false
4
+ gem "irb", require: false
5
+ gem "simplecov", require: false
6
6
  end
7
7
 
8
8
  gemspec
data/Gemfile.lock CHANGED
@@ -1,59 +1,54 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mojo_magick (0.6.2)
4
+ mojo_magick (0.6.6)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
- ast (2.4.1)
9
+ ast (2.4.2)
10
10
  bundle-audit (0.1.0)
11
11
  bundler-audit
12
- bundler-audit (0.7.0.1)
12
+ bundler-audit (0.8.0)
13
13
  bundler (>= 1.2.0, < 3)
14
- thor (>= 0.18, < 2)
15
- diff-lcs (1.4.4)
14
+ thor (~> 1.0)
16
15
  docile (1.3.5)
17
- io-console (0.5.7)
18
- irb (1.3.2)
19
- reline (>= 0.1.5)
20
- minitest (5.14.2)
21
- parallel (1.19.2)
22
- parser (2.7.2.0)
16
+ io-console (0.5.9)
17
+ irb (1.3.6)
18
+ reline (>= 0.2.5)
19
+ minitest (5.14.4)
20
+ parallel (1.20.1)
21
+ parser (3.0.2.0)
23
22
  ast (~> 2.4.1)
24
23
  rainbow (3.0.0)
25
- rake (13.0.1)
26
- regexp_parser (1.8.2)
27
- reline (0.2.2)
24
+ rake (13.0.6)
25
+ regexp_parser (2.1.1)
26
+ reline (0.2.6)
28
27
  io-console (~> 0.5)
29
- rexml (3.2.4)
30
- rspec-expectations (3.10.0)
31
- diff-lcs (>= 1.2.0, < 2.0)
32
- rspec-support (~> 3.10.0)
33
- rspec-support (3.10.0)
34
- rubocop (1.1.0)
28
+ rexml (3.2.5)
29
+ rubocop (1.18.4)
35
30
  parallel (~> 1.10)
36
- parser (>= 2.7.1.5)
31
+ parser (>= 3.0.0.0)
37
32
  rainbow (>= 2.2.2, < 4.0)
38
- regexp_parser (>= 1.8)
33
+ regexp_parser (>= 1.8, < 3.0)
39
34
  rexml
40
- rubocop-ast (>= 1.0.1)
35
+ rubocop-ast (>= 1.8.0, < 2.0)
41
36
  ruby-progressbar (~> 1.7)
42
- unicode-display_width (>= 1.4.0, < 2.0)
43
- rubocop-ast (1.1.1)
44
- parser (>= 2.7.1.5)
45
- rubocop-performance (1.8.1)
46
- rubocop (>= 0.87.0)
37
+ unicode-display_width (>= 1.4.0, < 3.0)
38
+ rubocop-ast (1.8.0)
39
+ parser (>= 3.0.1.1)
40
+ rubocop-performance (1.11.4)
41
+ rubocop (>= 1.7.0, < 2.0)
47
42
  rubocop-ast (>= 0.4.0)
48
- ruby-progressbar (1.10.1)
43
+ ruby-progressbar (1.11.0)
49
44
  simplecov (0.21.2)
50
45
  docile (~> 1.1)
51
46
  simplecov-html (~> 0.11)
52
47
  simplecov_json_formatter (~> 0.1)
53
48
  simplecov-html (0.12.3)
54
49
  simplecov_json_formatter (0.1.2)
55
- thor (1.0.1)
56
- unicode-display_width (1.7.0)
50
+ thor (1.1.0)
51
+ unicode-display_width (2.0.0)
57
52
 
58
53
  PLATFORMS
59
54
  ruby
@@ -65,7 +60,6 @@ DEPENDENCIES
65
60
  minitest
66
61
  mojo_magick!
67
62
  rake
68
- rspec-expectations
69
63
  rubocop
70
64
  rubocop-performance
71
65
  simplecov
data/README.md CHANGED
@@ -139,7 +139,7 @@ complex commands.
139
139
 
140
140
  ### Get a list of available fonts
141
141
 
142
- fonts = MojoMagick::get_fonts
142
+ fonts = MojoMagick::available_fonts
143
143
 
144
144
  fonts.first
145
145
  => #<MojoMagick::Font:0x000001015a8b90 @name="AvantGarde-Book", @family="AvantGarde", @style="Normal", @stretch="Normal", @weight="400", @glyphs="/usr/local/share/ghostscript/fonts/a010013l.pfb">
@@ -211,6 +211,28 @@ in the new code
211
211
 
212
212
  Recent Changes
213
213
  ==============
214
+
215
+ #### Version 0.6.6
216
+
217
+ * Bundle update
218
+
219
+ #### Version 0.6.5
220
+
221
+ * Bundle update
222
+
223
+ #### Version 0.6.4
224
+
225
+ * Fix issue with `identity -list font` returning exit code 1 on some systems (Ubuntu) with PR #https://github.com/rcode5/mojo_magick/pull/35
226
+ 35
227
+
228
+ #### Version 0.6.3
229
+
230
+ * Major cleanup and refactor (https://github.com/rcode5/mojo_magick/pull/33)
231
+ * Deprecated `MojoMagick.get_fonts` in favor of `MojoMagick.available_fonts`
232
+ * Moved `raw_command` and `execute` and `execute!` methods into their own module (and added deprecation warnings)
233
+ * Renamed `Util::Parser` to `Util::FontParser` because that's what it does
234
+ * Overall rubocop and ruby clean up
235
+
214
236
  #### Version 0.6.2
215
237
 
216
238
  * fix `annotate` option. Now it takes keyword arguments for geometry.
@@ -1,15 +1,8 @@
1
1
  module ImageMagick
2
- module Fonts
3
- def get_fonts
4
- @parser ||= MojoMagick::Util::Parser.new
5
- raw_fonts = begin
6
- raw_command("identify", "-list font")
7
- rescue Exception => e
8
- puts e
9
- puts "Failed to execute font list with raw_command - trying straight up execute"
10
- `convert -list font`
11
- end
12
- @parser.parse_fonts(raw_fonts)
2
+ class Fonts
3
+ def self.all
4
+ raw_fonts = MojoMagick::Commands.send(:execute, "identify", "-list", "font").return_value
5
+ MojoMagick::Util::FontParser.new(raw_fonts).parse
13
6
  end
14
7
  end
15
8
  end
data/lib/mojo_magick.rb CHANGED
@@ -1,14 +1,12 @@
1
- cwd = File.dirname(__FILE__)
2
- require "open3"
3
- initializers_dir = File.expand_path(File.join(cwd, "initializers"))
4
- Dir.glob(File.join(initializers_dir, "*.rb")).sort.each { |f| require f }
5
- require File.join(cwd, "mojo_magick/util/parser")
6
- require File.join(cwd, "mojo_magick/errors")
7
- require File.join(cwd, "mojo_magick/command_status")
8
- require File.join(cwd, "image_magick/fonts")
9
- require File.join(cwd, "mojo_magick/opt_builder")
10
- require File.join(cwd, "mojo_magick/font")
11
1
  require "tempfile"
2
+ require "open3"
3
+ require_relative "./mojo_magick/util/font_parser"
4
+ require_relative "./mojo_magick/errors"
5
+ require_relative "./mojo_magick/command_status"
6
+ require_relative "./mojo_magick/commands"
7
+ require_relative "./image_magick/fonts"
8
+ require_relative "./mojo_magick/opt_builder"
9
+ require_relative "./mojo_magick/font"
12
10
 
13
11
  # MojoMagick is a stateless set of module methods which present a convient interface
14
12
  # for accessing common tasks for ImageMagick command line library.
@@ -34,7 +32,7 @@ require "tempfile"
34
32
  #
35
33
  # Equivalent to:
36
34
  #
37
- # MojoMagick::raw_command('convert', 'source.jpg -crop 250x250+0+0\
35
+ # MojoMagick::Commands.raw_command('convert', 'source.jpg -crop 250x250+0+0\
38
36
  # +repage -strip -set comment "my favorite file" dest.jpg')
39
37
  #
40
38
  # Example #mogrify usage:
@@ -43,7 +41,7 @@ require "tempfile"
43
41
  #
44
42
  # Equivalent to:
45
43
  #
46
- # MojoMagick::raw_command('mogrify', '-shave 10x10 image.jpg')
44
+ # MojoMagick::Commands.raw_command('mogrify', '-shave 10x10 image.jpg')
47
45
  #
48
46
  # Example showing some additional options:
49
47
  #
@@ -60,34 +58,40 @@ require "tempfile"
60
58
  # bang (!) can be appended to command names to use the '+' versions
61
59
  # instead of '-' versions.
62
60
  #
63
- module MojoMagick
64
- extend ImageMagick::Fonts
65
61
 
66
- def self.windows?
67
- !(RUBY_PLATFORM =~ /win32/).nil?
62
+ module MojoMagickDeprecations
63
+ # rubocop:disable Naming/AccessorMethodName
64
+ def get_fonts
65
+ warn "DEPRECATION WARNING: #{__method__} is deprecated and will be removed with the next minor version release."\
66
+ " Please use `available_fonts` instead"
67
+ MojoMagick.available_fonts
68
68
  end
69
69
 
70
- def self.execute(command, *args)
71
- execute = "#{command} #{args}"
72
- out, outerr, status = Open3.capture3(command, *args.map(&:to_s))
73
- CommandStatus.new execute, out, outerr, status
74
- rescue Exception => e
75
- raise MojoError, "#{e.class}: #{e.message}"
70
+ # rubocop:enable Naming/AccessorMethodName
71
+ ### Moved to `Commands`
72
+ def execute!(*args)
73
+ warn "DEPRECATION WARNING: #{__method__} is deprecated and will be removed with the next minor version release."\
74
+ " Please use `MojoMagick::Commands.execute!` instead"
75
+ MojoMagick::Commands.send(:execute!, *args)
76
76
  end
77
77
 
78
- def self.execute!(command, *args)
79
- status = execute(command, *args)
80
- unless status.success?
81
- err_msg = "MojoMagick command failed: #{command}."
82
- raise(MojoFailed, "#{err_msg} (Exit status: #{status.exit_code})\n" +
83
- " Command: #{status.command}\n" +
84
- " Error: #{status.error}")
85
- end
86
- status.return_value
78
+ def execute(*args)
79
+ warn "DEPRECATION WARNING: #{__method__} is deprecated and will be removed with the next minor version release."\
80
+ " Please use `MojoMagick::Commands.execute!` instead"
81
+ MojoMagick::Commands.send(:execute, *args)
82
+ end
83
+
84
+ def raw_command(*args)
85
+ warn "DEPRECATION WARNING: #{__method__} is deprecated and will be removed with the next minor version release."\
86
+ " Please use `MojoMagick::Commands.execute!` instead"
87
+ MojoMagick::Commands.raw_command(*args)
87
88
  end
89
+ end
88
90
 
89
- def self.raw_command(*args)
90
- execute!(*args)
91
+ module MojoMagick
92
+ extend MojoMagickDeprecations
93
+ def self.windows?
94
+ !RUBY_PLATFORM.include(win32)
91
95
  end
92
96
 
93
97
  def self.shrink(source_file, dest_file, options)
@@ -105,44 +109,49 @@ module MojoMagick
105
109
  # resizes an image and returns the filename written to
106
110
  # options:
107
111
  # :width / :height => scale to these dimensions
108
- # :scale => pass scale options such as ">" to force shrink scaling only or "!" to force absolute width/height scaling (do not preserve aspect ratio)
112
+ # :scale => pass scale options such as ">" to force shrink scaling only or
113
+ # "!" to force absolute width/height scaling (do not preserve aspect ratio)
109
114
  # :percent => scale image to this percentage (do not specify :width/:height in this case)
110
115
  def self.resize(source_file, dest_file, options)
111
- scale_options = []
112
- scale_options << ">" unless options[:shrink_only].nil?
113
- scale_options << "<" unless options[:expand_only].nil?
114
- scale_options << "!" unless options[:absolute_aspect].nil?
115
- scale_options << "^" unless options[:fill].nil?
116
- scale_options = scale_options.join
117
-
116
+ scale_options = extract_scale_options(options)
117
+ geometry = extract_geometry_options(options)
118
118
  extras = []
119
- if !options[:width].nil? && !options[:height].nil?
120
- geometry = "#{options[:width]}X#{options[:height]}"
121
- elsif !options[:percent].nil?
122
- geometry = "#{options[:percent]}%"
123
- else
124
- raise MojoMagickError, "Unknown options for method resize: #{options.inspect}"
125
- end
126
119
  if !options[:fill].nil? && !options[:crop].nil?
127
120
  extras << "-gravity"
128
121
  extras << "Center"
129
122
  extras << "-extent"
130
123
  extras << geometry.to_s
131
124
  end
132
- raw_command("convert",
133
- source_file,
134
- "-resize", "#{geometry}#{scale_options}",
135
- *extras, dest_file)
125
+ Commands.raw_command("convert",
126
+ source_file,
127
+ "-resize", "#{geometry}#{scale_options}",
128
+ *extras, dest_file)
136
129
  dest_file
137
130
  end
138
131
 
132
+ def self.convert(source = nil, dest = nil)
133
+ opts = OptBuilder.new
134
+ opts.file source if source
135
+ yield opts
136
+ opts.file dest if dest
137
+
138
+ Commands.raw_command("convert", *opts.to_a)
139
+ end
140
+
141
+ def self.mogrify(dest = nil)
142
+ opts = OptBuilder.new
143
+ yield opts
144
+ opts.file dest if dest
145
+ Commands.raw_command("mogrify", *opts.to_a)
146
+ end
147
+
139
148
  def self.available_fonts
140
149
  # returns width, height of image if available, nil if not
141
150
  Font.all
142
151
  end
143
152
 
144
153
  def self.get_format(source_file, format_string)
145
- raw_command("identify", "-format", format_string, source_file)
154
+ Commands.raw_command("identify", "-format", format_string, source_file)
146
155
  end
147
156
 
148
157
  # returns an empty hash or a hash with :width and :height set (e.g. {:width => INT, :height => INT})
@@ -161,22 +170,6 @@ module MojoMagick
161
170
  { width: width, height: height }
162
171
  end
163
172
 
164
- def self.convert(source = nil, dest = nil)
165
- opts = OptBuilder.new
166
- opts.file source if source
167
- yield opts
168
- opts.file dest if dest
169
-
170
- raw_command("convert", *opts.to_a)
171
- end
172
-
173
- def self.mogrify(dest = nil)
174
- opts = OptBuilder.new
175
- yield opts
176
- opts.file dest if dest
177
- raw_command("mogrify", *opts.to_a)
178
- end
179
-
180
173
  def self.tempfile(*opts)
181
174
  data = opts[0]
182
175
  rest = opts[1]
@@ -188,4 +181,27 @@ module MojoMagick
188
181
  ensure
189
182
  file.close
190
183
  end
184
+
185
+ class << self
186
+ private
187
+
188
+ def extract_geometry_options(options)
189
+ if !options[:width].nil? && !options[:height].nil?
190
+ "#{options[:width]}X#{options[:height]}"
191
+ elsif !options[:percent].nil?
192
+ "#{options[:percent]}%"
193
+ else
194
+ raise MojoMagickError, "Resize requires width and height or percentage: #{options.inspect}"
195
+ end
196
+ end
197
+
198
+ def extract_scale_options(options)
199
+ [].tap { |scale_options|
200
+ scale_options << ">" unless options[:shrink_only].nil?
201
+ scale_options << "<" unless options[:expand_only].nil?
202
+ scale_options << "!" unless options[:absolute_aspect].nil?
203
+ scale_options << "^" unless options[:fill].nil?
204
+ }.join
205
+ end
206
+ end
191
207
  end
@@ -0,0 +1,32 @@
1
+ require_relative "opt_builder"
2
+
3
+ module MojoMagick
4
+ class Commands
5
+ def self.raw_command(*args)
6
+ execute!(*args)
7
+ end
8
+
9
+ class << self
10
+ private
11
+
12
+ def execute(command, *args)
13
+ execute = "#{command} #{args}"
14
+ out, outerr, status = Open3.capture3(command, *args.map(&:to_s))
15
+ CommandStatus.new execute, out, outerr, status
16
+ rescue StandardError => e
17
+ raise MojoError, "#{e.class}: #{e.message}"
18
+ end
19
+
20
+ def execute!(command, *args)
21
+ status = execute(command, *args)
22
+ unless status.success?
23
+ err_msg = "MojoMagick command failed: #{command}."
24
+ raise(MojoFailed, "#{err_msg} (Exit status: #{status.exit_code})\n" \
25
+ " Command: #{status.command}\n" \
26
+ " Error: #{status.error}")
27
+ end
28
+ status.return_value
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,7 @@
1
1
  module MojoMagick
2
2
  class MojoMagickException < StandardError; end
3
+
3
4
  class MojoError < MojoMagickException; end
5
+
4
6
  class MojoFailed < MojoMagickException; end
5
7
  end
@@ -7,7 +7,6 @@ module MojoMagick
7
7
  end
8
8
 
9
9
  def initialize(property_hash = {})
10
- property_hash.symbolize_keys!
11
10
  %i[name family style stretch weight glyphs].each do |f|
12
11
  setter = "#{f}="
13
12
  send(setter, property_hash[f])
@@ -15,7 +14,7 @@ module MojoMagick
15
14
  end
16
15
 
17
16
  def self.all
18
- ImageMagick::Font.all.map { |font_info| Font.new(font_info) }
17
+ ImageMagick::Fonts.all
19
18
  end
20
19
  end
21
20
  end
@@ -58,6 +58,7 @@ module MojoMagick
58
58
  end
59
59
 
60
60
  # Generic commands. Arguments will be formatted if necessary
61
+ # rubocop:disable Style/MissingRespondToMissing
61
62
  def method_missing(command, *args)
62
63
  @opts << if command.to_s[-1, 1] == "!"
63
64
  "+#{command.to_s.chop}"
@@ -68,10 +69,7 @@ module MojoMagick
68
69
  self
69
70
  end
70
71
 
71
- def to_s
72
- to_a.join " "
73
- end
74
-
72
+ # rubocop:enable Style/MissingRespondToMissing
75
73
  def to_a
76
74
  @opts.flatten
77
75
  end
@@ -0,0 +1,43 @@
1
+ # rubocop:disable Lint/AssignmentInCondition
2
+ module MojoMagick
3
+ module Util
4
+ class FontParser
5
+ attr_reader :raw_fonts
6
+
7
+ def initialize(raw_fonts)
8
+ @raw_fonts = raw_fonts
9
+ end
10
+
11
+ def parse
12
+ fonts = {}
13
+ enumerator = raw_fonts.split("\n").each
14
+ name = nil
15
+ while begin; line = enumerator.next; rescue StopIteration; line = nil; end
16
+ line.chomp!
17
+ line = enumerator.next if line_is_empty(line)
18
+ m = /^\s*Font:\s+(.*)$/.match(line)
19
+ if m
20
+ name = m[1].strip
21
+ fonts[name] = { name: name }
22
+ else
23
+ k, v = extract_key_value(line)
24
+ fonts[name][k] = v if k && name
25
+ end
26
+ end
27
+ fonts.values.map { |f| MojoMagick::Font.new f }
28
+ end
29
+
30
+ private
31
+
32
+ def extract_key_value(line)
33
+ key_val = line.split(":").map(&:strip)
34
+ [key_val[0].downcase.to_sym, key_val[1]]
35
+ end
36
+
37
+ def line_is_empty(line)
38
+ line.nil? || line.empty? || (/^\s+$/ =~ line)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ # rubocop:enable Lint/AssignmentInCondition
@@ -1,28 +1,20 @@
1
- # rubocop:disable Lint/AssignmentInCondition
1
+ require_relative "./font_parser"
2
2
  module MojoMagick
3
3
  module Util
4
4
  class Parser
5
- # handle parsing outputs from ImageMagick commands
5
+ attr_reader :raw_fonts
6
6
 
7
- def parse_fonts(raw_fonts)
8
- fonts = {}
9
- enumerator = raw_fonts.split(/\n/).each
10
- name = nil
11
- while begin; line = enumerator.next; rescue StopIteration; line = nil; end
12
- line.chomp!
13
- line = enumerator.next if line.nil? || line.empty? || (/^\s+$/ =~ line)
14
- m = /^\s*Font:\s+(.*)$/.match(line)
15
- if m
16
- name = m[1].strip
17
- fonts[name] = { name: name }
18
- else
19
- key_val = line.split(/:/).map(&:strip)
20
- k = key_val[0].downcase.to_sym
21
- v = key_val[1]
22
- fonts[name][k] = v if k && name
23
- end
24
- end
25
- fonts.values.map { |f| MojoMagick::Font.new f }
7
+ def initialize
8
+ warn "DEPRECATION WARNING: This class has been deprecated and will be removed with"\
9
+ " the next minor version release."\
10
+ " Please use `MojoMagick::Util::FontParser` instead"
11
+ end
12
+
13
+ def parse_fonts(fonts)
14
+ warn "DEPRECATION WARNING: #{__method__} has been deprecated and will be removed with"\
15
+ " the next minor version release."\
16
+ " Please use `MojoMagick::Util::FontParser#parse` instead"
17
+ FontParser.new(fonts).parse
26
18
  end
27
19
  end
28
20
  end
@@ -1,3 +1,3 @@
1
1
  module MojoMagick
2
- VERSION = "0.6.2"
2
+ VERSION = "0.6.6"
3
3
  end
data/mojo_magick.gemspec CHANGED
@@ -30,11 +30,10 @@ Gem::Specification.new do |s|
30
30
  s.test_files = `git ls-files -- {test,features}/*`.split("\n")
31
31
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
32
32
  s.require_paths = ["lib"]
33
- s.add_development_dependency("bundler")
34
33
  s.add_development_dependency("bundle-audit")
34
+ s.add_development_dependency("bundler")
35
35
  s.add_development_dependency("minitest")
36
36
  s.add_development_dependency("rake")
37
- s.add_development_dependency("rspec-expectations")
38
37
  s.add_development_dependency("rubocop")
39
38
  s.add_development_dependency("rubocop-performance")
40
39
 
@@ -19,10 +19,10 @@ IDENTIFY_FONT_RESPONSE = <<~EOFONT
19
19
 
20
20
  EOFONT
21
21
 
22
- class ParserTest < MiniTest::Test
22
+ class FontParserTest < MiniTest::Test
23
23
  def test_parse_fonts
24
- parser = MojoMagick::Util::Parser.new
25
- parsed_fonts = parser.parse_fonts(IDENTIFY_FONT_RESPONSE)
24
+ parser = MojoMagick::Util::FontParser.new(IDENTIFY_FONT_RESPONSE)
25
+ parsed_fonts = parser.parse
26
26
  assert_equal parsed_fonts.length, 2
27
27
  assert_equal parsed_fonts[1].style, "Italic"
28
28
  end
@@ -6,6 +6,11 @@ class MojoMagickTest < MiniTest::Test
6
6
  def setup
7
7
  @fixtures_path = File.expand_path(File.join(File.dirname(__FILE__), "fixtures"))
8
8
  @working_path = File.join(@fixtures_path, "tmp")
9
+
10
+ reset_images
11
+
12
+ @test_image = File.join(@working_path, "5742.jpg")
13
+ @out_image = File.join(@working_path, "out1.jpg")
9
14
  end
10
15
 
11
16
  def reset_images
@@ -14,11 +19,9 @@ class MojoMagickTest < MiniTest::Test
14
19
  Dir.glob(File.join(@fixtures_path, "*")).each do |file|
15
20
  FileUtils.cp(file, @working_path) if File.file?(file)
16
21
  end
17
- @test_image = File.join(@working_path, "5742.jpg")
18
22
  end
19
23
 
20
24
  def test_get_image_size
21
- reset_images
22
25
  orig_image_size = File.size(@test_image)
23
26
  retval = MojoMagick.get_image_size(@test_image)
24
27
  assert_equal orig_image_size, File.size(@test_image)
@@ -28,7 +31,6 @@ class MojoMagickTest < MiniTest::Test
28
31
 
29
32
  def test_image_resize
30
33
  # test basic resizing
31
- reset_images
32
34
  orig_image_size = File.size(@test_image)
33
35
  size_test_temp = Tempfile.new("mojo_test")
34
36
  size_test = size_test_temp.path
@@ -41,16 +43,15 @@ class MojoMagickTest < MiniTest::Test
41
43
  assert_equal 67, new_dimensions[:width]
42
44
 
43
45
  # we should be able to resize image right over itself
44
- retval = MojoMagick.resize(@test_image, @test_image, { width: 100, height: 100 })
46
+ retval = MojoMagick.resize(@test_image, @test_image, { width: 150, height: 150 })
45
47
  assert_equal @test_image, retval
46
48
  refute_equal orig_image_size, File.size(@test_image)
47
49
  new_dimensions = MojoMagick.get_image_size(@test_image)
48
- assert_equal 100, new_dimensions[:height]
49
- assert_equal 67, new_dimensions[:width]
50
+ assert_equal 150, new_dimensions[:height]
51
+ assert_equal 100, new_dimensions[:width]
50
52
  end
51
53
 
52
54
  def test_image_resize_with_percentage
53
- reset_images
54
55
  original_size = MojoMagick.get_image_size(@test_image)
55
56
  retval = MojoMagick.resize(@test_image, @test_image, { percent: 50 })
56
57
  assert_equal @test_image, retval
@@ -62,7 +63,6 @@ class MojoMagickTest < MiniTest::Test
62
63
 
63
64
  def test_shrink_with_big_dimensions
64
65
  # image shouldn't resize if we specify very large dimensions and specify "shrink_only"
65
- reset_images
66
66
  size_test_temp = Tempfile.new("mojo_test")
67
67
  size_test = size_test_temp.path
68
68
  retval = MojoMagick.shrink(@test_image, size_test, { width: 1000, height: 1000 })
@@ -73,7 +73,6 @@ class MojoMagickTest < MiniTest::Test
73
73
  end
74
74
 
75
75
  def test_shrink
76
- reset_images
77
76
  # image should resize if we specify small dimensions and shrink_only
78
77
  retval = MojoMagick.shrink(@test_image, @test_image, { width: 1000, height: 100 })
79
78
  assert_equal @test_image, retval
@@ -83,7 +82,6 @@ class MojoMagickTest < MiniTest::Test
83
82
  end
84
83
 
85
84
  def test_resize_with_shrink_only_options
86
- reset_images
87
85
  # image should resize if we specify small dimensions and shrink_only
88
86
  retval = MojoMagick.resize(@test_image, @test_image, { shrink_only: true, width: 400, height: 400 })
89
87
  assert_equal @test_image, retval
@@ -94,7 +92,6 @@ class MojoMagickTest < MiniTest::Test
94
92
 
95
93
  def test_expand_with_small_dim
96
94
  # image shouldn't resize if we specify small dimensions and expand_only
97
- reset_images
98
95
  _orig_image_size = File.size(@test_image)
99
96
  retval = MojoMagick.expand(@test_image, @test_image, { width: 10, height: 10 })
100
97
  assert_equal @test_image, retval
@@ -104,7 +101,6 @@ class MojoMagickTest < MiniTest::Test
104
101
  end
105
102
 
106
103
  def test_expand
107
- reset_images
108
104
  # image should resize if we specify large dimensions and expand_only
109
105
  retval = MojoMagick.expand(@test_image, @test_image, { width: 1000, height: 1000 })
110
106
  assert_equal @test_image, retval
@@ -125,7 +121,6 @@ class MojoMagickTest < MiniTest::Test
125
121
  end
126
122
 
127
123
  def test_resize_with_fill
128
- reset_images
129
124
  @test_image = File.join(@working_path, "5742.jpg")
130
125
  MojoMagick.resize(@test_image, @test_image, { fill: true, width: 100, height: 100 })
131
126
  dim = MojoMagick.get_image_size(@test_image)
@@ -134,7 +129,6 @@ class MojoMagickTest < MiniTest::Test
134
129
  end
135
130
 
136
131
  def test_resize_with_fill_and_crop
137
- reset_images
138
132
  @test_image = File.join(@working_path, "5742.jpg")
139
133
  MojoMagick.resize(@test_image, @test_image, { fill: true, crop: true, width: 150, height: 120 })
140
134
  dim = MojoMagick.get_image_size(@test_image)
@@ -151,7 +145,6 @@ class MojoMagickTest < MiniTest::Test
151
145
  end
152
146
 
153
147
  def test_label
154
- reset_images
155
148
  out_image = File.join(@working_path, "label_test.png")
156
149
 
157
150
  MojoMagick.convert do |c|
@@ -161,7 +154,6 @@ class MojoMagickTest < MiniTest::Test
161
154
  end
162
155
 
163
156
  def test_label_with_quote
164
- reset_images
165
157
  out_image = File.join(@working_path, "label_test.png")
166
158
 
167
159
  MojoMagick.convert do |c|
@@ -171,7 +163,6 @@ class MojoMagickTest < MiniTest::Test
171
163
  end
172
164
 
173
165
  def test_label_with_apostrophe
174
- reset_images
175
166
  out_image = File.join(@working_path, "label_test.png")
176
167
 
177
168
  MojoMagick.convert do |c|
@@ -181,7 +172,6 @@ class MojoMagickTest < MiniTest::Test
181
172
  end
182
173
 
183
174
  def test_label_with_quotes
184
- reset_images
185
175
  out_image = File.join(@working_path, "label_test.png")
186
176
 
187
177
  MojoMagick.convert do |c|
@@ -202,10 +192,7 @@ class MojoMagickTest < MiniTest::Test
202
192
  "Unable to find ImageMagick commandline error in the message"
203
193
  end
204
194
 
205
- def test_blob
206
- reset_images
207
-
208
- # RGB8 test
195
+ def test_blob_rgb
209
196
  data = (Array.new(16) { [rand > 0.5 ? 0 : 255] * 3 }).flatten
210
197
  bdata = data.pack "C" * data.size
211
198
  out = "out.png"
@@ -217,48 +204,57 @@ class MojoMagickTest < MiniTest::Test
217
204
  assert r[:width] == 4
218
205
  end
219
206
 
220
- def test_command_helpers
221
- reset_images
222
- test_image = File.join(@working_path, "5742.jpg")
223
- out_image = File.join(@working_path, "out1.jpg")
224
-
225
- # Simple convert test
207
+ def test_convert
226
208
  MojoMagick.convert do |c|
227
- c.file test_image
209
+ c.file @test_image
228
210
  c.crop "92x64+0+0"
229
211
  c.repage!
230
- c.file out_image
212
+ c.file @out_image
231
213
  end
232
- retval = MojoMagick.get_image_size(out_image)
214
+ retval = MojoMagick.get_image_size(@out_image)
233
215
  assert_equal 92, retval[:width]
234
216
  assert_equal 64, retval[:height]
217
+ end
235
218
 
219
+ def test_mogrify
220
+ MojoMagick.convert do |c|
221
+ c.file @test_image
222
+ c.file @out_image
223
+ end
236
224
  # Simple mogrify test
237
225
  MojoMagick.mogrify do |m|
238
226
  m.crop "32x32+0+0"
239
227
  m.repage!
240
- m.file out_image
228
+ m.file @out_image
241
229
  end
242
- retval = MojoMagick.get_image_size(out_image)
230
+ retval = MojoMagick.get_image_size(@out_image)
243
231
  assert_equal 32, retval[:width]
244
232
  assert_equal 32, retval[:height]
233
+ end
245
234
 
246
- # Convert test, using file shortcuts
247
- MojoMagick.convert(test_image, out_image) do |c|
235
+ def test_convert_crop_and_repage
236
+ MojoMagick.convert(@test_image, @out_image) do |c|
248
237
  c.crop "100x100+0+0"
249
238
  c.repage!
250
239
  end
251
- retval = MojoMagick.get_image_size(out_image)
240
+ retval = MojoMagick.get_image_size(@out_image)
252
241
  assert_equal 100, retval[:width]
253
242
  assert_equal 100, retval[:height]
243
+ end
254
244
 
255
- # Mogrify test, using file shortcut
256
- MojoMagick.mogrify(out_image) { |m| m.shave("25x25").repage! }
257
- retval = MojoMagick.get_image_size(out_image)
245
+ def test_mogrify_with_shave_and_repage
246
+ MojoMagick.convert do |c|
247
+ c.file @test_image
248
+ c.crop "100x100+0+0"
249
+ c.file @out_image
250
+ end
251
+ MojoMagick.mogrify(@out_image) { |m| m.shave("25x25").repage! }
252
+ retval = MojoMagick.get_image_size(@out_image)
258
253
  assert_equal 50, retval[:width]
259
254
  assert_equal 50, retval[:height]
255
+ end
260
256
 
261
- # RGB8 test
257
+ def test_convert_rgb
262
258
  bdata = "aaaaaabbbbbbccc"
263
259
  out = "out.png"
264
260
  MojoMagick.convert do |c|
@@ -268,7 +264,9 @@ class MojoMagickTest < MiniTest::Test
268
264
  r = MojoMagick.get_image_size(out)
269
265
  assert r[:height] == 1
270
266
  assert r[:width] == 5
267
+ end
271
268
 
269
+ def test_convert_rgba
272
270
  bdata = "1111222233334444"
273
271
  out = "out.png"
274
272
  MojoMagick.convert do |c|
@@ -279,4 +277,12 @@ class MojoMagickTest < MiniTest::Test
279
277
  assert r[:height] == 1
280
278
  assert r[:width] == 4
281
279
  end
280
+
281
+ def test_available_fonts
282
+ fonts = MojoMagick.available_fonts
283
+ assert fonts.is_a? Array
284
+ assert fonts.length > 1
285
+ assert fonts.first.name
286
+ assert(fonts.first.name.is_a?(String))
287
+ end
282
288
  end
@@ -19,12 +19,12 @@ class MojoMagickOptBuilderTest < MiniTest::Test
19
19
  assert_equal %w[-annotate 0 it's], @builder.to_a
20
20
  end
21
21
 
22
- def test_annotate_with_full_args
22
+ def test_annotate_with_multiple_args
23
23
  @builder.annotate "5 it's"
24
- assert_equal %w[-annotate 5 it's], @builder.to_a
24
+ assert_equal ["-annotate", "0", "5 it's"], @builder.to_a
25
25
  end
26
26
 
27
- def test_annotate_with_full_args
27
+ def test_annotate_with_geometry_args
28
28
  @builder.annotate "this thing", geometry: 3
29
29
  assert_equal ["-annotate", "3", "this thing"], @builder.to_a
30
30
  end
@@ -36,95 +36,104 @@ class MojoMagickOptBuilderTest < MiniTest::Test
36
36
 
37
37
  def test_option_builder_with_blocks
38
38
  # Passing in basic commands produces a string
39
- b = MojoMagick::OptBuilder.new
40
- b.image_block do
41
- b.background "red"
39
+ @builder.image_block do
40
+ @builder.background "red"
42
41
  end
43
- b.image_block do
44
- b.background "blue"
42
+ @builder.image_block do
43
+ @builder.background "blue"
45
44
  end
46
- assert_equal ['\(', "-background", "red", '\)', '\(', "-background", "blue", '\)'], b.to_a
45
+ assert_equal ['\(', "-background", "red", '\)', '\(', "-background", "blue", '\)'], @builder.to_a
47
46
  end
48
47
 
49
48
  def test_option_builder_with_hex_colors
50
- b = MojoMagick::OptBuilder.new
51
- b.background "#000000"
52
- assert_equal %w[-background #000000], b.to_a
49
+ @builder.background "#000000"
50
+ assert_equal %w[-background #000000], @builder.to_a
53
51
  end
54
52
 
55
53
  def test_option_builder
56
- # Passing in basic commands produces a string
57
- b = MojoMagick::OptBuilder.new
58
- b.strip
59
- b.repage
60
- assert_equal "-strip -repage", b.to_s
54
+ @builder.strip
55
+ @builder.repage
56
+ assert_equal %w[-strip -repage], @builder.to_a
57
+ end
61
58
 
62
- # Chaining commands works
63
- b = MojoMagick::OptBuilder.new.strip.repage
64
- 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
65
62
 
63
+ def test_opt_builder_interpreting_bang_suffix
66
64
  # Bang (!) indicates the plus version of commands
67
- b = MojoMagick::OptBuilder.new
68
- b.repage
69
- b.repage!
70
- assert_equal "-repage +repage", b.to_s
71
65
 
72
- # Accepts raw data as-is
73
- b = MojoMagick::OptBuilder.new
74
- b.opt1
75
- b << "a ! b !"
76
- b.opt2
77
- 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
78
70
 
71
+ def test_opt_builder_pushing_raw_data
79
72
  # Treats an array of raw data as different arguments
80
- b = MojoMagick::OptBuilder.new
81
- b << ["leave this data", "alone"]
82
- assert_equal "leave this data alone", b.to_s
83
-
84
- # String includes command arguments
85
- b = MojoMagick::OptBuilder.new
86
- b.extent "256x256+0+0"
87
- b.crop "64x64"
88
- assert_equal %w[-extent 256x256+0+0 -crop 64x64], b.to_a
89
-
90
- # Arguments are quoted (doublequote) if appropriate
91
- b = MojoMagick::OptBuilder.new
92
- b.comment "white space"
93
- b.comment "w&b"
94
- b.crop "6x6^"
95
- assert_equal ["-comment", "white space", "-comment", "w&b", "-crop", "6x6^"], b.to_a
96
-
97
- # Existing doublequotes are escaped
98
- b = MojoMagick::OptBuilder.new
99
- b.comment 'Fred "Woot" Rook'
100
- assert_equal ["-comment", "Fred \"Woot\" Rook"], b.to_a
101
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
102
85
  # Multi-argument commands should not be quoted together
103
- b = MojoMagick::OptBuilder.new
104
- b.set "comment", 'the "best" comment'
105
- assert_equal ["-set", "comment", "the \"best\" comment"], b.to_a
106
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
107
101
  # File and files are helper methods
108
- b = MojoMagick::OptBuilder.new
109
- b.files "source.jpg", "source2.jpg"
110
- b.append
111
- b.crop "64x64"
112
- b.file "dest%d.jpg"
113
- assert_equal %w[source.jpg source2.jpg -append -crop 64x64 dest%d.jpg], b.to_a
114
-
115
- # Files are quoted (doublequote) if appropriate
116
- b = MojoMagick::OptBuilder.new
117
- b.file "probably on windows.jpg"
118
- assert_equal ["probably on windows.jpg"], b.to_a
119
-
120
- # Blob is a shortcut for the #tempfile helper method
121
- b = MojoMagick::OptBuilder.new
122
- b.blob "binary data"
123
- filename = b.to_s
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
124
131
  File.open(filename, "rb") do |f|
125
132
  assert_equal "binary data", f.read
126
133
  end
134
+ end
127
135
 
136
+ def test_opt_builder_label
128
137
  # label for text should use 'label:"the string"' if specified
129
138
  [%w[mylabel mylabel],
130
139
  ['my " label', '"my \" label"'],
@@ -133,7 +142,7 @@ class MojoMagickOptBuilderTest < MiniTest::Test
133
142
  ["\#$%^&*", '"#$%^&*"']].each do |labels|
134
143
  b = MojoMagick::OptBuilder.new
135
144
  b.label labels[0]
136
- assert_equal "label:#{labels[1]}", b.to_s
145
+ assert_equal ["label:#{labels[1]}"], b.to_a
137
146
  end
138
147
  end
139
148
  end
data/test/test_helper.rb CHANGED
@@ -5,4 +5,3 @@ require "minitest/autorun"
5
5
  require File.expand_path(File.join(File.dirname(__FILE__), "..", "init"))
6
6
  require "fileutils"
7
7
  require "tempfile"
8
- require "rspec/expectations"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojo_magick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Midgley
@@ -10,10 +10,10 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-01-23 00:00:00.000000000 Z
13
+ date: 2021-08-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: bundler
16
+ name: bundle-audit
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
@@ -27,7 +27,7 @@ dependencies:
27
27
  - !ruby/object:Gem::Version
28
28
  version: '0'
29
29
  - !ruby/object:Gem::Dependency
30
- name: bundle-audit
30
+ name: bundler
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - ">="
@@ -68,20 +68,6 @@ dependencies:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
- - !ruby/object:Gem::Dependency
72
- name: rspec-expectations
73
- requirement: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- type: :development
79
- prerelease: false
80
- version_requirements: !ruby/object:Gem::Requirement
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- version: '0'
85
71
  - !ruby/object:Gem::Dependency
86
72
  name: rubocop
87
73
  requirement: !ruby/object:Gem::Requirement
@@ -123,7 +109,6 @@ files:
123
109
  - ".gitignore"
124
110
  - ".rubocop-common.yml"
125
111
  - ".rubocop-performance.yml"
126
- - ".rubocop-rspec.yml"
127
112
  - ".rubocop.yml"
128
113
  - ".ruby-version"
129
114
  - Gemfile
@@ -135,12 +120,13 @@ files:
135
120
  - examples/composite.rb
136
121
  - init.rb
137
122
  - lib/image_magick/fonts.rb
138
- - lib/initializers/hash.rb
139
123
  - lib/mojo_magick.rb
140
124
  - lib/mojo_magick/command_status.rb
125
+ - lib/mojo_magick/commands.rb
141
126
  - lib/mojo_magick/errors.rb
142
127
  - lib/mojo_magick/font.rb
143
128
  - lib/mojo_magick/opt_builder.rb
129
+ - lib/mojo_magick/util/font_parser.rb
144
130
  - lib/mojo_magick/util/parser.rb
145
131
  - lib/mojo_magick/version.rb
146
132
  - mojo_magick.gemspec
@@ -148,11 +134,10 @@ files:
148
134
  - test/fixtures/not_an_image.jpg
149
135
  - test/fixtures/roll with it.jpg
150
136
  - test/fixtures/zero_byte_image.jpg
137
+ - test/font_parser_test.rb
151
138
  - test/font_test.rb
152
- - test/fonts_test.rb
153
139
  - test/mojo_magick_test.rb
154
140
  - test/opt_builder_test.rb
155
- - test/parser_test.rb
156
141
  - test/test_helper.rb
157
142
  homepage: http://github.com/rcode5/mojo_magick
158
143
  licenses:
@@ -184,16 +169,15 @@ requirements: []
184
169
  rubygems_version: 3.0.3
185
170
  signing_key:
186
171
  specification_version: 4
187
- summary: mojo_magick-0.6.2
172
+ summary: mojo_magick-0.6.6
188
173
  test_files:
189
174
  - test/fixtures/5742.jpg
190
175
  - test/fixtures/not_an_image.jpg
191
176
  - test/fixtures/roll with it.jpg
192
177
  - test/fixtures/zero_byte_image.jpg
178
+ - test/font_parser_test.rb
193
179
  - test/font_test.rb
194
- - test/fonts_test.rb
195
180
  - test/mojo_magick_test.rb
196
181
  - test/opt_builder_test.rb
197
- - test/parser_test.rb
198
182
  - test/test_helper.rb
199
183
  ...
data/.rubocop-rspec.yml DELETED
@@ -1,33 +0,0 @@
1
- # Request and system specs by definition do not test specific classes/modules,
2
- # so they are excluded from following the `describe ClassOrModule` rule.
3
- RSpec/DescribeClass:
4
- Exclude:
5
- - "spec/features/**/*"
6
- - "spec/requests/**/*"
7
- - "spec/system/**/*"
8
-
9
- # Prefer short examples but allow some flexibility (up to 12 lines). System
10
- # specs are excluded from this cop because they often involve many sequential
11
- # steps, and forcing these to be shorter can make them harder to follow.
12
- RSpec/ExampleLength:
13
- Max: 12 # Default is 5
14
- Exclude:
15
- - "spec/features/**/*"
16
- - "spec/system/**/*"
17
-
18
- # If an `it` block does not have a description (i.e. the example relies on
19
- # RSpec magic to infer the description), then prefer it use the `is_expected`
20
- # syntax instead of `expect(subject)`, like this:
21
- # it { is_expected.to be_truthy }
22
- RSpec/ImplicitSubject:
23
- EnforcedStyle: single_statement_only
24
-
25
- # Ideal BDD is to have one `expect` per example (so that each specification can
26
- # have corresponding documentation in the form of an `it` block), but we allow
27
- # some flexibility (up to 3). System specs are often long capybara flows with
28
- # many expectations, so we exclude them from this cop.
29
- RSpec/MultipleExpectations:
30
- Max: 3 # Default is 1
31
- Exclude:
32
- - "spec/features/**/*"
33
- - "spec/system/**/*"
@@ -1,12 +0,0 @@
1
- class Hash
2
- def symbolize_keys!
3
- keys.each do |key|
4
- self[begin
5
- key.to_sym
6
- rescue StandardError
7
- key
8
- end || key] = delete(key)
9
- end
10
- self
11
- end
12
- end
data/test/fonts_test.rb DELETED
@@ -1,11 +0,0 @@
1
- require_relative "test_helper"
2
-
3
- class FontsTest < MiniTest::Test
4
- def test_get_fonts
5
- fonts = MojoMagick.get_fonts
6
- assert fonts.is_a? Array
7
- assert fonts.length > 1
8
- assert fonts.first.name
9
- assert(fonts.first.name.is_a?(String))
10
- end
11
- end