restfulx 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. data/Rakefile +65 -30
  2. data/VERSION.yml +4 -0
  3. data/app_generators/rx_app/rx_app_generator.rb +25 -9
  4. data/app_generators/rx_app/templates/actionscript.properties +3 -3
  5. data/app_generators/rx_app/templates/actionscriptair.properties +3 -3
  6. data/app_generators/rx_app/templates/app.yaml.erb +1 -1
  7. data/app_generators/rx_app/templates/default_tasks.rake +5 -18
  8. data/app_generators/rx_app/templates/generate.rb +1 -1
  9. data/app_generators/rx_app/templates/index.html.erb +1 -1
  10. data/app_generators/rx_app/templates/mainair-app.xml +3 -3
  11. data/app_generators/rx_app/templates/mainapp.mxml +123 -2
  12. data/app_generators/rx_app/templates/project-textmate.erb +4 -4
  13. data/app_generators/rx_app/templates/project.properties +1 -1
  14. data/app_generators/rx_app/templates/projectair.properties +1 -1
  15. data/app_generators/rx_app/templates/restfulx.yml +25 -0
  16. data/bin/rx-gen +1 -1
  17. data/lib/restfulx/active_foo.rb +0 -8
  18. data/lib/restfulx/active_record_tasks.rb +9 -0
  19. data/lib/restfulx/active_record_uuid_helper.rb +17 -0
  20. data/lib/restfulx/configuration.rb +19 -31
  21. data/lib/restfulx/rails/schema_to_yaml/extensions/enumerable.rb +8 -0
  22. data/lib/restfulx/rails/schema_to_yaml/settings/config.rb +17 -0
  23. data/lib/restfulx/rails/schema_to_yaml/settings/core.rb +70 -0
  24. data/lib/restfulx/rails/schema_to_yaml.rb +121 -0
  25. data/lib/restfulx/rails/swf_helper.rb +1 -6
  26. data/lib/restfulx/tasks.rb +68 -42
  27. data/lib/restfulx.rb +4 -35
  28. data/rails_generators/rx_config/USAGE +2 -1
  29. data/rails_generators/rx_config/rx_config_generator.rb +80 -53
  30. data/rails_generators/rx_config/templates/actionscript.properties +3 -3
  31. data/rails_generators/rx_config/templates/actionscriptair.properties +3 -3
  32. data/rails_generators/rx_config/templates/flex_controller.erb +4 -0
  33. data/rails_generators/rx_config/templates/{index.html.erb → index.erb} +2 -4
  34. data/rails_generators/rx_config/templates/mainair-app.xml +3 -3
  35. data/rails_generators/rx_config/templates/mainapp.mxml +100 -2
  36. data/rails_generators/rx_config/templates/project-textmate.erb +4 -4
  37. data/rails_generators/rx_config/templates/project.properties +1 -1
  38. data/rails_generators/rx_config/templates/projectair.properties +1 -1
  39. data/rails_generators/rx_config/templates/restfulx.erb +38 -0
  40. data/rails_generators/rx_config/templates/restfulx.yml +55 -4
  41. data/rails_generators/rx_config/templates/restfulx_tasks.rake +3 -0
  42. data/rails_generators/rx_config/templates/routes.erb +47 -0
  43. data/rails_generators/rx_controller/rx_controller_generator.rb +9 -6
  44. data/rails_generators/rx_controller/templates/controller.as.erb +7 -9
  45. data/rails_generators/rx_main_app/rx_main_app_generator.rb +60 -0
  46. data/rails_generators/rx_main_app/templates/mainapp.mxml +129 -0
  47. data/rails_generators/rx_scaffold/rx_scaffold_generator.rb +88 -34
  48. data/rails_generators/rx_scaffold/templates/{controller.rb.erb → controllers/default.rb.erb} +29 -1
  49. data/rails_generators/rx_scaffold/templates/controllers/resource_controller.rb.erb +23 -0
  50. data/rails_generators/rx_scaffold/templates/fixtures.yml.erb +9 -5
  51. data/{generators/rx_scaffold/templates/component.mxml.erb → rails_generators/rx_scaffold/templates/layouts/default.erb} +75 -59
  52. data/rails_generators/rx_scaffold/templates/migration.rb.erb +29 -2
  53. data/rails_generators/rx_scaffold/templates/model.as.erb +33 -2
  54. data/rails_generators/rx_scaffold/templates/model.rb.erb +36 -1
  55. data/rails_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +29 -10
  56. data/{generators → rxgen_generators}/rx_controller/rx_controller_generator.rb +7 -5
  57. data/{generators → rxgen_generators}/rx_controller/templates/assist.py +3 -3
  58. data/{generators → rxgen_generators}/rx_controller/templates/controller.as.erb +8 -6
  59. data/rxgen_generators/rx_controller/templates/iso8601.py +92 -0
  60. data/rxgen_generators/rx_main_app/USAGE +8 -0
  61. data/{generators → rxgen_generators}/rx_main_app/rx_main_app_generator.rb +10 -5
  62. data/rxgen_generators/rx_main_app/templates/mainapp.mxml +152 -0
  63. data/{generators → rxgen_generators}/rx_scaffold/rx_scaffold_generator.rb +6 -5
  64. data/{rails_generators → rxgen_generators}/rx_scaffold/templates/component.mxml.erb +24 -52
  65. data/spec/restfulx_spec.rb +1 -4
  66. data/spec/spec_helper.rb +0 -3
  67. data/tasks/restfulx.rake +2 -0
  68. metadata +102 -81
  69. data/History.txt +0 -7
  70. data/Manifest.txt +0 -127
  71. data/generators/rx_main_app/templates/mainapp.mxml +0 -35
  72. data/rdoc/generators/template/html/jamis.rb +0 -588
  73. data/tasks/ann.rake +0 -80
  74. data/tasks/bones.rake +0 -20
  75. data/tasks/gem.rake +0 -201
  76. data/tasks/git.rake +0 -40
  77. data/tasks/manifest.rake +0 -48
  78. data/tasks/notes.rake +0 -27
  79. data/tasks/post_load.rake +0 -39
  80. data/tasks/rdoc.rake +0 -50
  81. data/tasks/rubyforge.rake +0 -55
  82. data/tasks/setup.rb +0 -279
  83. data/tasks/spec.rake +0 -54
  84. data/tasks/svn.rake +0 -47
  85. data/tasks/test.rake +0 -40
  86. data/test/rails/playing_around_in_a_console.txt +0 -71
  87. /data/{generators → rails_generators}/rx_main_app/USAGE +0 -0
  88. /data/{generators → rxgen_generators}/rx_config/USAGE +0 -0
  89. /data/{generators → rxgen_generators}/rx_config/rx_config_generator.rb +0 -0
  90. /data/{generators → rxgen_generators}/rx_controller/USAGE +0 -0
  91. /data/{generators → rxgen_generators}/rx_controller/templates/restful.py +0 -0
  92. /data/{generators → rxgen_generators}/rx_main_app/templates/main.py.erb +0 -0
  93. /data/{generators → rxgen_generators}/rx_scaffold/USAGE +0 -0
  94. /data/{generators → rxgen_generators}/rx_scaffold/templates/controller.py.erb +0 -0
  95. /data/{generators → rxgen_generators}/rx_scaffold/templates/model.as.erb +0 -0
  96. /data/{generators → rxgen_generators}/rx_scaffold/templates/model.py.erb +0 -0
  97. /data/{generators → rxgen_generators}/rx_yaml_scaffold/USAGE +0 -0
  98. /data/{generators → rxgen_generators}/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +0 -0
