dynamic_images 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -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: []