sprout 0.7.219-i686-darwin10
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/TODO +12 -0
- data/bin/sprout +128 -0
- data/doc/Bundle +14 -0
- data/doc/Generator +35 -0
- data/doc/Library +63 -0
- data/doc/Task +21 -0
- data/doc/Tool +20 -0
- data/lib/platform.rb +109 -0
- data/lib/progress_bar.rb +354 -0
- data/lib/sprout.rb +496 -0
- data/lib/sprout/archive_unpacker.rb +225 -0
- data/lib/sprout/builder.rb +44 -0
- data/lib/sprout/commands/generate.rb +9 -0
- data/lib/sprout/dynamic_accessors.rb +34 -0
- data/lib/sprout/general_tasks.rb +6 -0
- data/lib/sprout/generator.rb +7 -0
- data/lib/sprout/generator/base_mixins.rb +186 -0
- data/lib/sprout/generator/named_base.rb +227 -0
- data/lib/sprout/log.rb +46 -0
- data/lib/sprout/process_runner.rb +111 -0
- data/lib/sprout/project_model.rb +278 -0
- data/lib/sprout/remote_file_loader.rb +71 -0
- data/lib/sprout/remote_file_target.rb +151 -0
- data/lib/sprout/simple_resolver.rb +88 -0
- data/lib/sprout/tasks/erb_resolver.rb +118 -0
- data/lib/sprout/tasks/gem_wrap_task.rb +200 -0
- data/lib/sprout/tasks/git_task.rb +134 -0
- data/lib/sprout/tasks/library_task.rb +118 -0
- data/lib/sprout/tasks/sftp_task.rb +248 -0
- data/lib/sprout/tasks/ssh_task.rb +153 -0
- data/lib/sprout/tasks/tool_task.rb +793 -0
- data/lib/sprout/tasks/zip_task.rb +158 -0
- data/lib/sprout/template_resolver.rb +207 -0
- data/lib/sprout/user.rb +383 -0
- data/lib/sprout/version.rb +12 -0
- data/lib/sprout/version_file.rb +89 -0
- data/lib/sprout/zip_util.rb +61 -0
- data/rakefile.rb +150 -0
- data/samples/gem_wrap/rakefile.rb +17 -0
- metadata +174 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
module Sprout
|
2
|
+
|
3
|
+
# Used by the GitTask to load, parse and persist Version information
|
4
|
+
# related to a project.
|
5
|
+
# Expects a file with a 3 digit number, separated by periods like:
|
6
|
+
#
|
7
|
+
# 3.4.2
|
8
|
+
#
|
9
|
+
# Create with a path to the file like:
|
10
|
+
#
|
11
|
+
# version = VersionFile.new('path/Version.txt')
|
12
|
+
#
|
13
|
+
class VersionFile
|
14
|
+
|
15
|
+
def initialize(file_path)
|
16
|
+
@file_path = file_path
|
17
|
+
read_value
|
18
|
+
end
|
19
|
+
|
20
|
+
def value=(value)
|
21
|
+
@value = value
|
22
|
+
write_value
|
23
|
+
end
|
24
|
+
|
25
|
+
def value
|
26
|
+
@value
|
27
|
+
end
|
28
|
+
|
29
|
+
def major_version
|
30
|
+
@value.split('.').shift.to_i
|
31
|
+
end
|
32
|
+
|
33
|
+
def minor_version
|
34
|
+
@value.split('.')[1].to_i
|
35
|
+
end
|
36
|
+
|
37
|
+
def revision
|
38
|
+
@value.split('.').pop.to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
def increment_revision
|
42
|
+
self.revision = self.revision + 1
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_s
|
46
|
+
@value
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_str
|
50
|
+
@value
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_tag
|
54
|
+
parts = value.split('.')
|
55
|
+
parts[0] = add_leading_zeros(parts[0], 2)
|
56
|
+
parts[1] = add_leading_zeros(parts[1], 2)
|
57
|
+
parts[2] = add_leading_zeros(parts[2], 3)
|
58
|
+
return parts.join('.')
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def add_leading_zeros(str, digits)
|
64
|
+
(digits - str.size).times do
|
65
|
+
str = "0#{str}"
|
66
|
+
end
|
67
|
+
str
|
68
|
+
end
|
69
|
+
|
70
|
+
def read_value
|
71
|
+
File.open(@file_path, 'r') do |file|
|
72
|
+
@value = file.read.strip
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def write_value
|
77
|
+
File.open(@file_path, 'r+') do |file|
|
78
|
+
file.write @value
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def revision=(revision)
|
83
|
+
parts = @value.split('.')
|
84
|
+
parts[2] = revision
|
85
|
+
@value = parts.join('.')
|
86
|
+
write_value
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
module Sprout
|
3
|
+
class ZipUtil #:nodoc:
|
4
|
+
|
5
|
+
# Pack up an archive from a directory on disk
|
6
|
+
def self.pack(input, archive, excludes)
|
7
|
+
Zip::ZipFile.open(archive, Zip::ZipFile::CREATE) do |zip|
|
8
|
+
add_file_to_zip(zip, input, excludes)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Unpack an archive to a directory on disk
|
13
|
+
def self.unpack(archive, destination)
|
14
|
+
Zip::ZipFile.open(archive) do |zip|
|
15
|
+
unpack_file(zip, destination)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.unpack_file(zip, destination, path='')
|
20
|
+
if(zip.file.file?(path))
|
21
|
+
File.open(File.join(destination, path), 'w') do |dest|
|
22
|
+
zip.file.open(path) do |src|
|
23
|
+
dest.write src.read
|
24
|
+
end
|
25
|
+
end
|
26
|
+
else
|
27
|
+
Dir.mkdir(File.join(destination, path))
|
28
|
+
zip.dir.foreach(path) do |dir|
|
29
|
+
unpack_file(zip, destination, File.join(path, dir))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.add_file_to_zip(zip, path, excludes)
|
35
|
+
if(File.directory?(path))
|
36
|
+
zip.dir.mkdir(path)
|
37
|
+
Dir.open(path).each do |child|
|
38
|
+
if(!excluded?(child, excludes))
|
39
|
+
add_file_to_zip(zip, File.join(path, child), excludes)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
else
|
43
|
+
File.open(path) do |src|
|
44
|
+
zip.file.open(path, 'w') do |dest|
|
45
|
+
dest.write src.read
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.excluded?(str, excludes)
|
52
|
+
excludes.each do |exc|
|
53
|
+
if(str == exc)
|
54
|
+
return true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
return false
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
data/rakefile.rb
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'lib/sprout'
|
11
|
+
require 'lib/sprout/version'
|
12
|
+
|
13
|
+
PROJECT = "sprout"
|
14
|
+
NAME = "sprout"
|
15
|
+
SUMMARY = "Sprout is an open-source, cross-platform project generation, configuration and build tool, that currently suports ActionScript 2, ActionScript 3, Flex and AIR development."
|
16
|
+
GEM_VERSION = Sprout::VERSION::STRING
|
17
|
+
AUTHOR = "Luke Bayes"
|
18
|
+
EMAIL = "projectsprouts@googlegroups.com"
|
19
|
+
HOMEPAGE = "http://www.projectsprouts.org"
|
20
|
+
DESCRIPTION =<<EOF
|
21
|
+
Sprout is a modular set of tools that take the tedium and frustration out of creating and managing programming projects by automatically installing and configuring external tools, libraries, commands and build tasks. Bundles are currently available to support ActionScript 2, ActionScript 3, Flex and AIR development.
|
22
|
+
EOF
|
23
|
+
HOMEPATH = "http://#{PROJECT}.rubyforge.org"
|
24
|
+
RELEASE_TYPES = ["gem"]
|
25
|
+
PKG_LIST = FileList['[a-zA-Z]*',
|
26
|
+
'samples/**/*',
|
27
|
+
'bin/**/*',
|
28
|
+
'lib/**/*',
|
29
|
+
'doc/*'
|
30
|
+
]
|
31
|
+
PKG_LIST.exclude('.svn')
|
32
|
+
PKG_LIST.exclude('artifacts')
|
33
|
+
PKG_LIST.each do |file|
|
34
|
+
task :package => file
|
35
|
+
end
|
36
|
+
|
37
|
+
def apply_shared_spec(s)
|
38
|
+
s.summary = SUMMARY
|
39
|
+
s.description = DESCRIPTION
|
40
|
+
s.name = NAME
|
41
|
+
s.version = GEM_VERSION
|
42
|
+
s.author = AUTHOR
|
43
|
+
s.email = EMAIL
|
44
|
+
s.homepage = HOMEPAGE
|
45
|
+
s.rubyforge_project = PROJECT
|
46
|
+
s.require_path = 'lib'
|
47
|
+
s.bindir = 'bin'
|
48
|
+
s.has_rdoc = true
|
49
|
+
s.rdoc_options << '--title' << 'Project Sprouts -- Core Documentation'
|
50
|
+
s.rdoc_options << '--main' << 'Sprout::Sprout'
|
51
|
+
s.rdoc_options << '--line-numbers' << '--inline-source'
|
52
|
+
s.rdoc_options << '--charset' << 'utf-8'
|
53
|
+
s.rdoc_options << '-i' << '.'
|
54
|
+
s.files = PKG_LIST.to_a
|
55
|
+
s.executables = ['sprout']
|
56
|
+
s.default_executable = 'sprout'
|
57
|
+
|
58
|
+
s.add_dependency('rubyzip', '>= 0.9.1')
|
59
|
+
s.add_dependency('archive-tar-minitar', '>= 0.5.1')
|
60
|
+
s.add_dependency('rubigen', '>= 1.5.2')
|
61
|
+
s.add_dependency('net-sftp')
|
62
|
+
s.add_dependency('net-ssh')
|
63
|
+
s.add_dependency('rake')
|
64
|
+
end
|
65
|
+
|
66
|
+
osx_spec = Gem::Specification.new do |s|
|
67
|
+
apply_shared_spec(s)
|
68
|
+
s.platform = 'darwin'
|
69
|
+
# Add osx-specific dependencies here
|
70
|
+
|
71
|
+
# Can't really depend on rb-appscript b/c this requires OS X dev-tool disk
|
72
|
+
#s.add_dependency('rb-appscript', '>= 0.5.0')
|
73
|
+
s.add_dependency('open4', '>= 0.9.6')
|
74
|
+
end
|
75
|
+
|
76
|
+
osx_snow_leopard_spec = Gem::Specification.new do |s|
|
77
|
+
apply_shared_spec(s)
|
78
|
+
s.platform = 'i686-darwin10'
|
79
|
+
# Add snow-leopard-specific dependencies here
|
80
|
+
|
81
|
+
# Can't really depend on rb-appscript b/c this requires OS X dev-tool disk
|
82
|
+
#s.add_dependency('rb-appscript', '>= 0.5.0')
|
83
|
+
s.add_dependency('open4', '>= 0.9.6')
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
nix_spec = Gem::Specification.new do |s|
|
88
|
+
apply_shared_spec(s)
|
89
|
+
s.platform = 'x86-linux'
|
90
|
+
# Add nix-specific dependencies here
|
91
|
+
s.add_dependency('open4', '>= 0.9.6')
|
92
|
+
end
|
93
|
+
|
94
|
+
win_spec = Gem::Specification.new do |s|
|
95
|
+
apply_shared_spec(s)
|
96
|
+
s.platform = 'mswin32'
|
97
|
+
# Add win-specific dependencies here
|
98
|
+
s.add_dependency('win32-open3', '0.2.5')
|
99
|
+
end
|
100
|
+
|
101
|
+
ruby_spec = Gem::Specification.new do |s|
|
102
|
+
apply_shared_spec(s)
|
103
|
+
s.platform = Gem::Platform::RUBY
|
104
|
+
s.add_dependency('open4', '>= 0.9.6')
|
105
|
+
end
|
106
|
+
|
107
|
+
Rake::GemPackageTask.new(osx_spec) do |pkg|
|
108
|
+
end
|
109
|
+
|
110
|
+
Rake::GemPackageTask.new(osx_snow_leopard_spec) do |pkg|
|
111
|
+
end
|
112
|
+
|
113
|
+
Rake::GemPackageTask.new(nix_spec) do |pkg|
|
114
|
+
end
|
115
|
+
|
116
|
+
Rake::GemPackageTask.new(win_spec) do |pkg|
|
117
|
+
end
|
118
|
+
|
119
|
+
Rake::GemPackageTask.new(ruby_spec) do |pkg|
|
120
|
+
end
|
121
|
+
|
122
|
+
Rake::RDocTask.new do |t|
|
123
|
+
t.rdoc_files.include(['doc/*', 'lib/*.rb', 'lib/**/*.rb', 'MIT-LICENSE'])
|
124
|
+
t.title = "Project Sprouts -- Core Documentation"
|
125
|
+
t.rdoc_dir = 'rdoc'
|
126
|
+
t.main = 'Sprout::Sprout'
|
127
|
+
t.options << '--line-numbers' << '--inline-source'
|
128
|
+
t.options << '--charset' << 'utf-8'
|
129
|
+
t.options << '-i .'
|
130
|
+
end
|
131
|
+
|
132
|
+
CLEAN.add('rdoc')
|
133
|
+
|
134
|
+
|
135
|
+
require File.dirname(__FILE__) + '/script/build_helpers'
|
136
|
+
|
137
|
+
def fix_x86_mswin
|
138
|
+
files = Dir.glob('pkg/*x86-mswin*')
|
139
|
+
files.each do |name|
|
140
|
+
new_name = name.gsub('-x86', '')
|
141
|
+
puts "Renaming x86-mswin gem from #{name} to #{new_name}"
|
142
|
+
File.mv(name, new_name)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
task :package do
|
147
|
+
fix_x86_mswin
|
148
|
+
end
|
149
|
+
|
150
|
+
#task :release => :release_rubyforge
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'sprout'
|
2
|
+
|
3
|
+
desc "Wrap the asunit3 library in a rubygem"
|
4
|
+
gem_wrap :asunit3 do |t|
|
5
|
+
t.version = '3.2.0'
|
6
|
+
t.summary = "AsUnit3 is an ActionScript unit test framework for AIR, Flex 2/3 and ActionScript 3 projects"
|
7
|
+
t.author = "Luke Bayes and Ali Mills"
|
8
|
+
t.email = "projectsprouts@googlegroups.com"
|
9
|
+
t.homepage = "http://www.asunit.org"
|
10
|
+
t.sprout_spec =<<EOF
|
11
|
+
- !ruby/object:Sprout::RemoteFileTarget
|
12
|
+
platform: universal
|
13
|
+
url: http://projectsprouts.googlecode.com/files/asunit3-1.1.zip
|
14
|
+
source_path: ''
|
15
|
+
EOF
|
16
|
+
end
|
17
|
+
|
metadata
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sprout
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.219
|
5
|
+
platform: i686-darwin10
|
6
|
+
authors:
|
7
|
+
- Luke Bayes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-10-28 00:00:00 -04:00
|
13
|
+
default_executable: sprout
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rubyzip
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.9.1
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: archive-tar-minitar
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.5.1
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rubigen
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.5.2
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: net-sftp
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: net-ssh
|
57
|
+
type: :runtime
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: "0"
|
64
|
+
version:
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: rake
|
67
|
+
type: :runtime
|
68
|
+
version_requirement:
|
69
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: open4
|
77
|
+
type: :runtime
|
78
|
+
version_requirement:
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.9.6
|
84
|
+
version:
|
85
|
+
description: |
|
86
|
+
Sprout is a modular set of tools that take the tedium and frustration out of creating and managing programming projects by automatically installing and configuring external tools, libraries, commands and build tasks. Bundles are currently available to support ActionScript 2, ActionScript 3, Flex and AIR development.
|
87
|
+
|
88
|
+
email: projectsprouts@googlegroups.com
|
89
|
+
executables:
|
90
|
+
- sprout
|
91
|
+
extensions: []
|
92
|
+
|
93
|
+
extra_rdoc_files: []
|
94
|
+
|
95
|
+
files:
|
96
|
+
- MIT-LICENSE
|
97
|
+
- rakefile.rb
|
98
|
+
- TODO
|
99
|
+
- samples/gem_wrap/rakefile.rb
|
100
|
+
- bin/sprout
|
101
|
+
- lib/platform.rb
|
102
|
+
- lib/progress_bar.rb
|
103
|
+
- lib/sprout/archive_unpacker.rb
|
104
|
+
- lib/sprout/builder.rb
|
105
|
+
- lib/sprout/commands/generate.rb
|
106
|
+
- lib/sprout/dynamic_accessors.rb
|
107
|
+
- lib/sprout/general_tasks.rb
|
108
|
+
- lib/sprout/generator/base_mixins.rb
|
109
|
+
- lib/sprout/generator/named_base.rb
|
110
|
+
- lib/sprout/generator.rb
|
111
|
+
- lib/sprout/log.rb
|
112
|
+
- lib/sprout/process_runner.rb
|
113
|
+
- lib/sprout/project_model.rb
|
114
|
+
- lib/sprout/remote_file_loader.rb
|
115
|
+
- lib/sprout/remote_file_target.rb
|
116
|
+
- lib/sprout/simple_resolver.rb
|
117
|
+
- lib/sprout/tasks/erb_resolver.rb
|
118
|
+
- lib/sprout/tasks/gem_wrap_task.rb
|
119
|
+
- lib/sprout/tasks/git_task.rb
|
120
|
+
- lib/sprout/tasks/library_task.rb
|
121
|
+
- lib/sprout/tasks/sftp_task.rb
|
122
|
+
- lib/sprout/tasks/ssh_task.rb
|
123
|
+
- lib/sprout/tasks/tool_task.rb
|
124
|
+
- lib/sprout/tasks/zip_task.rb
|
125
|
+
- lib/sprout/template_resolver.rb
|
126
|
+
- lib/sprout/user.rb
|
127
|
+
- lib/sprout/version.rb
|
128
|
+
- lib/sprout/version_file.rb
|
129
|
+
- lib/sprout/zip_util.rb
|
130
|
+
- lib/sprout.rb
|
131
|
+
- doc/Bundle
|
132
|
+
- doc/Generator
|
133
|
+
- doc/Library
|
134
|
+
- doc/Task
|
135
|
+
- doc/Tool
|
136
|
+
has_rdoc: true
|
137
|
+
homepage: http://www.projectsprouts.org
|
138
|
+
licenses: []
|
139
|
+
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options:
|
142
|
+
- --title
|
143
|
+
- Project Sprouts -- Core Documentation
|
144
|
+
- --main
|
145
|
+
- Sprout::Sprout
|
146
|
+
- --line-numbers
|
147
|
+
- --inline-source
|
148
|
+
- --charset
|
149
|
+
- utf-8
|
150
|
+
- -i
|
151
|
+
- .
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: "0"
|
159
|
+
version:
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: "0"
|
165
|
+
version:
|
166
|
+
requirements: []
|
167
|
+
|
168
|
+
rubyforge_project: sprout
|
169
|
+
rubygems_version: 1.3.5
|
170
|
+
signing_key:
|
171
|
+
specification_version: 3
|
172
|
+
summary: Sprout is an open-source, cross-platform project generation, configuration and build tool, that currently suports ActionScript 2, ActionScript 3, Flex and AIR development.
|
173
|
+
test_files: []
|
174
|
+
|