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.
Files changed (143) hide show
  1. data/README.rdoc +50 -0
  2. data/Rakefile +79 -0
  3. data/VERSION.yml +4 -0
  4. data/app_generators/rx_app/USAGE +22 -0
  5. data/app_generators/rx_app/rx_app_generator.rb +110 -0
  6. data/app_generators/rx_app/templates/actionscript.properties +16 -0
  7. data/app_generators/rx_app/templates/actionscriptair.properties +16 -0
  8. data/app_generators/rx_app/templates/app.yaml.erb +12 -0
  9. data/app_generators/rx_app/templates/default_tasks.rake +38 -0
  10. data/app_generators/rx_app/templates/empty.txt +0 -0
  11. data/app_generators/rx_app/templates/expressInstall.swf +0 -0
  12. data/app_generators/rx_app/templates/flex.properties +2 -0
  13. data/app_generators/rx_app/templates/generate.rb +17 -0
  14. data/app_generators/rx_app/templates/html-template/AC_OETags.js +276 -0
  15. data/app_generators/rx_app/templates/html-template/history/history.css +6 -0
  16. data/app_generators/rx_app/templates/html-template/history/history.js +645 -0
  17. data/app_generators/rx_app/templates/html-template/history/historyFrame.html +29 -0
  18. data/app_generators/rx_app/templates/html-template/index.template.html +121 -0
  19. data/app_generators/rx_app/templates/html-template/playerProductInstall.swf +0 -0
  20. data/app_generators/rx_app/templates/index.html.erb +18 -0
  21. data/app_generators/rx_app/templates/index.yaml +11 -0
  22. data/app_generators/rx_app/templates/mainair-app.xml +134 -0
  23. data/app_generators/rx_app/templates/mainapp-config.xml +22 -0
  24. data/app_generators/rx_app/templates/mainapp.mxml +152 -0
  25. data/app_generators/rx_app/templates/project-textmate.erb +72 -0
  26. data/app_generators/rx_app/templates/project.properties +18 -0
  27. data/app_generators/rx_app/templates/projectair.properties +24 -0
  28. data/app_generators/rx_app/templates/restfulx.yml +46 -0
  29. data/app_generators/rx_app/templates/swfobject.js +5 -0
  30. data/bin/rx-gen +31 -0
  31. data/lib/restfulx.rb +90 -0
  32. data/lib/restfulx/active_foo.rb +181 -0
  33. data/lib/restfulx/active_record_tasks.rb +90 -0
  34. data/lib/restfulx/active_record_uuid_helper.rb +17 -0
  35. data/lib/restfulx/configuration.rb +75 -0
  36. data/lib/restfulx/datamapper_foo.rb +81 -0
  37. data/lib/restfulx/rails/recipes.rb +60 -0
  38. data/lib/restfulx/rails/schema_to_yaml.rb +112 -0
  39. data/lib/restfulx/rails/schema_to_yaml/extensions/enumerable.rb +8 -0
  40. data/lib/restfulx/rails/schema_to_yaml/settings/config.rb +17 -0
  41. data/lib/restfulx/rails/schema_to_yaml/settings/core.rb +73 -0
  42. data/lib/restfulx/rails/swf_helper.rb +59 -0
  43. data/lib/restfulx/tasks.rb +110 -0
  44. data/rails_generators/rx_config/USAGE +19 -0
  45. data/rails_generators/rx_config/rx_config_generator.rb +151 -0
  46. data/rails_generators/rx_config/templates/actionscript.properties +16 -0
  47. data/rails_generators/rx_config/templates/actionscriptair.properties +16 -0
  48. data/rails_generators/rx_config/templates/expressInstall.swf +0 -0
  49. data/rails_generators/rx_config/templates/flex.properties +2 -0
  50. data/rails_generators/rx_config/templates/flex_controller.erb +4 -0
  51. data/rails_generators/rx_config/templates/html-template/AC_OETags.js +276 -0
  52. data/rails_generators/rx_config/templates/html-template/history/history.css +6 -0
  53. data/rails_generators/rx_config/templates/html-template/history/history.js +645 -0
  54. data/rails_generators/rx_config/templates/html-template/history/historyFrame.html +29 -0
  55. data/rails_generators/rx_config/templates/html-template/index.template.html +121 -0
  56. data/rails_generators/rx_config/templates/html-template/playerProductInstall.swf +0 -0
  57. data/rails_generators/rx_config/templates/index.erb +16 -0
  58. data/rails_generators/rx_config/templates/mainair-app.xml +134 -0
  59. data/rails_generators/rx_config/templates/mainapp-config.xml +22 -0
  60. data/rails_generators/rx_config/templates/mainapp.mxml +129 -0
  61. data/rails_generators/rx_config/templates/project-textmate.erb +72 -0
  62. data/rails_generators/rx_config/templates/project.properties +18 -0
  63. data/rails_generators/rx_config/templates/projectair.properties +24 -0
  64. data/rails_generators/rx_config/templates/restfulx.erb +75 -0
  65. data/rails_generators/rx_config/templates/restfulx.yml +65 -0
  66. data/rails_generators/rx_config/templates/restfulx_tasks.rake +9 -0
  67. data/rails_generators/rx_config/templates/routes.erb +47 -0
  68. data/rails_generators/rx_config/templates/session_store_flash.erb +1 -0
  69. data/rails_generators/rx_config/templates/swfobject.js +5 -0
  70. data/rails_generators/rx_controller/USAGE +10 -0
  71. data/rails_generators/rx_controller/rx_controller_generator.rb +31 -0
  72. data/rails_generators/rx_controller/templates/controller.as.erb +38 -0
  73. data/rails_generators/rx_main_app/USAGE +8 -0
  74. data/rails_generators/rx_main_app/rx_main_app_generator.rb +60 -0
  75. data/rails_generators/rx_main_app/templates/mainapp.mxml +129 -0
  76. data/rails_generators/rx_scaffold/USAGE +35 -0
  77. data/rails_generators/rx_scaffold/rx_scaffold_generator.rb +242 -0
  78. data/rails_generators/rx_scaffold/templates/controllers/default.rb.erb +125 -0
  79. data/rails_generators/rx_scaffold/templates/controllers/resource_controller.rb.erb +23 -0
  80. data/rails_generators/rx_scaffold/templates/fixtures.yml.erb +39 -0
  81. data/rails_generators/rx_scaffold/templates/functional_test.rb +45 -0
  82. data/rails_generators/rx_scaffold/templates/helper_test.rb +4 -0
  83. data/rails_generators/rx_scaffold/templates/layouts/default.erb +167 -0
  84. data/rails_generators/rx_scaffold/templates/migration.rb.erb +46 -0
  85. data/rails_generators/rx_scaffold/templates/model.as.erb +73 -0
  86. data/rails_generators/rx_scaffold/templates/model.rb.erb +46 -0
  87. data/rails_generators/rx_yaml_scaffold/USAGE +51 -0
  88. data/rails_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +68 -0
  89. data/rxgen_generators/rx_config/USAGE +5 -0
  90. data/rxgen_generators/rx_config/rx_config_generator.rb +21 -0
  91. data/rxgen_generators/rx_controller/USAGE +10 -0
  92. data/rxgen_generators/rx_controller/rx_controller_generator.rb +41 -0
  93. data/rxgen_generators/rx_controller/templates/assist.py +65 -0
  94. data/rxgen_generators/rx_controller/templates/controller.as.erb +38 -0
  95. data/rxgen_generators/rx_controller/templates/iso8601.py +92 -0
  96. data/rxgen_generators/rx_controller/templates/restful.py +136 -0
  97. data/rxgen_generators/rx_main_app/USAGE +8 -0
  98. data/rxgen_generators/rx_main_app/rx_main_app_generator.rb +65 -0
  99. data/rxgen_generators/rx_main_app/templates/main.py.erb +29 -0
  100. data/rxgen_generators/rx_main_app/templates/mainapp.mxml +152 -0
  101. data/rxgen_generators/rx_scaffold/USAGE +29 -0
  102. data/rxgen_generators/rx_scaffold/rx_scaffold_generator.rb +194 -0
  103. data/rxgen_generators/rx_scaffold/templates/controller.py.erb +27 -0
  104. data/rxgen_generators/rx_scaffold/templates/layouts/default.erb +167 -0
  105. data/rxgen_generators/rx_scaffold/templates/model.as.erb +73 -0
  106. data/rxgen_generators/rx_scaffold/templates/model.py.erb +14 -0
  107. data/rxgen_generators/rx_yaml_scaffold/USAGE +45 -0
  108. data/rxgen_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +47 -0
  109. data/spec/restfulx_spec.rb +4 -0
  110. data/spec/spec_helper.rb +13 -0
  111. data/tasks/restfulx.rake +2 -0
  112. data/test/rails/controllers/application_controller.rb +15 -0
  113. data/test/rails/controllers/locations_controller.rb +93 -0
  114. data/test/rails/controllers/notes_controller.rb +96 -0
  115. data/test/rails/controllers/projects_controller.rb +93 -0
  116. data/test/rails/controllers/tasks_controller.rb +93 -0
  117. data/test/rails/controllers/users_controller.rb +93 -0
  118. data/test/rails/database.yml +4 -0
  119. data/test/rails/fixtures/locations.yml +8 -0
  120. data/test/rails/fixtures/notes.yml +17 -0
  121. data/test/rails/fixtures/projects.yml +25 -0
  122. data/test/rails/fixtures/simple_properties.yml +19 -0
  123. data/test/rails/fixtures/tasks.yml +46 -0
  124. data/test/rails/fixtures/users.yml +13 -0
  125. data/test/rails/helpers/functional_test_helper.rb +21 -0
  126. data/test/rails/helpers/test_helper.rb +54 -0
  127. data/test/rails/helpers/unit_test_helper.rb +29 -0
  128. data/test/rails/model.yml +35 -0
  129. data/test/rails/models/location.rb +4 -0
  130. data/test/rails/models/note.rb +3 -0
  131. data/test/rails/models/project.rb +4 -0
  132. data/test/rails/models/simple_property.rb +2 -0
  133. data/test/rails/models/task.rb +18 -0
  134. data/test/rails/models/user.rb +20 -0
  135. data/test/rails/schema.rb +77 -0
  136. data/test/rails/test.swf +1 -0
  137. data/test/rails/test_active_foo.rb +36 -0
  138. data/test/rails/test_rails_integration_functional.rb +22 -0
  139. data/test/rails/test_to_fxml.rb +35 -0
  140. data/test/rails/test_to_json.rb +23 -0
  141. data/test/rails/views/notes/empty_params_action.html.erb +1 -0
  142. data/test/rails/views/notes/index.html.erb +1 -0
  143. metadata +234 -0
@@ -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
@@ -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
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 2
4
+ :patch: 3
@@ -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,12 @@
1
+ application: <%= project_name %>
2
+ version: 1
3
+ runtime: python
4
+ api_version: 1
5
+
6
+ handlers:
7
+ - url: /public
8
+ static_dir: public
9
+ - url: .*
10
+ script: main.py
11
+
12
+
@@ -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
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>
@@ -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
+