flexutils 1.0.0
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/.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
|