flexutils 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +10 -0
- data/LICENSE +20 -0
- data/README.markdown +0 -0
- data/Rakefile +69 -0
- data/VERSION +1 -0
- data/examples/Rakefile +89 -0
- data/examples/lib/.gitignore +0 -0
- data/examples/locale/en_US/.gitignore +0 -0
- data/examples/src/Main.mxml +7 -0
- data/examples/src/SomeClass.as +7 -0
- data/examples/src/Tests.mxml +7 -0
- data/examples/theme/main.css +0 -0
- data/lib/flexutils.rb +7 -0
- data/lib/flexutils/adl.rb +99 -0
- data/lib/flexutils/adt.rb +61 -0
- data/lib/flexutils/asc.rb +140 -0
- data/lib/flexutils/compc.rb +45 -0
- data/lib/flexutils/flex_utils.rb +40 -0
- data/lib/flexutils/mxmlc.rb +43 -0
- data/lib/flexutils/test_runner.rb +42 -0
- data/spec/adl_spec.rb +13 -0
- data/spec/adt_spec.rb +22 -0
- data/spec/asc_spec.rb +153 -0
- data/spec/compc_spec.rb +15 -0
- data/spec/mxmlc_spec.rb +43 -0
- data/spec/testrunner_spec.rb +13 -0
- metadata +96 -0
data/.document
ADDED
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Theo Hultberg
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'spec/rake/spectask'
|
5
|
+
require 'jeweler'
|
6
|
+
|
7
|
+
|
8
|
+
CLOBBER.include('dist')
|
9
|
+
|
10
|
+
|
11
|
+
task :default => [:spec, :dist]
|
12
|
+
|
13
|
+
desc 'Package the FlexUtils scripts as a single file'
|
14
|
+
task :dist => 'dist/flexutils.rb'
|
15
|
+
|
16
|
+
file 'dist/flexutils.rb' => ['lib/flexutils/FlexUtils.rb'] + FileList['lib/flexutils/*.rb'].exclude('lib/flexutils/FlexUtils.rb') do |t|
|
17
|
+
mkdir_p 'dist'
|
18
|
+
|
19
|
+
File.open(t.name, 'w') do |destination_file|
|
20
|
+
destination_file.puts("module FlexUtils")
|
21
|
+
|
22
|
+
t.prerequisites.each do |script|
|
23
|
+
code = File.read(script)
|
24
|
+
|
25
|
+
offset = code.index('module FlexUtils') + 16
|
26
|
+
length = code.rindex('end') - offset
|
27
|
+
|
28
|
+
code = code.slice(offset, length)
|
29
|
+
|
30
|
+
destination_file.puts(code)
|
31
|
+
end
|
32
|
+
|
33
|
+
destination_file.puts("end")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Run the specifications"
|
38
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
39
|
+
t.spec_files = FileList['spec/*_spec.rb']
|
40
|
+
t.libs = [File.dirname(__FILE__) + '/lib']
|
41
|
+
t.spec_opts = ['--require', 'lib/flexutils', '--format', 'specdoc', '--color']
|
42
|
+
t.fail_on_error = true
|
43
|
+
t.failure_message = 'Tests failed'
|
44
|
+
end
|
45
|
+
|
46
|
+
Jeweler::Tasks.new do |gem|
|
47
|
+
gem.name = 'flexutils'
|
48
|
+
gem.summary = 'Ruby wrappers for the Flex SDK tools'
|
49
|
+
gem.description = ""
|
50
|
+
gem.email = 'theo@iconara.net'
|
51
|
+
gem.homepage = 'http://github.com/iconara/flexutils'
|
52
|
+
gem.authors = ['Theo Hultberg']
|
53
|
+
gem.add_development_dependency "rspec"
|
54
|
+
end
|
55
|
+
|
56
|
+
Jeweler::GemcutterTasks.new
|
57
|
+
|
58
|
+
Rake::RDocTask.new do |rdoc|
|
59
|
+
if File.exist?('VERSION')
|
60
|
+
version = File.read('VERSION')
|
61
|
+
else
|
62
|
+
version = ""
|
63
|
+
end
|
64
|
+
|
65
|
+
rdoc.rdoc_dir = 'rdoc'
|
66
|
+
rdoc.title = "test #{version}"
|
67
|
+
rdoc.rdoc_files.include('README*')
|
68
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
69
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/examples/Rakefile
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# add the lib directory to the load path so that you can run this without having to install FlexUtils
|
2
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
3
|
+
|
4
|
+
# ---
|
5
|
+
|
6
|
+
require 'rake/clean'
|
7
|
+
require 'flexutils'
|
8
|
+
|
9
|
+
# ---
|
10
|
+
|
11
|
+
include FlexUtils
|
12
|
+
|
13
|
+
# ---
|
14
|
+
|
15
|
+
ENV['FLEX_HOME'] ||= '/Developer/Flex/flex-sdk-3.3'
|
16
|
+
|
17
|
+
# ---
|
18
|
+
|
19
|
+
SOURCE_FILES = FileList['src/**/*.mxml', 'src/**/*.as']
|
20
|
+
SOURCE_FILES.exclude('**/Test*.as')
|
21
|
+
|
22
|
+
MAIN_SWF = 'build/Main.swf'
|
23
|
+
TESTS_SWF = 'build/Tests.swf'
|
24
|
+
EXAMPLE_SWC = 'dist/example.swc'
|
25
|
+
|
26
|
+
# ---
|
27
|
+
|
28
|
+
CLEAN.include(MAIN_SWF + '.cache')
|
29
|
+
|
30
|
+
CLOBBER.include('build')
|
31
|
+
CLOBBER.include('dist')
|
32
|
+
|
33
|
+
# ---
|
34
|
+
|
35
|
+
desc "Runs the tests and compiles the SWF and the SWC"
|
36
|
+
task :default => [:init, :test, MAIN_SWF, EXAMPLE_SWC]
|
37
|
+
|
38
|
+
task :init do
|
39
|
+
mkdir_p 'build'
|
40
|
+
mkdir_p 'dist'
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "Runs the tests"
|
44
|
+
task :test => TESTS_SWF do |t|
|
45
|
+
TestRunner.run(t.name) do |conf|
|
46
|
+
conf.title = 'Tests'
|
47
|
+
conf.exit_on_complete = false
|
48
|
+
conf.fail_on_error = true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
file MAIN_SWF => SOURCE_FILES do |t|
|
53
|
+
Mxmlc.compile(t.name, 'src/Main.mxml') do |conf|
|
54
|
+
conf.debug = true
|
55
|
+
conf.incremental = true
|
56
|
+
conf.theme_files = FileList['theme/*.css']
|
57
|
+
conf.locale = ['en_US']
|
58
|
+
conf.source_path = ['src', 'locale/{locale}', 'theme']
|
59
|
+
conf.library_path = ['lib']
|
60
|
+
conf.warnings = {'show-unused-type-selector-warnings' => false}
|
61
|
+
conf.target_player = '10'
|
62
|
+
conf.fail_on_warning = true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
file TESTS_SWF => SOURCE_FILES + FileList['**/Test*.as'] do |t|
|
67
|
+
Mxmlc.compile(t.name, 'src/Tests.mxml') do |conf|
|
68
|
+
conf.debug = true
|
69
|
+
conf.incremental = true
|
70
|
+
conf.locale = ['en_US']
|
71
|
+
conf.source_path = ['src', 'locale/{locale}', 'theme']
|
72
|
+
conf.library_path = ['lib']
|
73
|
+
conf.warnings = {'show-unused-type-selector-warnings' => false}
|
74
|
+
conf.target_player = '10'
|
75
|
+
conf.fail_on_warning = true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
file EXAMPLE_SWC => FileList['src/SomeClass.as'] do |t|
|
80
|
+
classes = t.prerequisites.map do |path|
|
81
|
+
# remove source path and the file extention and turn directory structure into package structure
|
82
|
+
path.gsub('src/', '').gsub(/\.\w+$/, '').gsub('/', '.')
|
83
|
+
end
|
84
|
+
|
85
|
+
Compc.compile(t.name) do |conf|
|
86
|
+
conf.source_path = ['src']
|
87
|
+
conf.include_classes = classes
|
88
|
+
end
|
89
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
data/lib/flexutils.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
module FlexUtils
|
2
|
+
|
3
|
+
class Adl < AbstractTool
|
4
|
+
|
5
|
+
attr_writer :swf,
|
6
|
+
:title,
|
7
|
+
:visible,
|
8
|
+
:transparent,
|
9
|
+
:width,
|
10
|
+
:height,
|
11
|
+
:x,
|
12
|
+
:y,
|
13
|
+
:system_chrome,
|
14
|
+
:arguments,
|
15
|
+
:descriptor
|
16
|
+
|
17
|
+
def initialize( swf )
|
18
|
+
@swf = swf
|
19
|
+
@title = "Temporary AIR application"
|
20
|
+
@visible = true
|
21
|
+
@transparent = false
|
22
|
+
@width = 1024
|
23
|
+
@height = 768
|
24
|
+
@x = 100
|
25
|
+
@y = 100
|
26
|
+
@system_chrome = "standard"
|
27
|
+
@arguments = []
|
28
|
+
end
|
29
|
+
|
30
|
+
def generate_descriptor
|
31
|
+
return <<-stop
|
32
|
+
<?xml version="1.0"?>
|
33
|
+
|
34
|
+
<application xmlns="http://ns.adobe.com/air/application/1.5">
|
35
|
+
<id>net.iconara.tmp</id>
|
36
|
+
<version>1.0</version>
|
37
|
+
<filename>#{@title}</filename>
|
38
|
+
<initialWindow>
|
39
|
+
<title>#{@title}</title>
|
40
|
+
<content>#{File.basename(@swf)}</content>
|
41
|
+
<systemChrome>#{@system_chrome}</systemChrome>
|
42
|
+
<transparent>#{@transparent}</transparent>
|
43
|
+
<visible>#{@visible}</visible>
|
44
|
+
<width>#{@width}</width>
|
45
|
+
<height>#{@height}</height>
|
46
|
+
<x>#{@x}</x>
|
47
|
+
<y>#{@y}</y>
|
48
|
+
</initialWindow>
|
49
|
+
</application>
|
50
|
+
stop
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.run( *args )
|
54
|
+
c = self.new(*args)
|
55
|
+
|
56
|
+
yield c
|
57
|
+
|
58
|
+
c.run!
|
59
|
+
end
|
60
|
+
|
61
|
+
def command_string
|
62
|
+
@extra_args ||= [ ]
|
63
|
+
|
64
|
+
args = (@arguments + @extra_args).join(" ")
|
65
|
+
|
66
|
+
"#{command_path 'adl'} #{@descriptor} -- #{args}"
|
67
|
+
end
|
68
|
+
|
69
|
+
def run!( extra_args=[], &block )
|
70
|
+
@extra_args = extra_args
|
71
|
+
|
72
|
+
current_dir = Dir.pwd
|
73
|
+
|
74
|
+
dir = File.dirname(@swf)
|
75
|
+
|
76
|
+
Dir.chdir(dir)
|
77
|
+
|
78
|
+
temporary_descriptor = @descriptor == nil
|
79
|
+
|
80
|
+
if temporary_descriptor
|
81
|
+
@descriptor = "temporary-application.xml"
|
82
|
+
|
83
|
+
descriptor = File.new(@descriptor, "w")
|
84
|
+
descriptor.puts(generate_descriptor)
|
85
|
+
descriptor.close
|
86
|
+
end
|
87
|
+
|
88
|
+
execute_command
|
89
|
+
|
90
|
+
yield($?) if block_given?
|
91
|
+
|
92
|
+
File.delete(@descriptor) if temporary_descriptor
|
93
|
+
|
94
|
+
Dir.chdir(current_dir)
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module FlexUtils
|
2
|
+
|
3
|
+
class Adt < AbstractTool
|
4
|
+
|
5
|
+
attr_writer :descriptor,
|
6
|
+
:keyfile,
|
7
|
+
:keypass,
|
8
|
+
:name,
|
9
|
+
:files
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@files = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.app_version( descriptor_path )
|
16
|
+
require 'rexml/document'
|
17
|
+
|
18
|
+
doc = REXML::Document.new(File.new(descriptor_path))
|
19
|
+
|
20
|
+
version_xpath = '/application/version/text()'
|
21
|
+
|
22
|
+
REXML::XPath.first(doc, version_xpath).to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.package
|
26
|
+
c = self.new
|
27
|
+
|
28
|
+
yield c
|
29
|
+
|
30
|
+
c.package!
|
31
|
+
end
|
32
|
+
|
33
|
+
def command_string
|
34
|
+
unless @keyfile && @keypass && @name && @descriptor && @files
|
35
|
+
raise ArgumentError, 'Missing arguments'
|
36
|
+
end
|
37
|
+
|
38
|
+
command = command_path 'adt'
|
39
|
+
keyfile = @keyfile.gsub(File.dirname(@descriptor) + '/', '')
|
40
|
+
descriptor = File.basename(@descriptor)
|
41
|
+
name = File.basename(@name).gsub(/\.air$/, '')
|
42
|
+
files = (@files || []).map { |f| f.gsub(dir + '/', '') }.join(' ')
|
43
|
+
|
44
|
+
"#{command} -package -storetype pkcs12 -keystore #{keyfile} -storepass #{@keypass} #{name} #{descriptor} #{files}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def package!
|
48
|
+
current_dir = Dir.pwd
|
49
|
+
|
50
|
+
dir = File.dirname(@descriptor)
|
51
|
+
|
52
|
+
Dir.chdir(dir)
|
53
|
+
|
54
|
+
puts execute_command
|
55
|
+
|
56
|
+
Dir.chdir(current_dir)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
module FlexUtils
|
2
|
+
|
3
|
+
class Asc < AbstractTool
|
4
|
+
|
5
|
+
attr_writer :output, # output file path
|
6
|
+
:source_path, # list
|
7
|
+
:library_path, # list
|
8
|
+
:external_library_path, # list
|
9
|
+
:locale, # list of locales
|
10
|
+
:debug, # boolean, default false
|
11
|
+
:optimize, # boolean, default true
|
12
|
+
:strict, # boolean, default true
|
13
|
+
:verbose_stacktraces, # boolean, default true
|
14
|
+
:use_network, # boolean, default true
|
15
|
+
:incremental, # boolean, default false
|
16
|
+
:target_player, # string, default "9.0.0"
|
17
|
+
:defines, # hash name => value
|
18
|
+
:keep_as3_metadata, # list of metadata names
|
19
|
+
:warnings, # hash warning_name => boolean (warning_name example "show-actionscript-warnings")
|
20
|
+
:fail_on_error, # boolean, default true
|
21
|
+
:fail_on_warning # boolean, default false
|
22
|
+
|
23
|
+
def initialize( output )
|
24
|
+
@output = output
|
25
|
+
|
26
|
+
@debug = false
|
27
|
+
@optimize = true
|
28
|
+
@strict = true
|
29
|
+
@verbose_stacktraces = true
|
30
|
+
@incremental = false
|
31
|
+
|
32
|
+
@target_player = "9.0.0"
|
33
|
+
|
34
|
+
@source_path = []
|
35
|
+
@library_path = []
|
36
|
+
@external_library_path = []
|
37
|
+
@locale = []
|
38
|
+
@keep_as3_metadata = []
|
39
|
+
|
40
|
+
@defines = Hash.new
|
41
|
+
@warnings = Hash.new
|
42
|
+
|
43
|
+
@fail_on_error = true
|
44
|
+
@fail_on_warning = false
|
45
|
+
|
46
|
+
self.compiler = "flex"
|
47
|
+
end
|
48
|
+
|
49
|
+
def compiler_base_name
|
50
|
+
""
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.compile( *args )
|
54
|
+
c = self.new(*args)
|
55
|
+
|
56
|
+
yield c
|
57
|
+
|
58
|
+
c.compile!
|
59
|
+
end
|
60
|
+
|
61
|
+
def compiler=( name )
|
62
|
+
if name.to_s == "air"
|
63
|
+
@configname = "air"
|
64
|
+
@compiler = "a" + compiler_base_name
|
65
|
+
else
|
66
|
+
@configname = "flex"
|
67
|
+
@compiler = compiler_base_name
|
68
|
+
end
|
69
|
+
|
70
|
+
@compiler = command_path @compiler
|
71
|
+
end
|
72
|
+
|
73
|
+
def defines_str
|
74
|
+
defines = @defines.keys.map do |item|
|
75
|
+
value = if @defines[item] =~ /\s/
|
76
|
+
"'#{@defines[item]}'"
|
77
|
+
else
|
78
|
+
@defines[item]
|
79
|
+
end
|
80
|
+
|
81
|
+
"-define+=#{item},#{value}"
|
82
|
+
end
|
83
|
+
|
84
|
+
defines.join(' ')
|
85
|
+
end
|
86
|
+
|
87
|
+
def compiler_flags
|
88
|
+
all_flags = []
|
89
|
+
|
90
|
+
all_flags << ("+configname=" + @configname)
|
91
|
+
|
92
|
+
all_flags << "-source-path+=#{@source_path.join(",")}" unless @source_path.empty?
|
93
|
+
all_flags << "-library-path+=#{@library_path.join(",")}" unless @library_path.empty?
|
94
|
+
all_flags << "-external-library-path+=#{@external_library_path.join(",")}" unless @external_library_path.empty?
|
95
|
+
all_flags << "-locale=#{@locale.join(",")}" unless @locale.empty?
|
96
|
+
all_flags << "-keep-as3-metadata=#{@keep_as3_metadata.join(",")}" unless @keep_as3_metadata.empty?
|
97
|
+
|
98
|
+
all_flags << "-debug" if @debug
|
99
|
+
all_flags << "-strict" if @strict
|
100
|
+
all_flags << "-optimize" if @optimize
|
101
|
+
all_flags << "-verbose-stacktraces" if @verbose_stacktraces
|
102
|
+
all_flags << "-use-network" if @use_network
|
103
|
+
all_flags << "-incremental" if @incremental
|
104
|
+
|
105
|
+
all_flags << "-target-player #{@target_player}"
|
106
|
+
|
107
|
+
all_flags << (@warnings.keys.map { |item| "-#{item}=#{@warnings[item]}" }.join(" "))
|
108
|
+
|
109
|
+
all_flags << defines_str
|
110
|
+
|
111
|
+
all_flags
|
112
|
+
end
|
113
|
+
|
114
|
+
def command_string
|
115
|
+
all_flags = compiler_flags.delete_if { |item| (item.nil? || item =~ /^\s*$/) }.join(" ")
|
116
|
+
|
117
|
+
"#{@compiler} #{all_flags}"
|
118
|
+
end
|
119
|
+
|
120
|
+
def compile!
|
121
|
+
output = execute_command
|
122
|
+
|
123
|
+
if block_given?
|
124
|
+
yield($?, output)
|
125
|
+
else
|
126
|
+
puts output
|
127
|
+
end
|
128
|
+
|
129
|
+
if @fail_on_error and ($?.exitstatus != 0 or output.include? "Error:")
|
130
|
+
fail "Compilation failed because of an error, see output above"
|
131
|
+
end
|
132
|
+
|
133
|
+
if @fail_on_warning and output.include? "Warning:"
|
134
|
+
fail "Compilation failed because of a warning, see output above"
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module FlexUtils
|
2
|
+
|
3
|
+
class Compc < Asc
|
4
|
+
|
5
|
+
attr_writer :manifest, # hash manifest_file => namespace_uri
|
6
|
+
:include_classes, # list
|
7
|
+
:include_sources, # list
|
8
|
+
:include_files # hash file_name => file_path
|
9
|
+
|
10
|
+
def initialize( output )
|
11
|
+
super(output)
|
12
|
+
|
13
|
+
@include_classes = []
|
14
|
+
@include_sources = []
|
15
|
+
|
16
|
+
@manifest = Hash.new
|
17
|
+
@include_files = Hash.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def compiler_base_name
|
21
|
+
"compc"
|
22
|
+
end
|
23
|
+
|
24
|
+
def Compc.to_class_list( files, source_root )
|
25
|
+
classes = files.map do |file|
|
26
|
+
file.gsub(source_root, "").gsub(/\..+?$/, "").gsub(/\//, ".")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def compiler_flags
|
31
|
+
all_flags = super()
|
32
|
+
|
33
|
+
all_flags << "-include-classes #{@include_classes.join(" ")}" unless @include_classes.empty?
|
34
|
+
all_flags << "-include-sources #{@include_sources.join(" ")}" unless @include_sources.empty?
|
35
|
+
|
36
|
+
all_flags << "-output #{@output}"
|
37
|
+
|
38
|
+
all_flags << "-theme #{@theme}" unless @theme.nil?
|
39
|
+
|
40
|
+
all_flags
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module FlexUtils
|
2
|
+
|
3
|
+
class AbstractTool
|
4
|
+
|
5
|
+
def command_path( command_name )
|
6
|
+
if ENV['FLEX_HOME']
|
7
|
+
"'" + File.join(ENV['FLEX_HOME'], 'bin', command_name + command_extension) + "'"
|
8
|
+
else
|
9
|
+
command_name + command_extension
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def command_extension
|
14
|
+
case RUBY_PLATFORM
|
15
|
+
when /mswin/: '.exe'
|
16
|
+
else ''
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def command_string
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute_command( options = { } )
|
25
|
+
operative_options = standard_options.merge(options)
|
26
|
+
|
27
|
+
cmd_str = command_string
|
28
|
+
|
29
|
+
puts cmd_str if operative_options[:verbose]
|
30
|
+
|
31
|
+
%x(#{cmd_str} 2>&1)
|
32
|
+
end
|
33
|
+
|
34
|
+
def standard_options
|
35
|
+
{:verbose => true}
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module FlexUtils
|
2
|
+
|
3
|
+
class Mxmlc < Asc
|
4
|
+
|
5
|
+
attr_writer :theme_files, # list of paths to theme SWC or CSS files
|
6
|
+
:allow_source_path_overlap, # boolean
|
7
|
+
:keep_generated_actionscript # boolean
|
8
|
+
|
9
|
+
def initialize( output, main_class )
|
10
|
+
super(output)
|
11
|
+
|
12
|
+
@main_class = main_class
|
13
|
+
|
14
|
+
@keep_generated_actionscript = false
|
15
|
+
@allow_source_path_overlap = false
|
16
|
+
|
17
|
+
@theme_files = []
|
18
|
+
end
|
19
|
+
|
20
|
+
def compiler_base_name
|
21
|
+
"mxmlc"
|
22
|
+
end
|
23
|
+
|
24
|
+
def compiler_flags
|
25
|
+
all_flags = super()
|
26
|
+
|
27
|
+
all_flags << "-allow-source-path-overlap" if @allow_source_path_overlap
|
28
|
+
all_flags << "-keep-generated-actionscript" if @keep_generated_actionscript
|
29
|
+
|
30
|
+
all_flags << "-output #{@output}"
|
31
|
+
|
32
|
+
all_flags << "-theme #{@theme_files.join(' ')}" unless @theme_files.empty?
|
33
|
+
|
34
|
+
all_flags << "--"
|
35
|
+
|
36
|
+
all_flags << @main_class
|
37
|
+
|
38
|
+
all_flags
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module FlexUtils
|
2
|
+
|
3
|
+
class TestRunner < Adl
|
4
|
+
|
5
|
+
attr_writer :fail_on_error,
|
6
|
+
:exit_on_complete
|
7
|
+
|
8
|
+
def initialize( swf )
|
9
|
+
super(swf)
|
10
|
+
|
11
|
+
@fail_on_error = true
|
12
|
+
@exit_on_complete = false
|
13
|
+
end
|
14
|
+
|
15
|
+
def run!( extra_args=[], &block )
|
16
|
+
log_file = "tests.log"
|
17
|
+
|
18
|
+
super([log_file, "-exit-on-complete", @exit_on_complete]) do |res|
|
19
|
+
if File.exist? log_file
|
20
|
+
#File.read("data.txt")?
|
21
|
+
output = File.open(log_file) { |f| f.read }
|
22
|
+
|
23
|
+
puts output
|
24
|
+
|
25
|
+
rm log_file
|
26
|
+
end
|
27
|
+
|
28
|
+
if @fail_on_error
|
29
|
+
if output.nil?
|
30
|
+
fail "No output from tests."
|
31
|
+
elsif output =~ /tests failed/i
|
32
|
+
fail "Tests failed!"
|
33
|
+
elsif res.nil? or res.exitstatus != 0
|
34
|
+
fail "Test runner failed!"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
data/spec/adl_spec.rb
ADDED
data/spec/adt_spec.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
describe FlexUtils::Adt do
|
2
|
+
|
3
|
+
before(:each) do
|
4
|
+
@descriptor = "src/Main-app.xml"
|
5
|
+
@keyfile = "src/Main-cert.p12"
|
6
|
+
@keypass = "secret"
|
7
|
+
@name = "Main"
|
8
|
+
@files = []
|
9
|
+
|
10
|
+
@tool = FlexUtils::Adt.new
|
11
|
+
@tool.descriptor = @descriptor
|
12
|
+
@tool.keyfile = @keyfile
|
13
|
+
@tool.keypass = @keypass
|
14
|
+
@tool.name = @name
|
15
|
+
@tool.files = @files
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should run adt" do
|
19
|
+
@tool.command_string.should include("adt")
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/spec/asc_spec.rb
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
shared_examples_for "any Asc-derived tool" do
|
2
|
+
|
3
|
+
it "should set the config name (default)" do
|
4
|
+
@compiler.command_string.should include("+configname=flex")
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should set tge config name (AIR)" do
|
8
|
+
@compiler.compiler = :air
|
9
|
+
|
10
|
+
@compiler.command_string.should include("+configname=air")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should set -source-path" do
|
14
|
+
@compiler.source_path = ['src', 'theme', 'locale/{locale}']
|
15
|
+
|
16
|
+
@compiler.command_string.should include('-source-path+=src,theme,locale/{locale}')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set -library-path" do
|
20
|
+
@compiler.library_path = ['lib', 'some/other/path']
|
21
|
+
|
22
|
+
@compiler.command_string.should include('-library-path+=lib,some/other/path')
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should set -external-library-path" do
|
26
|
+
@compiler.external_library_path = ['/path/to/flex']
|
27
|
+
|
28
|
+
@compiler.command_string.should include('-external-library-path+=/path/to/flex')
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should set -locale" do
|
32
|
+
@compiler.locale = ['en_US', 'sv_SE']
|
33
|
+
|
34
|
+
@compiler.command_string.should include('-locale=en_US,sv_SE')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not set -locale (when there's no locales specified)" do
|
38
|
+
@compiler.command_string.should_not include('-locale')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should set -debug" do
|
42
|
+
@compiler.debug = true
|
43
|
+
|
44
|
+
@compiler.command_string.should include('-debug')
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not set -debug (when it's false)" do
|
48
|
+
@compiler.debug = false
|
49
|
+
|
50
|
+
@compiler.command_string.should_not include('-debug')
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should set -optimize" do
|
54
|
+
@compiler.optimize = true
|
55
|
+
|
56
|
+
@compiler.command_string.should include('-optimize')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should not set -optimize (when it's false)" do
|
60
|
+
@compiler.optimize = false
|
61
|
+
|
62
|
+
@compiler.command_string.should_not include('-optimize')
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should set -strict" do
|
66
|
+
@compiler.strict = true
|
67
|
+
|
68
|
+
@compiler.command_string.should include('-strict')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should not set -strict (when it's false)" do
|
72
|
+
@compiler.strict = false
|
73
|
+
|
74
|
+
@compiler.command_string.should_not include('-strict')
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should set -verbose-stacktraces" do
|
78
|
+
@compiler.verbose_stacktraces = true
|
79
|
+
|
80
|
+
@compiler.command_string.should include('-verbose-stacktraces')
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should not set -verbose-stacktraces (when it's false)" do
|
84
|
+
@compiler.verbose_stacktraces = false
|
85
|
+
|
86
|
+
@compiler.command_string.should_not include('-verbose-stacktraces')
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should set -use-network" do
|
90
|
+
@compiler.use_network = true
|
91
|
+
|
92
|
+
@compiler.command_string.should include('-use-network')
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should not set -use-network (when it's false)" do
|
96
|
+
@compiler.use_network = false
|
97
|
+
|
98
|
+
@compiler.command_string.should_not include('-use-network')
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should set -incremental" do
|
102
|
+
@compiler.incremental = true
|
103
|
+
|
104
|
+
@compiler.command_string.should include('-incremental')
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should not set -incremental (when it's false)" do
|
108
|
+
@compiler.incremental = false
|
109
|
+
|
110
|
+
@compiler.command_string.should_not include('-incremental')
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should set -target-player to the right string" do
|
114
|
+
@compiler.target_player = 'X.Y.Z'
|
115
|
+
|
116
|
+
@compiler.command_string.should include('-target-player X.Y.Z')
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should default to 9.0.0 for -target-player" do
|
120
|
+
@compiler.target_player = '9.0.0'
|
121
|
+
|
122
|
+
@compiler.command_string.should include("-target-player 9.0.0")
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should set -keep-as3-metadata" do
|
126
|
+
@compiler.keep_as3_metadata = ['one', 'two']
|
127
|
+
|
128
|
+
@compiler.command_string.should include("-keep-as3-metadata=one,two")
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should not set -keep-as3-metadata (when there's none specified)" do
|
132
|
+
@compiler.command_string.should_not include("-keep-as3-metadata")
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should set warning flags" do
|
136
|
+
@compiler.warnings = {'show-actionscript-warnings' => true, 'some-other-warning' => false}
|
137
|
+
|
138
|
+
@compiler.command_string.should include("-show-actionscript-warnings=true")
|
139
|
+
@compiler.command_string.should include("-some-other-warning=false")
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should set defines" do
|
143
|
+
@compiler.defines = {'MY_NS' => false, 'SOME_OTHER_STRING' => 'some value'}
|
144
|
+
|
145
|
+
@compiler.command_string.should include('-define+=MY_NS,false')
|
146
|
+
@compiler.command_string.should include('-define+=SOME_OTHER_STRING,\'some value\'')
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should not set any defined by default" do
|
150
|
+
@compiler.command_string.should_not include("-define=")
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
data/spec/compc_spec.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
describe FlexUtils::Compc do
|
2
|
+
|
3
|
+
before(:each) do
|
4
|
+
@output = 'build/Main.swf'
|
5
|
+
|
6
|
+
@compiler = FlexUtils::Compc.new(@output)
|
7
|
+
# :manifest, # hash manifest_file => namespace_uri
|
8
|
+
# :include_classes, # list
|
9
|
+
# :include_sources, # list
|
10
|
+
# :include_files # hash file_name => file_path
|
11
|
+
end
|
12
|
+
|
13
|
+
it_should_behave_like "any Asc-derived tool"
|
14
|
+
|
15
|
+
end
|
data/spec/mxmlc_spec.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
describe FlexUtils::Mxmlc do
|
2
|
+
|
3
|
+
before(:each) do
|
4
|
+
@input = 'src/Main.mxml'
|
5
|
+
@output = 'build/Main.swf'
|
6
|
+
|
7
|
+
@compiler = FlexUtils::Mxmlc.new(@output, @input)
|
8
|
+
@compiler.theme_files = ['theme/common.css', 'theme/some/longer/path/to/a.swc']
|
9
|
+
@compiler.allow_source_path_overlap = true
|
10
|
+
@compiler.keep_generated_actionscript = true
|
11
|
+
end
|
12
|
+
|
13
|
+
it_should_behave_like "any Asc-derived tool"
|
14
|
+
|
15
|
+
it "should add the input file" do
|
16
|
+
@compiler.command_string.should include(@input)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should set the output file and prefix it with -output" do
|
20
|
+
@compiler.command_string.should include("-output #{@output}")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should set -allow-source-path-overlap" do
|
24
|
+
@compiler.command_string.should include("-allow-source-path-overlap")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should not set -allow-source-path-overlap (when it is false)" do
|
28
|
+
@compiler.allow_source_path_overlap = false;
|
29
|
+
|
30
|
+
@compiler.command_string.should_not include("-allow-source-path-overlap")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should set -keep-generated-actionscript" do
|
34
|
+
@compiler.command_string.should include("-keep-generated-actionscript")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not set -keep-generated-actionscript (when it's false)" do
|
38
|
+
@compiler.keep_generated_actionscript = false
|
39
|
+
|
40
|
+
@compiler.command_string.should_not include("-keep-generated-actionscript")
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flexutils
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Theo Hultberg
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-26 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description: ""
|
26
|
+
email: theo@iconara.net
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- LICENSE
|
33
|
+
- README.markdown
|
34
|
+
files:
|
35
|
+
- .document
|
36
|
+
- .gitignore
|
37
|
+
- LICENSE
|
38
|
+
- README.markdown
|
39
|
+
- Rakefile
|
40
|
+
- VERSION
|
41
|
+
- examples/Rakefile
|
42
|
+
- examples/lib/.gitignore
|
43
|
+
- examples/locale/en_US/.gitignore
|
44
|
+
- examples/src/Main.mxml
|
45
|
+
- examples/src/SomeClass.as
|
46
|
+
- examples/src/Tests.mxml
|
47
|
+
- examples/theme/main.css
|
48
|
+
- lib/flexutils.rb
|
49
|
+
- lib/flexutils/adl.rb
|
50
|
+
- lib/flexutils/adt.rb
|
51
|
+
- lib/flexutils/asc.rb
|
52
|
+
- lib/flexutils/compc.rb
|
53
|
+
- lib/flexutils/flex_utils.rb
|
54
|
+
- lib/flexutils/mxmlc.rb
|
55
|
+
- lib/flexutils/test_runner.rb
|
56
|
+
- spec/adl_spec.rb
|
57
|
+
- spec/adt_spec.rb
|
58
|
+
- spec/asc_spec.rb
|
59
|
+
- spec/compc_spec.rb
|
60
|
+
- spec/mxmlc_spec.rb
|
61
|
+
- spec/testrunner_spec.rb
|
62
|
+
has_rdoc: true
|
63
|
+
homepage: http://github.com/iconara/flexutils
|
64
|
+
licenses: []
|
65
|
+
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options:
|
68
|
+
- --charset=UTF-8
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
version:
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
version:
|
83
|
+
requirements: []
|
84
|
+
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 1.3.3
|
87
|
+
signing_key:
|
88
|
+
specification_version: 3
|
89
|
+
summary: Ruby wrappers for the Flex SDK tools
|
90
|
+
test_files:
|
91
|
+
- spec/adl_spec.rb
|
92
|
+
- spec/adt_spec.rb
|
93
|
+
- spec/asc_spec.rb
|
94
|
+
- spec/compc_spec.rb
|
95
|
+
- spec/mxmlc_spec.rb
|
96
|
+
- spec/testrunner_spec.rb
|