image_filter_dsl 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/bin/image_filter_dsl +8 -6
- data/lib/image_filter_dsl.rb +2 -1
- data/lib/image_filter_dsl/dsl/filter_instructions.rb +0 -1
- data/lib/image_filter_dsl/engine/cli.rb +83 -0
- data/lib/image_filter_dsl/serialize.rb +69 -0
- data/lib/image_filter_dsl/serializers/common.rb +57 -0
- data/lib/image_filter_dsl/serializers/intermediate.rb +65 -0
- data/lib/image_filter_dsl/serializers/json.rb +43 -0
- data/lib/image_filter_dsl/serializers/msg_pack.rb +51 -0
- data/lib/image_filter_dsl/serializers/yaml.rb +42 -0
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3c5ec517d5379d54dcac83356f816f4e460ea651956600c4a406766483fff9e
|
4
|
+
data.tar.gz: a26273761002413d8f2944fce7c6d9da591a3b3124be8a640f9c375a029df739
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 573236b32a4096fe6d8e57106cf9e4e79e9c4571583d0b9d1ceb710e8cb2dd227cadc51597bd5d8751fd55efd86ee4038207598833a38f3f41da8d8e3c9b5e47
|
7
|
+
data.tar.gz: f3703bc27fce75391023a2e8ab056f721471f3e522326f4201fa98600f62f70b75e3fb9b7a5850208c395883746e5d8ee5d4bd0b0e847f4b1e25b101bdeb2a21
|
data/bin/image_filter_dsl
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'image_filter_dsl'
|
4
4
|
|
5
|
-
printf "Image Filter DSL > Process Image\n"
|
6
|
-
if ARGV.length == 0
|
7
|
-
|
8
|
-
else
|
9
|
-
|
10
|
-
end
|
5
|
+
# printf "Image Filter DSL > Process Image\n"
|
6
|
+
# if ARGV.length == 0
|
7
|
+
# printf "Usage: image_filter_dsl <kernel_file> <image_in> <image_out>\n"
|
8
|
+
# else
|
9
|
+
# ImageFilterDsl.cli_process_image(ARGV)
|
10
|
+
# end
|
11
|
+
|
12
|
+
ImageFilterDsl::Engine::CLI.run
|
data/lib/image_filter_dsl.rb
CHANGED
@@ -5,7 +5,8 @@ require_relative './image_filter_dsl/binary/struct.rb'
|
|
5
5
|
require_relative './image_filter_dsl/binary/serialize.rb'
|
6
6
|
require_relative './image_filter_dsl/engine/io.rb'
|
7
7
|
require_relative './image_filter_dsl/engine/image_processor.rb'
|
8
|
-
|
8
|
+
require_relative './image_filter_dsl/serialize.rb'
|
9
|
+
require_relative './image_filter_dsl/engine/cli.rb'
|
9
10
|
##
|
10
11
|
# Image Filter DSL Library
|
11
12
|
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
@@ -0,0 +1,83 @@
|
|
1
|
+
##
|
2
|
+
# Image Filter DSL Library
|
3
|
+
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
4
|
+
# @author Wade H. <vdtdev.prod@gmail.com>
|
5
|
+
module ImageFilterDsl
|
6
|
+
module Engine
|
7
|
+
##
|
8
|
+
# CLI Argument parser and handler module
|
9
|
+
module CLI
|
10
|
+
extend self
|
11
|
+
|
12
|
+
Options = Struct.new(:action, :filter, :input, :output)
|
13
|
+
RequiredArgs = {
|
14
|
+
process: [:filter, :input, :output],
|
15
|
+
compile: [:input, :output]
|
16
|
+
}
|
17
|
+
|
18
|
+
def parse(args)
|
19
|
+
opts = Options.new
|
20
|
+
args=args.map{|s|s.strip}
|
21
|
+
|
22
|
+
p = args[0]
|
23
|
+
|
24
|
+
if !p.nil? && p.downcase == '--process'
|
25
|
+
opts.action = :process
|
26
|
+
elsif !p.nil? && p.downcase == '--compile'
|
27
|
+
opts.action = :compile
|
28
|
+
end
|
29
|
+
|
30
|
+
unless opts.action.nil?
|
31
|
+
case opts.action
|
32
|
+
when :process
|
33
|
+
f,i,o = args[1..-1]
|
34
|
+
opts.filter = f
|
35
|
+
opts.input = i
|
36
|
+
opts.output = o
|
37
|
+
when :compile
|
38
|
+
s,k = args[1..-1]
|
39
|
+
opts.input = s
|
40
|
+
opts.output = k
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
return opts
|
45
|
+
end
|
46
|
+
|
47
|
+
def run()
|
48
|
+
options = parse(ARGV)
|
49
|
+
if options.action.nil?
|
50
|
+
show_usage
|
51
|
+
else
|
52
|
+
p options
|
53
|
+
if RequiredArgs[options.action].select{|o| options[o].nil?}.length == 0
|
54
|
+
do_action(options)
|
55
|
+
else
|
56
|
+
show_usage(options.action)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def show_usage(action=nil)
|
62
|
+
if !action.nil?
|
63
|
+
print "Invalid arguments for #{action.to_s}\n"
|
64
|
+
end
|
65
|
+
print [
|
66
|
+
"Usage: image_filter_dsl <action<",
|
67
|
+
"\t--process <kernel_file> <image in> <image out>\t\tProcess image with binary kernel",
|
68
|
+
"\t--compile <source_file> <output_kernel>\t\tCompile given ruby source to binary kernel"
|
69
|
+
].join("\n")
|
70
|
+
print "\n"
|
71
|
+
end
|
72
|
+
|
73
|
+
def do_action(opts)
|
74
|
+
if opts.action == :process
|
75
|
+
ip = ImageFilterDsl.image_processor(opts.filter)
|
76
|
+
ip.process_image(opts.input, opts.output)
|
77
|
+
elsif opts.action == :compile
|
78
|
+
print "(Not yet implemented :)\n"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require_relative './serializers/common.rb'
|
2
|
+
require_relative './serializers/msg_pack.rb'
|
3
|
+
require_relative './serializers/json.rb'
|
4
|
+
require_relative './serializers/yaml.rb'
|
5
|
+
require_relative './serializers/intermediate.rb'
|
6
|
+
##
|
7
|
+
# Image Filter DSL Library
|
8
|
+
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
9
|
+
# @author Wade H. <vdtdev.prod@gmail.com>
|
10
|
+
module ImageFilterDsl
|
11
|
+
##
|
12
|
+
# Module providing access to kernel serialization and
|
13
|
+
# deserialization functionality. Actual serialization/deserialization
|
14
|
+
# logic defined in modules within `Serializers`
|
15
|
+
module Serialize
|
16
|
+
extend self
|
17
|
+
# include Serialize::Json
|
18
|
+
# include Serializers::Json
|
19
|
+
|
20
|
+
##
|
21
|
+
# Intermediate serializer module
|
22
|
+
INTERMEDIATE = Serializers::Intermediate
|
23
|
+
|
24
|
+
##
|
25
|
+
# Available serializers, mapping format symbol to
|
26
|
+
# module
|
27
|
+
SERIALIZERS = {
|
28
|
+
json: Serializers::Json,
|
29
|
+
msgpack: Serializers::MsgPack,
|
30
|
+
yaml: Serializers::Yaml
|
31
|
+
}
|
32
|
+
##
|
33
|
+
# Available serializer symbols
|
34
|
+
FORMATS = SERIALIZERS.keys
|
35
|
+
|
36
|
+
##
|
37
|
+
# Serialize kernel, optionally using intermediate step
|
38
|
+
# @param [ImageFilterDsl::Dsl::Kernel] kernel Kernel
|
39
|
+
# @param [Symbol] format Format to serialize to from FORMATS, or
|
40
|
+
# `nil` to convert to intermediate
|
41
|
+
# @return [Hash|String] serialized kernel
|
42
|
+
def from_kernel(kernel, format=nil)
|
43
|
+
i = INTERMEDIATE.from_kernel(kernel)
|
44
|
+
if format.nil?
|
45
|
+
return i
|
46
|
+
else
|
47
|
+
m = SERIALIZERS[format]
|
48
|
+
return m.send(:serialize, i)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# Deserialize to kernel, optionally using intermediate step
|
54
|
+
# @param [Hash|String] data Serialized data
|
55
|
+
# @param [Symbol] format Format to convert from from FORMATS, or
|
56
|
+
# `nil` to convert from intermediate
|
57
|
+
# @return [Kernel] Kernal from deserialization
|
58
|
+
def to_kernel(data,format=nil)
|
59
|
+
if format.nil?
|
60
|
+
return INTERMEDIATE.to_kernel(data)
|
61
|
+
else
|
62
|
+
i = SERIALIZERS[format].send(:deserialize, data)
|
63
|
+
return INTERMEDIATE.to_kernel(i)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#
|
2
|
+
# Image Filter DSL Library
|
3
|
+
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
4
|
+
# @author Wade H. <vdtdev.prod@gmail.com>
|
5
|
+
module ImageFilterDsl
|
6
|
+
module Serializers
|
7
|
+
##
|
8
|
+
# Common helper methods for serializers; Include in serializer modules
|
9
|
+
# with `include Common`
|
10
|
+
module Common
|
11
|
+
extend self
|
12
|
+
##
|
13
|
+
# Normalize symbol/value, stripping out
|
14
|
+
# any colons and converting to symbol; Non strings
|
15
|
+
# are returned unaltered; if array, logic is applied to all items
|
16
|
+
# @param [String|Number|Symbol|Array] val
|
17
|
+
# @return [Symbol|Number|Array] Normalized value
|
18
|
+
def normalize_sym(val)
|
19
|
+
if val.is_a?(String)
|
20
|
+
val.gsub(':','').to_sym
|
21
|
+
elsif val.is_a?(Array)
|
22
|
+
val.map{|v|normalize_sym(v)}
|
23
|
+
else
|
24
|
+
val
|
25
|
+
end
|
26
|
+
end
|
27
|
+
##
|
28
|
+
# 'Fix' hash, converting keys to symbols (if keys provided)
|
29
|
+
# and converting values/arrays of values so any strings are
|
30
|
+
# normalized and cast to symbols using {normalize_sym}
|
31
|
+
# @param [Hash] hash Hash to fix
|
32
|
+
# @param [Array] keys Optional array of key symbols to check for and
|
33
|
+
# convert string equivalents over to symbols if found
|
34
|
+
# @return [Hash] Fixed copy of input hash
|
35
|
+
def fix_hash(hash,keys=[])
|
36
|
+
h2=hash.dup
|
37
|
+
unless keys.length == 0
|
38
|
+
keys.each do |k|
|
39
|
+
if !h2.has_key?(k) && h2.has_key?(k.to_s)
|
40
|
+
h2[k] = h2[k.to_s]
|
41
|
+
h2.delete k.to_s
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
h2.keys.each do |k|
|
46
|
+
if h2[k].is_a?(Array)
|
47
|
+
h2[k] = h2[k].map{|v|normalize_sym(v)}
|
48
|
+
else
|
49
|
+
h2[k] = normalize_sym(h2[k])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
return h2
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
##
|
2
|
+
# Image Filter DSL Library
|
3
|
+
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
4
|
+
# @author Wade H. <vdtdev.prod@gmail.com>
|
5
|
+
module ImageFilterDsl
|
6
|
+
##
|
7
|
+
# Kernel data serializers
|
8
|
+
module Serializers
|
9
|
+
##
|
10
|
+
# Provides serialization/deserialization for Kernels
|
11
|
+
# to an intermediate format representing kernel as hash.
|
12
|
+
# Used by other serializers as intermediate between serializing
|
13
|
+
# from and deserializing to kernels
|
14
|
+
module Intermediate
|
15
|
+
include Common
|
16
|
+
extend self
|
17
|
+
##
|
18
|
+
# Convert kernel to intermediate hash struct
|
19
|
+
# @param [ImageFilterDsl::Dsl::Kernel] kernel Source kernel
|
20
|
+
# @return [Hash] Intermediate hash version of kernel
|
21
|
+
def from_kernel(kernel)
|
22
|
+
data = {
|
23
|
+
inputs: kernel.inputs,
|
24
|
+
outputs: kernel.outputs
|
25
|
+
}
|
26
|
+
data[:instructions] = kernel.instructions.map do |i|
|
27
|
+
{op: i.op, in: i.inputs, out: i.out}
|
28
|
+
end
|
29
|
+
data
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Convert intermediate kernel hash to kernel object
|
34
|
+
# @param [Hash] data Intermediate kernel data
|
35
|
+
# @return [ImageFilterDsl::Dsl::Kernel] Constructed kernel
|
36
|
+
def to_kernel(data)
|
37
|
+
ins = data[:instructions].map{|i| fix_instruction_symbols(i) }
|
38
|
+
filt = ImageFilterDsl::Dsl::Filter.define(data[:inputs],data[:outputs]) do
|
39
|
+
ins.each do |i|
|
40
|
+
send(i[:op], i[:in], i[:out])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
return filt
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def fix_instruction_symbols(ins_hash)
|
49
|
+
fix_hash(ins_hash,[:op,:in,:out])
|
50
|
+
# r_k=Proc.new {|k| (ins_hash.has_key?(k))? k : k.to_s}
|
51
|
+
# op_h = r_k.call(:op)
|
52
|
+
# in_h = r_k.call(:in)
|
53
|
+
# out_h = r_k.call(:out)
|
54
|
+
# norm_sym = Proc.new {|s| (s.is_a?(String))? s.gsub(':','').to_sym : s}
|
55
|
+
# {
|
56
|
+
# op: norm_sym.call(ins_hash[op_h]),
|
57
|
+
# in: ins_hash[in_h].map { |i|
|
58
|
+
# norm_sym.call(i)
|
59
|
+
# },
|
60
|
+
# out: norm_sym.call(ins_hash[out_h])
|
61
|
+
# }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'json'
|
2
|
+
##
|
3
|
+
# Image Filter DSL Library
|
4
|
+
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
5
|
+
# @author Wade H. <vdtdev.prod@gmail.com>
|
6
|
+
module ImageFilterDsl
|
7
|
+
module Serializers
|
8
|
+
##
|
9
|
+
# Provides serialization/deserialization to/from JSON using
|
10
|
+
# intermediate serializer
|
11
|
+
module Json
|
12
|
+
include Common
|
13
|
+
extend self
|
14
|
+
##
|
15
|
+
# Serialize kernel to JSON string
|
16
|
+
# @param [Hash] kernel Kernel in intermediate format
|
17
|
+
# @return [String] JSON serialized version of kernel
|
18
|
+
def serialize(kernel)
|
19
|
+
{
|
20
|
+
header: ImageFilterDsl::Binary::Struct::HEADER_VALUES,
|
21
|
+
inputs: kernel[:inputs],
|
22
|
+
outputs: kernel[:outputs],
|
23
|
+
instructions: kernel[:instructions]
|
24
|
+
}.to_json
|
25
|
+
end
|
26
|
+
##
|
27
|
+
# Deserialize JSON kernel to intermediate format
|
28
|
+
# @param [String] data JSON kernel data
|
29
|
+
# @return [Hash] Intermediate format of kernel data
|
30
|
+
def deserialize(data)
|
31
|
+
data = JSON.load(data)
|
32
|
+
data = fix_hash(data,[:inputs,:outputs,:instructions])
|
33
|
+
data[:instructions] = data[:instructions].map {|i| fix_hash(i,[:op,:in,:out])}
|
34
|
+
|
35
|
+
{
|
36
|
+
inputs: data[:inputs],
|
37
|
+
outputs: data[:outputs],
|
38
|
+
instructions: data[:instructions]
|
39
|
+
}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'msgpack'
|
2
|
+
##
|
3
|
+
# Image Filter DSL Library
|
4
|
+
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
5
|
+
# @author Wade H. <vdtdev.prod@gmail.com>
|
6
|
+
module ImageFilterDsl
|
7
|
+
module Serializers
|
8
|
+
##
|
9
|
+
# Provides serialization/deserialization to/from MessagePack strings
|
10
|
+
# using intermediate serializer
|
11
|
+
module MsgPack
|
12
|
+
include Common
|
13
|
+
extend self
|
14
|
+
##
|
15
|
+
# 'Header' added to start of array packed with MsgPack
|
16
|
+
HEADER = ['mp',ImageFilterDsl::Binary::Struct::HEADER_VALUES.values].flatten
|
17
|
+
##
|
18
|
+
# Serialize kernel to MessagePack string
|
19
|
+
# @param [Hash] kernel Kernel in intermediate format
|
20
|
+
# @return [String] MessagePack serialized version of kernel
|
21
|
+
def serialize(kernel)
|
22
|
+
[
|
23
|
+
HEADER,
|
24
|
+
kernel[:inputs],
|
25
|
+
kernel[:outputs],
|
26
|
+
kernel[:instructions].map do |i|
|
27
|
+
[i[:op],i[:in],i[:out]]
|
28
|
+
end
|
29
|
+
].to_msgpack
|
30
|
+
end
|
31
|
+
##
|
32
|
+
# Deserialize MessagePack kernel to intermediate format
|
33
|
+
# @param [String] data MessagePack kernel data
|
34
|
+
# @return [Hash] Intermediate format of kernel data
|
35
|
+
def deserialize(data)
|
36
|
+
data = MessagePack.unpack(data)
|
37
|
+
head,inps,outs,ins=data
|
38
|
+
d = {
|
39
|
+
inputs: normalize_sym(inps),
|
40
|
+
outputs: normalize_sym(outs),
|
41
|
+
instructions: ins.map do |i|
|
42
|
+
op,iin,iout=i
|
43
|
+
fix_hash({op: op, in: iin, out: iout})
|
44
|
+
end
|
45
|
+
}
|
46
|
+
|
47
|
+
return d
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
##
|
3
|
+
# Image Filter DSL Library
|
4
|
+
# (c) 2018-2020 VDTDEV/Wade H. ~ MIT License
|
5
|
+
# @author Wade H. <vdtdev.prod@gmail.com>
|
6
|
+
module ImageFilterDsl
|
7
|
+
module Serializers
|
8
|
+
##
|
9
|
+
# Provides serialization/deserialization to/from YAML using
|
10
|
+
# intermediate serializer
|
11
|
+
module Yaml
|
12
|
+
include Common
|
13
|
+
extend self
|
14
|
+
##
|
15
|
+
# Serialize kernel to YAML string
|
16
|
+
# @param [Hash] kernel Kernel in intermediate format
|
17
|
+
# @return [String] YAML serialized version of kernel
|
18
|
+
def serialize(kernel)
|
19
|
+
{
|
20
|
+
header: ImageFilterDsl::Binary::Struct::HEADER_VALUES,
|
21
|
+
inputs: kernel[:inputs],
|
22
|
+
outputs: kernel[:outputs],
|
23
|
+
instructions: kernel[:instructions]
|
24
|
+
}.to_yaml
|
25
|
+
end
|
26
|
+
##
|
27
|
+
# Deserialize YAML kernel to intermediate format
|
28
|
+
# @param [String] data YAML kernel data
|
29
|
+
# @return [Hash] Intermediate format of kernel data
|
30
|
+
def deserialize(data)
|
31
|
+
data = YAML.load(data)
|
32
|
+
data = fix_hash(data,[:inputs,:outputs,:instructions])
|
33
|
+
data[:instructions] = data[:instructions].map {|i| fix_hash(i,[:op,:in,:out])}
|
34
|
+
{
|
35
|
+
inputs: data[:inputs],
|
36
|
+
outputs: data[:outputs],
|
37
|
+
instructions: data[:instructions]
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: image_filter_dsl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wade H.
|
@@ -89,14 +89,21 @@ files:
|
|
89
89
|
- lib/image_filter_dsl/dsl/filter.rb
|
90
90
|
- lib/image_filter_dsl/dsl/filter_instructions.rb
|
91
91
|
- lib/image_filter_dsl/dsl/kernel.rb
|
92
|
+
- lib/image_filter_dsl/engine/cli.rb
|
92
93
|
- lib/image_filter_dsl/engine/image_processor.rb
|
93
94
|
- lib/image_filter_dsl/engine/io.rb
|
95
|
+
- lib/image_filter_dsl/serialize.rb
|
96
|
+
- lib/image_filter_dsl/serializers/common.rb
|
97
|
+
- lib/image_filter_dsl/serializers/intermediate.rb
|
98
|
+
- lib/image_filter_dsl/serializers/json.rb
|
99
|
+
- lib/image_filter_dsl/serializers/msg_pack.rb
|
100
|
+
- lib/image_filter_dsl/serializers/yaml.rb
|
94
101
|
homepage: https://bitbucket.org/WadeH/image_filter_dsl
|
95
102
|
licenses:
|
96
103
|
- MIT
|
97
104
|
metadata:
|
98
105
|
source_code_uri: https://bitbucket.org/WadeH/image_filter_dsl
|
99
|
-
documentation_uri: https://rubydoc.info/gems/image_filter_dsl/0.1.
|
106
|
+
documentation_uri: https://rubydoc.info/gems/image_filter_dsl/0.1.1
|
100
107
|
post_install_message:
|
101
108
|
rdoc_options: []
|
102
109
|
require_paths:
|
@@ -112,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
119
|
- !ruby/object:Gem::Version
|
113
120
|
version: '0'
|
114
121
|
requirements: []
|
115
|
-
rubygems_version: 3.0.
|
122
|
+
rubygems_version: 3.0.0
|
116
123
|
signing_key:
|
117
124
|
specification_version: 4
|
118
125
|
summary: Image Filter DSL
|