flash_tool 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of flash_tool might be problematic. Click here for more details.

@@ -0,0 +1,114 @@
1
+ module FlashTool
2
+
3
+
4
+ class Flash
5
+
6
+ attr :input
7
+ attr :args
8
+
9
+ # Path to file
10
+ attr_reader :output_path
11
+
12
+ # Hash with informations about generated file
13
+ attr_reader :info
14
+
15
+
16
+ #
17
+ # This is basic method for generating command in swf tools
18
+ # ==Example
19
+ # something = Flash.new("document.pdf","pdf2swf")do |f|
20
+ # f.rate(24)
21
+ # f.save("outputs.swf"
22
+ # end
23
+ #
24
+ # It is much easer to use other classes
25
+ # *FlashObject - for work converting from other formats
26
+ # *FlashScirpt - for generating files from scripts
27
+ # *FlashCombine - for combining files
28
+ #
29
+ def initialize(input, command ,tempfile = nil, &block)
30
+ @args = []
31
+ @tempfile = tempfile
32
+ @input = input
33
+ @command = command
34
+ yield self if block_given?
35
+ raise FlashToolError, "File not found" unless File.exist?(input)
36
+ end
37
+
38
+
39
+
40
+ # Save swf file from documents
41
+ # This method creates and run command
42
+ # Output path can be defined in save method or in method output before
43
+ # otherwise default file name will be same as input name document with swf extension
44
+ def save(output_path=nil)
45
+ to_output_path(output_path)
46
+ run_command(@command,*@args << @input)
47
+ @info = FlashTool.flash_info(@output_path)
48
+ end
49
+
50
+
51
+
52
+ # Setting options from command
53
+ # List of commands and options can find here http://wiki.swftools.org/index.php/Main_Page
54
+ # Optins with "-" can't be executed in shorter form
55
+ #
56
+ def method_missing(symbol, *args)
57
+ @output_path = args.to_s if symbol.to_s == "output"
58
+ @args << ("--#{symbol}")
59
+ @args +=(args)
60
+ end
61
+
62
+
63
+ protected
64
+
65
+ # This method runs command
66
+ def run_command(command ,*args)
67
+ args.collect! do |arg|
68
+ # args can contain characters like '>' so we must escape them, but don't quote switches
69
+ if arg !~ /^[\-]/
70
+ "\"#{arg}\""
71
+ else
72
+ arg.to_s
73
+ end
74
+ end
75
+ command = "#{command} #{args.join(" ")}"
76
+ output = `#{command} 2>&1`
77
+
78
+ if $?.exitstatus != 0
79
+ raise FlashToolError, "SWF command (#{command.inspect}) failed: #{{:status_code => $?, :output => output}.inspect}"
80
+ else
81
+ output
82
+ end
83
+ end
84
+
85
+ private
86
+
87
+ # set output path before saveing
88
+ def to_output_path(output_path) #:nodoc:
89
+ unless @output_path
90
+ if output_path
91
+ @output_path = output_path
92
+ else
93
+ @output_path = parse_nil_path(@input)
94
+ end
95
+ @args << "--output"
96
+ @args << @output_path
97
+ end
98
+ end
99
+
100
+
101
+
102
+ # Parsing file name and push new exetesnion if filename is not setted
103
+ def parse_nil_path path #:nodoc:
104
+ path = path.split('.')
105
+ path.pop if path.length > 1
106
+ path.push("swf")
107
+ path.join('.')
108
+
109
+ end
110
+
111
+ end
112
+
113
+
114
+ end
@@ -0,0 +1,82 @@
1
+ require File.dirname(__FILE__) + '/flash.rb'
2
+ module FlashTool
3
+
4
+ #
5
+ # This class work with tool swfcombine it is basic http://www.swftools.org/swfcombine.html
6
+ # You can use every opticons for this command.
7
+ # For adding master and slave swf files you must use methods master and slave
8
+ # If you trying to use options
9
+ #
10
+ class FlashCombine < Flash
11
+
12
+
13
+ #
14
+ # Take two or more SWF files, and combine them into a new SWF file.
15
+ # Can be used with or without master swf file
16
+ #
17
+ # ==Use
18
+ #
19
+ # combinated_file = FlashTool::FlashCombine.new
20
+ # combinated_file.master("master.swf")
21
+ # combinated_file.slave("viewport","slave.swf") #viewport is name of frame where can be placed slave
22
+ # combinated_file.rate(24)
23
+ # combinated_file.save("merged.swf")
24
+ #
25
+ # cominated_file = FlashTool::FlashCombine.new do |f|
26
+ # f.master("master.swf")
27
+ # f.slave("viewport","slave.swf")
28
+ # f.output("merged.swf")
29
+ # f.save
30
+ # end
31
+ #
32
+ def initialize(&block)
33
+ @args = []
34
+ @slaves = []
35
+ @command = "swfcombine"
36
+ yield self if block_given?
37
+ end
38
+
39
+ #
40
+ # With this method you will set master swf file for combining
41
+ #
42
+ # Can be only one master file
43
+ #
44
+ # Raise FlashToolError
45
+ #
46
+ def master(file)
47
+ raise(FlashToolError, "Can be only one master swf file" ) if @master
48
+ @master = file
49
+ end
50
+
51
+ #
52
+ # With this method you will set slave swf file for combining
53
+ #
54
+ # Can be only one master file
55
+ #
56
+ def slave(name, file)
57
+ @slaves += ["#{name}=#{file}"]
58
+ end
59
+
60
+ #
61
+ # Method save generate and run swfcombine command and generates file
62
+ # Outputh path must be setted here or with method outputh before
63
+ #
64
+ # Raise error if output_path is not set.
65
+ #
66
+ def save(output_path=nil)
67
+ raise FlashToolError, "No output file name " if !@output_path and !output_path
68
+ to_output_path(output_path)
69
+ combiner
70
+ run_command(@command,*@args)
71
+ @info = FlashTool.flash_info(@output_path)
72
+ end
73
+
74
+
75
+ private
76
+ def combiner
77
+ @args.unshift(@master, @slaves)
78
+ end
79
+
80
+
81
+ end
82
+ end
@@ -0,0 +1,73 @@
1
+ require File.dirname(__FILE__) + '/flash.rb'
2
+ module FlashTool
3
+ class FlashObject < Flash
4
+ attr_reader :type
5
+ attr :input
6
+
7
+ # Input is path file with good extesnion
8
+ # Approved formats are :
9
+ # *pdf,
10
+ # *jpeg (jpeg and jpg extension),
11
+ # *png,
12
+ # *gif,
13
+ # *fonts (ttf, afm, pfa, pfb formats) and
14
+ # *wav (wav funcionality is untested and you can often will have problems with SWFTools installation and with command wav2swf)
15
+ #
16
+ # type - is extension name string if your input file have other extension
17
+ #
18
+ # == Example
19
+ # flash = FlashOjbect.new('path_to_file', 'png')
20
+ #
21
+ # flash = FlashOjbect.new('path_to_file.jpg') do |f|
22
+ # f.quality(80)
23
+ # f.rate('24')
24
+ # f.save('outputh_path')
25
+ # end
26
+ #
27
+ # Raise exceptions
28
+ def initialize(input, type = nil, tempfile = nil, &block)
29
+ @type = type || input.split('.').last
30
+ @command = type_parser @type
31
+ super(input,@command,tempfile,&block)
32
+
33
+ end
34
+
35
+
36
+ def self.from_blob(blob, ext, &block)
37
+ begin
38
+ tempfile = Tempfile.new(['flash_tool', ext.to_s])
39
+ tempfile.binmode
40
+ tempfile.write(blob)
41
+ ensure
42
+ tempfile.close if tempfile
43
+ end
44
+
45
+ return self.new(tempfile.path, ext ,tempfile, &block)
46
+ end
47
+
48
+ private
49
+
50
+ def type_parser input
51
+ case input.downcase
52
+ when "pdf"
53
+ command = "pdf2swf"
54
+ when "jpg", "jpeg"
55
+ command = "jpeg2swf"
56
+ when "png"
57
+ command = "png2swf"
58
+ when "gif"
59
+ command = "gif2swf"
60
+ when "ttf", "afm", "pfa", "pfb"
61
+ command = "font2swf"
62
+ when "wav" #TODO Test wav for converting
63
+ command = "wav2swf"
64
+ else
65
+ raise FlashToolError, "Invalid type"
66
+ end
67
+ return command
68
+ end
69
+
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/flash.rb'
2
+ module FlashTool
3
+
4
+
5
+
6
+ # Generates flash files from scripts and using swfc tool
7
+ # More about this http://wiki.swftools.org/index.php/Swfc
8
+ class FlashScript < Flash
9
+
10
+ def initialize(input, tempfile = nil, &block)
11
+ @command = "swfc"
12
+ super(input,@command,tempfile,&block)
13
+ end
14
+
15
+ # Creates and return flash from input script
16
+ # Same as option cgi options, but don't create file
17
+ def cgi
18
+ @args << "--cgi"
19
+ run_command(@command,*@args << @input)
20
+ end
21
+
22
+ # Creates and return flash from input script
23
+ def self.flash_data(input)
24
+ return self.new(input).cgi
25
+ end
26
+
27
+ # Creates flash from input script
28
+ def self.create(input, output)
29
+ return self.new(input).save(output)
30
+ end
31
+
32
+
33
+ end
34
+
35
+
36
+ end
File without changes
@@ -0,0 +1 @@
1
+ stuipid test
File without changes
@@ -0,0 +1,8 @@
1
+ .flash filename="box.swf"
2
+ .box b1 100 100 color=yellow fill=red
3
+ .put b1 pin=center scale=0%
4
+ .frame 100
5
+ .change b1 pin=center scale=100%
6
+ .frame 200
7
+ .change b1 pin=center scale=0%
8
+ .end
File without changes
File without changes
File without changes
@@ -0,0 +1,88 @@
1
+ require File.join(File.dirname(__FILE__), '../lib/flash_tool.rb')
2
+
3
+ require 'test/unit'
4
+
5
+ class Test_Flash_Combine < Test::Unit::TestCase
6
+ include FlashTool
7
+ CURRENT_DIR = File.dirname(File.expand_path(__FILE__)) + "/test_files/"
8
+ TEST_SWF = CURRENT_DIR + "tester.swf"
9
+ BAD_FILE = CURRENT_DIR + "bad_ext.txt"
10
+ JPG_SWF = CURRENT_DIR + "jpeg.swf"
11
+ NO_FILE = CURRENT_DIR + "jpegswf.swf"
12
+ BAD_SWF = CURRENT_DIR + "bad_swf.swf"
13
+ VIEW_SWF = CURRENT_DIR + "rfxview.swf"
14
+
15
+ def test_combine
16
+ output_file = "#{CURRENT_DIR}/merge.swf"
17
+ begin
18
+ inputs = VIEW_SWF
19
+ flash = FlashCombine.new()
20
+ flash.master(inputs)
21
+ flash.slave("viewport",TEST_SWF)
22
+ flash.save(output_file)
23
+ assert(File.exist?(output_file))
24
+ assert_kind_of(Hash, flash.info)
25
+
26
+ ensure
27
+ File.delete(output_file)
28
+ end
29
+ end
30
+
31
+ def test_combine_block
32
+ output_file = "#{CURRENT_DIR}/merge.swf"
33
+ begin
34
+ inputs = VIEW_SWF
35
+ flash = FlashCombine.new() do |f|
36
+ f.master(inputs)
37
+ f.slave("viewport",TEST_SWF)
38
+ f.save(output_file)
39
+ end
40
+ assert_kind_of(Hash, flash.info)
41
+ assert(File.exist?(output_file))
42
+ ensure
43
+ File.delete(output_file)
44
+ end
45
+ end
46
+
47
+ def test_combine_without_save
48
+ output_file = "#{CURRENT_DIR}/merge.swf"
49
+ begin
50
+ inputs = VIEW_SWF
51
+ flash = FlashCombine.new() do |f|
52
+ f.slave("viewport",TEST_SWF)
53
+ f.method_missing("local-with-filesystem")
54
+ f.method_missing("rate",50)
55
+ f.master(inputs)
56
+ f.output(output_file)
57
+ f.save()
58
+ end
59
+ assert_kind_of(Hash, flash.info)
60
+ assert(File.exist?(output_file))
61
+ ensure
62
+ File.delete(output_file)
63
+ end
64
+ end
65
+
66
+ def test_combine_no_output
67
+ inputs = VIEW_SWF
68
+ FlashCombine.new() do |f|
69
+ f.master(inputs)
70
+ f.slave("viewport",TEST_SWF)
71
+ f.output()
72
+ assert_raise(FlashToolError) {f.save()}
73
+ end
74
+ end
75
+
76
+ def test_bad_inputs
77
+ inputs = BAD_FILE
78
+ FlashCombine.new() do |f|
79
+ f.master(inputs)
80
+ f.slave("viewport",TEST_SWF)
81
+ f.output()
82
+ assert_raise(FlashToolError) {f.save()}
83
+
84
+ end
85
+
86
+ end
87
+
88
+ end
@@ -0,0 +1,230 @@
1
+ # To change this template, choose Tools | Templates
2
+ # and open the template in the editor.
3
+
4
+ require 'test/unit'
5
+ require File.join(File.dirname(__FILE__), '../lib/flash_tool.rb')
6
+
7
+ class FlashToolsTest < Test::Unit::TestCase
8
+ include FlashTool
9
+
10
+ CURRENT_DIR = File.dirname(File.expand_path(__FILE__)) + "/test_files/"
11
+
12
+ PDF_FILE = CURRENT_DIR + "test.pdf"
13
+ PDF_PASSW_PROTECTED = CURRENT_DIR + "test_with_password.pdf"
14
+ GIF_FILE = CURRENT_DIR + "25-1.gif"
15
+ FONT_FILE = CURRENT_DIR + "liberationserif_bold.ttf"
16
+ JPG_FILE = CURRENT_DIR + "test.jpg"
17
+ PNG_FILE = CURRENT_DIR + "test.png"
18
+ VIEW_SWF = CURRENT_DIR + "rfxview.swf"
19
+
20
+
21
+
22
+ def test_flash_object_from_blob
23
+ File.open(JPG_FILE, "rb") do |f|
24
+ flash_object = FlashObject.from_blob(f.read, 'jpg')
25
+ end
26
+ end
27
+
28
+
29
+ def test_flash_object_new
30
+ flash_object = FlashObject.new(JPG_FILE)
31
+ end
32
+
33
+ #
34
+ # Testing file type detection and creation by file type
35
+ #
36
+ #
37
+
38
+ def test_pdf_create
39
+ begin
40
+ output_file = "#{CURRENT_DIR}/test.swf"
41
+ flash_object = FlashObject.new(PDF_FILE)
42
+ flash_object.jpegquality(80)
43
+ flash_object.save(output_file)
44
+
45
+ assert(File.exist?(output_file))
46
+ ensure
47
+ File.delete(output_file)
48
+ end
49
+ end
50
+ def test_pdf_create_with_password
51
+ output_file = "#{CURRENT_DIR}/test_password.swf"
52
+ begin
53
+ flash_object = FlashObject.new(PDF_PASSW_PROTECTED)
54
+ flash_object.jpegquality(80)
55
+ flash_object.password("test")
56
+ flash_object.save(output_file)
57
+ assert(File.exist?(output_file))
58
+ ensure
59
+ File.delete(output_file)
60
+ end
61
+ end
62
+
63
+ def test_pdf_create_with_password_without_save_declaration
64
+ output_file = "#{CURRENT_DIR}/test_password.swf"
65
+ begin
66
+
67
+ flash_object = FlashObject.new(PDF_PASSW_PROTECTED)
68
+ flash_object.jpegquality(80)
69
+ flash_object.password("test")
70
+ flash_object.output(output_file)
71
+ flash_object.save()
72
+ assert(File.exist?(output_file))
73
+ assert_equal output_file, flash_object.output_path
74
+ ensure
75
+ File.delete(output_file)
76
+ end
77
+ end
78
+
79
+ def test_font_create
80
+ output_file = "#{CURRENT_DIR}/arial.swf"
81
+ begin
82
+ flash_object = FlashObject.new(FONT_FILE)
83
+ flash_object.save(output_file)
84
+ assert(File.exist?(output_file))
85
+ ensure
86
+ File.delete(output_file)
87
+ end
88
+ end
89
+
90
+ def test_gif_create
91
+ output_file = "#{CURRENT_DIR}/gif.swf"
92
+ begin
93
+ flash_object = FlashObject.new(GIF_FILE)
94
+ flash_object.save(output_file)
95
+ assert(File.exist?(output_file))
96
+ ensure
97
+ File.delete(output_file)
98
+ end
99
+ end
100
+
101
+ def test_png_create
102
+ output_file = "#{CURRENT_DIR}/png.swf"
103
+ begin
104
+ flash_object = FlashObject.new(PNG_FILE)
105
+ flash_object.save(output_file)
106
+ assert(File.exist?(output_file))
107
+ ensure
108
+ File.delete(output_file)
109
+ end
110
+ end
111
+
112
+ def test_jpg_create
113
+ output_file = "#{CURRENT_DIR}/jpg.swf"
114
+ begin
115
+ flash_object = FlashObject.new(JPG_FILE)
116
+ flash_object.save(output_file)
117
+ assert(File.exist?(output_file))
118
+ ensure
119
+ File.delete(output_file)
120
+ end
121
+ end
122
+
123
+ def test_create_from_blob
124
+ output_file = "#{CURRENT_DIR}/jpg_blob.swf"
125
+ begin
126
+ tt = File.open(JPG_FILE, "rb")
127
+ flash_object = FlashObject.from_blob(tt.read, 'jpg')
128
+ flash_object.quality(80)
129
+ flash_object.save(output_file)
130
+ assert(File.exist?(output_file))
131
+ assert_equal output_file, flash_object.output_path
132
+
133
+ ensure
134
+
135
+ File.delete(output_file)
136
+ end
137
+ end
138
+
139
+ def test_create_from_blob_block
140
+ output_file = "#{CURRENT_DIR}/jpg_block.swf"
141
+ begin
142
+
143
+ tt = File.open(JPG_FILE, "rb")
144
+ flash_object = FlashObject.from_blob(tt.read, 'jpg') do |f|
145
+ f.quality(80)
146
+ f.output(output_file)
147
+ f.save()
148
+ end
149
+ assert(File.exist?(output_file))
150
+ assert_kind_of Hash, flash_object.info
151
+ assert_equal output_file, flash_object.output_path
152
+
153
+ ensure
154
+
155
+ File.delete(output_file)
156
+ end
157
+ end
158
+
159
+ def test_creating_viewer
160
+ output_file = "#{CURRENT_DIR}/jpg.swf"
161
+ output_file = "#{CURRENT_DIR}/test_viewer.swf"
162
+ begin
163
+ flash_object = FlashObject.new(PDF_FILE)
164
+ flash_object.jpegquality(80)
165
+ flash_object.viewer(VIEW_SWF)
166
+ flash_object.save(output_file)
167
+ assert(File.exist?(output_file))
168
+ ensure
169
+ File.delete(output_file)
170
+ end
171
+ end
172
+
173
+
174
+
175
+
176
+ #
177
+ # Testing errors and bad types
178
+ #
179
+
180
+ def test_file_not_exist
181
+ assert_raise(FlashToolError) { flash_object = FlashObject.new("nofile.jpg") }
182
+ end
183
+
184
+ def test_wrong_file_type
185
+ assert_raise(FlashToolError) {flash_object = FlashObject.new("bad_ext.txt")}
186
+ end
187
+
188
+
189
+ def test_block
190
+ output_file = "#{CURRENT_DIR}/jpg.swf"
191
+ begin
192
+ flash_object = FlashObject.new(JPG_FILE) do |f|
193
+ f.quality(80)
194
+ end
195
+ flash_object.save(output_file)
196
+
197
+ assert(File.exist?(output_file))
198
+ ensure
199
+ File.delete(output_file)
200
+ end
201
+ end
202
+
203
+ def test_info
204
+ output_file = "#{CURRENT_DIR}/jpg.swf"
205
+ begin
206
+ flash_object = FlashObject.new(JPG_FILE)
207
+ assert_equal nil, flash_object.info
208
+ flash_object.output(output_file)
209
+ assert_equal nil, flash_object.info
210
+ flash_object.save()
211
+ assert_not_equal nil, flash_object.info
212
+
213
+ ensure
214
+ File.delete(output_file)
215
+ end
216
+ end
217
+
218
+ def test_without_outputh_path
219
+ begin
220
+ flash_object = FlashObject.new(JPG_FILE)
221
+ flash_object.save()
222
+ assert_equal("#{CURRENT_DIR}test.swf" , flash_object.output_path)
223
+ ensure
224
+ File.delete(flash_object.output_path)
225
+ end
226
+ end
227
+
228
+
229
+ end
230
+