@@ -14,8 +14,8 @@ package <%= base_package %>.controllers {
14
14
 
15
15
  public static var commands:Array = [<%= command_names %>]; /* Commands */
16
16
 
17
- public function <%= command_controller_name %>(enforcer:SingletonEnforcer, extraServices:Array,
18
- defaultServiceId:int = -1) {
17
+ public function <%= command_controller_name %>(enforcer:SingletonEnforcer,
18
+ extraServices:Array, defaultServiceId:int = -1) {
19
19
  super(commands, models, extraServices, defaultServiceId);
20
20
  }
21
21
 
@@ -24,15 +24,13 @@ package <%= base_package %>.controllers {
24
24
  return controller;
25
25
  }
26
26
 
27
- public static function initialize(extraServices:Array = null, defaultServiceId:int = -1,
28
- airDatabaseName:String = null):void {
27
+ public static function initialize(extraServices:Array = null,
28
+ defaultServiceId:int = -1, airDatabaseName:String = null):void {
29
29
  if (!RxUtils.isEmpty(airDatabaseName)) Rx.airDatabaseName = airDatabaseName;
30
- controller = new <%= command_controller_name %>(new SingletonEnforcer, extraServices,
31
- defaultServiceId);
30
+ controller = new <%= command_controller_name %>(new SingletonEnforcer,
31
+ extraServices, defaultServiceId);
32
32
  Rx.sessionToken = Application.application.parameters.session_token;
33
- if (Application.application.parameters.authenticity_token) {
34
- Rx.defaultMetadata = { authenticity_token : Application.application.parameters.authenticity_token };
35
- }
33
+ Rx.authenticityToken = Application.application.parameters.authenticity_token;
36
34
  }
37
35
  }
38
36
  }
@@ -0,0 +1,60 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'restfulx') if !defined?(RestfulX)
2
+
3
+ module Rails
4
+ module Generator
5
+ module Commands
6
+ class Create
7
+ include SchemaToYaml
8
+ end
9
+ end
10
+ end
11
+ end
12
+
13
+ class RxMainAppGenerator < Rails::Generator::Base
14
+ include RestfulX::Configuration
15
+
16
+ attr_reader :project_name,
17
+ :flex_project_name,
18
+ :base_package,
19
+ :base_folder,
20
+ :command_controller_name,
21
+ :model_names,
22
+ :component_names,
23
+ :controller_names,
24
+ :use_air,
25
+ :application_tag,
26
+ :flex_root,
27
+ :distributed
28
+
29
+ def initialize(runtime_args, runtime_options = {})
30
+ super
31
+ @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder,
32
+ @flex_root, @distributed = extract_names
33
+
34
+ project_file_name = APP_ROOT + '/.project'
35
+ if File.exist?(project_file_name)
36
+ @use_air = true if File.read(project_file_name) =~/com.adobe.flexbuilder.apollo.apollobuilder/m
37
+ end
38
+
39
+ if @use_air
40
+ @application_tag = 'WindowedApplication'
41
+ else
42
+ @application_tag = 'Application'
43
+ end
44
+
45
+ @component_names = []
46
+ if File.exists?("#{flex_root}/#{base_folder}/components/generated")
47
+ @component_names = list_mxml_files("#{flex_root}/#{base_folder}/components/generated")
48
+ end
49
+ end
50
+
51
+ def manifest
52
+ record do |m|
53
+ m.template 'mainapp.mxml', File.join("#{flex_root}", "#{flex_project_name}.mxml")
54
+ end
55
+ end
56
+
57
+ def banner
58
+ "Usage: #{$0} #{spec.name}"
59
+ end
60
+ end
@@ -0,0 +1,129 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <mx:<%= application_tag %> xmlns:mx="http://www.adobe.com/2006/mxml"
3
+ xmlns:generated="<%= base_package %>.components.generated.*"
4
+ paddingBottom="8" paddingLeft="8" paddingRight="8" paddingTop="8"
5
+ layout="horizontal" styleName="plain" initialize="init()">
6
+ <mx:Script>
7
+ <![CDATA[
8
+ <% if use_air -%>
9
+ <% if distributed -%>
10
+ import air.net.SocketMonitor;
11
+ import org.restfulx.events.PullEndEvent;
12
+ import org.restfulx.events.PullStartEvent;
13
+ import org.restfulx.events.PushEndEvent;
14
+ import org.restfulx.events.PushStartEvent;
15
+ import org.restfulx.controllers.ChangeController;
16
+ import org.restfulx.services.ISyncingServiceProvider;
17
+ import org.restfulx.services.http.XMLHTTPServiceProvider;
18
+ <% end -%>
19
+ import org.restfulx.services.air.AIRServiceProvider;
20
+ <% end -%>
21
+ import org.restfulx.Rx;
22
+ import <%= base_package %>.controllers.<%= command_controller_name %>;
23
+ <% if use_air -%>
24
+ <% if distributed -%>
25
+
26
+ [Bindable]
27
+ private var socketMonitor:SocketMonitor;
28
+
29
+ [Bindable]
30
+ private var online:Boolean;
31
+
32
+ [Bindable]
33
+ private var syncStatus:String;
34
+ <% end -%>
35
+ <% end -%>
36
+
37
+ private function init():void {
38
+ <% if use_air -%>
39
+ <% if distributed -%>
40
+ Rx.httpRootUrl = "http://localhost:3000/";
41
+ Rx.enableSync = true;
42
+
43
+ socketMonitor = new SocketMonitor("localhost", 3000);
44
+ socketMonitor.pollInterval = 2000; /* miliseconds */
45
+ socketMonitor.addEventListener(StatusEvent.STATUS, onNetworkStatusChange);
46
+ socketMonitor.start();
47
+
48
+ <% end -%>
49
+ <%= command_controller_name %>.initialize([AIRServiceProvider],
50
+ AIRServiceProvider.ID, "<%= base_package %>");
51
+ <% if distributed -%>
52
+
53
+ Rx.changes.setSyncProviders(
54
+ ISyncingServiceProvider(Rx.services.getServiceProvider(AIRServiceProvider.ID)),
55
+ Rx.services.getServiceProvider(XMLHTTPServiceProvider.ID));
56
+
57
+ Rx.changes.addEventListener(PushStartEvent.ID, onPushStart);
58
+ Rx.changes.addEventListener(PushEndEvent.ID, onPushEnd);
59
+ Rx.changes.addEventListener(PullStartEvent.ID, onPullStart);
60
+ Rx.changes.addEventListener(PullEndEvent.ID, onPullEnd);
61
+ <% end -%>
62
+ <% else -%>
63
+ <%= command_controller_name %>.initialize();
64
+ <% end -%>
65
+ }
66
+ <% if use_air -%>
67
+ <% if distributed -%>
68
+
69
+ private function onPushStart(event:Event):void {
70
+ syncStatus = "Pushing changes ...";
71
+ }
72
+
73
+ private function onPushEnd(event:Event):void {
74
+ syncStatus = "Push complete.";
75
+ }
76
+
77
+ private function onPullStart(event:Event):void {
78
+ syncStatus = "Pulling data...";
79
+ }
80
+
81
+ private function onPullEnd(event:Event):void {
82
+ syncStatus = "Pull complete.";
83
+ }
84
+
85
+ private function onNetworkStatusChange(event:StatusEvent):void {
86
+ online = (socketMonitor.available) ? true : false;
87
+
88
+ if (online) {
89
+ Rx.defaultServiceId = XMLHTTPServiceProvider.ID;
90
+ } else {
91
+ Rx.defaultServiceId = AIRServiceProvider.ID;
92
+ }
93
+ }
94
+
95
+ private function getCurrentProviderName(id:int):String {
96
+ switch (id) {
97
+ case XMLHTTPServiceProvider.ID:
98
+ return "Rails";
99
+ case AIRServiceProvider.ID:
100
+ return "AIR (SQLite)";
101
+ default :
102
+ return "No idea";
103
+ }
104
+ }
105
+ <% end -%>
106
+ <% end -%>
107
+ ]]>
108
+ </mx:Script>
109
+ <% if use_air -%>
110
+ <% if distributed -%>
111
+ <mx:VBox height="100%">
112
+ <mx:Label text="Current Provider: {getCurrentProviderName(Rx.defaultServiceId)}"/>
113
+ <mx:Label text="Status: {online ? 'Online' : 'Offline' }"/>
114
+ <mx:HBox>
115
+ <mx:Button label="Push" click="{Rx.changes.push()}" enabled="{online}"/>
116
+ <mx:Button label="Pull" click="{Rx.changes.pull()}" enabled="{online}"/>
117
+ </mx:HBox>
118
+ <mx:Label text="{syncStatus}"/>
119
+ </mx:VBox>
120
+ <% end -%>
121
+ <% end -%>
122
+ <mx:LinkBar dataProvider="{mainViewStack}" direction="vertical" borderStyle="solid" backgroundColor="#EEEEEE"/>
123
+ <mx:ViewStack id="mainViewStack" width="100%" height="100%">
124
+ <!-- For a simple demo, put all the components here. -->
125
+ <% for component in component_names -%>
126
+ <generated:<%= component %>/>
127
+ <% end -%>
128
+ </mx:ViewStack>
129
+ </mx:<%= application_tag %>>
@@ -61,21 +61,36 @@ module Rails
61
61
  end
