sprout-as3-bundle 0.2.3 → 0.2.9
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.
- data/lib/sprout/as3/version.rb +1 -1
- data/lib/sprout/as3.rb +1 -1
- data/lib/sprout/as3_tasks.rb +1 -0
- data/lib/sprout/generators/project/templates/rakefile.rb +8 -8
- data/lib/sprout/tasks/adl_documentation.rb +54 -0
- data/lib/sprout/tasks/adt_cert_documentation.rb +44 -0
- data/lib/sprout/tasks/adt_documentation.rb +88 -0
- data/lib/sprout/tasks/asdoc_rdoc.rb +2 -2
- data/lib/sprout/tasks/asdoc_task.rb +25 -2
- data/lib/sprout/tasks/compc_documentation.rb +606 -0
- data/lib/sprout/tasks/fcsh_task.rb +0 -1
- data/lib/sprout/tasks/fdb_task.rb +474 -0
- data/lib/sprout/tasks/mxmlc_debug.rb +22 -4
- data/lib/sprout/tasks/mxmlc_deploy.rb +22 -2
- data/lib/sprout/tasks/mxmlc_document.rb +24 -10
- data/lib/sprout/tasks/mxmlc_documentation.rb +547 -0
- data/lib/sprout/tasks/mxmlc_flex_builder.rb +13 -0
- data/lib/sprout/tasks/mxmlc_helper.rb +14 -5
- data/lib/sprout/tasks/mxmlc_stylesheet.rb +20 -1
- data/lib/sprout/tasks/mxmlc_swc.rb +25 -4
- data/lib/sprout/tasks/mxmlc_task.rb +31 -4
- data/lib/sprout/tasks/mxmlc_unit.rb +23 -5
- data/rakefile.rb +1 -2
- metadata +10 -14
- data/mxmlc.params +0 -116
@@ -0,0 +1,474 @@
|
|
1
|
+
|
2
|
+
module Sprout #:nodoc:
|
3
|
+
|
4
|
+
class FDBTaskError < StandardError #:nodoc:
|
5
|
+
end
|
6
|
+
|
7
|
+
# The FDBTask provides a procedural rake front end to the FDB command line tool
|
8
|
+
#
|
9
|
+
# Here is a decent tutorial on using FDB with SWF or HTML content:
|
10
|
+
# http://installingcats.wordpress.com/tag/adobe-flex/
|
11
|
+
#
|
12
|
+
# You can send the fdb task some debug commands directly or simply
|
13
|
+
# execute the rake task and interact with the debugger manually.
|
14
|
+
#
|
15
|
+
# The FDBTask requires that you have a debug Flash Player installed
|
16
|
+
# on your system as the default execution application for SWF files.
|
17
|
+
#
|
18
|
+
# Following is an example of setting up a breakpoint in
|
19
|
+
# SomeFile at line 23
|
20
|
+
# fdb :debug do |t|
|
21
|
+
# t.file = 'bin/SomeProject-debug.swf'
|
22
|
+
# t.run
|
23
|
+
# t.break = 'SomeFile:23'
|
24
|
+
# t.continue
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# You can also point the FDBTask at HTML pages. These pages will be
|
28
|
+
# launched in your default browswer. You will need to manually install
|
29
|
+
# a debug Flash Player in that particular browser.
|
30
|
+
# To use a browser instead of the desktop Flash Player, simply point
|
31
|
+
# file argument at an HTML document or remote URL. The SWF file loaded
|
32
|
+
# must be compiled using the -debug flag in order to connect to the
|
33
|
+
# debugger.
|
34
|
+
# fdb :debug do |t|
|
35
|
+
# t.file = 'bin/SomeProject-debug.html'
|
36
|
+
# t.run
|
37
|
+
# t.continue
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
class FDBTask < ToolTask
|
41
|
+
# The SWF file to debug.
|
42
|
+
attr_accessor :swf
|
43
|
+
|
44
|
+
def initialize_task # :nodoc:
|
45
|
+
@default_gem_name = 'sprout-flex3sdk-tool'
|
46
|
+
@default_gem_path = 'bin/fdb'
|
47
|
+
@queue = []
|
48
|
+
end
|
49
|
+
|
50
|
+
def define # :nodoc:
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def stdout=(out) # :nodoc:
|
55
|
+
@stdout = out
|
56
|
+
end
|
57
|
+
|
58
|
+
def stdout # :nodoc:
|
59
|
+
@stdout ||= $stdout
|
60
|
+
end
|
61
|
+
|
62
|
+
def execute(*args) # :nodoc:
|
63
|
+
# TODO: First check the SWF file to ensure that debugging is enabled!
|
64
|
+
buffer = FDBBuffer.new(get_executable, stdout)
|
65
|
+
buffer.wait_for_prompt
|
66
|
+
|
67
|
+
@queue.each do |command|
|
68
|
+
handle_command(buffer, command)
|
69
|
+
end
|
70
|
+
|
71
|
+
buffer.join
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
75
|
+
def handle_command(buffer, command) # :nodoc:
|
76
|
+
parts = command.split(' ')
|
77
|
+
name = parts.shift
|
78
|
+
value = parts.shift
|
79
|
+
case name
|
80
|
+
when "sleep"
|
81
|
+
buffer.sleep_until value
|
82
|
+
when "terminate"
|
83
|
+
buffer.kill
|
84
|
+
else
|
85
|
+
buffer.write command
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def get_executable # :nodoc:
|
90
|
+
exe = Sprout.get_executable(gem_name, gem_path, gem_version)
|
91
|
+
User.clean_path(exe)
|
92
|
+
end
|
93
|
+
|
94
|
+
def command_queue # :nodoc:
|
95
|
+
@queue
|
96
|
+
end
|
97
|
+
|
98
|
+
# Print backtrace of all stack frames
|
99
|
+
def bt
|
100
|
+
@queue << "bt"
|
101
|
+
end
|
102
|
+
|
103
|
+
# Set breakpoint at specified line or function
|
104
|
+
def break=(point)
|
105
|
+
@queue << "break #{point}"
|
106
|
+
end
|
107
|
+
|
108
|
+
# Display the name and number of the current file
|
109
|
+
def cf
|
110
|
+
@queue << "cf"
|
111
|
+
end
|
112
|
+
|
113
|
+
# Clear breakpoint at specified line or function
|
114
|
+
def clear=(point)
|
115
|
+
@queue << "clear #{point}"
|
116
|
+
end
|
117
|
+
|
118
|
+
# Apply/remove conditional expression to a breakpoint
|
119
|
+
def condition=(cond)
|
120
|
+
@queue << "condition #{cond}"
|
121
|
+
end
|
122
|
+
|
123
|
+
# Continue execution after stopping at breakpoint
|
124
|
+
def continue
|
125
|
+
@queue << "continue"
|
126
|
+
end
|
127
|
+
|
128
|
+
# Alias for continue
|
129
|
+
def c
|
130
|
+
@queue << "continue"
|
131
|
+
end
|
132
|
+
|
133
|
+
# Sets commands to execute when breakpoint hit
|
134
|
+
def commands=(cmd)
|
135
|
+
@queue << "com #{cmd}"
|
136
|
+
end
|
137
|
+
|
138
|
+
# Delete breakpoints or auto-display expressions
|
139
|
+
def delete
|
140
|
+
@queue << "delete"
|
141
|
+
end
|
142
|
+
|
143
|
+
# Add a directory to the search path for source files
|
144
|
+
def directory=(dir)
|
145
|
+
@queue << "directory #{dir}"
|
146
|
+
end
|
147
|
+
|
148
|
+
# Disable breakpoints or auto-display expressions
|
149
|
+
def disable
|
150
|
+
@queue << "disable"
|
151
|
+
end
|
152
|
+
|
153
|
+
# Disassemble source lines or functions
|
154
|
+
def disassemble
|
155
|
+
@queue << "dissassemble"
|
156
|
+
end
|
157
|
+
|
158
|
+
# Add an auto-display expressions
|
159
|
+
def display=(disp)
|
160
|
+
@queue << "disp #{disp}"
|
161
|
+
end
|
162
|
+
|
163
|
+
# Enable breakpoints or auto-display expressions
|
164
|
+
def enable
|
165
|
+
@queue << "enable"
|
166
|
+
end
|
167
|
+
|
168
|
+
# Enable breakpoints or auto-display expressions
|
169
|
+
def e
|
170
|
+
@queue << "enable"
|
171
|
+
end
|
172
|
+
|
173
|
+
# Specify application to be debugged.
|
174
|
+
def file=(file)
|
175
|
+
@prerequisites << file
|
176
|
+
@queue << "file #{file}"
|
177
|
+
end
|
178
|
+
|
179
|
+
# Execute until current function returns
|
180
|
+
def finish
|
181
|
+
@queue << "finish"
|
182
|
+
end
|
183
|
+
|
184
|
+
# Specify how to handle a fault
|
185
|
+
def handle
|
186
|
+
@queue << "handle"
|
187
|
+
end
|
188
|
+
|
189
|
+
# Set listing location to where execution is halted
|
190
|
+
def home
|
191
|
+
@queue << "home"
|
192
|
+
end
|
193
|
+
|
194
|
+
# Display information about the program being debugged
|
195
|
+
def info
|
196
|
+
@queue << "info"
|
197
|
+
end
|
198
|
+
|
199
|
+
# Argument variables of current stack frame
|
200
|
+
def info_arguments
|
201
|
+
@queue << "i a"
|
202
|
+
end
|
203
|
+
|
204
|
+
# Status of user-settable breakpoints
|
205
|
+
def info_breakpoints
|
206
|
+
@queue << "i b"
|
207
|
+
end
|
208
|
+
|
209
|
+
# Display list of auto-display expressions
|
210
|
+
def info_display
|
211
|
+
@queue << "i d"
|
212
|
+
end
|
213
|
+
|
214
|
+
# Names of targets and files being debugged
|
215
|
+
def info_files
|
216
|
+
@queue << "i f"
|
217
|
+
end
|
218
|
+
|
219
|
+
# All function names
|
220
|
+
def info_functions=(value)
|
221
|
+
@queue << "i fu #{value}"
|
222
|
+
end
|
223
|
+
|
224
|
+
# How to handle a fault
|
225
|
+
def info_handle
|
226
|
+
@queue << "i h"
|
227
|
+
end
|
228
|
+
|
229
|
+
# Local variables of current stack frame
|
230
|
+
def info_locals
|
231
|
+
@queue << "i l"
|
232
|
+
end
|
233
|
+
|
234
|
+
# Scope chain of current stack frame
|
235
|
+
def info_scopechain
|
236
|
+
@queue << "i sc"
|
237
|
+
end
|
238
|
+
|
239
|
+
# Source files in the program
|
240
|
+
def info_sources
|
241
|
+
@queue << "i so"
|
242
|
+
end
|
243
|
+
|
244
|
+
# Backtrace of the stack
|
245
|
+
def info_stack
|
246
|
+
@queue << "i s"
|
247
|
+
end
|
248
|
+
|
249
|
+
# List of swfs in this session
|
250
|
+
def info_swfs
|
251
|
+
@queue << "i sw"
|
252
|
+
end
|
253
|
+
|
254
|
+
# Application being debugged
|
255
|
+
def info_targets
|
256
|
+
@queue << "i t"
|
257
|
+
end
|
258
|
+
|
259
|
+
# All global and static variable names
|
260
|
+
def info_variables
|
261
|
+
@queue << "i v"
|
262
|
+
end
|
263
|
+
|
264
|
+
# Kill execution of program being debugged
|
265
|
+
def kill
|
266
|
+
@queue << "kill"
|
267
|
+
end
|
268
|
+
|
269
|
+
# List specified function or line
|
270
|
+
def list
|
271
|
+
@queue << "list"
|
272
|
+
end
|
273
|
+
|
274
|
+
# Step program
|
275
|
+
def next
|
276
|
+
@queue << "next"
|
277
|
+
end
|
278
|
+
|
279
|
+
# Print value of variable EXP
|
280
|
+
def print=(msg)
|
281
|
+
@queue << "print #{msg}"
|
282
|
+
end
|
283
|
+
|
284
|
+
# Print working directory
|
285
|
+
def pwd
|
286
|
+
@queue << "pwd"
|
287
|
+
end
|
288
|
+
|
289
|
+
# Exit fdb
|
290
|
+
def quit
|
291
|
+
@queue << "quit"
|
292
|
+
@queue << "y"
|
293
|
+
@queue << "terminate"
|
294
|
+
end
|
295
|
+
|
296
|
+
# Start debugged program
|
297
|
+
def run
|
298
|
+
@queue << "run"
|
299
|
+
end
|
300
|
+
|
301
|
+
# Set the value of a variable
|
302
|
+
def set=(value)
|
303
|
+
@queue << "set #{value}"
|
304
|
+
end
|
305
|
+
|
306
|
+
# Sleep until some 'str' String is sent to the output
|
307
|
+
def sleep_until(str)
|
308
|
+
@queue << "sleep #{str}"
|
309
|
+
end
|
310
|
+
|
311
|
+
# Read fdb commands from a file
|
312
|
+
def source=(file)
|
313
|
+
@queue << "source #{file}"
|
314
|
+
end
|
315
|
+
|
316
|
+
# Step program until it reaches a different source line
|
317
|
+
def step
|
318
|
+
@queue << "step"
|
319
|
+
end
|
320
|
+
|
321
|
+
# Force the Flash Debugger and running SWF to close
|
322
|
+
def terminate
|
323
|
+
@queue << "terminate"
|
324
|
+
end
|
325
|
+
|
326
|
+
# Remove an auto-display expression
|
327
|
+
def undisplay
|
328
|
+
@queue << "undisplay"
|
329
|
+
end
|
330
|
+
|
331
|
+
# Set or clear filter for file listing based on swf
|
332
|
+
def viewswf
|
333
|
+
@queue << "viewswf"
|
334
|
+
end
|
335
|
+
|
336
|
+
# Displays the context of a variable
|
337
|
+
def what=(value)
|
338
|
+
@queue << "what #{value}"
|
339
|
+
end
|
340
|
+
|
341
|
+
# Same as bt
|
342
|
+
def where
|
343
|
+
@queue << "bt"
|
344
|
+
end
|
345
|
+
|
346
|
+
end
|
347
|
+
|
348
|
+
# A buffer that provides clean blocking support for the fdb command shell
|
349
|
+
class FDBBuffer #:nodoc:
|
350
|
+
PLAYER_TERMINATED = 'Player session terminated'
|
351
|
+
EXIT_PROMPT = 'The program is running. Exit anyway? (y or n)'
|
352
|
+
PROMPT = '(fdb) '
|
353
|
+
QUIT = 'quit'
|
354
|
+
|
355
|
+
# The constructor expects a buffered input and output
|
356
|
+
def initialize(exe, output, user_input=nil)
|
357
|
+
@output = output
|
358
|
+
@prompted = false
|
359
|
+
@faulted = false
|
360
|
+
@user_input = user_input
|
361
|
+
@found_search = false
|
362
|
+
@pending_expression = nil
|
363
|
+
listen exe
|
364
|
+
end
|
365
|
+
|
366
|
+
def user_input
|
367
|
+
@user_input ||= $stdin
|
368
|
+
end
|
369
|
+
|
370
|
+
def create_input(exe)
|
371
|
+
ProcessRunner.new("#{exe}")
|
372
|
+
end
|
373
|
+
|
374
|
+
def sleep_until(str)
|
375
|
+
@found_search = false
|
376
|
+
@pending_expression = str
|
377
|
+
while !@found_search do
|
378
|
+
sleep(0.2)
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
# Listen for messages from the input process
|
383
|
+
def listen(exe)
|
384
|
+
@input = nil
|
385
|
+
@listener = Thread.new do
|
386
|
+
@input = create_input(exe)
|
387
|
+
def puts(msg)
|
388
|
+
$stdout.puts msg
|
389
|
+
end
|
390
|
+
|
391
|
+
char = ''
|
392
|
+
line = ''
|
393
|
+
while true do
|
394
|
+
begin
|
395
|
+
char = @input.readpartial 1
|
396
|
+
rescue EOFError => e
|
397
|
+
puts "End of File - Exiting Now"
|
398
|
+
@prompted = true
|
399
|
+
break
|
400
|
+
end
|
401
|
+
|
402
|
+
if(char == "\n")
|
403
|
+
line = ''
|
404
|
+
else
|
405
|
+
line << char
|
406
|
+
end
|
407
|
+
|
408
|
+
@output.print char
|
409
|
+
@output.flush
|
410
|
+
|
411
|
+
if(line == PROMPT || line.match(/\(y or n\) $/))
|
412
|
+
@prompted = true
|
413
|
+
line = ''
|
414
|
+
elsif(@pending_expression && line.match(/#{@pending_expression}/))
|
415
|
+
@found_search = true
|
416
|
+
@pending_expression = nil
|
417
|
+
elsif(line == PLAYER_TERMINATED)
|
418
|
+
puts ""
|
419
|
+
puts "Closed SWF Connection - Exiting Now"
|
420
|
+
@prompted = true
|
421
|
+
break
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
425
|
+
|
426
|
+
end
|
427
|
+
|
428
|
+
# Block for the life of the input process
|
429
|
+
def join
|
430
|
+
puts ">> Entering FDB interactive mode, type 'help' for more info."
|
431
|
+
print PROMPT
|
432
|
+
$stdout.flush
|
433
|
+
|
434
|
+
Thread.new do
|
435
|
+
while true do
|
436
|
+
msg = user_input.gets.chomp!
|
437
|
+
@input.puts msg
|
438
|
+
wait_for_prompt
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
@listener.join
|
443
|
+
end
|
444
|
+
|
445
|
+
# Block until prompted returns true
|
446
|
+
def wait_for_prompt
|
447
|
+
while !@prompted do
|
448
|
+
sleep(0.2)
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
# Kill the buffer
|
453
|
+
def kill
|
454
|
+
@listener.kill
|
455
|
+
end
|
456
|
+
|
457
|
+
# Send a message to the buffer input and reset the prompted flag to false
|
458
|
+
def write(msg)
|
459
|
+
@prompted = false
|
460
|
+
@input.puts msg
|
461
|
+
print msg + "\n"
|
462
|
+
$stdout.flush
|
463
|
+
if(msg != "c" && msg != "continue")
|
464
|
+
wait_for_prompt
|
465
|
+
end
|
466
|
+
end
|
467
|
+
|
468
|
+
end
|
469
|
+
end
|
470
|
+
|
471
|
+
def fdb(args, &block)
|
472
|
+
Sprout::FDBTask.define_task(args, &block)
|
473
|
+
end
|
474
|
+
|
@@ -1,11 +1,26 @@
|
|
1
1
|
|
2
2
|
module Sprout # :nodoc:
|
3
|
-
|
3
|
+
|
4
|
+
# The MXMLCDebug helper wraps up the flashplayer and mxmlc tasks by
|
5
|
+
# using either a Singleton or provided ProjectModel instance.
|
6
|
+
#
|
7
|
+
# The simple case that uses a Singleton ProjectModel:
|
8
|
+
# debug :debug
|
9
|
+
#
|
10
|
+
# Using a ProjectModel instance:
|
11
|
+
# project_model :model
|
12
|
+
#
|
13
|
+
# debug :debug => :model
|
14
|
+
#
|
15
|
+
# Configuring the proxied Sprout::MXMLCTask
|
16
|
+
# debug :debug do |t|
|
17
|
+
# t.link_report = 'LinkReport.rpt'
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
class MXMLCDebug < MXMLCHelper
|
4
21
|
|
5
22
|
def initialize(args, &block)
|
6
23
|
super
|
7
|
-
t = define_outer_task
|
8
|
-
t.prerequisites << player_task_name
|
9
24
|
|
10
25
|
mxmlc output do |t|
|
11
26
|
configure_mxmlc t
|
@@ -14,7 +29,10 @@ module Sprout # :nodoc:
|
|
14
29
|
end
|
15
30
|
|
16
31
|
define_player
|
17
|
-
|
32
|
+
|
33
|
+
t = define_outer_task
|
34
|
+
t.prerequisites << output
|
35
|
+
t.prerequisites << player_task_name
|
18
36
|
end
|
19
37
|
|
20
38
|
end
|
@@ -1,6 +1,26 @@
|
|
1
1
|
|
2
|
-
module Sprout
|
3
|
-
|
2
|
+
module Sprout # :nodoc:
|
3
|
+
|
4
|
+
# The MXMLCDeploy helper wraps up an mxmlc task by
|
5
|
+
# using either a Singleton or provided ProjectModel instance.
|
6
|
+
#
|
7
|
+
# This helper turns off debugging and turns on optimization for
|
8
|
+
# the compiled SWF file.
|
9
|
+
#
|
10
|
+
# The simple case that uses a Singleton ProjectModel:
|
11
|
+
# deploy :deploy
|
12
|
+
#
|
13
|
+
# Using a ProjectModel instance:
|
14
|
+
# project_model :model
|
15
|
+
#
|
16
|
+
# deploy :deploy => :model
|
17
|
+
#
|
18
|
+
# Configuring the proxy Sprout::MXMLCTask
|
19
|
+
# deploy :deploy do |t|
|
20
|
+
# t.link_report = 'LinkReport.rpt'
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
class MXMLCDeploy < MXMLCHelper
|
4
24
|
|
5
25
|
def initialize(args, &block)
|
6
26
|
super
|
@@ -1,25 +1,39 @@
|
|
1
1
|
|
2
2
|
module Sprout # :nodoc:
|
3
|
-
|
3
|
+
|
4
|
+
# The MXMLCDocument helper wraps up the asdoc task
|
5
|
+
# using either a Singleton or provided ProjectModel instance.
|
6
|
+
#
|
7
|
+
# The simple case that uses a Singleton ProjectModel:
|
8
|
+
# document :asdoc
|
9
|
+
#
|
10
|
+
# Using a ProjectModel instance:
|
11
|
+
# project_model :model
|
12
|
+
#
|
13
|
+
# document :asdoc => :model
|
14
|
+
#
|
15
|
+
# Configuring the proxy ASDocTask
|
16
|
+
# document :asdoc do |t|
|
17
|
+
# t.link_report = 'LinkReport.rpt'
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
class MXMLCDocument < MXMLCHelper
|
4
21
|
|
5
22
|
def initialize(args, &block)
|
6
23
|
super
|
7
|
-
outer = define_outer_task
|
8
24
|
|
9
|
-
asdoc
|
10
|
-
t
|
25
|
+
asdoc task_name do |t|
|
26
|
+
configure_mxmlc(t, true)
|
27
|
+
t.output = model.doc_dir
|
28
|
+
t.doc_classes = input
|
29
|
+
t.main_title = model.project_name
|
11
30
|
yield t if block_given?
|
12
31
|
end
|
13
32
|
|
14
|
-
outer.prerequisites << output
|
15
33
|
end
|
16
34
|
|
17
|
-
def create_output
|
18
|
-
return File.join(model.doc_dir, 'index.html')
|
19
|
-
end
|
20
|
-
|
21
35
|
def create_input
|
22
|
-
return
|
36
|
+
return File.basename(super).split('.')[0]
|
23
37
|
end
|
24
38
|
|
25
39
|
end
|