mega-quick-box 0.0.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.
@@ -0,0 +1,274 @@
1
+ require "mini_magick/shell"
2
+
3
+ module MiniMagick
4
+ ##
5
+ # Class that wraps command-line tools directly, as opposed MiniMagick::Image
6
+ # which is more high-level.
7
+ #
8
+ # @example
9
+ # MiniMagick.mogrify do |mogrify|
10
+ # mogrify.resize "500x500"
11
+ # mogrify << "path/to/image.jpg"
12
+ # end
13
+ #
14
+ class Tool
15
+
16
+ CREATION_OPERATORS = %w[xc canvas logo rose gradient radial-gradient plasma
17
+ pattern text pango]
18
+
19
+ ##
20
+ # Aside from classic instantiation, it also accepts a block, and then
21
+ # executes the command in the end.
22
+ #
23
+ # @example
24
+ # puts MiniMagick.identify(&:version)
25
+ #
26
+ # @return [MiniMagick::Tool, String] If no block is given, returns an
27
+ # instance of the tool, if block is given, returns the output of the
28
+ # command.
29
+ #
30
+ def self.new(name, **options)
31
+ instance = super
32
+
33
+ if block_given?
34
+ yield instance
35
+ instance.call
36
+ else
37
+ instance
38
+ end
39
+ end
40
+
41
+ # @private
42
+ attr_reader :name, :args
43
+
44
+ # @param name [String]
45
+ # @param options [Hash]
46
+ # @option options [Boolean] :errors Whether to raise errors on non-zero
47
+ # exit codes.
48
+ # @option options [Boolean] :warnings Whether to print warnings to stderrr.
49
+ # @option options [String] :stdin Content to send to standard input stream.
50
+ # @example
51
+ # MiniMagick.identify(errors: false) do |identify|
52
+ # identify.help # returns exit status 1, which would otherwise throw an error
53
+ # end
54
+ def initialize(name, **options)
55
+ @name = name
56
+ @args = []
57
+ @options = options
58
+ end
59
+
60
+ ##
61
+ # Executes the command that has been built up.
62
+ #
63
+ # @example
64
+ # mogrify = MiniMagick.mogrify
65
+ # mogrify.resize("500x500")
66
+ # mogrify << "path/to/image.jpg"
67
+ # mogrify.call # executes `mogrify -resize 500x500 path/to/image.jpg`
68
+ #
69
+ # @example
70
+ # mogrify = MiniMagick.mogrify
71
+ # # build the command
72
+ # mogrify.call do |stdout, stderr, status|
73
+ # # ...
74
+ # end
75
+ #
76
+ # @yield [Array] Optionally yields stdout, stderr, and exit status
77
+ #
78
+ # @return [String] Returns the output of the command
79
+ #
80
+ def call(**options)
81
+ options = @options.merge(options)
82
+ options[:warnings] = false if block_given?
83
+
84
+ shell = MiniMagick::Shell.new
85
+ stdout, stderr, status = shell.run(command, **options)
86
+ yield stdout, stderr, status if block_given?
87
+
88
+ stdout.chomp("\n")
89
+ end
90
+
91
+ ##
92
+ # The currently built-up command.
93
+ #
94
+ # @return [Array<String>]
95
+ #
96
+ # @example
97
+ # mogrify = MiniMagick.mogrify
98
+ # mogrify.resize "500x500"
99
+ # mogrify.contrast
100
+ # mogrify.command #=> ["mogrify", "-resize", "500x500", "-contrast"]
101
+ #
102
+ def command
103
+ [*executable, *args]
104
+ end
105
+
106
+ ##
107
+ # The executable used for this tool. Respects
108
+ # {MiniMagick::Configuration#cli_prefix}.
109
+ #
110
+ # @return [Array<String>]
111
+ #
112
+ # @example
113
+ # identify = MiniMagick.identify
114
+ # identify.executable #=> ["magick", "identify"]
115
+ #
116
+ # @example
117
+ # MiniMagick.configure do |config|
118
+ # config.cli_prefix = ['firejail', '--force']
119
+ # end
120
+ # identify = MiniMagick.identify
121
+ # identify.executable #=> ["firejail", "--force", "magick", "identify"]
122
+ #
123
+ def executable
124
+ exe = Array(MiniMagick.cli_prefix).dup
125
+ exe << "magick" if MiniMagick.imagemagick7? && name != "magick"
126
+ exe << "gm" if MiniMagick.graphicsmagick
127
+ exe << name
128
+ end
129
+
130
+ ##
131
+ # Appends raw options, useful for appending image paths.
132
+ #
133
+ # @return [self]
134
+ #
135
+ def <<(arg)
136
+ args << arg.to_s
137
+ self
138
+ end
139
+
140
+ ##
141
+ # Merges a list of raw options.
142
+ #
143
+ # @return [self]
144
+ #
145
+ def merge!(new_args)
146
+ new_args.each { |arg| self << arg }
147
+ self
148
+ end
149
+
150
+ ##
151
+ # Changes the last operator to its "plus" form.
152
+ #
153
+ # @example
154
+ # MiniMagick.mogrify do |mogrify|
155
+ # mogrify.antialias.+
156
+ # mogrify.distort.+("Perspective", "0,0,4,5 89,0,45,46")
157
+ # end
158
+ # # executes `mogrify +antialias +distort Perspective '0,0,4,5 89,0,45,46'`
159
+ #
160
+ # @return [self]
161
+ #
162
+ def +(*values)
163
+ args[-1] = args[-1].sub(/^-/, '+')
164
+ self.merge!(values)
165
+ self
166
+ end
167
+
168
+ ##
169
+ # Create an ImageMagick stack in the command (surround.
170
+ #
171
+ # @example
172
+ # MiniMagick.convert do |convert|
173
+ # convert << "wand.gif"
174
+ # convert.stack do |stack|
175
+ # stack << "wand.gif"
176
+ # stack.rotate(30)
177
+ # end
178
+ # convert.append.+
179
+ # convert << "images.gif"
180
+ # end
181
+ # # executes `convert wand.gif \( wizard.gif -rotate 30 \) +append images.gif`
182
+ #
183
+ def stack(*args)
184
+ self << "("
185
+ args.each do |value|
186
+ case value
187
+ when Hash then value.each { |key, value| send(key, *value) }
188
+ when String then self << value
189
+ end
190
+ end
191
+ yield self if block_given?
192
+ self << ")"
193
+ end
194
+
195
+ ##
196
+ # Adds ImageMagick's pseudo-filename `-` for standard input.
197
+ #
198
+ # @example
199
+ # identify = MiniMagick.identify
200
+ # identify.stdin
201
+ # identify.call(stdin: image_content)
202
+ # # executes `identify -` with the given standard input
203
+ #
204
+ def stdin
205
+ self << "-"
206
+ end
207
+
208
+ ##
209
+ # Adds ImageMagick's pseudo-filename `-` for standard output.
210
+ #
211
+ # @example
212
+ # content = MiniMagick.convert do |convert|
213
+ # convert << "input.jpg"
214
+ # convert.auto_orient
215
+ # convert.stdout
216
+ # end
217
+ # # executes `convert input.jpg -auto-orient -` which returns file contents
218
+ #
219
+ def stdout
220
+ self << "-"
221
+ end
222
+
223
+ ##
224
+ # Define creator operator methods
225
+ #
226
+ # @example
227
+ # mogrify = MiniMagick::Tool.new("mogrify")
228
+ # mogrify.canvas("khaki")
229
+ # mogrify.command.join(" ") #=> "mogrify canvas:khaki"
230
+ #
231
+ CREATION_OPERATORS.each do |operator|
232
+ define_method(operator.tr('-', '_')) do |value = nil|
233
+ self << "#{operator}:#{value}"
234
+ self
235
+ end
236
+ end
237
+
238
+ ##
239
+ # This option is a valid ImageMagick option, but it's also a Ruby method,
240
+ # so we need to override it so that it correctly acts as an option method.
241
+ #
242
+ def clone(*args)
243
+ self << '-clone'
244
+ self.merge!(args)
245
+ self
246
+ end
247
+
248
+ ##
249
+ # Any undefined method will be transformed into a CLI option
250
+ #
251
+ # @example
252
+ # mogrify = MiniMagick::Tool.new("mogrify")
253
+ # mogrify.adaptive_blur("...")
254
+ # mogrify.foo_bar
255
+ # mogrify.command.join(" ") # => "mogrify -adaptive-blur ... -foo-bar"
256
+ #
257
+ def method_missing(name, *args)
258
+ option = "-#{name.to_s.tr('_', '-')}"
259
+ self << option
260
+ self.merge!(args)
261
+ self
262
+ end
263
+
264
+ # deprecated tool subclasses
265
+ %w[animate compare composite conjure convert display identify import magick mogrify montage stream].each do |tool|
266
+ const_set(tool.capitalize, Class.new(self) {
267
+ define_method(:initialize) do |*args|
268
+ super(tool, *args)
269
+ end
270
+ })
271
+ deprecate_constant(tool.capitalize)
272
+ end
273
+ end
274
+ end
@@ -0,0 +1,33 @@
1
+ require "tempfile"
2
+
3
+ module MiniMagick
4
+ # @private
5
+ module Utilities
6
+
7
+ module_function
8
+
9
+ ##
10
+ # Cross-platform way of finding an executable in the $PATH.
11
+ #
12
+ # @example
13
+ # MiniMagick::Utilities.which('ruby') #=> "/usr/bin/ruby"
14
+ #
15
+ def which(cmd)
16
+ exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
17
+ ENV.fetch('PATH').split(File::PATH_SEPARATOR).each do |path|
18
+ exts.each do |ext|
19
+ exe = File.join(path, "#{cmd}#{ext}")
20
+ return exe if File.executable? exe
21
+ end
22
+ end
23
+ nil
24
+ end
25
+
26
+ def tempfile(extension)
27
+ tempfile = Tempfile.new(["mini_magick", extension], MiniMagick.tmpdir, binmode: true)
28
+ yield tempfile if block_given?
29
+ tempfile.close
30
+ tempfile
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ module MiniMagick
2
+ ##
3
+ # @return [Gem::Version]
4
+ #
5
+ def self.version
6
+ Gem::Version.new VERSION::STRING
7
+ end
8
+
9
+ module VERSION
10
+ MAJOR = 5
11
+ MINOR = 3
12
+ TINY = 1
13
+ PRE = nil
14
+
15
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
16
+ end
17
+ end
@@ -0,0 +1,40 @@
1
+ require 'mini_magick/version'
2
+ require 'mini_magick/configuration'
3
+ require 'mini_magick/utilities'
4
+ require 'mini_magick/tool'
5
+ require 'mini_magick/image'
6
+
7
+ module MiniMagick
8
+
9
+ Error = Class.new(RuntimeError)
10
+ Invalid = Class.new(StandardError)
11
+ TimeoutError = Class.new(Error)
12
+
13
+ extend MiniMagick::Configuration
14
+
15
+ ##
16
+ # Checks whether ImageMagick 7 is installed.
17
+ #
18
+ # @return [Boolean]
19
+ def self.imagemagick7?
20
+ return false if graphicsmagick
21
+ return @imagemagick7 if defined?(@imagemagick7)
22
+ @imagemagick7 = !!MiniMagick::Utilities.which("magick")
23
+ end
24
+
25
+ %w[animate compare composite conjure convert display identify import mogrify montage stream].each do |tool|
26
+ define_singleton_method(tool) do |**options, &block|
27
+ name = imagemagick7? && tool == "convert" ? "magick" : tool
28
+ MiniMagick::Tool.new(name, **options, &block)
29
+ end
30
+ end
31
+
32
+ ##
33
+ # Returns ImageMagick version.
34
+ #
35
+ # @return [String]
36
+ def self.cli_version
37
+ output = MiniMagick.identify(&:version)
38
+ output[/\d+\.\d+\.\d+(-\d+)?/]
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,53 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mega-quick-box
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrey78
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2026-07-06 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: University research based on mini_magick
13
+ email:
14
+ - cakoc614@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - mega-quick-box.gemspec
20
+ - mini_magick-5.3.1/MIT-LICENSE
21
+ - mini_magick-5.3.1/README.md
22
+ - mini_magick-5.3.1/Rakefile
23
+ - mini_magick-5.3.1/lib/mini_magick.rb
24
+ - mini_magick-5.3.1/lib/mini_magick/configuration.rb
25
+ - mini_magick-5.3.1/lib/mini_magick/image.rb
26
+ - mini_magick-5.3.1/lib/mini_magick/image/info.rb
27
+ - mini_magick-5.3.1/lib/mini_magick/shell.rb
28
+ - mini_magick-5.3.1/lib/mini_magick/tool.rb
29
+ - mini_magick-5.3.1/lib/mini_magick/utilities.rb
30
+ - mini_magick-5.3.1/lib/mini_magick/version.rb
31
+ homepage: https://rubygems.org/profiles/Andrey78
32
+ licenses:
33
+ - MIT
34
+ metadata:
35
+ source_code_uri: https://github.com/Andrey78/mega-quick-box
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ requirements: []
50
+ rubygems_version: 3.6.2
51
+ specification_version: 4
52
+ summary: Research test
53
+ test_files: []