62
62
  end
63
63
  end
64
+ module Commands
65
+ class Create
66
+ include SchemaToYaml
67
+ end
68
+ end
64
69
  end
65
70
  end
66
71
 
67
72
  class RxScaffoldGenerator < Rails::Generator::NamedBase
68
- include RestfulX::Configuration
73
+ include RestfulX::Configuration
74
+ include SchemaToYaml
69
75
 
70
76
  attr_reader :project_name,
71
77
  :flex_project_name,
72
78
  :base_package,
73
79
  :base_folder,
74
- :command_controller_name
80
+ :command_controller_name,
81
+ :flex_root,
82
+ :distributed
75
83
 
76
84
  attr_reader :belongs_tos,
77
85
  :has_manies,
78
- :has_ones
86
+ :has_ones,
87
+ :attachment_field,
88
+ :has_many_through,
89
+ :polymorphic,
90
+ :tree_model,
91
+ :layout,
92
+ :ignored_fields,
93
+ :args_for_generation
79
94
 
80
95
  attr_reader :controller_name,
81
96
  :controller_class_path,
@@ -92,9 +107,10 @@ class RxScaffoldGenerator < Rails::Generator::NamedBase
92
107
 
93
108
  def initialize(runtime_args, runtime_options = {})
94
109
  super
