dynamic_images 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest +27 -0
- data/README.rdoc +104 -0
- data/README_USAGE.rdoc +67 -0
- data/Rakefile +14 -0
- data/dynamic_images.gemspec +35 -0
- data/examples/gtk_window.rb +39 -0
- data/examples/named_colors_table.rb +13 -0
- data/init.rb +6 -0
- data/lib/dynamic_image.rb +240 -0
- data/lib/elements/block_element.rb +224 -0
- data/lib/elements/element_interface.rb +320 -0
- data/lib/elements/image_element.rb +82 -0
- data/lib/elements/table_cell_element.rb +34 -0
- data/lib/elements/table_element.rb +220 -0
- data/lib/elements/text_element.rb +195 -0
- data/lib/parsers/xml.dtd +154 -0
- data/lib/parsers/xml_parser.rb +135 -0
- data/lib/render_image.rb +60 -0
- data/lib/sources/color_source.rb +97 -0
- data/lib/sources/gradient_source.rb +200 -0
- data/lib/sources/source_factory.rb +36 -0
- data/test/asym.rb +54 -0
- data/test/performance.1.rb +86 -0
- data/test/performance.2.rb +159 -0
- data/test/performance.3.rb +236 -0
- data/test/performance.rb +51 -0
- data/test/units1.rb +185 -0
- data/test/units2.rb +162 -0
- metadata +115 -0
data/test/performance.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'gtk2'
|
3
|
+
require File.dirname(__FILE__) + '/../init.rb'
|
4
|
+
|
5
|
+
# An array to store created files for removing it at the end
|
6
|
+
created_files = ["performance.1.png", "performance.2.png"]
|
7
|
+
|
8
|
+
# Helper methods to store image decriptions after loading desc file
|
9
|
+
@no_lib = nil
|
10
|
+
@with_lib = nil
|
11
|
+
def no_lib(&block)
|
12
|
+
@no_lib = block
|
13
|
+
end
|
14
|
+
def with_lib(&block)
|
15
|
+
@with_lib = block
|
16
|
+
end
|
17
|
+
|
18
|
+
def time_diff_milli(start, finish)
|
19
|
+
(finish - start) * 1000.0
|
20
|
+
end
|
21
|
+
|
22
|
+
# Run test for x times for both variants and show result
|
23
|
+
x = 100
|
24
|
+
[1, 2, 3].each do |i|
|
25
|
+
load File.dirname(__FILE__) + "/performance.#{i}.rb"
|
26
|
+
t1 = Time.now
|
27
|
+
x.times do
|
28
|
+
@no_lib.call
|
29
|
+
end
|
30
|
+
t2 = Time.now
|
31
|
+
ft1 = time_diff_milli t1, t2
|
32
|
+
t1 = Time.now
|
33
|
+
x.times do
|
34
|
+
@with_lib.call
|
35
|
+
end
|
36
|
+
t2 = Time.now
|
37
|
+
ft2 = time_diff_milli t1, t2
|
38
|
+
puts "===================== TEST #{i} ====================="
|
39
|
+
puts "Time without lib: #{ft1/x} ms"
|
40
|
+
puts "Time with lib: #{ft2/x} ms"
|
41
|
+
puts "Diference is: #{(ft2-ft1)/x} ms (#{(ft2/ft1*100-100).round}%)"
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
|
45
|
+
# Removing created files
|
46
|
+
unless ARGV.include? "-d"
|
47
|
+
created_files.each do |file|
|
48
|
+
file = File.join(File.dirname(__FILE__), file)
|
49
|
+
File.delete file if File.exists? file
|
50
|
+
end
|
51
|
+
end
|
data/test/units1.rb
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'gtk2'
|
3
|
+
require File.dirname(__FILE__) + '/../init.rb'
|
4
|
+
|
5
|
+
# Test method to resolve unit test
|
6
|
+
@exceptions = []
|
7
|
+
@result = {:ok => 0, :failed => 0, :sum => 0}
|
8
|
+
def test(&block)
|
9
|
+
begin
|
10
|
+
block.call
|
11
|
+
@result[:ok] += 1
|
12
|
+
print "."
|
13
|
+
rescue Exception => e
|
14
|
+
@result[:failed] += 1
|
15
|
+
print "E"
|
16
|
+
@exceptions << e
|
17
|
+
end
|
18
|
+
@result[:sum] += 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def puts_result
|
22
|
+
puts "\n\nPassed: #{@result[:ok]}/#{@result[:sum]}"
|
23
|
+
puts "Failed: #{@result[:failed]}/#{@result[:sum]}\n\n"
|
24
|
+
end
|
25
|
+
|
26
|
+
def puts_exceptions
|
27
|
+
puts_result
|
28
|
+
@exceptions.each_with_index do |e, i|
|
29
|
+
puts "========================== Exception #{i + 1} ".ljust(80, "=")
|
30
|
+
puts e.inspect
|
31
|
+
puts e.backtrace
|
32
|
+
puts
|
33
|
+
end
|
34
|
+
puts_result unless @exceptions.empty?
|
35
|
+
end
|
36
|
+
|
37
|
+
# An array to store created files for removing it at the end
|
38
|
+
created_files = []
|
39
|
+
|
40
|
+
# At first place it will render images in PNG and JPG to use it as external images
|
41
|
+
DynamicImage.new :bg => :red do
|
42
|
+
block :bg => :lime, :padding => 20, :margin => 20
|
43
|
+
save! "units.png"
|
44
|
+
created_files << "units.png"
|
45
|
+
save! "units.jpg"
|
46
|
+
created_files << "units.jpg"
|
47
|
+
end
|
48
|
+
|
49
|
+
@lorem_ipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vitae nisl odio, at placerat tortor. \r\nPraesent iaculis congue odio, quis faucibus urna vestibulum rutrum. Sed dui enim, sagittis quis cursus a, molestie id lacus. Suspendisse malesuada elementum augue ut aliquam. Pellentesque ac congue orci. \r\n\r\nUt rhoncus scelerisque sem et tempus. Duis sem est, congue eu congue non, consequat molestie mauris. Donec quam ligula, placerat a adipiscing nec, aliquet nec arcu. Cras in orci odio. Nam non nisi nisi. Cras aliquam, elit fermentum varius molestie, nisi purus ultrices enim, venenatis imperdiet magna neque ornare lacus. Integer nisl magna, commodo ut porta nec, interdum dictum diam. Donec dui tortor, fermentum vitae ornare at, malesuada et lectus. Fusce sagittis libero non diam viverra sed rhoncus est cursus."
|
50
|
+
|
51
|
+
# Map of elements and its attributes and attribute's values (nil value is used automatically)
|
52
|
+
common = {
|
53
|
+
:w => [100, "50%", "0%"],
|
54
|
+
:h => [100],
|
55
|
+
:position => [:static, :relative, :absolute],
|
56
|
+
:x => [10],
|
57
|
+
:y => [10],
|
58
|
+
:z => [10],
|
59
|
+
:margin => [10],
|
60
|
+
:margin_top => [10],
|
61
|
+
:margin_right => [10],
|
62
|
+
:margin_bottom => [10],
|
63
|
+
:margin_left => [10]
|
64
|
+
}
|
65
|
+
@map = {
|
66
|
+
:block => {
|
67
|
+
:align => [:left, :center, :right],
|
68
|
+
:bg => [:red, [255, 0, 0], [255, 0, 0, 255], [1.0, 0, 0], [:cmyk, 0, 1.0, 0, 0], [:hsv, 1, 1, 0], "#ABC", "#AABBCC",
|
69
|
+
[:gradient, "0%", :red, "100%", :lime], [:gradient_repeat, "50%", "0%", :red, "100%", :lime], [:gradient_reflect, "45deg", "50", "0%", :red, "100%", :lime],
|
70
|
+
[:gradient_radial, "0%", :red, "100%", :lime], [:gradient_radial, "50%", "0%", :red, "100%", :lime], [:gradient_radial, "45deg", "50", "0%", :red, "100%", :lime],
|
71
|
+
[:gradient_readial, "90deg", "100", "45deg", "50%", "0%", :red, "100%", :lime], [:gradient_readial, "34", "90deg", "100", "45deg", "50%", "0%", :red, "100%", :lime]],
|
72
|
+
:border => [[1, :solid, :red], [2, :dotted, 1.0, 0, 0]],
|
73
|
+
:border_top => [[1, :solid, :red], [2, :dotted, 1.0, 0, 0]],
|
74
|
+
:border_right => [[1, :solid, :red], [2, :dotted, 1.0, 0, 0]],
|
75
|
+
:border_bottom => [[1, :solid, :red], [2, :dotted, 1.0, 0, 0]],
|
76
|
+
:border_left => [[1, :solid, :red], [2, :dotted, 1.0, 0, 0]],
|
77
|
+
:color => [:red],
|
78
|
+
:padding => [10],
|
79
|
+
:padding_top => [10],
|
80
|
+
:padding_right => [10],
|
81
|
+
:padding_bottom => [10],
|
82
|
+
:padding_left => [10]
|
83
|
+
}.merge(common),
|
84
|
+
:image => {
|
85
|
+
:alpha => [0.5, "50%"],
|
86
|
+
:crop => [[10, 10, 10, 10]]
|
87
|
+
}.merge(common),
|
88
|
+
:table => {
|
89
|
+
:bg => [:red],
|
90
|
+
:border => [[1, :solid, :red]],
|
91
|
+
:cols => [2]
|
92
|
+
}.merge(common),
|
93
|
+
:row => {},
|
94
|
+
:cell => {
|
95
|
+
:colspan => [2],
|
96
|
+
:rowspan => [2]
|
97
|
+
}.merge(common),
|
98
|
+
:text => {
|
99
|
+
:aling => [:left, :center, :right],
|
100
|
+
:auto_dir => [true, false],
|
101
|
+
:color => [:red],
|
102
|
+
:crop_to => [10, [10, :letters], [3, :lines], [1, :line, :letters], [1, :sentences]],
|
103
|
+
:crop_suffix => [" ..."],
|
104
|
+
:font => ["Arial bold 14"],
|
105
|
+
:indent => [10],
|
106
|
+
:justify => [true, false],
|
107
|
+
:spacing => [10],
|
108
|
+
:to_fit => [:crop, :resize, [:crop, :letters], [:crop, 10, :resize], [:crop, 2, :resize, 8, :crop, :letters]]
|
109
|
+
}.merge(common)
|
110
|
+
}
|
111
|
+
@map[:cell].merge(@map[:block])
|
112
|
+
|
113
|
+
# Helping methods and for recursive creations of elements structure
|
114
|
+
@subelements = {:block => [:image, :text, :table], :table => [:row, :row], :row => [:cell, :cell, :cell, :cell], :cell => [:text]}
|
115
|
+
def create_element(img, element)
|
116
|
+
object = nil
|
117
|
+
@map[element].keys.each do |att|
|
118
|
+
([nil] + @map[element][att]).each do |value|
|
119
|
+
attributes = {att => value}
|
120
|
+
test do
|
121
|
+
case element
|
122
|
+
when :text
|
123
|
+
object = img.send element, @lorem_ipsum, attributes
|
124
|
+
when :image
|
125
|
+
object = img.send element, "units.png", attributes
|
126
|
+
object = img.send element, "units.jpg", attributes
|
127
|
+
else
|
128
|
+
object = img.send element, attributes
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
if @subelements[element] && object
|
134
|
+
@subelements[element].each do |subelement|
|
135
|
+
create_element object, subelement
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# Run all combination of elements and its attributes, also all saving and loading methods
|
141
|
+
tested_save_to = {:png => false, :png_endless => false, :jpg => false}
|
142
|
+
[:block, :image, :text, :table].each do |element|
|
143
|
+
dimg = []
|
144
|
+
dimg << DynamicImage.new
|
145
|
+
dimg << DynamicImage.new(:w => 400)
|
146
|
+
dimg << DynamicImage.new(:h => 500)
|
147
|
+
dimg << DynamicImage.new(:w => 400, :h => 500)
|
148
|
+
dimg << DynamicImage.from("units.png")
|
149
|
+
dimg << DynamicImage.from("units.jpg")
|
150
|
+
dimg.each do |img|
|
151
|
+
create_element img, element
|
152
|
+
end
|
153
|
+
dimg.each do |img|
|
154
|
+
test do
|
155
|
+
img.save!
|
156
|
+
end
|
157
|
+
break
|
158
|
+
test do
|
159
|
+
img.save! "test.png"
|
160
|
+
tested_save_to[:png] = true
|
161
|
+
end unless tested_save_to[:png]
|
162
|
+
test do
|
163
|
+
img.save! "test.jpg"
|
164
|
+
tested_save_to[:jpg] = true
|
165
|
+
end unless tested_save_to[:jpg]
|
166
|
+
test do
|
167
|
+
img.save_endless! 2 do |index|
|
168
|
+
"test.png"
|
169
|
+
end
|
170
|
+
tested_save_to[:png_endless] = true
|
171
|
+
end unless tested_save_to[:png_endless]
|
172
|
+
img.destroy
|
173
|
+
end
|
174
|
+
end
|
175
|
+
created_files << "test.png"
|
176
|
+
created_files << "test.jpg"
|
177
|
+
|
178
|
+
# Removing created files
|
179
|
+
created_files.each do |file|
|
180
|
+
file = File.join(File.dirname(__FILE__), file)
|
181
|
+
File.delete file if File.exists? file
|
182
|
+
end
|
183
|
+
|
184
|
+
# Show result and exceptions
|
185
|
+
puts_exceptions
|
data/test/units2.rb
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'gtk2'
|
3
|
+
require File.dirname(__FILE__) + '/../init.rb'
|
4
|
+
|
5
|
+
# Test method to resolve unit test
|
6
|
+
@exceptions = []
|
7
|
+
@result = {:ok => 0, :failed => 0, :sum => 0}
|
8
|
+
def test(&block)
|
9
|
+
begin
|
10
|
+
block.call
|
11
|
+
@result[:ok] += 1
|
12
|
+
print "."
|
13
|
+
rescue Exception => e
|
14
|
+
@result[:failed] += 1
|
15
|
+
print "E"
|
16
|
+
@exceptions << e
|
17
|
+
end
|
18
|
+
@result[:sum] += 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def puts_result
|
22
|
+
puts "\n\nPassed: #{@result[:ok]}/#{@result[:sum]}"
|
23
|
+
puts "Failed: #{@result[:failed]}/#{@result[:sum]}\n\n"
|
24
|
+
end
|
25
|
+
|
26
|
+
def puts_exceptions
|
27
|
+
puts_result
|
28
|
+
@exceptions.each_with_index do |e, i|
|
29
|
+
puts "========================== Exception #{i + 1} ".ljust(80, "=")
|
30
|
+
puts e.inspect
|
31
|
+
puts e.backtrace
|
32
|
+
puts
|
33
|
+
end
|
34
|
+
puts_result unless @exceptions.empty?
|
35
|
+
end
|
36
|
+
|
37
|
+
# An array to store created files for removing it at the end
|
38
|
+
created_files = []
|
39
|
+
|
40
|
+
# At first place it will render images in PNG and JPG to use it as external images
|
41
|
+
DynamicImage.new :bg => :red do
|
42
|
+
block :bg => :lime, :padding => 20, :margin => 20
|
43
|
+
save! "units.png"
|
44
|
+
created_files << "units.png"
|
45
|
+
save! "units.jpg"
|
46
|
+
created_files << "units.jpg"
|
47
|
+
end
|
48
|
+
|
49
|
+
@lorem_ipsum = "Lorem ipsum dolor sit amet, \nconsectetur adipiscing elit. \nAenean vitae nisl odio, at placerat tortor."
|
50
|
+
|
51
|
+
# Map of elements and its attributes and attribute's values (nil value is used automatically)
|
52
|
+
fixnums = [:abcd, "abcd", 0.1, -0.1, "0.1", "-0.1"]
|
53
|
+
bad_values = [-100, "-50%", "-0%", -0.4] + fixnums
|
54
|
+
bad_values_arr = bad_values + [[bad_values, bad_values]]
|
55
|
+
common = {
|
56
|
+
:w => bad_values,
|
57
|
+
:h => bad_values,
|
58
|
+
:position => bad_values,
|
59
|
+
:x => fixnums,
|
60
|
+
:y => fixnums,
|
61
|
+
:z => fixnums,
|
62
|
+
:margin => fixnums,
|
63
|
+
:margin_top => fixnums,
|
64
|
+
:margin_right => fixnums,
|
65
|
+
:margin_bottom => fixnums,
|
66
|
+
:margin_left => fixnums
|
67
|
+
}
|
68
|
+
@map = {
|
69
|
+
:block => {
|
70
|
+
:align => bad_values,
|
71
|
+
:bg => bad_values_arr,
|
72
|
+
:border => bad_values_arr,
|
73
|
+
:border_top => bad_values_arr,
|
74
|
+
:border_right => bad_values_arr,
|
75
|
+
:border_bottom => bad_values_arr,
|
76
|
+
:border_left => bad_values_arr,
|
77
|
+
:color => bad_values_arr,
|
78
|
+
:padding => fixnums,
|
79
|
+
:padding_top => fixnums,
|
80
|
+
:padding_right => fixnums,
|
81
|
+
:padding_bottom => fixnums,
|
82
|
+
:padding_left => fixnums
|
83
|
+
}.merge(common),
|
84
|
+
:image => {
|
85
|
+
:alpha => bad_values,
|
86
|
+
:crop => bad_values_arr
|
87
|
+
}.merge(common),
|
88
|
+
:table => {
|
89
|
+
:bg => bad_values_arr,
|
90
|
+
:border => bad_values_arr,
|
91
|
+
:cols => bad_values
|
92
|
+
}.merge(common),
|
93
|
+
:row => {},
|
94
|
+
:cell => {
|
95
|
+
:colspan => bad_values,
|
96
|
+
:rowspan => bad_values
|
97
|
+
}.merge(common),
|
98
|
+
:text => {
|
99
|
+
:aling => bad_values,
|
100
|
+
:auto_dir => bad_values,
|
101
|
+
:color => bad_values,
|
102
|
+
:crop_to => bad_values_arr,
|
103
|
+
:crop_suffix => [[10, 10]],
|
104
|
+
:font => [[10, 10]],
|
105
|
+
:indent => bad_values,
|
106
|
+
:justify => bad_values,
|
107
|
+
:spacing => bad_values,
|
108
|
+
:to_fit => bad_values_arr
|
109
|
+
}.merge(common)
|
110
|
+
}
|
111
|
+
@map[:cell].merge(@map[:block])
|
112
|
+
|
113
|
+
# Helping methods and for recursive creations of elements structure
|
114
|
+
@subelements = {:block => [:image, :text, :table], :table => [:row, :row], :row => [:cell, :cell, :cell, :cell], :cell => [:text]}
|
115
|
+
def create_element(img, element)
|
116
|
+
object = nil
|
117
|
+
@map[element].keys.each do |att|
|
118
|
+
([nil] + @map[element][att]).each do |value|
|
119
|
+
attributes = {att => value}
|
120
|
+
test do
|
121
|
+
case element
|
122
|
+
when :text
|
123
|
+
object = img.send element, @lorem_ipsum, attributes
|
124
|
+
when :image
|
125
|
+
object = img.send element, "units.png", attributes
|
126
|
+
object = img.send element, "units.jpg", attributes
|
127
|
+
else
|
128
|
+
object = img.send element, attributes
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
if @subelements[element] && object
|
134
|
+
@subelements[element].each do |subelement|
|
135
|
+
create_element object, subelement
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# Run all combination of elements and its attributes, also all saving and loading methods
|
141
|
+
[:block, :image, :text, :table].each do |element|
|
142
|
+
dimg = []
|
143
|
+
dimg << DynamicImage.new
|
144
|
+
dimg << DynamicImage.new(:w => 400)
|
145
|
+
dimg << DynamicImage.new(:h => 500)
|
146
|
+
dimg << DynamicImage.new(:w => 400, :h => 500)
|
147
|
+
dimg << DynamicImage.from("units.png")
|
148
|
+
dimg << DynamicImage.from("units.jpg")
|
149
|
+
dimg.each do |img|
|
150
|
+
create_element img, element
|
151
|
+
end
|
152
|
+
dimg.each(&:destroy)
|
153
|
+
end
|
154
|
+
|
155
|
+
# Removing created files
|
156
|
+
created_files.each do |file|
|
157
|
+
file = File.join(File.dirname(__FILE__), file)
|
158
|
+
File.delete file if File.exists? file
|
159
|
+
end
|
160
|
+
|
161
|
+
# Show result and exceptions
|
162
|
+
puts_exceptions
|
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dynamic_images
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dominik Malis
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-06-19 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: cairo
|
16
|
+
requirement: &21028440 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *21028440
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: pango
|
27
|
+
requirement: &21027740 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *21027740
|
36
|
+
description: Ruby library providing image rendering described by dynamic templates
|
37
|
+
email: dominik.malis@gmail.com
|
38
|
+
executables: []
|
39
|
+
extensions: []
|
40
|
+
extra_rdoc_files:
|
41
|
+
- README.rdoc
|
42
|
+
- README_USAGE.rdoc
|
43
|
+
- lib/dynamic_image.rb
|
44
|
+
- lib/elements/block_element.rb
|
45
|
+
- lib/elements/element_interface.rb
|
46
|
+
- lib/elements/image_element.rb
|
47
|
+
- lib/elements/table_cell_element.rb
|
48
|
+
- lib/elements/table_element.rb
|
49
|
+
- lib/elements/text_element.rb
|
50
|
+
- lib/parsers/xml.dtd
|
51
|
+
- lib/parsers/xml_parser.rb
|
52
|
+
- lib/render_image.rb
|
53
|
+
- lib/sources/color_source.rb
|
54
|
+
- lib/sources/gradient_source.rb
|
55
|
+
- lib/sources/source_factory.rb
|
56
|
+
files:
|
57
|
+
- README.rdoc
|
58
|
+
- README_USAGE.rdoc
|
59
|
+
- Rakefile
|
60
|
+
- examples/gtk_window.rb
|
61
|
+
- examples/named_colors_table.rb
|
62
|
+
- init.rb
|
63
|
+
- lib/dynamic_image.rb
|
64
|
+
- lib/elements/block_element.rb
|
65
|
+
- lib/elements/element_interface.rb
|
66
|
+
- lib/elements/image_element.rb
|
67
|
+
- lib/elements/table_cell_element.rb
|
68
|
+
- lib/elements/table_element.rb
|
69
|
+
- lib/elements/text_element.rb
|
70
|
+
- lib/parsers/xml.dtd
|
71
|
+
- lib/parsers/xml_parser.rb
|
72
|
+
- lib/render_image.rb
|
73
|
+
- lib/sources/color_source.rb
|
74
|
+
- lib/sources/gradient_source.rb
|
75
|
+
- lib/sources/source_factory.rb
|
76
|
+
- test/asym.rb
|
77
|
+
- test/performance.1.rb
|
78
|
+
- test/performance.2.rb
|
79
|
+
- test/performance.3.rb
|
80
|
+
- test/performance.rb
|
81
|
+
- test/units1.rb
|
82
|
+
- test/units2.rb
|
83
|
+
- Manifest
|
84
|
+
- dynamic_images.gemspec
|
85
|
+
homepage: http://github.com/malis/dynamic_images
|
86
|
+
licenses: []
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options:
|
89
|
+
- --line-numbers
|
90
|
+
- --inline-source
|
91
|
+
- --title
|
92
|
+
- Dynamic_images
|
93
|
+
- --main
|
94
|
+
- README_USAGE.rdoc
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '1.2'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project: dynamic_images
|
111
|
+
rubygems_version: 1.8.10
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: Ruby library providing image rendering described by dynamic templates
|
115
|
+
test_files: []
|