flashsdk 1.0.1.pre

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.
Files changed (43) hide show
  1. data/Gemfile +9 -0
  2. data/README.textile +0 -0
  3. data/VERSION +1 -0
  4. data/bin/sprout-as3 +9 -0
  5. data/flashsdk.gemspec +23 -0
  6. data/lib/flashplayer/clix_flash_player.rb +91 -0
  7. data/lib/flashplayer/clix_wrapper.rb +22 -0
  8. data/lib/flashplayer/errors.rb +12 -0
  9. data/lib/flashplayer/log_file.rb +95 -0
  10. data/lib/flashplayer/mm_config.rb +96 -0
  11. data/lib/flashplayer/module.rb +50 -0
  12. data/lib/flashplayer/specification.rb +32 -0
  13. data/lib/flashplayer/task.legacy.rb +293 -0
  14. data/lib/flashplayer/task.rb +137 -0
  15. data/lib/flashplayer/trust.rb +45 -0
  16. data/lib/flashplayer.rb +8 -0
  17. data/lib/flashsdk/generators/class_generator.rb +43 -0
  18. data/lib/flashsdk/generators/flash_helper.rb +48 -0
  19. data/lib/flashsdk/generators/project_generator.rb +53 -0
  20. data/lib/flashsdk/generators/templates/ActionScript3Class.as +9 -0
  21. data/lib/flashsdk/generators/templates/ActionScript3MainClass.as +11 -0
  22. data/lib/flashsdk/generators/templates/DefaultProjectImage.png +0 -0
  23. data/lib/flashsdk/generators/templates/Gemfile +6 -0
  24. data/lib/flashsdk/generators/templates/rakefile.rb +17 -0
  25. data/lib/flashsdk/module.rb +9 -0
  26. data/lib/flashsdk/tasks/mxmlc.rb +687 -0
  27. data/lib/flashsdk/tasks/mxmlc_legacy.rb +135 -0
  28. data/lib/flashsdk.rb +12 -0
  29. data/lib/flex3.rb +53 -0
  30. data/lib/flex4.rb +58 -0
  31. data/rakefile.rb +20 -0
  32. data/test/fixtures/mxmlc/simple/SomeFile.as +11 -0
  33. data/test/unit/class_generator_test.rb +50 -0
  34. data/test/unit/flash_helper_test.rb +27 -0
  35. data/test/unit/flashplayer_test.rb +56 -0
  36. data/test/unit/log_file_test.rb +47 -0
  37. data/test/unit/mm_config_test.rb +74 -0
  38. data/test/unit/mxmlc_test.rb +45 -0
  39. data/test/unit/project_generator_test.rb +53 -0
  40. data/test/unit/task_test.rb +93 -0
  41. data/test/unit/test_helper.rb +16 -0
  42. data/test/unit/trust_test.rb +30 -0
  43. metadata +145 -0
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'sprout', '>= 1.0.15.pre'
4
+
5
+ group :development do
6
+ gem "shoulda"
7
+ gem "mocha"
8
+ end
9
+
data/README.textile ADDED
File without changes
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.1.pre
data/bin/sprout-as3 ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'flashsdk'
5
+
6
+ generator = FlashSDK::ProjectGenerator.new
7
+ generator.parse! ARGV
8
+ generator.execute
9
+
data/flashsdk.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path File.dirname(__FILE__), 'lib'
3
+ $:.unshift lib unless $:.include?(lib)
4
+
5
+ require 'bundler'
6
+ Bundler.setup
7
+
8
+ require 'flashsdk'
9
+
10
+ Gem::Specification.new do |s|
11
+ s.name = 'flashsdk'
12
+ s.version = FlashSDK::VERSION
13
+ s.author = "Luke Bayes"
14
+ s.email = "projectsprouts@googlegroups.com"
15
+ s.homepage = "http://www.adobe.com/products/flex"
16
+ s.summary = "Adobe Flash SDK including mxmlc, compc, asdoc, adl, adt, optimizer and fdb"
17
+ s.description = "The Flash SDK Rubygem is brought to you by Project Sprouts (http://projectsprouts.org)"
18
+ s.executable = 'sprout-as3'
19
+ s.files = FileList['**/**/*'].exclude /.git|.svn|.DS_Store/
20
+ s.add_bundler_dependencies
21
+ s.require_paths << 'lib'
22
+ end
23
+
@@ -0,0 +1,91 @@
1
+ require 'rubygems'
2
+ require 'open4'
3
+
4
+ $CLIX_WRAPPER_TARGET = File.join(File.expand_path(File.dirname(__FILE__)), 'clix_wrapper.rb')
5
+
6
+ class CLIXFlashPlayerError < StandardError; end
7
+
8
+ class CLIXFlashPlayer
9
+
10
+ def initialize
11
+ @activate_pid = nil
12
+ @player_pid = nil
13
+ @thread = nil
14
+ end
15
+
16
+ def execute(player, swf)
17
+ cleanup
18
+ player = clean_path(player)
19
+ swf = clean_path(swf)
20
+ validate(player, swf)
21
+
22
+ if(!player.match('Contents/MacOS'))
23
+ player = File.join(player, 'Contents', 'MacOS', 'Flash Player')
24
+ end
25
+
26
+ setup_trap
27
+
28
+ @thread = Thread.new {
29
+ @player_pid = open4.popen4("#{player.split(' ').join('\ ')}")[0]
30
+ begin
31
+ raise "clix_wrapper.rb could not be found at: #{wrapper}" if !File.exists?($CLIX_WRAPPER_TARGET)
32
+ command = "ruby #{$CLIX_WRAPPER_TARGET} '#{player}' '#{swf}'"
33
+ @activate_pid, stdin, stdout, stderr = open4.popen4(command)
34
+ $stdout.puts stdout.read
35
+ error = stderr.read
36
+ raise error if !error.nil? && error != ''
37
+ Process.wait(@player_pid)
38
+ rescue StandardError => e
39
+ $stdout.puts e.to_s
40
+ kill
41
+ raise e
42
+ end
43
+ }
44
+ end
45
+
46
+ def kill
47
+ system("kill -9 #{@player_pid}")
48
+ end
49
+
50
+ def join
51
+ if(@thread.alive?)
52
+ @thread.join
53
+ end
54
+ end
55
+
56
+ def alive?
57
+ return @thread.alive?
58
+ end
59
+
60
+ private
61
+
62
+ def clean_path(path)
63
+ File.expand_path(path.gsub("'", '').gsub("\\", ''))
64
+ end
65
+
66
+ def cleanup
67
+ if(@thread && @thread.alive?)
68
+ kill
69
+ @thread.join
70
+ end
71
+ end
72
+
73
+ def validate(player, swf)
74
+ raise CLIXFlashPlayerError.new("Player must not be nil") if(player.nil? || player == '')
75
+ raise CLIXFlashPlayerError.new("Player cannot be found: '#{player}'") if(!File.exists?(player))
76
+ raise CLIXFlashPlayerError.new("SWF must not be nil") if(swf.nil? || swf == '')
77
+ raise CLIXFlashPlayerError.new("SWF cannot be found: '#{swf}'") if(!File.exists?(swf))
78
+ end
79
+
80
+ def setup_trap
81
+ # Trap the CTRL+C Interrupt signal
82
+ # Which prevents nasty exception messages
83
+ Kernel.trap('INT') do
84
+ if(@thread.alive?)
85
+ @thread.kill
86
+ end
87
+ end
88
+ end
89
+
90
+ end
91
+
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/ruby
2
+ require 'rubygems'
3
+
4
+ player = ARGV[0]
5
+ swf = ARGV[1]
6
+
7
+ raise "CLIXWrapper requires 'player' argument like:\nruby clix_wrapper [player] [swf]" if(player.nil?)
8
+ raise "CLIXWrapper could not find player at '#{player}'" if !File.exists?(player)
9
+
10
+ raise "CLIXWrapper requires 'swf' argument like:\nruby clix_wrapper [player] [swf]" if(swf.nil?)
11
+ raise "CLIXWrapper could not find swf at '#{swf}'" if !File.exists?(swf)
12
+
13
+ begin
14
+ require 'appscript'
15
+ # Give the player focus:
16
+ Appscript.app(player).activate
17
+ # Open the SWF:
18
+ Appscript.app(player).open(MacTypes::Alias.path(swf))
19
+ rescue LoadError => e
20
+ raise "\n\n[ERROR] You must install the rb-appscript gem to use the desktop debug Flash Player, you do this by running:\n\ngem install rb-appscript"
21
+ end
22
+
@@ -0,0 +1,12 @@
1
+
2
+ module FlashPlayer
3
+
4
+ ##
5
+ # Had trouble finding or resolving a path.
6
+ class PathError < StandardError; end
7
+
8
+ ##
9
+ # There was a problem with an input.
10
+ class UsageError < StandardError; end
11
+ end
12
+
@@ -0,0 +1,95 @@
1
+
2
+ module FlashPlayer
3
+
4
+ class LogFile
5
+
6
+ attr_accessor :logger
7
+
8
+ def initialize
9
+ @logger = $stdout
10
+ end
11
+
12
+ def tail thread=nil
13
+ tail_path flashlog_path, thread
14
+ end
15
+
16
+ private
17
+
18
+ def tail_path path, thread=nil
19
+ logger.puts ">> Tailing '#{path}', press CTRL+C to quit"
20
+ create_flashlog_at path
21
+ clear_flashlog_at path
22
+ read_flashlog_at path, thread
23
+ end
24
+
25
+ def read_flashlog_at path, thread=nil
26
+ thread ||= fake_thread
27
+ lines_put = 0
28
+
29
+ trap("INT") { thread.kill }
30
+
31
+ while thread.alive? do
32
+ lines_put = read_from_file path, lines_put
33
+ logger.flush
34
+ sleep(0.2)
35
+ end
36
+
37
+ logger.puts ""
38
+ logger.puts ">> Exiting from tailing '#{path}' at user request"
39
+ end
40
+
41
+ def read_from_file path, lines_put
42
+ File.open(path, 'r') do |file|
43
+ lines_read = 0
44
+ file.readlines.each do |line|
45
+ if(lines_read >= lines_put)
46
+ logger.puts "[trace] #{line}"
47
+ logger.flush
48
+ lines_put += 1
49
+ end
50
+ lines_read += 1
51
+ end
52
+ end unless !File.exists?(path)
53
+ lines_put
54
+ end
55
+
56
+ def flashlog_path
57
+ begin
58
+ FlashPlayer.flashlog
59
+ rescue FlashPlayer::PathError
60
+ "/dev/null"
61
+ end
62
+ end
63
+
64
+ def clear_flashlog_at path
65
+ File.open(path, 'w') do |f|
66
+ f.write('')
67
+ end
68
+ end
69
+
70
+ def create_flashlog_at path
71
+ if(!File.exists?(path))
72
+ FileUtils.makedirs(File.dirname(path))
73
+ FileUtils.touch(path)
74
+ end
75
+ end
76
+
77
+ def fake_thread
78
+ Thread.new do
79
+ while true
80
+ sleep(0.2)
81
+ end
82
+ end
83
+ end
84
+
85
+ end
86
+ end
87
+
88
+ desc "Tail the flashlog.txt and block"
89
+ task :flashlog do
90
+ mm_config = FlashPlayer::MMConfig.new
91
+ mm_config.create
92
+ reader = FlashPlayer::LogFile.new
93
+ reader.tail
94
+ end
95
+
@@ -0,0 +1,96 @@
1
+
2
+ module FlashPlayer
3
+
4
+ class MMConfig
5
+ FILE_NAME = 'mm.cfg'
6
+
7
+ attr_accessor :logger
8
+
9
+ def initialize
10
+ @file_name = FILE_NAME
11
+ @logger = $stdout
12
+ end
13
+
14
+ def create
15
+ create_if_necessary_at config_path
16
+ end
17
+
18
+ private
19
+
20
+ def create_if_necessary_at path
21
+ if(File.exists?(File.dirname(path)))
22
+ write_config(path, content(flashlog_path)) if(file_blank?(path))
23
+ end
24
+ end
25
+
26
+ def config_path
27
+ if(flashplayer_home == osx_fp9_dir)
28
+ path = File.join(osx_fp9_dir, @file_name)
29
+ else
30
+ path = File.join(system_home, @file_name)
31
+ end
32
+ end
33
+
34
+ def flashplayer_home
35
+ FlashPlayer.home
36
+ end
37
+
38
+ def flashlog_path
39
+ FlashPlayer.flashlog
40
+ end
41
+
42
+ def file_blank?(file)
43
+ !File.exists?(file) || File.read(file).empty?
44
+ end
45
+
46
+ def write_config(location, content)
47
+ if(user_confirmation?(location))
48
+ FileUtils.makedirs File.dirname(location)
49
+
50
+ File.open(location, 'w') do |f|
51
+ f.write(content)
52
+ end
53
+ logger.puts ">> Created file: " + File.expand_path(location)
54
+ location
55
+ else
56
+ raise FlashPlayer::PathError.new("Unable to create #{location}")
57
+ end
58
+ end
59
+
60
+ def content(flashlog)
61
+ return <<EOF
62
+ ErrorReportingEnable=1
63
+ MaxWarnings=0
64
+ TraceOutputEnable=1
65
+ TraceOutputFileName=#{flashlog}
66
+ EOF
67
+ end
68
+
69
+ def user_confirmation?(location)
70
+ puts <<EOF
71
+
72
+ Correctly configured mm.cfg file not found at: #{location}
73
+
74
+ This file is required in order to capture trace output.
75
+
76
+ Would you like this file created automatically? [Yn]
77
+
78
+ EOF
79
+ answer = $stdin.gets.chomp.downcase
80
+ return (answer == 'y' || answer == '')
81
+ end
82
+
83
+ def osx_fp9_dir
84
+ File.join(system_library, 'Application Support', 'Macromedia')
85
+ end
86
+
87
+ def system_library
88
+ Sprout.current_system.library
89
+ end
90
+
91
+ def system_home
92
+ Sprout.current_system.home
93
+ end
94
+ end
95
+ end
96
+
@@ -0,0 +1,50 @@
1
+
2
+ module FlashPlayer
3
+ NAME = 'flashplayer'
4
+
5
+ class << self
6
+
7
+ def home
8
+ # NOTE: Look up the value every time,
9
+ # this way we're not storing state globally
10
+ # and the performance penalty is minimal...
11
+ home_paths.each do |path|
12
+ return path if File.exists?(path)
13
+ end
14
+ raise FlashPlayer::PathError.new('FlashPlayer unable to find home folder for your System')
15
+ end
16
+
17
+ def trust
18
+ File.join home, '#Security', 'FlashPlayerTrust', 'sprout.cfg'
19
+ end
20
+
21
+ def flashlog
22
+ File.join home, 'Logs', 'flashlog.txt'
23
+ end
24
+
25
+ private
26
+
27
+ def system_home
28
+ Sprout.current_system.home
29
+ end
30
+
31
+ def system_library
32
+ Sprout.current_system.library
33
+ end
34
+
35
+ # Collection of the potential locations of the Flash Player Home
36
+ # For each supported Platform, the first existing location
37
+ # will be used.
38
+ def home_paths
39
+ [
40
+ File.join(system_library, 'Preferences', 'Macromedia', 'Flash Player'),
41
+ File.join(system_library, 'Application Support', 'Macromedia'),
42
+ File.join(system_home, 'Application Data', 'Macromedia', 'Flash Player'),
43
+ File.join(system_home, 'AppData', 'Roaming', 'Macromedia', 'Flash Player'),
44
+ File.join(system_home, '.macromedia', 'Flash_Player')
45
+ ]
46
+ end
47
+
48
+ end
49
+ end
50
+
@@ -0,0 +1,32 @@
1
+ require 'flashsdk'
2
+
3
+ Sprout::Specification.new do |s|
4
+ s.name = FlashPlayer::NAME
5
+ s.version = FlashSDK::VERSION
6
+
7
+ s.add_remote_file_target do |t|
8
+ t.platform = :osx
9
+ t.archive_type = :zip
10
+ t.url = "http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_sa_debug.app.zip"
11
+ t.md5 = "ff6824b7fd676dd1b613204221f5b5b9"
12
+ t.add_executable :flashplayer, "Flash Player Debugger.app/Contents/MacOS/Flash Player Debugger"
13
+ end
14
+
15
+ s.add_remote_file_target do |t|
16
+ t.platform = :win32
17
+ t.archive_type = :exe
18
+ t.url = "http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_sa_debug.exe"
19
+ t.md5 = "4d8d58d72709f44421b2ea4e89cc30be"
20
+ t.add_executable :flashplayer, "flashplayer_10_sa_debug.exe"
21
+ end
22
+
23
+ s.add_remote_file_target do |t|
24
+ t.platform = :linux
25
+ t.archive_type = :tgz
26
+ t.url = "http://download.macromedia.com/pub/flashplayer/updaters/10/flashplayer_10_sa_debug.tar.gz"
27
+ t.md5 = "6cabe6038343374b547043d29de14417"
28
+ t.add_executable :flashplayer, "flashplayerdebugger"
29
+ end
30
+
31
+ end
32
+