95
- @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder = extract_names
110
+ @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder, @flex_root,
111
+ @distributed = extract_names
96
112
  @controller_name = @name.pluralize
97
-
113
+
98
114
  base_name, @controller_class_path, @controller_file_path, @controller_class_nesting,
99
115
  @controller_class_nesting_depth = extract_modules(@controller_name)
100
116
  @controller_class_name_without_nesting, @controller_underscore_name, @controller_plural_name = inflect_names(base_name)
@@ -110,24 +126,26 @@ class RxScaffoldGenerator < Rails::Generator::NamedBase
110
126
 
111
127
  def manifest
112
128
  record do |m|
113
- m.dependency 'scaffold', [name] + @args, :skip_migration => true, :collision => :skip unless options[:flex_only]
114
-
115
- # Generate Flex AS model and MXML component based on the
116
- # RestfulX templates.
117
- m.template 'model.as.erb',
118
- File.join("app", "flex", base_folder, "models", "#{@class_name}.as"),
119
- :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
120
-
121
- m.template 'component.mxml.erb',
122
- File.join("app", "flex", base_folder, "components", "generated", "#{@class_name}Box.mxml"),
123
- :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
129
+ unless options[:flex_view_only]
130
+ m.template 'model.as.erb',
131
+ File.join("#{@flex_root}", base_folder, "models", "#{@class_name}.as"),
132
+ :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
133
+
134
+ m.template "controllers/#{RxSettings.controller_pattern}.rb.erb", File.join("app/controllers",
135
+ controller_class_path, "#{controller_file_name}_controller.rb") unless options[:flex_only]
124
136
 
