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,17 @@
1
+ # SchemaToYaml settings
2
+ module SchemaToYaml
3
+ module Settings
4
+ class Config
5
+ class << self
6
+ def configure
7
+ yield self
8
+ end
9
+
10
+ def settings_file
11
+ @settings_file ||= :restfulx
12
+ end
13
+ attr_writer :settings_file
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,73 @@
1
+ # Inspired from http://settingslogic.rubyforge.org/
2
+ # Used to read in settings from restfulx.yml for use in code generation
3
+ module SchemaToYaml
4
+ module Settings
5
+ # We try to figure out the application root using a number of possible options
6
+ APP_ROOT = defined?(RAILS_ROOT) ? RAILS_ROOT : defined?(Merb) ? Merb.root : File.expand_path(".")
7
+
8
+ class Core
9
+ class << self
10
+ def name
11
+ instance._settings.key?("name") ? instance.name : super
12
+ end
13
+
14
+ def reset!
15
+ @instance = nil
16
+ end
17
+
18
+ private
19
+ def instance
20
+ @instance ||= new
21
+ end
22
+
23
+ def method_missing(name, *args, &block)
24
+ instance.send(name, *args, &block)
25
+ end
26
+ end
27
+
28
+ attr_accessor :_settings
29
+
30
+ def initialize(name_or_hash = Config.settings_file)
31
+ case name_or_hash
32
+ when Hash
33
+ self._settings = name_or_hash
34
+ when String, Symbol
35
+ root_path = defined?(APP_ROOT) ? "#{APP_ROOT}/config/" : ""
36
+ file_path = name_or_hash.is_a?(Symbol) ? "#{root_path}#{name_or_hash}.yml" : name_or_hash
37
+ self._settings = YAML.load(ERB.new(File.read(file_path)).result)
38
+ self._settings = _settings[RAILS_ENV] if defined?(RAILS_ENV)
39
+ else
40
+ raise ArgumentError.new("Your settings must be a hash,
41
+ a symbol representing the name of the .yml file in your config directory,
42
+ or a string representing the abosolute path to your settings file.")
43
+ end
44
+ define_settings!
45
+ end
46
+
47
+ private
48
+ def method_missing(name, *args, &block)
49
+ raise NoMethodError.new("no configuration was specified for #{name}")
50
+ end
51
+
52
+ def define_settings!
53
+ return if _settings.nil?
54
+ _settings.each do |key, value|
55
+ case value
56
+ when Hash
57
+ instance_eval <<-"end_eval", __FILE__, __LINE__
58
+ def #{key}
59
+ @#{key} ||= self.class.new(_settings["#{key}"])
60
+ end
61
+ end_eval
62
+ else
63
+ instance_eval <<-"end_eval", __FILE__, __LINE__
64
+ def #{key}
65
+ @#{key} ||= _settings["#{key}"]
66
+ end
67
+ end_eval
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,59 @@
1
+ # Adds a little helper to make it easier empbedding SWFs in ERB templates.
2
+ module SWFHelper
3
+ # Creates a swfObject Javascript call. You must include swfobject.js to use this.
4
+ # See http://code.google.com/p/swfobject/wiki/documentation for full details and documentation
5
+ # of the swfobject js library.
6
+ def swfobject(swf_url, params = {})
7
+ params.reverse_merge!({:width => '100%',
8
+ :height => '100%',
9
+ :id => 'flashContent',
10
+ :version => '9.0.0',
11
+ :express_install_swf => '/expressInstall.swf',
12
+ :flash_vars => nil,
13
+ :params => { },
14
+ :attributes => { },
15
+ :create_div => false,
16
+ :include_authenticity_token => true,
17
+ :include_session_token => true
18
+ })
19
+ arg_order = [:id, :width, :height, :version, :express_install_swf]
20
+ js_params = ["'#{swf_url}'"]
21
+ js_params += arg_order.collect {|arg| "'#{params[arg]}'" }
22
+
23
+ # Add authenticity_token and the session key to flashVars. This will only work if flashVars is a Hash or nil
24
+ # If it's a string representing the name of a Javascript variable, then you need to add them yourself
25
+ # like this:
26
+ # <script>
27
+ # ... other code that defines flashVars and sets some of its parameters
28
+ # flashVars['authenticity_token'] = <%= form_authenticity_token -%>
29
+ # flashVars['session_token'] = <%= session.session_id -%>
30
+ # </script>
31
+ params[:flash_vars] ||= {}
32
+ if params[:flash_vars].is_a?(Hash)
33
+ if params[:include_authenticity_token] && ActionController::Base.allow_forgery_protection
34
+ params[:flash_vars].reverse_merge!(:authenticity_token => form_authenticity_token)
35
+ end
36
+ if params[:include_session_token]
37
+ if RAILS_GEM_VERSION =~ /^2.3/
38
+ params[:flash_vars].reverse_merge!(:session_token => request.session_options[:id])
39
+ else
40
+ params[:flash_vars].reverse_merge!(:session_token => session.session_id)
41
+ end
42
+ end
43
+ end
44
+
45
+ js_params += [params[:flash_vars], params[:params], params[:attributes]].collect do |hash_or_string|
46
+ if hash_or_string.is_a?(Hash)
47
+ hash_or_string.to_json
48
+ else # If it's not a hash, then it should be a string giving the name of the Javascript variable to use
49
+ hash_or_string
50
+ end
51
+ end.compact
52
+
53
+ swf_tag = javascript_tag do
54
+ "swfobject.embedSWF(#{js_params.join(',')})"
55
+ end
56
+ swf_tag += content_tag(:div, nil, :id => params[:id]) if params[:create_div]
57
+ swf_tag
58
+ end
59
+ end
@@ -0,0 +1,110 @@
1
+ # Rake tasks for building RestfulX-based Flex and AIR applications
2
+ require 'rake'
3
+ require 'rexml/document'
4
+ require 'activesupport'
5
+ require File.join(File.dirname(__FILE__), 'configuration')
6
+
7
+ include RestfulX::Configuration
8
+
9
+ namespace :rx do
10
+ # Compile the given Flex/AIR application
11
+ # The following options are supported:
12
+ # :executable => 'mxmlc'
13
+ # :application => nil
14
+ # :destination => 'public/bin'
15
+ # :opts => nil
16
+ # :flex_root => 'app/flex'
17
+ def compile_application(params = {})
18
+ project_name, flex_project_name, command_controller_name, base_package, base_folder,
19
+ flex_root = extract_names()
20
+
21
+ executable = params[:executable] || 'mxmlc'
22
+ application = params[:application] || get_main_application
23
+ destination = params[:destination] || 'public/bin'
24
+ opts = params[:opts] || ''
25
+ flex_root = params[:flex_root] || flex_root
26
+
27
+ compiler = get_executable(executable)
28
+
29
+ application = get_main_application unless application
30
+ project_path = File.join(APP_ROOT, flex_root, application)
31
+ target_project_path = project_path.sub(/.mxml$/, '.swf')
32
+ target_project_air_descriptor = project_path.sub(/.mxml$/, '-app.xml')
33
+
34
+ libs = Dir.glob(File.join(APP_ROOT, 'lib', '*.swc')).map {|lib| lib.gsub(' ', '\ ')}
35
+
36
+ additional_compiler_args = get_app_properties().elements["actionScriptProperties"].elements["compiler"].attributes["additionalCompilerArguments"]
37
+ additional_compiler_args.gsub!("../locale/", "#{APP_ROOT}/app/locale/")
38
+
39
+ cmd = "#{executable} #{opts} -library-path+=#{libs.join(',')} " << additional_compiler_args << " #{project_path.gsub(' ', '\ ')}"
40
+ puts "Compiling #{project_path}"
41
+ if system(cmd)
42
+ FileUtils.makedirs File.join(APP_ROOT, destination)
43
+ puts "Moving #{target_project_path} to " + File.join(APP_ROOT, destination)
44
+ FileUtils.mv target_project_path, File.join(APP_ROOT, destination), :force => true
45
+ if File.exist?(target_project_air_descriptor)
46
+ descriptor = File.read(target_project_air_descriptor)
47
+ descriptor_name = target_project_air_descriptor.split("/").last
48
+ app_swf = target_project_path.split("/").last
49
+ descriptor.gsub!("[This value will be overwritten by Flex Builder in the output app.xml]",
50
+ app_swf)
51
+
52
+ File.open("#{APP_ROOT}/#{destination}/#{descriptor_name}", "w") do |file|
53
+ file.print descriptor
54
+ end
55
+ puts "Created #{APP_ROOT}/#{destination}/#{descriptor_name} descriptor."
56
+ end
57
+ puts 'Done!'
58
+ else
59
+ puts "The application was not compiled. Check console for errors. " <<
60
+ "It is possible that '(a)mxmlc' executable was not found or there are compilation errors."
61
+ end
62
+ end
63
+
64
+ def run_air_application(params = {})
65
+ application = params[:application] || get_main_application
66
+ descriptor = params[:descriptor] || application.sub(/.mxml$/, '-app.xml')
67
+ destination = params[:destination] || 'bin-debug'
68
+
69
+ puts "Running AIR application with descriptor: #{descriptor}"
70
+ if !system("#{get_executable('adl')} #{destination}/#{descriptor}")
71
+ puts "Could not run the application with descriptor: #{destination}/#{descriptor}. Check console for errors."
72
+ end
73
+ end
74
+
75
+ # Find what the main application is based on .actionScriptProperties file
76
+ def get_main_application
77
+ get_app_properties().root.attributes['mainApplicationPath'].split("/").last
78
+ end
79
+
80
+ def get_app_properties
81
+ REXML::Document.new(File.open(File.join(APP_ROOT, ".actionScriptProperties")))
82
+ end
83
+
84
+ # Get appropriate executable based on platform
85
+ def get_executable(executable)
86
+ if RUBY_PLATFORM =~ /mswin32/
87
+ executable << '.exe'
88
+ end
89
+ executable
90
+ end
91
+
92
+ namespace :flex do
93
+ desc "Build project swf file and move it into public/bin folder"
94
+ task :build do
95
+ compile_application()
96
+ end
97
+ end
98
+
99
+ namespace :air do
100
+ desc "Build project swf file as an AIR application and move it into bin-debug folder"
101
+ task :build do
102
+ compile_application(:destination => 'bin-debug', :opts => '+configname=air')
103
+ end
104
+
105
+ desc "Run the AIR application (if this project is configured as an AIR project)"
106
+ task :run do
107
+ run_air_application
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,19 @@
1
+ Description:
2
+ Generates the primary RestfulX directory structure, sets up Flex Builder
3
+ specific descriptor files and options fetches the latest published
4
+ RestfulX Framework SWC file.
5
+
6
+ You can generate Flex Builder configuration for either *pure* Flex
7
+ project or an AIR project. To generate AIR configuration pass the -a
8
+ (--air) option to the generator.
9
+
10
+ Examples:
11
+ `./script/generate rx_config` # generates project structure and a
12
+ # default Flex app configuration. Fetches
13
+ # latest RestfulX framework SWC to "lib"
14
+ # folder
15
+ `./script/generate rx_config -a` # as above but generates an AIR app
16
+ # and configuration
17
+ `./script/generate rx_config --skip-framework` # generates Flex app
18
+ # but does not fetch
19
+ # the RestfulX framework SWC.
@@ -0,0 +1,151 @@
1
+ require 'open-uri'
2
+ require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'restfulx') if !defined?(RestfulX)
3
+
4
+ class RxConfigGenerator < Rails::Generator::Base
5
+ include RestfulX::Configuration
6
+
7
+ attr_reader :project_name,
8
+ :flex_project_name,
9
+ :base_package,
10
+ :base_folder,
11
+ :command_controller_name,
12
+ :component_names,
13
+ :application_tag,
14
+ :use_air,
15
+ :flex_root,
16
+ :base_flex_package,
17
+ :distributed
18
+
19
+ def initialize(runtime_args, runtime_options = {})
20
+ super
21
+ @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder,
22
+ @flex_root = extract_names
23
+
24
+ @base_package = options[:base_flex_package] if options[:base_flex_package]
25
+ @base_folder = options[:base_flex_package].gsub('.', '/') if options[:base_flex_package]
26
+ @flex_root = options[:flex_root] if options[:flex_root]
27
+ @distributed = options[:distributed]
28
+
29
+ # if we are updating main file only we probably want to maintain the type of project it is
30
+ if options[:main_only]
31
+ project_file_name = APP_ROOT + '/.project'
32
+ if File.exist?(project_file_name)
33
+ puts "Cannot combine -m (--main-app) and -a (--air) flags at the same time for an existing application.\n" <<
34
+ 'If you want to convert to AIR, remove -m flag.' if options[:air_config]
35
+ @use_air = true if File.read(project_file_name) =~/com.adobe.flexbuilder.apollo.apollobuilder/m
36
+ else
37
+ puts "Flex Builder project file doesn't exist. You should run 'rx_config' with -a (--air) option " <<
38
+ "or no arguments first to generate primary project structure."
39
+ exit 0;
40
+ end
41
+ else
42
+ @use_air = options[:air_config]
43
+ end
44
+
45
+ if @use_air
46
+ @application_tag = 'WindowedApplication'
47
+ else
48
+ @application_tag = 'Application'
49
+ end
50
+
51
+ @component_names = []
52
+ if File.exists?("#{flex_root}/#{base_folder}/views/generated")
53
+ @component_names = list_mxml_files("#{flex_root}/#{base_folder}/views/generated")
54
+ end
55
+ end
56
+
57
+ def manifest
58
+ record do |m|
59
+ m.file 'restfulx_tasks.rake', 'lib/tasks/restfulx_tasks.rake' if !options[:skip_tasks]
60
+ m.file 'flex.properties', '.flexProperties'
61
+ m.template 'restfulx.yml', 'config/restfulx.yml'
62
+ m.template 'restfulx.erb', 'config/initializers/restfulx.rb'
63
+
64
+ m.template 'session_store_flash.erb', 'config/initializers/session_store_flash.rb' if RAILS_GEM_VERSION =~ /2.3/
65
+
66
+ m.directory "#{flex_root}"
67
+
68
+ if @use_air
69
+ m.template 'actionscriptair.properties', '.actionScriptProperties'
70
+ m.template 'projectair.properties', '.project'
71
+ else
72
+ m.template 'actionscript.properties', '.actionScriptProperties'
73
+ m.template 'project.properties', '.project'
74
+ end
75
+
76
+ m.template 'project-textmate.erb', "#{project_name}.tmproj"
77
+ m.template 'mainapp.mxml', File.join("#{flex_root}", "#{flex_project_name}.mxml")
78
+ m.template 'mainapp-config.xml', File.join("#{flex_root}", "#{flex_project_name}-config.xml")
79
+ m.template 'mainair-app.xml', File.join("#{flex_root}", "#{flex_project_name}-app.xml") if @use_air
80
+
81
+ m.directory 'html-template/history'
82
+ %w(index.template.html AC_OETags.js playerProductInstall.swf).each do |file|
83
+ m.file "html-template/#{file}", "html-template/#{file}"
84
+ end
85
+
86
+ %w(history.css history.js historyFrame.html).each do |file|
87
+ m.file "html-template/history/#{file}", "html-template/history/#{file}"
88
+ end
89
+
90
+ %w(views controllers commands models events helpers).each do |dir|
91
+ m.directory "#{flex_root}/#{base_folder}/#{dir}"
92
+ end
93
+
94
+ m.directory "#{flex_root}/#{base_folder}/views/generated"
95
+
96
+ framework_release = RestfulX::FRAMEWORK_VERSION
97
+ framework_distribution_url = "http://restfulx.github.com/releases/restfulx-#{framework_release}.swc"
98
+ framework_destination_file = "lib/restfulx-#{framework_release}.swc"
99
+
100
+ if !options[:skip_framework] && !File.exist?(framework_destination_file)
101
+ puts "Fetching #{framework_release} framework binary from: #{framework_distribution_url} ..."
102
+ begin
103
+ framework_swc = open(framework_distribution_url).read
104
+ rescue
105
+ puts "ERROR: Unable to download and install #{framework_distribution_url}."
106
+ puts "Please check your internet connectivity and try again."
107
+ exit
108
+ end
109
+ open(framework_destination_file, "wb").write(framework_swc) unless framework_swc.blank?
110
+ puts "done. saved to #{framework_destination_file}"
111
+ end
112
+
113
+ m.file 'swfobject.js', 'public/javascripts/swfobject.js'
114
+ m.file 'expressInstall.swf', 'public/expressInstall.swf'
115
+
116
+ m.file 'flex_controller.erb', 'app/controllers/flex_controller.rb'
117
+
118
+ m.directory "app/views/flex"
119
+
120
+ m.template 'index.erb', 'app/views/flex/index.html.erb'
121
+
122
+ m.file 'routes.erb', 'config/routes.rb', :collision => :ask
123
+
124
+ FileUtils.rm 'public/index.html' if File.exist?('public/index.html')
125
+
126
+ m.dependency 'rx_controller', @args
127
+ end
128
+ end
129
+
130
+ protected
131
+ def add_options!(opt)
132
+ opt.separator ''
133
+ opt.separator 'Options:'
134
+ opt.on("-a", "--air", "Configure AIR project instead of Flex. Flex is default.",
135
+ "Default: false") { |v| options[:air_config] = v }
136
+ opt.on("--skip-framework", "Don't fetch the latest framework binary. You'll have to link/build the framework yourself.",
137
+ "Default: false") { |v| options[:skip_framework] = v }
138
+ opt.on("--skip-tasks", "Don't install restfulx gem tasks hook into the project.",
139
+ "Default: false") { |v| options[:skip_tasks] = v }
140
+ opt.on("--flex-root [FOLDER]", "Root folder for generated flex code.",
141
+ "Default: app/flex") { |v| options[:flex_root] = v }
142
+ opt.on("--base-flex-package [PACKAGE]", "Base package for your application.",
143
+ "Default: #{flex_project_name}") { |v| options[:base_flex_package] = v }
144
+ opt.on("--distributed", "Creates migrations, controllers and models that use UUIDs and are distribution ready",
145
+ "Default: false") { |v| options[:distributed] = v }
146
+ end
147
+
148
+ def banner
149
+ "Usage: #{$0} #{spec.name}"
150
+ end
151
+ 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>