pixage 0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENCE +20 -0
- data/README.md +107 -0
- data/bin/pixage +104 -0
- data/data/defaults.yml +5 -0
- data/lib/pixage.rb +1 -0
- data/lib/pixage/cli.rb +32 -0
- data/lib/pixage/diagnosis.rb +29 -0
- data/lib/pixage/images/compare.rb +52 -0
- data/lib/pixage/images/convert.rb +42 -0
- data/lib/pixage/logger.rb +19 -0
- data/lib/pixage/params.rb +48 -0
- data/lib/pixage/version +1 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 52d34826bb6e2ef1a6082661f16303ca8f46a8f3
|
4
|
+
data.tar.gz: 38dcd13502b36e1c36b04b6b3ce4c9722b52dc65
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5b575bfbffeb7dbac743eb0f4ce04e072ba8369f6bea694266ffe4a74536fcf63c566a1b1a1b8f6b4485dea2c3968ee8970e74344c00533b0f0ce955c2df0bc9
|
7
|
+
data.tar.gz: edc6b627e69626ffaa78f69647ad732f4c88226c00bc2bb00406f535a61028ab0d08b4d512ca50f5f96ec06eed58208076e2ae7ca627358bdc0c5aaf7de13817
|
data/LICENCE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2015-2016 Kaushal Rupani
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
# pixage
|
2
|
+
|
3
|
+
**PIX**el perfect application using visual regression testing with help of im**AGE**-magick gives birth to **PIXAGE**
|
4
|
+
Pixels + Image = Pixage
|
5
|
+
|
6
|
+
A utility which can be used manually or be integrated with an existing selenium-ruby or appium-ruby automation framework to perform __*visual regression testing*__ of screenshots.
|
7
|
+
|
8
|
+
|
9
|
+
## Table of contents
|
10
|
+
- [Installation](#installation)
|
11
|
+
- [Install using gem command](#gem)
|
12
|
+
- [Install using bundler](#bundler)
|
13
|
+
- [Dependency](#dependency)
|
14
|
+
- [Usage](#usage)
|
15
|
+
- [CLI Usage](#cli)
|
16
|
+
- [Automation Usage](#automation)
|
17
|
+
- [Contributing](#contributing)
|
18
|
+
- [Issues](#issues)
|
19
|
+
|
20
|
+
|
21
|
+
## Installation
|
22
|
+
There are multiple ways in which you can install and use pixage gem.
|
23
|
+
You must have Ruby installed before you can install this gem.
|
24
|
+
|
25
|
+
### <a name="gem" /> 1. Install using gem command
|
26
|
+
Just use following command from you Terminal.
|
27
|
+
```
|
28
|
+
gem install pixage
|
29
|
+
```
|
30
|
+
|
31
|
+
### <a name="bundler" /> 2. Install using bundler
|
32
|
+
You can include it in your Gemfile and run bundle install.
|
33
|
+
```
|
34
|
+
gem 'pixage'
|
35
|
+
```
|
36
|
+
then run following
|
37
|
+
```
|
38
|
+
bundle install
|
39
|
+
```
|
40
|
+
|
41
|
+
## Dependency
|
42
|
+
This gem is dependent on ImageMagick. Please install latest verison of ImageMagick before you start using pixage.
|
43
|
+
To verify if imagemagick is successfully installed, please run the following command (After installaing pixage).
|
44
|
+
```
|
45
|
+
pixage diagnosis
|
46
|
+
```
|
47
|
+
|
48
|
+
## Usage
|
49
|
+
There are 2 ways this gem can be used.
|
50
|
+
1. CLI usage which can be really helpful for testers and designers to do visual regression testing manually.
|
51
|
+
2. Can be integrated with automation suite to compare run time screenshots with pre-saved baseline images.
|
52
|
+
|
53
|
+
### <a name="cli"></a> 1. CLI Usage
|
54
|
+
Following are the list of commands :
|
55
|
+
|
56
|
+
![help, diagnosis, compare, resize_n_compare, version](https://github.com/krupani/pixage/blob/master/images/pixage_commands.png)
|
57
|
+
|
58
|
+
Basic usage in case of compare 2 images which are similar size and resolution:
|
59
|
+
```
|
60
|
+
# Basic usage with default options
|
61
|
+
pixage compare images/expected.png images/actual.png
|
62
|
+
|
63
|
+
# Basic usage with custom options
|
64
|
+
pixage compare images/expected.png images/actual.png --threshold=1 --fuzz=25 --color=red
|
65
|
+
|
66
|
+
```
|
67
|
+
|
68
|
+
For further commmand usage [documentation](https://github.com/krupani/pixage/wiki), please refer the [wiki](https://github.com/krupani/pixage/wiki) section.
|
69
|
+
|
70
|
+
### <a name="automation"></a> 2. Automation Usage
|
71
|
+
Apart from CLI usage, pixage gem can also be integrated with automation suite be it a selenium-webdriver-ruby for web application or appium-ruby for mobile applications or just a ruby script acheieving some fine purpose.
|
72
|
+
Below is the code snippet to be used in case of automation integration:
|
73
|
+
|
74
|
+
```
|
75
|
+
# First, as mentioned in installation step, include gem in Gemfile
|
76
|
+
gem 'pixage'
|
77
|
+
|
78
|
+
# Next, require and include it in your project
|
79
|
+
require 'pixage'
|
80
|
+
include 'Pixage'
|
81
|
+
|
82
|
+
# Finally use the commands in your code:
|
83
|
+
# Assuming you have your baseline/expected image previously stored
|
84
|
+
@driver.save_screenshot(actual.png)
|
85
|
+
resize_n_compare(expected.png, actual.png)
|
86
|
+
|
87
|
+
# Also you can compare 2 runtime images like:
|
88
|
+
@driver.save_screenshot(first.png)
|
89
|
+
@driver.save_screenshot(second.png)
|
90
|
+
compare(first.png, second.png)
|
91
|
+
|
92
|
+
```
|
93
|
+
|
94
|
+
_NOTE: To see a working example on how to integrate pixage with a Ruby-Cucumber-Selenium tests, please see the examples directory. It also has a sample report stored for reference._
|
95
|
+
|
96
|
+
To execute the example, do the following:
|
97
|
+
- Clone the repo `git clone https://github.com/krupani/pixage.git`
|
98
|
+
- get into the examples folder `cd pixage/examples`
|
99
|
+
- install dependent gems or just run `bundle install`
|
100
|
+
- if you dont have bundler installed then first run `gem install bundler` and then repeat above step
|
101
|
+
- execute the tests `cucumber features BROWSER=chrome` , provided you have chromedriver in your PATH
|
102
|
+
|
103
|
+
## Contributing
|
104
|
+
Ideas and suggestions are always always most welcome. Please fork this gem and feel free to add any updates, suggestions etc and create a pull request.
|
105
|
+
|
106
|
+
## Issues
|
107
|
+
If you face any problem related to syntax, usability, documentation then please raise an [issue](https://github.com/krupani/pixage/issues)
|
data/bin/pixage
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "pixage/diagnosis"
|
4
|
+
require "pixage/cli"
|
5
|
+
include Pixage
|
6
|
+
|
7
|
+
def show_help
|
8
|
+
puts <<HELP
|
9
|
+
|
10
|
+
Commands :
|
11
|
+
|
12
|
+
help
|
13
|
+
----
|
14
|
+
Description : Prints help information
|
15
|
+
Usage : pixage help
|
16
|
+
|
17
|
+
|
18
|
+
diagnosis
|
19
|
+
---------
|
20
|
+
Description : Performs a check to see all dependecies match for smooth execution of pixage gem commands
|
21
|
+
Usage : pixage diagnosis
|
22
|
+
|
23
|
+
|
24
|
+
compare
|
25
|
+
-------
|
26
|
+
Description : Compares 2 images and generates diff (compares original images and just generates a diff image)
|
27
|
+
Usage : pixage compare <expected_image_path> <actual_image_path> <--option=value>
|
28
|
+
Options : 1. --threshold (optional) : maximum distortion allowed while matching (default = 1)
|
29
|
+
2. --fuzz (optional) : fuzz distance between colours (default = 20)
|
30
|
+
3. --color (optional) : highlight pixel difference with this color (default = blue)
|
31
|
+
|
32
|
+
|
33
|
+
resize_n_compare
|
34
|
+
----------------
|
35
|
+
Description : Resizes the images and then compares (makes a copy of original images before resizing)
|
36
|
+
(By default the larger images is resized to the smaller image to avoid pixelating.)
|
37
|
+
Usage : pixage resize_n_compare <expected_image_path> <actual_image_path> <--option=value>
|
38
|
+
options : 1. --threshold (optional) : maximum distortion allowed while matching (default = 1)
|
39
|
+
2. --fuzz (optional) : fuzz distance between colours (default = 20)
|
40
|
+
3. --color (optional) : highlight pixel difference with this color (default = blue)
|
41
|
+
4. --resize (optional) : a. desc (default) : for resizing larger image to smaller one
|
42
|
+
b. asc : for resizing smaller image to larger one (image can pixelate)
|
43
|
+
5. --force (options) : force=true will ignore aspect ratio while resizing (default=false)
|
44
|
+
|
45
|
+
|
46
|
+
version
|
47
|
+
-------
|
48
|
+
Description : Shows the version of pixage gem
|
49
|
+
Usage : pixage version | pixage --version | pixage -v
|
50
|
+
|
51
|
+
HELP
|
52
|
+
end
|
53
|
+
|
54
|
+
def arg_to_hash(args)
|
55
|
+
arg_hash = {}
|
56
|
+
args.each do |arg|
|
57
|
+
arg_arr = arg.gsub("-","").split("=")
|
58
|
+
arg_hash[arg_arr.first.downcase.to_sym] = arg_arr.last.downcase
|
59
|
+
end
|
60
|
+
arg_hash
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
if ARGV.length == 0
|
65
|
+
show_help
|
66
|
+
else
|
67
|
+
cmd = ARGV.shift
|
68
|
+
case cmd
|
69
|
+
|
70
|
+
when 'version', '--version', '-v'
|
71
|
+
puts File.read(File.expand_path("../../lib/pixage/version", __FILE__))
|
72
|
+
|
73
|
+
when 'diagnosis'
|
74
|
+
Pixage::Diagnosis.new().perform_diagnosis
|
75
|
+
|
76
|
+
when 'compare'
|
77
|
+
if ARGV.size<2
|
78
|
+
show_help
|
79
|
+
elsif ARGV.size==2
|
80
|
+
compare(ARGV.shift, ARGV.shift)
|
81
|
+
else
|
82
|
+
compare(ARGV.shift, ARGV.shift, arg_to_hash(ARGV))
|
83
|
+
end
|
84
|
+
|
85
|
+
when 'resize_n_compare'
|
86
|
+
if ARGV.size<2
|
87
|
+
show_help
|
88
|
+
elsif ARGV.size==2
|
89
|
+
resize_n_compare(ARGV.shift, ARGV.shift)
|
90
|
+
else
|
91
|
+
resize_n_compare(ARGV.shift, ARGV.shift, arg_to_hash(ARGV))
|
92
|
+
end
|
93
|
+
|
94
|
+
else
|
95
|
+
show_help
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
|
104
|
+
|
data/data/defaults.yml
ADDED
data/lib/pixage.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'pixage/cli'
|
data/lib/pixage/cli.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative 'params'
|
2
|
+
require_relative 'images/compare'
|
3
|
+
|
4
|
+
module Pixage
|
5
|
+
|
6
|
+
# @method compare(expected_image_file_path, actual_image_file_path, options={})
|
7
|
+
# @param expected_image_file_path [String]
|
8
|
+
# @param actual_image_file_path [String]
|
9
|
+
# @parm args [Hash]
|
10
|
+
# @return [String] -- file path of the diff.png file
|
11
|
+
|
12
|
+
def compare(expected, actual, args={})
|
13
|
+
images = manage_paths(expected,actual)
|
14
|
+
options = manage_options(args)
|
15
|
+
create_pixage_report_dir
|
16
|
+
Compare.new.compare_images(images,options)
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
# @method resize_n_compare(expected_image_file_path, actual_image_file_path, options={})
|
21
|
+
# @param expected_image_file_path [String]
|
22
|
+
# @param actual_image_file_path [String]
|
23
|
+
# @params args [Hash]
|
24
|
+
# @return [String] -- file path of the diff.png file
|
25
|
+
|
26
|
+
def resize_n_compare(expected, actual, args={})
|
27
|
+
images = manage_paths(expected,actual)
|
28
|
+
options = manage_options(args)
|
29
|
+
create_pixage_report_dir
|
30
|
+
Compare.new.resize_n_compare_images(images,options)
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module Pixage
|
4
|
+
|
5
|
+
class Diagnosis
|
6
|
+
|
7
|
+
def perform_diagnosis
|
8
|
+
check_image_magick_installation
|
9
|
+
# check_idevice_installation
|
10
|
+
# check_adb_installation
|
11
|
+
end
|
12
|
+
|
13
|
+
def check_image_magick_installation
|
14
|
+
puts "Checking ImageMagick installation.."
|
15
|
+
version = `magick -version | grep -i version`
|
16
|
+
if version.class == String and version.include?("ImageMagick")
|
17
|
+
console_log("ImageMagick is INSTALLED", :pass)
|
18
|
+
else
|
19
|
+
console_log("ImageMagick is NOT INSTALLED", :error)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private :check_image_magick_installation
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'mini_magick'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'pathname'
|
4
|
+
require_relative 'convert'
|
5
|
+
require_relative '../params'
|
6
|
+
require_relative '../logger'
|
7
|
+
|
8
|
+
module Pixage
|
9
|
+
|
10
|
+
class Compare
|
11
|
+
|
12
|
+
def compare_images(images,options)
|
13
|
+
convert = Convert.new()
|
14
|
+
if convert.check_sizes(images)
|
15
|
+
console_log("Warning: Image sizes are not equal, the generated diff might be misleading, please use : ", :warning)
|
16
|
+
console_log("pixage resize_n_compare\n", :pass)
|
17
|
+
end
|
18
|
+
execution_dir = Time.now.strftime("%d-%b-%y-%H-%M-%S")
|
19
|
+
create_compare_execution_dir(execution_dir)
|
20
|
+
cmd = "compare -dissimilarity-threshold #{options[:threshold]} -fuzz #{options[:fuzz]} -metric AE -highlight-color #{options[:color]} #{images[:expected]} #{images[:actual]} pixage_report/#{execution_dir}/diff.png"
|
21
|
+
execute_command(cmd)
|
22
|
+
Pathname.new("pixage_report/#{execution_dir}/diff.png").realpath.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def resize_n_compare_images(images,options)
|
26
|
+
convert = Convert.new()
|
27
|
+
execution_dir = Time.now.strftime("%d-%b-%y-%H-%M-%S")
|
28
|
+
create_compare_execution_dir(execution_dir)
|
29
|
+
images = make_copies(images, "pixage_report/#{execution_dir}")
|
30
|
+
convert.resize_images(images,options)
|
31
|
+
cmd = "compare -dissimilarity-threshold #{options[:threshold]} -fuzz #{options[:fuzz]} -metric AE -highlight-color #{options[:color]} #{images[:expected]} #{images[:actual]} pixage_report/#{execution_dir}/diff.png"
|
32
|
+
execute_command(cmd)
|
33
|
+
Pathname.new("pixage_report/#{execution_dir}/diff.png").realpath.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def execute_command(cmd)
|
37
|
+
require 'open3'
|
38
|
+
cmd_out = Open3.popen3(cmd)[2].read
|
39
|
+
end
|
40
|
+
|
41
|
+
def make_copies(images,path)
|
42
|
+
ts = Time.now.to_i
|
43
|
+
expected = Pathname.new(path+"/expected_#{ts}#{File.extname(images[:expected])}")
|
44
|
+
actual = Pathname.new(path+"/actual_#{ts}#{File.extname(images[:actual])}")
|
45
|
+
FileUtils.cp(images[:expected], expected)
|
46
|
+
FileUtils.cp(images[:actual], actual)
|
47
|
+
{:expected => expected.realpath, :actual => actual.realpath}
|
48
|
+
end
|
49
|
+
|
50
|
+
private :execute_command, :make_copies
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'mini_magick'
|
2
|
+
require_relative '../logger'
|
3
|
+
|
4
|
+
module Pixage
|
5
|
+
|
6
|
+
class Convert
|
7
|
+
|
8
|
+
def check_sizes(images)
|
9
|
+
expected = MiniMagick::Image.new(images[:expected])
|
10
|
+
actual = MiniMagick::Image.new(images[:actual])
|
11
|
+
expected.dimensions != actual.dimensions
|
12
|
+
end
|
13
|
+
|
14
|
+
def resize_images(images,options={:resize => "desc", :force => "false"})
|
15
|
+
expected = MiniMagick::Image.new(images[:expected])
|
16
|
+
actual = MiniMagick::Image.new(images[:actual])
|
17
|
+
switch = 0
|
18
|
+
if options[:resize]=="desc"
|
19
|
+
switch = expected.dimensions <=> actual.dimensions
|
20
|
+
elsif options[:resize]=="asc"
|
21
|
+
switch = actual.dimensions <=> expected.dimensions
|
22
|
+
end
|
23
|
+
|
24
|
+
case switch
|
25
|
+
when 1
|
26
|
+
if options[:force]=="true"
|
27
|
+
expected.resize(actual.dimensions.join('x')+"!")
|
28
|
+
else
|
29
|
+
expected.resize(actual.dimensions.join('x'))
|
30
|
+
end
|
31
|
+
when -1
|
32
|
+
if options[:force]=="true"
|
33
|
+
actual.resize(expected.dimensions.join('x')+"!")
|
34
|
+
else
|
35
|
+
actual.resize(expected.dimensions.join('x'))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
|
3
|
+
module Pixage
|
4
|
+
|
5
|
+
def console_log(text, status, loud=false)
|
6
|
+
text=text.upcase if loud
|
7
|
+
case status.downcase.to_sym
|
8
|
+
when :warning
|
9
|
+
puts text.yellow
|
10
|
+
when :error, :exception
|
11
|
+
puts text.red
|
12
|
+
when :pass, :success
|
13
|
+
puts text.green
|
14
|
+
else
|
15
|
+
puts text
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Pixage
|
5
|
+
|
6
|
+
def manage_paths(expected,actual)
|
7
|
+
images = {}
|
8
|
+
expected = Pathname.new(expected)
|
9
|
+
actual = Pathname.new(actual)
|
10
|
+
if expected.relative?
|
11
|
+
images[:expected] = expected.realpath
|
12
|
+
end
|
13
|
+
if actual.relative?
|
14
|
+
images[:actual] = actual.realpath
|
15
|
+
end
|
16
|
+
images
|
17
|
+
end
|
18
|
+
|
19
|
+
def manage_options(args={})
|
20
|
+
options = YAML.load_file(File.join(File.dirname(__FILE__) + "/../../data/defaults.yml"))
|
21
|
+
args.each do |key,val|
|
22
|
+
if key.downcase == :fuzz
|
23
|
+
options[:fuzz] = val.to_i
|
24
|
+
elsif key.downcase == :threshold
|
25
|
+
options[:threshold] = val.to_i
|
26
|
+
elsif key.downcase == :color
|
27
|
+
options[:color] = val.to_s.downcase
|
28
|
+
elsif key.downcase == :resize
|
29
|
+
options[:resize] = val.to_s.downcase
|
30
|
+
elsif key.downcase == :force
|
31
|
+
options[:force] = val.to_s.downcase
|
32
|
+
else
|
33
|
+
console_log("Unrecognised option `--#{key}=#{val}`, defaults will be applied.", :warning)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
return options
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_pixage_report_dir
|
40
|
+
Dir.mkdir("pixage_report") unless Dir.exists?("pixage_report")
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_compare_execution_dir(dir_name)
|
44
|
+
create_pixage_report_dir
|
45
|
+
Dir.mkdir("pixage_report/#{dir_name}")
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
data/lib/pixage/version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pixage
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kaushal Rupani
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mini_magick
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: A visual regression utility with options to do single and bulk operations
|
42
|
+
both manually and integrable with Selenium automated tests in Ruby.
|
43
|
+
email:
|
44
|
+
- kushrupani@live.com
|
45
|
+
executables:
|
46
|
+
- pixage
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- LICENCE
|
51
|
+
- README.md
|
52
|
+
- bin/pixage
|
53
|
+
- data/defaults.yml
|
54
|
+
- lib/pixage.rb
|
55
|
+
- lib/pixage/cli.rb
|
56
|
+
- lib/pixage/diagnosis.rb
|
57
|
+
- lib/pixage/images/compare.rb
|
58
|
+
- lib/pixage/images/convert.rb
|
59
|
+
- lib/pixage/logger.rb
|
60
|
+
- lib/pixage/params.rb
|
61
|
+
- lib/pixage/version
|
62
|
+
homepage: https://github.com/krupani/pixage
|
63
|
+
licenses:
|
64
|
+
- MIT
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements:
|
81
|
+
- You must have ImageMagick installed on your system.
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 2.6.12
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: A visual regression utility with options to do single and bulk operations
|
87
|
+
both manually and integrable with Selenium automated tests in Ruby.
|
88
|
+
test_files: []
|