125
- m.template 'controller.rb.erb', File.join("app/controllers", controller_class_path,
126
- "#{controller_file_name}_controller.rb"), :collision => :force unless options[:flex_only]
127
-
128
- # Create a new generated ActiveRecord model based on the RestfulX templates.
129
- m.template 'model.rb.erb', File.join("app", "models", "#{file_name}.rb"),
130
- :collision => :force unless options[:flex_only]
137
+ m.template 'model.rb.erb', File.join("app", "models", "#{file_name}.rb") unless options[:flex_only]
138
+ end
139
+
140
+ if @layout.size > 0
141
+ m.template "layouts/#{@layout}.erb",
142
+ File.join("#{@flex_root}", base_folder, "components", "generated", "#{@class_name}Box.mxml"),
143
+ :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
144
+ else
145
+ m.template "layouts/#{RxSettings.layouts.default}.erb",
146
+ File.join("#{@flex_root}", base_folder, "components", "generated", "#{@class_name}Box.mxml"),
147
+ :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
148
+ end
131
149
 
132
150
  unless options[:skip_fixture]
133
151
  m.template 'fixtures.yml.erb', File.join("test", "fixtures", "#{table_name}.yml"),
@@ -135,11 +153,13 @@ class RxScaffoldGenerator < Rails::Generator::NamedBase
135
153
  end
