captproton-restfulx 1.2.3
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/README.rdoc +50 -0
- data/Rakefile +79 -0
- data/VERSION.yml +4 -0
- data/app_generators/rx_app/USAGE +22 -0
- data/app_generators/rx_app/rx_app_generator.rb +110 -0
- data/app_generators/rx_app/templates/actionscript.properties +16 -0
- data/app_generators/rx_app/templates/actionscriptair.properties +16 -0
- data/app_generators/rx_app/templates/app.yaml.erb +12 -0
- data/app_generators/rx_app/templates/default_tasks.rake +38 -0
- data/app_generators/rx_app/templates/empty.txt +0 -0
- data/app_generators/rx_app/templates/expressInstall.swf +0 -0
- data/app_generators/rx_app/templates/flex.properties +2 -0
- data/app_generators/rx_app/templates/generate.rb +17 -0
- data/app_generators/rx_app/templates/html-template/AC_OETags.js +276 -0
- data/app_generators/rx_app/templates/html-template/history/history.css +6 -0
- data/app_generators/rx_app/templates/html-template/history/history.js +645 -0
- data/app_generators/rx_app/templates/html-template/history/historyFrame.html +29 -0
- data/app_generators/rx_app/templates/html-template/index.template.html +121 -0
- data/app_generators/rx_app/templates/html-template/playerProductInstall.swf +0 -0
- data/app_generators/rx_app/templates/index.html.erb +18 -0
- data/app_generators/rx_app/templates/index.yaml +11 -0
- data/app_generators/rx_app/templates/mainair-app.xml +134 -0
- data/app_generators/rx_app/templates/mainapp-config.xml +22 -0
- data/app_generators/rx_app/templates/mainapp.mxml +152 -0
- data/app_generators/rx_app/templates/project-textmate.erb +72 -0
- data/app_generators/rx_app/templates/project.properties +18 -0
- data/app_generators/rx_app/templates/projectair.properties +24 -0
- data/app_generators/rx_app/templates/restfulx.yml +46 -0
- data/app_generators/rx_app/templates/swfobject.js +5 -0
- data/bin/rx-gen +31 -0
- data/lib/restfulx.rb +90 -0
- data/lib/restfulx/active_foo.rb +181 -0
- data/lib/restfulx/active_record_tasks.rb +90 -0
- data/lib/restfulx/active_record_uuid_helper.rb +17 -0
- data/lib/restfulx/configuration.rb +75 -0
- data/lib/restfulx/datamapper_foo.rb +81 -0
- data/lib/restfulx/rails/recipes.rb +60 -0
- data/lib/restfulx/rails/schema_to_yaml.rb +112 -0
- data/lib/restfulx/rails/schema_to_yaml/extensions/enumerable.rb +8 -0
- data/lib/restfulx/rails/schema_to_yaml/settings/config.rb +17 -0
- data/lib/restfulx/rails/schema_to_yaml/settings/core.rb +73 -0
- data/lib/restfulx/rails/swf_helper.rb +59 -0
- data/lib/restfulx/tasks.rb +110 -0
- data/rails_generators/rx_config/USAGE +19 -0
- data/rails_generators/rx_config/rx_config_generator.rb +151 -0
- data/rails_generators/rx_config/templates/actionscript.properties +16 -0
- data/rails_generators/rx_config/templates/actionscriptair.properties +16 -0
- data/rails_generators/rx_config/templates/expressInstall.swf +0 -0
- data/rails_generators/rx_config/templates/flex.properties +2 -0
- data/rails_generators/rx_config/templates/flex_controller.erb +4 -0
- data/rails_generators/rx_config/templates/html-template/AC_OETags.js +276 -0
- data/rails_generators/rx_config/templates/html-template/history/history.css +6 -0
- data/rails_generators/rx_config/templates/html-template/history/history.js +645 -0
- data/rails_generators/rx_config/templates/html-template/history/historyFrame.html +29 -0
- data/rails_generators/rx_config/templates/html-template/index.template.html +121 -0
- data/rails_generators/rx_config/templates/html-template/playerProductInstall.swf +0 -0
- data/rails_generators/rx_config/templates/index.erb +16 -0
- data/rails_generators/rx_config/templates/mainair-app.xml +134 -0
- data/rails_generators/rx_config/templates/mainapp-config.xml +22 -0
- data/rails_generators/rx_config/templates/mainapp.mxml +129 -0
- data/rails_generators/rx_config/templates/project-textmate.erb +72 -0
- data/rails_generators/rx_config/templates/project.properties +18 -0
- data/rails_generators/rx_config/templates/projectair.properties +24 -0
- data/rails_generators/rx_config/templates/restfulx.erb +75 -0
- data/rails_generators/rx_config/templates/restfulx.yml +65 -0
- data/rails_generators/rx_config/templates/restfulx_tasks.rake +9 -0
- data/rails_generators/rx_config/templates/routes.erb +47 -0
- data/rails_generators/rx_config/templates/session_store_flash.erb +1 -0
- data/rails_generators/rx_config/templates/swfobject.js +5 -0
- data/rails_generators/rx_controller/USAGE +10 -0
- data/rails_generators/rx_controller/rx_controller_generator.rb +31 -0
- data/rails_generators/rx_controller/templates/controller.as.erb +38 -0
- data/rails_generators/rx_main_app/USAGE +8 -0
- data/rails_generators/rx_main_app/rx_main_app_generator.rb +60 -0
- data/rails_generators/rx_main_app/templates/mainapp.mxml +129 -0
- data/rails_generators/rx_scaffold/USAGE +35 -0
- data/rails_generators/rx_scaffold/rx_scaffold_generator.rb +242 -0
- data/rails_generators/rx_scaffold/templates/controllers/default.rb.erb +125 -0
- data/rails_generators/rx_scaffold/templates/controllers/resource_controller.rb.erb +23 -0
- data/rails_generators/rx_scaffold/templates/fixtures.yml.erb +39 -0
- data/rails_generators/rx_scaffold/templates/functional_test.rb +45 -0
- data/rails_generators/rx_scaffold/templates/helper_test.rb +4 -0
- data/rails_generators/rx_scaffold/templates/layouts/default.erb +167 -0
- data/rails_generators/rx_scaffold/templates/migration.rb.erb +46 -0
- data/rails_generators/rx_scaffold/templates/model.as.erb +73 -0
- data/rails_generators/rx_scaffold/templates/model.rb.erb +46 -0
- data/rails_generators/rx_yaml_scaffold/USAGE +51 -0
- data/rails_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +68 -0
- data/rxgen_generators/rx_config/USAGE +5 -0
- data/rxgen_generators/rx_config/rx_config_generator.rb +21 -0
- data/rxgen_generators/rx_controller/USAGE +10 -0
- data/rxgen_generators/rx_controller/rx_controller_generator.rb +41 -0
- data/rxgen_generators/rx_controller/templates/assist.py +65 -0
- data/rxgen_generators/rx_controller/templates/controller.as.erb +38 -0
- data/rxgen_generators/rx_controller/templates/iso8601.py +92 -0
- data/rxgen_generators/rx_controller/templates/restful.py +136 -0
- data/rxgen_generators/rx_main_app/USAGE +8 -0
- data/rxgen_generators/rx_main_app/rx_main_app_generator.rb +65 -0
- data/rxgen_generators/rx_main_app/templates/main.py.erb +29 -0
- data/rxgen_generators/rx_main_app/templates/mainapp.mxml +152 -0
- data/rxgen_generators/rx_scaffold/USAGE +29 -0
- data/rxgen_generators/rx_scaffold/rx_scaffold_generator.rb +194 -0
- data/rxgen_generators/rx_scaffold/templates/controller.py.erb +27 -0
- data/rxgen_generators/rx_scaffold/templates/layouts/default.erb +167 -0
- data/rxgen_generators/rx_scaffold/templates/model.as.erb +73 -0
- data/rxgen_generators/rx_scaffold/templates/model.py.erb +14 -0
- data/rxgen_generators/rx_yaml_scaffold/USAGE +45 -0
- data/rxgen_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +47 -0
- data/spec/restfulx_spec.rb +4 -0
- data/spec/spec_helper.rb +13 -0
- data/tasks/restfulx.rake +2 -0
- data/test/rails/controllers/application_controller.rb +15 -0
- data/test/rails/controllers/locations_controller.rb +93 -0
- data/test/rails/controllers/notes_controller.rb +96 -0
- data/test/rails/controllers/projects_controller.rb +93 -0
- data/test/rails/controllers/tasks_controller.rb +93 -0
- data/test/rails/controllers/users_controller.rb +93 -0
- data/test/rails/database.yml +4 -0
- data/test/rails/fixtures/locations.yml +8 -0
- data/test/rails/fixtures/notes.yml +17 -0
- data/test/rails/fixtures/projects.yml +25 -0
- data/test/rails/fixtures/simple_properties.yml +19 -0
- data/test/rails/fixtures/tasks.yml +46 -0
- data/test/rails/fixtures/users.yml +13 -0
- data/test/rails/helpers/functional_test_helper.rb +21 -0
- data/test/rails/helpers/test_helper.rb +54 -0
- data/test/rails/helpers/unit_test_helper.rb +29 -0
- data/test/rails/model.yml +35 -0
- data/test/rails/models/location.rb +4 -0
- data/test/rails/models/note.rb +3 -0
- data/test/rails/models/project.rb +4 -0
- data/test/rails/models/simple_property.rb +2 -0
- data/test/rails/models/task.rb +18 -0
- data/test/rails/models/user.rb +20 -0
- data/test/rails/schema.rb +77 -0
- data/test/rails/test.swf +1 -0
- data/test/rails/test_active_foo.rb +36 -0
- data/test/rails/test_rails_integration_functional.rb +22 -0
- data/test/rails/test_to_fxml.rb +35 -0
- data/test/rails/test_to_json.rb +23 -0
- data/test/rails/views/notes/empty_params_action.html.erb +1 -0
- data/test/rails/views/notes/index.html.erb +1 -0
- metadata +234 -0
data/README.rdoc
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
= RestfulX Framework: The RESTful way to develop Adobe Flex and AIR applications
|
|
2
|
+
|
|
3
|
+
== Description
|
|
4
|
+
|
|
5
|
+
Here's some of the things you can do with *RestfulX*:
|
|
6
|
+
|
|
7
|
+
* *Create* a complete _Adobe_ _Flex_ or _AIR_ application in less than 5 minutes.
|
|
8
|
+
|
|
9
|
+
Use our lightweight Ruby-based code generation toolkit to create a fully functional
|
|
10
|
+
CRUD application. Simply do:
|
|
11
|
+
|
|
12
|
+
sudo gem install restfulx
|
|
13
|
+
|
|
14
|
+
And then run:
|
|
15
|
+
|
|
16
|
+
rx-gen -h
|
|
17
|
+
|
|
18
|
+
* *Integrate* with _Ruby_ _On_ _Rails_, _Merb_ or _Sinatra_ applications
|
|
19
|
+
that use _ActiveRecord_, _DataMapper_, _CouchRest_, _ActiveCouch_ and so on.
|
|
20
|
+
|
|
21
|
+
* *Communicate* between your Flex/AIR Rich Internet Application and service providers
|
|
22
|
+
using either _XML_ or _JSON_.
|
|
23
|
+
|
|
24
|
+
* *Persist* your data directly in Adobe AIR _SQLite_ database or _CouchDB_
|
|
25
|
+
without any additional infrastructure or intermediate servers.
|
|
26
|
+
|
|
27
|
+
* *Deploy* your RestfulX application on the Google App Engine and use Google
|
|
28
|
+
DataStore for persistence.
|
|
29
|
+
|
|
30
|
+
* *Synchronize* your data between AIR _SQLite_ and other service providers.
|
|
31
|
+
|
|
32
|
+
== Getting Started
|
|
33
|
+
|
|
34
|
+
For details on how to get started with the RestfulX framework refer to:
|
|
35
|
+
|
|
36
|
+
http://restfulx.org
|
|
37
|
+
|
|
38
|
+
== Getting Involved
|
|
39
|
+
|
|
40
|
+
Report bugs or track framework development progress:
|
|
41
|
+
|
|
42
|
+
http://github.com/dima/restfulx_framework/issues
|
|
43
|
+
|
|
44
|
+
Get involved with the community:
|
|
45
|
+
|
|
46
|
+
http://groups.google.com/group/restfulx-framework
|
|
47
|
+
|
|
48
|
+
== License
|
|
49
|
+
|
|
50
|
+
Copyright (c) 2008-2009 Dima Berastau and Contributors, released under MIT License
|
data/Rakefile
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require 'jeweler'
|
|
5
|
+
Jeweler::Tasks.new do |gem|
|
|
6
|
+
gem.name = "restfulx"
|
|
7
|
+
gem.summary = "RestfulX Framework Code Generation Engine / Rails 2.1+ Integration Support"
|
|
8
|
+
gem.email = "dima.berastau@gmail.com"
|
|
9
|
+
gem.homepage = "http://restfulx.org"
|
|
10
|
+
gem.rubyforge_project = "restfulx"
|
|
11
|
+
gem.authors = ["Dima Berastau"]
|
|
12
|
+
gem.files = FileList["[A-Z]*", "{bin,app_generators,rails_generators,rxgen_generators,lib,test,spec,tasks}/**/*"]
|
|
13
|
+
gem.files.exclude 'test/**/*.log', 'test/**/*.sqlite3'
|
|
14
|
+
gem.test_files.exclude 'test/**/*.log', 'test/**/*.sqlite3'
|
|
15
|
+
gem.add_dependency('rubigen', '>= 1.5.0')
|
|
16
|
+
gem.add_dependency('activesupport', '>=2.0.0')
|
|
17
|
+
end
|
|
18
|
+
rescue LoadError
|
|
19
|
+
puts "Jeweler not available. Install it with: sudo gem install jeweler"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
require 'rake/rdoctask'
|
|
23
|
+
Rake::RDocTask.new do |rdoc|
|
|
24
|
+
config = YAML.load(File.read('VERSION.yml'))
|
|
25
|
+
rdoc.rdoc_dir = 'doc/api'
|
|
26
|
+
rdoc.title = "RestfulX #{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
|
27
|
+
rdoc.options << '--line-numbers' << '--inline-source' #<< '-Tjamis'
|
|
28
|
+
rdoc.rdoc_files.include('README*')
|
|
29
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
begin
|
|
33
|
+
require 'rake/contrib/sshpublisher'
|
|
34
|
+
namespace :rubyforge do
|
|
35
|
+
namespace :release do
|
|
36
|
+
desc "Publish RDoc to RubyForge."
|
|
37
|
+
task :docs => [:rdoc] do
|
|
38
|
+
config = YAML.load(
|
|
39
|
+
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
host = "#{config['username']}@rubyforge.org"
|
|
43
|
+
remote_dir = "/var/www/gforge-projects/restfulx/"
|
|
44
|
+
local_dir = 'doc/api'
|
|
45
|
+
|
|
46
|
+
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
rescue LoadError
|
|
51
|
+
puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
require 'rake/testtask'
|
|
55
|
+
Rake::TestTask.new(:test) do |t|
|
|
56
|
+
t.libs << 'lib' << 'test'
|
|
57
|
+
t.pattern = 'test/**/test_*.rb'
|
|
58
|
+
t.verbose = false
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
begin
|
|
62
|
+
require 'rcov/rcovtask'
|
|
63
|
+
Rcov::RcovTask.new do |t|
|
|
64
|
+
t.libs << 'test'
|
|
65
|
+
t.test_files = FileList['test/**/test_*.rb']
|
|
66
|
+
t.verbose = true
|
|
67
|
+
end
|
|
68
|
+
rescue LoadError
|
|
69
|
+
puts "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
begin
|
|
73
|
+
require 'cucumber/rake/task'
|
|
74
|
+
Cucumber::Rake::Task.new(:features)
|
|
75
|
+
rescue LoadError
|
|
76
|
+
puts "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
task :default => :test
|
data/VERSION.yml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Description:
|
|
2
|
+
Generates the primary RestfulX project directory structure and sets
|
|
3
|
+
up Flex Builder and TextMate specific descriptor files
|
|
4
|
+
|
|
5
|
+
You can generate Flex Builder configuration for either *pure* Flex
|
|
6
|
+
project or an AIR project. To generate AIR configuration pass the -a
|
|
7
|
+
(--air) option to the generator.
|
|
8
|
+
|
|
9
|
+
You can also choose to generate a simple Google App Engine back-end
|
|
10
|
+
along with your Flex front-end by passing the --gae option.
|
|
11
|
+
|
|
12
|
+
Examples:
|
|
13
|
+
`rx-gen pomodo` # generates project structure and a
|
|
14
|
+
# default Flex app configuration.
|
|
15
|
+
`rx-gen -a pomodo` # as above but generates an AIR app
|
|
16
|
+
# and configuration
|
|
17
|
+
`rx-gen --gae pomodo` # generate Flex + GAE application
|
|
18
|
+
# configuration
|
|
19
|
+
|
|
20
|
+
Next Steps:
|
|
21
|
+
In your new RestfulX project folder run `ruby script/generate` for
|
|
22
|
+
a list of available generators.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
class RxAppGenerator < RubiGen::Base
|
|
2
|
+
include RestfulX::Configuration
|
|
3
|
+
|
|
4
|
+
attr_reader :project_name,
|
|
5
|
+
:flex_project_name,
|
|
6
|
+
:base_package,
|
|
7
|
+
:base_folder,
|
|
8
|
+
:command_controller_name,
|
|
9
|
+
:component_names,
|
|
10
|
+
:application_tag,
|
|
11
|
+
:use_air,
|
|
12
|
+
:use_gae,
|
|
13
|
+
:flex_root,
|
|
14
|
+
:base_flex_package,
|
|
15
|
+
:distributed
|
|
16
|
+
|
|
17
|
+
def initialize(runtime_args, runtime_options = {})
|
|
18
|
+
super
|
|
19
|
+
usage if args.empty?
|
|
20
|
+
@destination_root = File.expand_path(args.shift)
|
|
21
|
+
|
|
22
|
+
@project_name, @flex_project_name, @command_controller_name,
|
|
23
|
+
@base_package, @base_folder, @flex_root, @distributed = extract_names(base_name)
|
|
24
|
+
|
|
25
|
+
@base_package = options[:base_flex_package] if options[:base_flex_package]
|
|
26
|
+
@base_folder = options[:base_flex_package].gsub('.', '/').gsub(/\W/, '') if options[:base_flex_package]
|
|
27
|
+
@flex_root = options[:flex_root] if options[:flex_root]
|
|
28
|
+
@use_gae = options[:gae]
|
|
29
|
+
@use_air = options[:air_config]
|
|
30
|
+
@distributed = options[:distributed] unless @distributed
|
|
31
|
+
if @use_air
|
|
32
|
+
@application_tag = 'WindowedApplication'
|
|
33
|
+
else
|
|
34
|
+
@application_tag = 'Application'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
@component_names = []
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def manifest
|
|
41
|
+
record do |m|
|
|
42
|
+
m.directory ''
|
|
43
|
+
|
|
44
|
+
%w(script lib db config bin-debug).each { |dir| m.directory dir }
|
|
45
|
+
|
|
46
|
+
if options[:gae]
|
|
47
|
+
m.file 'index.yaml', 'index.yaml' unless File.exist?('index.yaml')
|
|
48
|
+
m.template 'app.yaml.erb', 'app.yaml' unless File.exist?('app.yaml')
|
|
49
|
+
m.directory 'app/controllers'
|
|
50
|
+
m.file 'empty.txt', 'app/__init__.py'
|
|
51
|
+
m.file 'empty.txt', 'app/controllers/__init__.py'
|
|
52
|
+
m.directory 'app/models'
|
|
53
|
+
m.file 'empty.txt', 'app/models/__init__.py'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
m.template 'restfulx.yml', 'config/restfulx.yml'
|
|
57
|
+
m.file 'default_tasks.rake', 'Rakefile' unless File.exist?('Rakefile')
|
|
58
|
+
m.file 'flex.properties', '.flexProperties'
|
|
59
|
+
m.file 'generate.rb', 'script/generate', { :chmod => 0755 }
|
|
60
|
+
if @use_air
|
|
61
|
+
m.template 'actionscriptair.properties', '.actionScriptProperties'
|
|
62
|
+
m.template 'projectair.properties', '.project'
|
|
63
|
+
else
|
|
64
|
+
m.template 'actionscript.properties', '.actionScriptProperties'
|
|
65
|
+
m.template 'project.properties', '.project'
|
|
66
|
+
|
|
67
|
+
m.directory 'html-template/history'
|
|
68
|
+
%w(index.template.html AC_OETags.js playerProductInstall.swf).each do |file|
|
|
69
|
+
m.file "html-template/#{file}", "html-template/#{file}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
%w(history.css history.js historyFrame.html).each do |file|
|
|
73
|
+
m.file "html-template/history/#{file}", "html-template/history/#{file}"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
m.directory 'public/javascripts'
|
|
77
|
+
m.file 'swfobject.js', 'public/javascripts/swfobject.js'
|
|
78
|
+
m.file 'expressInstall.swf', 'public/expressInstall.swf'
|
|
79
|
+
m.template 'index.html.erb', 'public/index.html'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
%w(views controllers commands models events helpers).each do |dir|
|
|
83
|
+
m.directory "#{flex_root}/#{base_folder}/#{dir}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
m.directory "#{flex_root}/#{base_folder}/views/generated"
|
|
87
|
+
|
|
88
|
+
m.template 'project-textmate.erb', "#{project_name}.tmproj"
|
|
89
|
+
m.template 'mainapp.mxml', File.join("#{flex_root}", "#{flex_project_name}.mxml")
|
|
90
|
+
m.template 'mainapp-config.xml', File.join("#{flex_root}", "#{flex_project_name}-config.xml")
|
|
91
|
+
m.template 'mainair-app.xml', File.join("#{flex_root}", "#{flex_project_name}-app.xml") if @use_air
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
protected
|
|
96
|
+
def add_options!(opt)
|
|
97
|
+
opt.separator ''
|
|
98
|
+
opt.separator 'Options:'
|
|
99
|
+
opt.on("-a", "--air", "Configure AIR project instead of Flex. Flex is default.",
|
|
100
|
+
"Default: false") { |v| options[:air_config] = v }
|
|
101
|
+
opt.on("--gae", "Generate Google App Engine Python classes in addition to RestfulX Flex resources.",
|
|
102
|
+
"Default: false") { |v| options[:gae] = v }
|
|
103
|
+
opt.on("--flex-root [FOLDER]", "Root folder for generated flex code.",
|
|
104
|
+
"Default: app/flex") { |v| options[:flex_root] = v }
|
|
105
|
+
opt.on("--base-flex-package [PACKAGE]", "Base package for your application.",
|
|
106
|
+
"Default: #{flex_project_name}") { |v| options[:base_flex_package] = v }
|
|
107
|
+
opt.on("--distributed", "Creates migrations, controllers and models that use UUIDs and are distribution ready",
|
|
108
|
+
"Default: false") { |v| options[:distributed] = v }
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<actionScriptProperties mainApplicationPath="<%= flex_project_name %>.mxml" version="3">
|
|
3
|
+
<compiler additionalCompilerArguments="-locale en_US -keep-as3-metadata+=Resource,HasOne,HasMany,BelongsTo,DateTime,Lazy,Ignored,Nested" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="public/bin" rootURL="http://localhost:3000/bin" sourceFolderPath="<%= flex_root %>" strict="true" useApolloConfig="false" verifyDigests="true" warn="true">
|
|
4
|
+
<compilerSourcePath/>
|
|
5
|
+
<libraryPath defaultLinkType="1">
|
|
6
|
+
<libraryPathEntry kind="4" path=""/>
|
|
7
|
+
<libraryPathEntry kind="1" linkType="1" path="lib"/>
|
|
8
|
+
</libraryPath>
|
|
9
|
+
<sourceAttachmentPath/>
|
|
10
|
+
</compiler>
|
|
11
|
+
<applications>
|
|
12
|
+
<application path="<%= flex_project_name %>.mxml"/>
|
|
13
|
+
</applications>
|
|
14
|
+
<modules/>
|
|
15
|
+
<buildCSSFiles/>
|
|
16
|
+
</actionScriptProperties>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<actionScriptProperties mainApplicationPath="<%= flex_project_name %>.mxml" version="3">
|
|
3
|
+
<compiler additionalCompilerArguments="-locale en_US -keep-as3-metadata+=Resource,HasOne,HasMany,BelongsTo,DateTime,Lazy,Ignored,Nested" copyDependentFiles="true" enableModuleDebug="true" generateAccessible="false" htmlExpressInstall="true" htmlGenerate="false" htmlHistoryManagement="false" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="bin-debug" sourceFolderPath="<%= flex_root %>" strict="true" useApolloConfig="true" verifyDigests="true" warn="true">
|
|
4
|
+
<compilerSourcePath/>
|
|
5
|
+
<libraryPath defaultLinkType="1">
|
|
6
|
+
<libraryPathEntry kind="4" path=""/>
|
|
7
|
+
<libraryPathEntry kind="1" linkType="1" path="lib"/>
|
|
8
|
+
</libraryPath>
|
|
9
|
+
<sourceAttachmentPath/>
|
|
10
|
+
</compiler>
|
|
11
|
+
<applications>
|
|
12
|
+
<application path="<%= flex_project_name %>.mxml"/>
|
|
13
|
+
</applications>
|
|
14
|
+
<modules/>
|
|
15
|
+
<buildCSSFiles/>
|
|
16
|
+
</actionScriptProperties>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# this will use the latest version of restfulx gem
|
|
2
|
+
require 'restfulx/tasks'
|
|
3
|
+
|
|
4
|
+
TEST_APP_NAME = 'TestApp.mxml'
|
|
5
|
+
|
|
6
|
+
namespace :air do
|
|
7
|
+
desc "Build and run the AIR application"
|
|
8
|
+
task :run => ["rx:air:build", "rx:air:run"]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
namespace :flex do
|
|
12
|
+
desc "Test flex application"
|
|
13
|
+
task :test => ["rx:test:build", "rx:test:run"]
|
|
14
|
+
|
|
15
|
+
desc "Build flex application"
|
|
16
|
+
task :build do
|
|
17
|
+
libs = [] # you can add libraries that are not in lib folder here
|
|
18
|
+
compile_application(:destination => 'bin-debug', :opts => "-library-path+=#{libs.join(',')}")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
namespace :rx do
|
|
23
|
+
namespace :test do
|
|
24
|
+
desc "Build flex test swf file"
|
|
25
|
+
task :build do
|
|
26
|
+
libs = Dir.glob(File.join(APP_ROOT, 'lib', '*.swc'))
|
|
27
|
+
#libs << 'foobar' # you can add libraries that not in lib folder here
|
|
28
|
+
|
|
29
|
+
compile_application(:application => TEST_APP_NAME, :destination => 'bin-debug',
|
|
30
|
+
:opts => "+configname=air -library-path+=#{libs.join(',')}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
desc "Run flex test application"
|
|
34
|
+
task :run do
|
|
35
|
+
run_air_application(:application => TEST_APP_NAME)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
File without changes
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
APP_ROOT = File.join(File.dirname(__FILE__), '..')
|
|
3
|
+
|
|
4
|
+
begin
|
|
5
|
+
require 'rubigen'
|
|
6
|
+
rescue LoadError
|
|
7
|
+
require 'rubygems'
|
|
8
|
+
require 'rubigen'
|
|
9
|
+
end
|
|
10
|
+
require 'rubigen/scripts/generate'
|
|
11
|
+
require 'activesupport'
|
|
12
|
+
require 'restfulx'
|
|
13
|
+
|
|
14
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
|
15
|
+
|
|
16
|
+
RubiGen::Base.use_component_sources! [:rxgen]
|
|
17
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
// Flash Player Version Detection - Rev 1.6
|
|
2
|
+
// Detect Client Browser type
|
|
3
|
+
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
|
|
4
|
+
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
|
|
5
|
+
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
|
|
6
|
+
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
|
|
7
|
+
|
|
8
|
+
function ControlVersion()
|
|
9
|
+
{
|
|
10
|
+
var version;
|
|
11
|
+
var axo;
|
|
12
|
+
var e;
|
|
13
|
+
|
|
14
|
+
// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
// version will be set for 7.X or greater players
|
|
18
|
+
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
|
|
19
|
+
version = axo.GetVariable("$version");
|
|
20
|
+
} catch (e) {
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!version)
|
|
24
|
+
{
|
|
25
|
+
try {
|
|
26
|
+
// version will be set for 6.X players only
|
|
27
|
+
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
|
|
28
|
+
|
|
29
|
+
// installed player is some revision of 6.0
|
|
30
|
+
// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
|
|
31
|
+
// so we have to be careful.
|
|
32
|
+
|
|
33
|
+
// default to the first public version
|
|
34
|
+
version = "WIN 6,0,21,0";
|
|
35
|
+
|
|
36
|
+
// throws if AllowScripAccess does not exist (introduced in 6.0r47)
|
|
37
|
+
axo.AllowScriptAccess = "always";
|
|
38
|
+
|
|
39
|
+
// safe to call for 6.0r47 or greater
|
|
40
|
+
version = axo.GetVariable("$version");
|
|
41
|
+
|
|
42
|
+
} catch (e) {
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (!version)
|
|
47
|
+
{
|
|
48
|
+
try {
|
|
49
|
+
// version will be set for 4.X or 5.X player
|
|
50
|
+
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
|
|
51
|
+
version = axo.GetVariable("$version");
|
|
52
|
+
} catch (e) {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!version)
|
|
57
|
+
{
|
|
58
|
+
try {
|
|
59
|
+
// version will be set for 3.X player
|
|
60
|
+
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
|
|
61
|
+
version = "WIN 3,0,18,0";
|
|
62
|
+
} catch (e) {
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!version)
|
|
67
|
+
{
|
|
68
|
+
try {
|
|
69
|
+
// version will be set for 2.X player
|
|
70
|
+
axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
|
|
71
|
+
version = "WIN 2,0,0,11";
|
|
72
|
+
} catch (e) {
|
|
73
|
+
version = -1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return version;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// JavaScript helper required to detect Flash Player PlugIn version information
|
|
81
|
+
function GetSwfVer(){
|
|
82
|
+
// NS/Opera version >= 3 check for Flash plugin in plugin array
|
|
83
|
+
var flashVer = -1;
|
|
84
|
+
|
|
85
|
+
if (navigator.plugins != null && navigator.plugins.length > 0) {
|
|
86
|
+
if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
|
|
87
|
+
var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
|
|
88
|
+
var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
|
|
89
|
+
var descArray = flashDescription.split(" ");
|
|
90
|
+
var tempArrayMajor = descArray[2].split(".");
|
|
91
|
+
var versionMajor = tempArrayMajor[0];
|
|
92
|
+
var versionMinor = tempArrayMajor[1];
|
|
93
|
+
var versionRevision = descArray[3];
|
|
94
|
+
if (versionRevision == "") {
|
|
95
|
+
versionRevision = descArray[4];
|
|
96
|
+
}
|
|
97
|
+
if (versionRevision[0] == "d") {
|
|
98
|
+
versionRevision = versionRevision.substring(1);
|
|
99
|
+
} else if (versionRevision[0] == "r") {
|
|
100
|
+
versionRevision = versionRevision.substring(1);
|
|
101
|
+
if (versionRevision.indexOf("d") > 0) {
|
|
102
|
+
versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// MSN/WebTV 2.6 supports Flash 4
|
|
109
|
+
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
|
|
110
|
+
// WebTV 2.5 supports Flash 3
|
|
111
|
+
else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
|
|
112
|
+
// older WebTV supports Flash 2
|
|
113
|
+
else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
|
|
114
|
+
else if ( isIE && isWin && !isOpera ) {
|
|
115
|
+
flashVer = ControlVersion();
|
|
116
|
+
}
|
|
117
|
+
return flashVer;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
|
|
121
|
+
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
|
|
122
|
+
{
|
|
123
|
+
versionStr = GetSwfVer();
|
|
124
|
+
if (versionStr == -1 ) {
|
|
125
|
+
return false;
|
|
126
|
+
} else if (versionStr != 0) {
|
|
127
|
+
if(isIE && isWin && !isOpera) {
|
|
128
|
+
// Given "WIN 2,0,0,11"
|
|
129
|
+
tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
|
|
130
|
+
tempString = tempArray[1]; // "2,0,0,11"
|
|
131
|
+
versionArray = tempString.split(","); // ['2', '0', '0', '11']
|
|
132
|
+
} else {
|
|
133
|
+
versionArray = versionStr.split(".");
|
|
134
|
+
}
|
|
135
|
+
var versionMajor = versionArray[0];
|
|
136
|
+
var versionMinor = versionArray[1];
|
|
137
|
+
var versionRevision = versionArray[2];
|
|
138
|
+
|
|
139
|
+
// is the major.revision >= requested major.revision AND the minor version >= requested minor
|
|
140
|
+
if (versionMajor > parseFloat(reqMajorVer)) {
|
|
141
|
+
return true;
|
|
142
|
+
} else if (versionMajor == parseFloat(reqMajorVer)) {
|
|
143
|
+
if (versionMinor > parseFloat(reqMinorVer))
|
|
144
|
+
return true;
|
|
145
|
+
else if (versionMinor == parseFloat(reqMinorVer)) {
|
|
146
|
+
if (versionRevision >= parseFloat(reqRevision))
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function AC_AddExtension(src, ext)
|
|
155
|
+
{
|
|
156
|
+
if (src.indexOf('?') != -1)
|
|
157
|
+
return src.replace(/\?/, ext+'?');
|
|
158
|
+
else
|
|
159
|
+
return src + ext;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function AC_Generateobj(objAttrs, params, embedAttrs)
|
|
163
|
+
{
|
|
164
|
+
var str = '';
|
|
165
|
+
if (isIE && isWin && !isOpera)
|
|
166
|
+
{
|
|
167
|
+
str += '<object ';
|
|
168
|
+
for (var i in objAttrs)
|
|
169
|
+
str += i + '="' + objAttrs[i] + '" ';
|
|
170
|
+
str += '>';
|
|
171
|
+
for (var i in params)
|
|
172
|
+
str += '<param name="' + i + '" value="' + params[i] + '" /> ';
|
|
173
|
+
str += '</object>';
|
|
174
|
+
} else {
|
|
175
|
+
str += '<embed ';
|
|
176
|
+
for (var i in embedAttrs)
|
|
177
|
+
str += i + '="' + embedAttrs[i] + '" ';
|
|
178
|
+
str += '> </embed>';
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
document.write(str);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function AC_FL_RunContent(){
|
|
185
|
+
var ret =
|
|
186
|
+
AC_GetArgs
|
|
187
|
+
( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
|
|
188
|
+
, "application/x-shockwave-flash"
|
|
189
|
+
);
|
|
190
|
+
AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
|
|
194
|
+
var ret = new Object();
|
|
195
|
+
ret.embedAttrs = new Object();
|
|
196
|
+
ret.params = new Object();
|
|
197
|
+
ret.objAttrs = new Object();
|
|
198
|
+
for (var i=0; i < args.length; i=i+2){
|
|
199
|
+
var currArg = args[i].toLowerCase();
|
|
200
|
+
|
|
201
|
+
switch (currArg){
|
|
202
|
+
case "classid":
|
|
203
|
+
break;
|
|
204
|
+
case "pluginspage":
|
|
205
|
+
ret.embedAttrs[args[i]] = args[i+1];
|
|
206
|
+
break;
|
|
207
|
+
case "src":
|
|
208
|
+
case "movie":
|
|
209
|
+
args[i+1] = AC_AddExtension(args[i+1], ext);
|
|
210
|
+
ret.embedAttrs["src"] = args[i+1];
|
|
211
|
+
ret.params[srcParamName] = args[i+1];
|
|
212
|
+
break;
|
|
213
|
+
case "onafterupdate":
|
|
214
|
+
case "onbeforeupdate":
|
|
215
|
+
case "onblur":
|
|
216
|
+
case "oncellchange":
|
|
217
|
+
case "onclick":
|
|
218
|
+
case "ondblClick":
|
|
219
|
+
case "ondrag":
|
|
220
|
+
case "ondragend":
|
|
221
|
+
case "ondragenter":
|
|
222
|
+
case "ondragleave":
|
|
223
|
+
case "ondragover":
|
|
224
|
+
case "ondrop":
|
|
225
|
+
case "onfinish":
|
|
226
|
+
case "onfocus":
|
|
227
|
+
case "onhelp":
|
|
228
|
+
case "onmousedown":
|
|
229
|
+
case "onmouseup":
|
|
230
|
+
case "onmouseover":
|
|
231
|
+
case "onmousemove":
|
|
232
|
+
case "onmouseout":
|
|
233
|
+
case "onkeypress":
|
|
234
|
+
case "onkeydown":
|
|
235
|
+
case "onkeyup":
|
|
236
|
+
case "onload":
|
|
237
|
+
case "onlosecapture":
|
|
238
|
+
case "onpropertychange":
|
|
239
|
+
case "onreadystatechange":
|
|
240
|
+
case "onrowsdelete":
|
|
241
|
+
case "onrowenter":
|
|
242
|
+
case "onrowexit":
|
|
243
|
+
case "onrowsinserted":
|
|
244
|
+
case "onstart":
|
|
245
|
+
case "onscroll":
|
|
246
|
+
case "onbeforeeditfocus":
|
|
247
|
+
case "onactivate":
|
|
248
|
+
case "onbeforedeactivate":
|
|
249
|
+
case "ondeactivate":
|
|
250
|
+
case "type":
|
|
251
|
+
case "codebase":
|
|
252
|
+
ret.objAttrs[args[i]] = args[i+1];
|
|
253
|
+
break;
|
|
254
|
+
case "id":
|
|
255
|
+
case "width":
|
|
256
|
+
case "height":
|
|
257
|
+
case "align":
|
|
258
|
+
case "vspace":
|
|
259
|
+
case "hspace":
|
|
260
|
+
case "class":
|
|
261
|
+
case "title":
|
|
262
|
+
case "accesskey":
|
|
263
|
+
case "name":
|
|
264
|
+
case "tabindex":
|
|
265
|
+
ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
|
|
266
|
+
break;
|
|
267
|
+
default:
|
|
268
|
+
ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
ret.objAttrs["classid"] = classid;
|
|
272
|
+
if (mimeType) ret.embedAttrs["type"] = mimeType;
|
|
273
|
+
return ret;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
|