fluby 0.5.6 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.mdown +134 -0
- data/Rakefile +14 -2
- data/lib/fluby.rb +88 -4
- data/lib/templates/README +1 -1
- data/lib/templates/Rakefile +15 -6
- data/lib/templates/generate +17 -0
- data/lib/templates/generators/class +7 -0
- data/lib/templates/generators/delegate +22 -0
- data/lib/templates/generators/xml_loader +24 -0
- metadata +9 -4
- data/README +0 -4
data/README.mdown
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
# fluby
|
2
|
+
|
3
|
+
A simple command to create an empty ActionScript project for MTASC + SWFMILL + Rake
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
gem install fluby
|
8
|
+
|
9
|
+
Fluby requires the 'mtasc' and 'swfmill' executables somewhere on your path.
|
10
|
+
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
### New project
|
15
|
+
|
16
|
+
To create a new project:
|
17
|
+
|
18
|
+
fluby ProjectName
|
19
|
+
|
20
|
+
|
21
|
+
### Compilation
|
22
|
+
|
23
|
+
To compile your brand new project:
|
24
|
+
|
25
|
+
cd ProjectName
|
26
|
+
rake
|
27
|
+
|
28
|
+
That should generate a 'ProjectName.swf' file on the 'deploy' folder. The SWF file is debug-enabled (i.e: you can see the trace() output if you have a debug Flash Player). If you want to release your project without debug information, run
|
29
|
+
|
30
|
+
rake release
|
31
|
+
|
32
|
+
|
33
|
+
### More Rake tasks
|
34
|
+
|
35
|
+
There are other rake tasks available:
|
36
|
+
|
37
|
+
rake package # Creates a ZIP file containing your SWF file on the 'pkg' folder
|
38
|
+
rake test # Opens a HTML file with your SWF for testing on your default browser (available on Mac only)
|
39
|
+
|
40
|
+
|
41
|
+
### script/generate
|
42
|
+
|
43
|
+
Starting from version 0.6, fluby installs a 'generate' script in the 'scripts' folder that you can use to speed up the creation of new classes.
|
44
|
+
|
45
|
+
Right now there are 3 template types:
|
46
|
+
|
47
|
+
#### **class**
|
48
|
+
|
49
|
+
Use it to create a generic class by running:
|
50
|
+
|
51
|
+
script/generate class your.class.path.ClassName attribute:Type attribute:Type (...)
|
52
|
+
|
53
|
+
For example: if you want to create a "Car" class with attributes "make" and "model" of type String and an attribute "year" of type Number, you'd run:
|
54
|
+
|
55
|
+
script/generate class com.yourdomain.Car make:String model:String year:Number
|
56
|
+
|
57
|
+
This will create a file in com/yourdomain/Car.as with this content:
|
58
|
+
|
59
|
+
class com.yourdomain.Car {
|
60
|
+
var make:String;
|
61
|
+
var model:String;
|
62
|
+
var year:Number;
|
63
|
+
function Car(){
|
64
|
+
// Init class
|
65
|
+
}
|
66
|
+
}
|
67
|
+
|
68
|
+
|
69
|
+
#### **xml_loader**
|
70
|
+
|
71
|
+
Use to create a simple XML loader class by running:
|
72
|
+
|
73
|
+
script/generate xml_loader your.class.path.ClassName
|
74
|
+
|
75
|
+
Example: if you run
|
76
|
+
|
77
|
+
script/generate xml_loader com.bomberstudios.xml.Loader
|
78
|
+
|
79
|
+
you'll get a com/bomberstudios/xml/Loader.as file containing:
|
80
|
+
|
81
|
+
class com.bomberstudios.xml.Loader {
|
82
|
+
var _path:String;
|
83
|
+
var raw_data:XML;
|
84
|
+
function Loader(path:String,callback:Function){
|
85
|
+
_path = path;
|
86
|
+
raw_data = new XML();
|
87
|
+
raw_data.ignoreWhite = true;
|
88
|
+
raw_data.onLoad = callback;
|
89
|
+
}
|
90
|
+
function give_me(node_name){
|
91
|
+
if (raw_data.firstChild.nodeName == node_name) {
|
92
|
+
return raw_data.firstChild;
|
93
|
+
}
|
94
|
+
for(var i=raw_data.firstChild.childNodes.length; i>=0; i--){
|
95
|
+
if(raw_data.firstChild.childNodes[i].nodeName == node_name){
|
96
|
+
return raw_data.firstChild.childNodes[i];
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
public function load(){
|
101
|
+
raw_data.load(_path);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
|
106
|
+
#### **delegate**
|
107
|
+
|
108
|
+
To generate a MTASC-compatible Delegate class, run
|
109
|
+
|
110
|
+
script/generate delegate your.class.path.Delegate
|
111
|
+
|
112
|
+
This will produce a your/class/path/Delegate.as file containing:
|
113
|
+
|
114
|
+
/**
|
115
|
+
*
|
116
|
+
* Delegate Class, MTASC compatible
|
117
|
+
*
|
118
|
+
**/
|
119
|
+
class your.class.path.Delegate {
|
120
|
+
public static function create(scope:Object,method:Function):Function{
|
121
|
+
var params:Array = arguments.splice(2,arguments.length-2);
|
122
|
+
var proxyFunc:Function = function():Void{
|
123
|
+
method.apply(scope,arguments.concat(params));
|
124
|
+
}
|
125
|
+
return proxyFunc;
|
126
|
+
}
|
127
|
+
public static function createR(scope:Object,method:Function):Function{
|
128
|
+
var params:Array = arguments.splice(2,arguments.length-2);
|
129
|
+
var proxyFunc:Function = function():Void{
|
130
|
+
method.apply(scope,params.concat(arguments));
|
131
|
+
}
|
132
|
+
return proxyFunc;
|
133
|
+
}
|
134
|
+
}
|
data/Rakefile
CHANGED
@@ -28,7 +28,7 @@ spec = Gem::Specification.new do |s|
|
|
28
28
|
s.required_ruby_version = '>= 1.8.5'
|
29
29
|
|
30
30
|
s.has_rdoc = false
|
31
|
-
s.files = FileList.new("README","Rakefile","bin/**/*","lib/**/*").to_a
|
31
|
+
s.files = FileList.new("README.mdown","Rakefile","bin/**/*","lib/**/*").to_a
|
32
32
|
s.executables = [ 'fluby' ]
|
33
33
|
s.require_path = 'lib'
|
34
34
|
s.bindir = 'bin'
|
@@ -56,4 +56,16 @@ Rake::TestTask.new(:test) do |test|
|
|
56
56
|
test.test_files = Dir['test/test_*.rb']
|
57
57
|
end
|
58
58
|
|
59
|
-
task :
|
59
|
+
task :github do
|
60
|
+
require 'rubygems/specification'
|
61
|
+
data = File.read('fluby.gemspec')
|
62
|
+
github_spec = nil
|
63
|
+
Thread.new { github_spec = eval("$SAFE = 3\n#{data}") }.join
|
64
|
+
puts github_spec
|
65
|
+
end
|
66
|
+
|
67
|
+
task :test do
|
68
|
+
%x(ruby test/test_fluby.rb)
|
69
|
+
end
|
70
|
+
|
71
|
+
task :default => [ :test ]
|
data/lib/fluby.rb
CHANGED
@@ -1,21 +1,40 @@
|
|
1
|
+
require "erb"
|
2
|
+
require "fileutils"
|
3
|
+
|
1
4
|
module Fluby
|
2
5
|
NAME = 'fluby'
|
3
|
-
VERSION = '0.
|
6
|
+
VERSION = '0.6.1'
|
7
|
+
|
8
|
+
COLORS = {
|
9
|
+
:black => "\033[0;30m",
|
10
|
+
:red => "\033[0;31m",
|
11
|
+
:green => "\033[0;32m",
|
12
|
+
:yellow => "\033[0;33m",
|
13
|
+
:blue => "\033[0;34m",
|
14
|
+
:purple => "\033[0;35m",
|
15
|
+
:cyan => "\033[0;36m",
|
16
|
+
:white => "\033[0;37m",
|
17
|
+
:whitebold => "\033[1;37m"
|
18
|
+
}
|
19
|
+
PATH = File.expand_path(__FILE__)
|
4
20
|
|
5
21
|
def self.create_project(name)
|
6
22
|
require "fileutils"
|
7
23
|
require "erb"
|
8
24
|
|
25
|
+
# TODO: Support project creation in subfolders (i.e: fluby test/project)
|
9
26
|
@project_name = name
|
10
27
|
@project_folder = FileUtils.pwd + "/" + @project_name
|
11
28
|
|
29
|
+
puts "\n#{COLORS[:green]}Creating project #{@project_name}"
|
30
|
+
|
12
31
|
# Make folders
|
13
32
|
if File.exist? @project_folder
|
14
|
-
puts "Folder #{@project_name} already exists,"
|
15
|
-
puts "please choose a different name for your project"
|
33
|
+
puts "#{COLORS[:red]}Folder #{@project_name} already exists,"
|
34
|
+
puts "#{COLORS[:red]}please choose a different name for your project"
|
16
35
|
exit
|
17
36
|
end
|
18
|
-
FileUtils.mkdir [@project_folder,"#{@project_folder}/deploy","#{@project_folder}/assets"]
|
37
|
+
FileUtils.mkdir [@project_folder,"#{@project_folder}/deploy","#{@project_folder}/assets","#{@project_folder}/script"]
|
19
38
|
|
20
39
|
# Make files
|
21
40
|
["Rakefile","README"].each do |file|
|
@@ -30,6 +49,13 @@ module Fluby
|
|
30
49
|
# Main Class
|
31
50
|
render_template "ASClass.as", "#{@project_name}.as"
|
32
51
|
|
52
|
+
# script/generate
|
53
|
+
render_template "generate", "script/generate"
|
54
|
+
%x(chmod 755 "#{@project_folder}/script/generate")
|
55
|
+
|
56
|
+
if in_textmate?
|
57
|
+
puts "Oh, my, what a nice editor you're using"
|
58
|
+
end
|
33
59
|
end
|
34
60
|
|
35
61
|
def self.copy_template source, destination=nil
|
@@ -37,6 +63,7 @@ module Fluby
|
|
37
63
|
destination = source
|
38
64
|
end
|
39
65
|
FileUtils.cp "#{File.dirname(__FILE__)}/templates/#{source}", "#{@project_folder}/#{destination}"
|
66
|
+
log "create", "#{@project_name}/#{destination}"
|
40
67
|
end
|
41
68
|
|
42
69
|
def self.render_template source, destination=nil
|
@@ -46,5 +73,62 @@ module Fluby
|
|
46
73
|
open("#{@project_folder}/#{destination}","w") do |f|
|
47
74
|
f << ERB.new(IO.read("#{File.dirname(__FILE__)}/templates/#{source}")).result(binding)
|
48
75
|
end
|
76
|
+
log "create", "#{@project_name}/#{destination}"
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.log type, string
|
80
|
+
case type
|
81
|
+
when "alert"
|
82
|
+
puts "\t#{COLORS[:red]}Alert:\t#{string}#{COLORS[:white]}"
|
83
|
+
when "create"
|
84
|
+
puts "\t#{COLORS[:white]}Created:\t#{COLORS[:cyan]}#{string}#{COLORS[:white]}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.in_textmate?
|
89
|
+
begin
|
90
|
+
if TextMate
|
91
|
+
return true
|
92
|
+
end
|
93
|
+
rescue
|
94
|
+
return false
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.is_mac?
|
99
|
+
return RUBY_PLATFORM =~ /darwin/
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.has_growl?
|
103
|
+
return is_mac? && !`which "growlnotify"`.empty?
|
104
|
+
end
|
105
|
+
|
106
|
+
# these functions are used by script/generate
|
107
|
+
def self.generate(type, name, options={})
|
108
|
+
target_path = File.dirname(name.split(".").join("/").to_s)
|
109
|
+
target_file = name.split(".").join("/") + ".as".to_s
|
110
|
+
if File.exist?(target_file)
|
111
|
+
log "alert", "File #{target_file} already exists!"
|
112
|
+
return
|
113
|
+
end
|
114
|
+
FileUtils.mkdir_p target_path unless File.exist? target_path
|
115
|
+
@classpath = target_path.split("/").join(".")
|
116
|
+
@classname = name.split(".").last
|
117
|
+
options = options.map { |i| i = i.split(":") } unless options == {}
|
118
|
+
@opts = options
|
119
|
+
File.open(target_file,"w") do |file|
|
120
|
+
file << ERB.new(File.read("#{template_path}/generators/#{type}")).result(binding)
|
121
|
+
end
|
122
|
+
log "create", "#{target_path}/#{@classname}.as"
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.path
|
126
|
+
File.dirname(PATH)
|
127
|
+
end
|
128
|
+
def self.template_path
|
129
|
+
path + "/templates"
|
130
|
+
end
|
131
|
+
def self.available_templates
|
132
|
+
return Dir["#{template_path}/generators/**"].map { |i| i = File.basename(i) }
|
49
133
|
end
|
50
134
|
end
|
data/lib/templates/README
CHANGED
data/lib/templates/Rakefile
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require "erb"
|
2
|
+
require 'rake/packagetask'
|
3
|
+
|
1
4
|
WIDTH = 725
|
2
5
|
HEIGHT = 480
|
3
6
|
FPS = 31
|
@@ -5,8 +8,6 @@ PLAYER = 8
|
|
5
8
|
BGCOLOR = "#ffffff"
|
6
9
|
APP = "<%= @project_name %>"
|
7
10
|
|
8
|
-
require "erb"
|
9
|
-
|
10
11
|
def render_template(file)
|
11
12
|
filename = File.basename(file).split(".")[0]
|
12
13
|
case File.basename(file).split(".")[1]
|
@@ -36,18 +37,24 @@ task :compile do
|
|
36
37
|
end
|
37
38
|
end
|
38
39
|
puts %x(swfmill simple #{APP}.xml #{APP}.swf)
|
39
|
-
rm "#{APP}.xml"
|
40
|
+
rm "#{APP}.xml", {:verbose => false}
|
40
41
|
puts %x(mtasc -swf #{APP}.swf -main -mx -version #{PLAYER} #{trace} #{APP}.as)
|
41
42
|
@end = Time.now
|
42
43
|
|
43
44
|
["*.html","*.swf"].each do |list|
|
44
45
|
Dir[list].each do |file|
|
45
|
-
mv file, "deploy/#{file}"
|
46
|
+
mv file, "deploy/#{file}", {:verbose => false}
|
46
47
|
end
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
50
|
-
|
51
|
+
Rake::PackageTask.new(APP, :noversion) do |p|
|
52
|
+
p.need_zip = true
|
53
|
+
p.name = Time.now.strftime("%Y%m%d") + "-" + APP
|
54
|
+
p.package_files.include("README",Dir["deploy/*"])
|
55
|
+
end
|
56
|
+
|
57
|
+
<% if Fluby.has_growl? %>
|
51
58
|
task :notify do
|
52
59
|
msg = "Finished compiling in #{@end - @start}s."
|
53
60
|
if @nodebug
|
@@ -61,12 +68,14 @@ task :nodebug do
|
|
61
68
|
@nodebug = true
|
62
69
|
end
|
63
70
|
|
71
|
+
<% if Fluby.is_mac? %>
|
64
72
|
desc "Test the SWF file in your default browser"
|
65
73
|
task :test => [:compile] do
|
66
74
|
%x(open deploy/index.html)
|
67
75
|
end
|
76
|
+
<% end %>
|
68
77
|
|
69
|
-
<% if
|
78
|
+
<% if Fluby.has_growl? %>
|
70
79
|
desc "Build a release version of <%= @project_name %> (with trace() disabled)"
|
71
80
|
task :release => [:nodebug,:compile,:notify]
|
72
81
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "rubygems"
|
3
|
+
require "fluby"
|
4
|
+
|
5
|
+
commandline = ARGV
|
6
|
+
if commandline.size < 2
|
7
|
+
puts "Usage: script/generate type classpath [options]"
|
8
|
+
puts "where type is one of"
|
9
|
+
Fluby.available_templates.each do |t|
|
10
|
+
puts "\t#{t}"
|
11
|
+
end
|
12
|
+
else
|
13
|
+
type = commandline.shift
|
14
|
+
name = commandline.shift
|
15
|
+
options = commandline
|
16
|
+
Fluby.generate(type,name,options)
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
/**
|
2
|
+
*
|
3
|
+
* Delegate Class, MTASC compatible
|
4
|
+
*
|
5
|
+
**/
|
6
|
+
|
7
|
+
class <%= @classpath %>.<%= @classname %> {
|
8
|
+
public static function create(scope:Object,method:Function):Function{
|
9
|
+
var params:Array = arguments.splice(2,arguments.length-2);
|
10
|
+
var proxyFunc:Function = function():Void{
|
11
|
+
method.apply(scope,arguments.concat(params));
|
12
|
+
}
|
13
|
+
return proxyFunc;
|
14
|
+
}
|
15
|
+
public static function createR(scope:Object,method:Function):Function{
|
16
|
+
var params:Array = arguments.splice(2,arguments.length-2);
|
17
|
+
var proxyFunc:Function = function():Void{
|
18
|
+
method.apply(scope,params.concat(arguments));
|
19
|
+
}
|
20
|
+
return proxyFunc;
|
21
|
+
}
|
22
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class <%= @classpath %>.<%= @classname %> {
|
2
|
+
var _path:String;
|
3
|
+
var raw_data:XML;
|
4
|
+
|
5
|
+
function <%= @classname %>(path:String,callback:Function){
|
6
|
+
_path = path;
|
7
|
+
raw_data = new XML();
|
8
|
+
raw_data.ignoreWhite = true;
|
9
|
+
raw_data.onLoad = callback;
|
10
|
+
}
|
11
|
+
function give_me(node_name){
|
12
|
+
if (raw_data.firstChild.nodeName == node_name) {
|
13
|
+
return raw_data.firstChild;
|
14
|
+
}
|
15
|
+
for(var i=raw_data.firstChild.childNodes.length; i>=0; i--){
|
16
|
+
if(raw_data.firstChild.childNodes[i].nodeName == node_name){
|
17
|
+
return raw_data.firstChild.childNodes[i];
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
public function load(){
|
22
|
+
raw_data.load(_path);
|
23
|
+
}
|
24
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Ale Mu\xC3\xB1oz"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-04
|
12
|
+
date: 2008-11-04 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -22,12 +22,17 @@ extensions: []
|
|
22
22
|
extra_rdoc_files: []
|
23
23
|
|
24
24
|
files:
|
25
|
-
- README
|
25
|
+
- README.mdown
|
26
26
|
- Rakefile
|
27
27
|
- bin/fluby
|
28
28
|
- lib/fluby.rb
|
29
29
|
- lib/templates
|
30
30
|
- lib/templates/ASClass.as
|
31
|
+
- lib/templates/generate
|
32
|
+
- lib/templates/generators
|
33
|
+
- lib/templates/generators/class
|
34
|
+
- lib/templates/generators/delegate
|
35
|
+
- lib/templates/generators/xml_loader
|
31
36
|
- lib/templates/index.rhtml
|
32
37
|
- lib/templates/project.rxml
|
33
38
|
- lib/templates/Rakefile
|
@@ -55,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
55
60
|
requirements: []
|
56
61
|
|
57
62
|
rubyforge_project: fluby
|
58
|
-
rubygems_version: 1.0
|
63
|
+
rubygems_version: 1.3.0
|
59
64
|
signing_key:
|
60
65
|
specification_version: 2
|
61
66
|
summary: A simple command to create an empty project for MTASC + SWFMILL + Rake
|
data/README
DELETED