136
154
 
137
155
  unless options[:skip_migration]
138
- m.directory 'schema/migration'
156
+ FileUtils.rm Dir.glob("db/migrate/[0-9]*_create_#{file_path.gsub(/\//, '_').pluralize}.rb"), :force => true
139
157
  m.migration_template 'migration.rb.erb', 'db/migrate', :assigns => {
140
158
  :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
141
159
  }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}" unless options[:flex_only]
142
160
  end
161
+
162
+ m.route_resources controller_file_name
143
163
 
144
164
  m.dependency 'rx_controller', [name] + @args, :collision => :force
145
165
  end
@@ -147,33 +167,67 @@ class RxScaffoldGenerator < Rails::Generator::NamedBase
147
167
 
148
168
  protected
149
169
  def extract_relationships
170
+ # arrays
150
171
  @belongs_tos = []
151
172
  @has_ones = []
152
173
  @has_manies = []
153
- # Figure out has_one, has_many and belongs_to based on args
174
+ @attachment_field = []
175
+ @polymorphic = []
176
+ @tree_model = []
177
+ @layout = []
178
+ @ignored_fields = []
179
+
180
+ # hashes
181
+ @has_many_through = {}
182
+
154
183
  @args.each do |arg|
184
+ # arrays
155
185
  if arg =~ /^has_one:/
156
- # arg = "has_one:arg1,arg2", so all the has_one are together
157
186
  @has_ones = arg.split(':')[1].split(',')
158
187
  elsif arg =~ /^has_many:/
159
- # arg = "has_many:arg1,arg2", so all the has_many are together
160
188
  @has_manies = arg.split(":")[1].split(",")
161
- elsif arg =~ /^belongs_to:/ # belongs_to:arg1,arg2
189
+ elsif arg =~ /^belongs_to:/
162
190
  @belongs_tos = arg.split(":")[1].split(',')
191
+ elsif arg =~ /^attachment_field:/
192
+ @attachment_field = arg.split(":")[1].split(',')
193
+ elsif arg =~ /^polymorphic:/
194
+ @polymorphic = arg.split(":")[1].split(',')
195
+ elsif arg =~ /^tree_model:/
196
+ @tree_model = arg.split(":")[1].split(',')
197
+ elsif arg =~ /^layout:/
198
+ @layout = arg.split(":")[1].split(',')
199
+ elsif arg =~ /^ignored_fields:/
200
+ @ignored_fields = arg.split(":")[1].split(',')
201
+ # hashes
202
+ elsif arg =~ /^has_many_through:/
203
+ hmt_arr = arg.split(":")[1].split(',')
204
+ @has_many_through[hmt_arr.first] = hmt_arr.last
163
205
  end
164
206
  end
165
207
 
166
- # Remove the has_one and has_many arguments since they are
167
- # not for consumption by the scaffold generator, and since
168
- # we have already used them to set the @belongs_tos, @has_ones and
169
- # @has_manies.
170
- @args.delete_if { |elt| elt =~ /^(has_one|has_many|belongs_to):/ }
208
+ # delete special fields from @args ivar
209
+ %w(has_one has_many belongs_to attachment_field has_many_through
210
+ polymorphic tree_model layout ignored_fields).each do |special_field|
211
+ @args.delete_if { |f| f =~ /^(#{special_field}):/ }
212
+ end
213
+
214
+ @args_for_generation = @args.clone
215
+
216
+ # delete ignored_fields from @args ivar
217
+ @ignored_fields.each do |ignored|
218
+ @args.delete_if { |f| f =~ /^(#{ignored}):/ }
219
+ end
220
+
171
221
  end
172
222
 
173
223
  def add_options!(opt)
174
224
  opt.separator ''
175
225
  opt.separator 'Options:'
176
- opt.on("--flex-only", "Scaffold Flex code only",
177
- "Default: false") { |v| options[:flex_only] = v}
226
+ opt.on("-f", "--flex-only", "Only generate the Flex/AIR files",
227
+ "Default: false") { |v| options[:flex_only] = v }
228
+ opt.on("-r", "--rails-only", "Only generate the Rails files",
229
+ "Default: false") { |v| options[:rails_only] = v }
230
+ opt.on("-fv", "--flex-view-only", "Only generate the Flex component files",
231
+ "Default: false") { |v| options[:flex_view_only] = v }
178
232
  end
179
233
  end
@@ -8,7 +8,11 @@ class <%= controller_class_name %>Controller < ApplicationController
8
8
  respond_to do |format|
9
9
  format.html # index.html.erb
10
10
  format.xml { render :xml => @<%= table_name %> }
11
+ <% if attachment_field.size > 0 -%>
12
+ format.fxml { render :fxml => @<%= table_name %>.to_fxml(:methods => [:attachment_url]) }
13
+ <% else -%>
11
14
  format.fxml { render :fxml => @<%= table_name %> }
15
+ <% end -%>
12
16
  end
13
17
  end
14
18
 
@@ -21,7 +25,11 @@ class <%= controller_class_name %>Controller < ApplicationController
21
25
  respond_to do |format|
22
26
  format.html # show.html.erb
23
27
  format.xml { render :xml => @<%= file_name %> }
28
+ <% if attachment_field.size > 0 -%>
29
+ format.fxml { render :fxml => @<%= file_name %>.to_fxml(:methods => [:attachment_url]) }
30
+ <% else -%>
24
31
  format.fxml { render :fxml => @<%= file_name %> }
32
+ <% end -%>
25
33
  end
26
34
  end
27
35
 
@@ -52,7 +60,11 @@ class <%= controller_class_name %>Controller < ApplicationController
52
60
  flash[:notice] = '<%= class_name %> was successfully created.'
53
61
  format.html { redirect_to(@<%= file_name %>) }
54
62
  format.xml { render :xml => @<%= file_name %>, :status => :created, :location => @<%= file_name %> }
63
+ <% if attachment_field.size > 0 -%>
64
+ format.fxml { render :fxml => @<%= file_name %>.to_fxml(:methods => [:attachment_url]) }
65
+ <% else -%>
55
66
  format.fxml { render :fxml => @<%= file_name %> }
67
+ <% end -%>
56
68
  else
57
69
  format.html { render :action => "new" }
58
70
  format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
@@ -65,14 +77,30 @@ class <%= controller_class_name %>Controller < ApplicationController
65
77
  # PUT /<%= table_name %>/1.xml
66
78
  # PUT /<%= table_name %>/1.fxml
67
79
  def update
80
+ <% if distributed -%>
81
+ begin
82
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
83
+ @saved = @<%= file_name %>.update_attributes(params[:<%= file_name %>])
84
+ rescue
85
+ @<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])
86
+ @<%= file_name %>.id = params[:id]
87
+ @saved = @<%= file_name %>.save
88
+ end
89
+ <% else -%>
68
90
  @<%= file_name %> = <%= class_name %>.find(params[:id])
91
+ @saved = @<%= file_name %>.update_attributes(params[:<%= file_name %>])
92
+ <% end -%>
69
93
 
70
94
  respond_to do |format|
71
- if @<%= file_name %>.update_attributes(params[:<%= file_name %>])
95
+ if @saved
72
96
  flash[:notice] = '<%= class_name %> was successfully updated.'
73
97
  format.html { redirect_to(@<%= file_name %>) }
74
98
  format.xml { head :ok }
99
+ <% if attachment_field.size > 0 -%>
100
+ format.fxml { render :fxml => @<%= file_name %>.to_fxml(:methods => [:attachment_url]) }
101
+ <% else -%>
75
102
  format.fxml { render :fxml => @<%= file_name %> }
103
+ <% end -%>
76
104
  else
77
105
  format.html { render :action => "edit" }
78
106
  format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
@@ -0,0 +1,23 @@
1
+ class <%= controller_class_name %>Controller < ResourceController::Base
2
+
3
+ before_filter :load_fxml_params
4
+
5
+ index.wants.fxml { render :fxml => @collection.to_fxml(@fxml_params) }
6
+ show.wants.fxml { render :fxml => @object.to_fxml(@fxml_params) }
7
+ create.wants.fxml { render :fxml => @object.to_fxml(@fxml_params) }
8
+ create.failure.wants.fxml { render :fxml => @object.errors }
9
+ update.wants.fxml { render :fxml => @object.to_fxml(@fxml_params) }
10
+ update.failure.wants.fxml { render :fxml => @object.errors }
11
+ destroy.wants.fxml { render :fxml => @object }
12
+
13
+ private
14
+
15
+ def collection
16
+ @collection = end_of_association_chain.all
17
+ end
18
+
19
+ def load_fxml_params
20
+ @fxml_params = { }
21
+ end
22
+
23
+ end
@@ -2,34 +2,38 @@
2
2
 
3
3
  <% unless attributes.empty? && belongs_tos.empty? -%>
4
4
  <%= class_name.underscore -%>_one:
5
+ id: <%%= Fixtures.identify(:<%= class_name.underscore %>_one) %>
5
6
  <% for attribute in attributes -%>
6
7
  <%= attribute.name %>: <%= attribute.default("#{class_name}1") %>
7
8
  <% end -%>
8
9
  <% for model in belongs_tos -%>
9
- <%= model %>: <%= model %>_one
10
+ <%= model %>_id: <%%= Fixtures.identify(:<%= model %>_one) %>
10
11
  <% end -%>
11
12
 
12
13
  <%= class_name.underscore -%>_two:
14
+ id: <%%= Fixtures.identify(:<%= class_name.underscore %>_two) %>
13
15
  <% for attribute in attributes -%>
14
16
  <%= attribute.name %>: <%= attribute.default("#{class_name}2") %>
15
17
  <% end -%>
16
18
  <% for model in belongs_tos -%>
17
- <%= model %>: <%= model %>_two
19
+ <%= model %>_id: <%%= Fixtures.identify(:<%= model %>_two) %>
18
20
  <% end -%>
19
21
 
20
22
  <%= class_name.underscore -%>_three:
23
+ id: <%%= Fixtures.identify(:<%= class_name.underscore %>_three) %>
21
24
  <% for attribute in attributes -%>
22
25
  <%= attribute.name %>: <%= attribute.default("#{class_name}3") %>
23
26
  <% end -%>
24
27
  <% for model in belongs_tos -%>
25
- <%= model %>: <%= model %>_three
28
+ <%= model %>_id: <%%= Fixtures.identify(:<%= model %>_three) %>
26
29
  <% end -%>
27
30
 
28
31
  <%= class_name.underscore -%>_four:
32
+ id: <%%= Fixtures.identify(:<%= class_name.underscore %>_four) %>
29
33
  <% for attribute in attributes -%>
30
34
  <%= attribute.name %>: <%= attribute.default("#{class_name}4") %>
31
35
  <% end -%>
32
36
  <% for model in belongs_tos -%>
33
- <%= model %>: <%= model %>_four
34
- <% end -%>
37
+ <%= model %>_id: <%%= Fixtures.identify(:<%= model %>_four) %>
35
38
  <% end -%>
39
+ <% end -%>