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,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 %>.views.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 %>>
@@ -0,0 +1,35 @@
1
+ Description:
2
+ Scaffolds an entire resource, from model and migration to controller and
3
+ views, along with a full test suite. The resource is ready to use as a
4
+ starting point for your restful, resource-oriented application.
5
+
6
+ rx_scaffold delegates the underlying rails code generation to "scaffold"
7
+ and extends it in a number of ways:
8
+ 1. Generates all required Flex code.
9
+ 2. You can pass special belongs_to, has_one and has_many attributes
10
+ to generate *all* appropriate relationships. No more manual code
11
+ editing.
12
+
13
+ Pass the name of the model, either CamelCased or under_scored, as the first
14
+ argument, and an optional list of attribute pairs.
15
+
16
+ Attribute pairs are column_name:sql_type arguments specifying the
17
+ model's attributes. Timestamps are added by default, so you don't have to
18
+ specify them by hand as 'created_at:datetime updated_at:datetime'.
19
+
20
+ The syntax for belongs_to, has_one and has_many attributes is as follows:
21
+ belongs_to:<relationship_name> or
22
+ belongs_to:<relationship_name>,<another_relationship>,<and_another>
23
+
24
+ You don't have to think up every attribute up front, but it helps to
25
+ sketch out a few so you can start working with the resource immediately.
26
+
27
+ For example, `scaffold post title:string body:text published:boolean`
28
+ gives you a model with those three attributes, a controller that handles
29
+ the create/show/update/destroy, forms to create and edit your posts, and
30
+ an index that lists them all, as well as a map.resources :posts
31
+ declaration in config/routes.rb.
32
+
33
+ Examples:
34
+ `./script/generate rx_scaffold project name:string has_many:tasks`
35
+ `./script/generate rx_scaffold task name:string belongs_to:project`
@@ -0,0 +1,242 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'restfulx') if !defined?(RestfulX)
2
+
3
+ module Rails
4
+ module Generator
5
+ class GeneratedAttribute
6
+ attr_accessor :name, :type, :column, :flex_name
7
+
8
+ def initialize(name, type)
9
+ @name, @type = name, type.to_sym
10
+ @flex_name = name.camelcase(:lower)
11
+ @column = ActiveRecord::ConnectionAdapters::Column.new(name, nil, @type)
12
+ end
13
+
14
+ def field_type
15
+ @field_type ||= case type
16
+ when :integer, :float, :decimal then :text_field
17
+ when :datetime, :timestamp, :time then :datetime_select
18
+ when :date then :date_select
19
+ when :string then :text_field
20
+ when :text then :text_area
21
+ when :boolean then :check_box
22
+ else
23
+ :text_field
24
+ end
25
+ end
26
+
27
+ def default(prefix = '')
28
+ @default = case type
29
+ when :integer then 1
30
+ when :float then 1.5
31
+ when :decimal then "9.99"
32
+ when :datetime, :timestamp, :time then Time.now.to_s(:db)
33
+ when :date then Date.today.to_s(:db)
34
+ when :string then prefix + name.camelize + "String"
35
+ when :text then prefix + name.camelize + "Text"
36
+ when :boolean then false
37
+ else
38
+ ""
39
+ end
40
+ end
41
+
42
+ def flex_type
43
+ @flex_type = case type
44
+ when :integer then 'int'
45
+ when :date, :datetime, :time then 'Date'
46
+ when :boolean then 'Boolean'
47
+ when :float, :decimal then 'Number'
48
+ else
49
+ 'String'
50
+ end
51
+ end
52
+
53
+ def flex_default
54
+ @flex_default = case type
55
+ when :integer then '0'
56
+ when :date, :datetime, :time then 'new Date'
57
+ when :boolean then 'false'
58
+ when :float, :decimal then 'new Number'
59
+ else
60
+ "\"\""
61
+ end
62
+ end
63
+ end
64
+ module Commands
65
+ class Create
66
+ include SchemaToYaml
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ class RxScaffoldGenerator < Rails::Generator::NamedBase
73
+ include RestfulX::Configuration
74
+ include SchemaToYaml
75
+
76
+ attr_reader :project_name,
77
+ :flex_project_name,
78
+ :base_package,
79
+ :base_folder,
80
+ :command_controller_name,
81
+ :flex_root,
82
+ :distributed
83
+
84
+ attr_reader :belongs_tos,
85
+ :has_manies,
86
+ :has_ones,
87
+ :attachment_field,
88
+ :has_many_through,
89
+ :polymorphic,
90
+ :tree_model,
91
+ :layout,
92
+ :ignored_fields,
93
+ :args_for_generation
94
+
95
+ attr_reader :controller_name,
96
+ :controller_class_path,
97
+ :controller_file_path,
98
+ :controller_class_nesting,
99
+ :controller_class_nesting_depth,
100
+ :controller_class_name,
101
+ :controller_underscore_name,
102
+ :controller_singular_name,
103
+ :controller_plural_name
104
+
105
+ alias_method :controller_file_name, :controller_underscore_name
106
+ alias_method :controller_table_name, :controller_plural_name
107
+
108
+ def initialize(runtime_args, runtime_options = {})
109
+ super
110
+ @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder, @flex_root,
111
+ @distributed = extract_names
112
+ @controller_name = @name.pluralize
113
+
114
+ base_name, @controller_class_path, @controller_file_path, @controller_class_nesting,
115
+ @controller_class_nesting_depth = extract_modules(@controller_name)
116
+ @controller_class_name_without_nesting, @controller_underscore_name, @controller_plural_name = inflect_names(base_name)
117
+
118
+ @controller_singular_name=base_name.singularize
119
+ if @controller_class_nesting.empty?
120
+ @controller_class_name = @controller_class_name_without_nesting
121
+ else
122
+ @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
123
+ end
124
+ extract_relationships
125
+ end
126
+
127
+ def manifest
128
+ record do |m|
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]
136
+
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, "views", "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, "views", "generated", "#{@class_name}Box.mxml"),
147
+ :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
148
+ end
149
+
150
+ unless options[:skip_fixture]
151
+ m.template 'fixtures.yml.erb', File.join("test", "fixtures", "#{table_name}.yml"),
152
+ :collision => :force unless options[:flex_only]
153
+ end
154
+
155
+ unless options[:skip_migration]
156
+ FileUtils.rm Dir.glob("db/migrate/[0-9]*_create_#{file_path.gsub(/\//, '_').pluralize}.rb"), :force => true
157
+ m.migration_template 'migration.rb.erb', 'db/migrate', :assigns => {
158
+ :migration_name => "Create#{file_path.gsub(/\//, '_').pluralize.camelcase.gsub(/::/, '')}"
159
+ }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}" unless options[:flex_only]
160
+ end
161
+
162
+ m.directory(File.join('test/functional', controller_class_path))
163
+ m.directory(File.join('test/unit', class_path))
164
+ m.directory(File.join('test/unit/helpers', class_path))
165
+
166
+ m.template('functional_test.rb', File.join('test/functional', controller_class_path, "#{controller_file_name}_controller_test.rb"))
167
+ m.template('helper_test.rb', File.join('test/unit/helpers', controller_class_path, "#{controller_file_name}_helper_test.rb"))
168
+
169
+ if File.open('config/routes.rb').grep(/^\s*map.resources :#{controller_file_name}/).empty?
170
+ m.route_resources controller_file_name
171
+ end
172
+
173
+ m.dependency 'rx_controller', [name] + @args, :collision => :force
174
+ end
175
+ end
176
+
177
+ protected
178
+ def extract_relationships
179
+ # arrays
180
+ @belongs_tos = []
181
+ @has_ones = []
182
+ @has_manies = []
183
+ @attachment_field = []
184
+ @polymorphic = []
185
+ @tree_model = []
186
+ @layout = []
187
+ @ignored_fields = []
188
+
189
+ # hashes
190
+ @has_many_through = {}
191
+
192
+ @args.each do |arg|
193
+ # arrays
194
+ if arg =~ /^has_one:/
195
+ @has_ones = arg.split(':')[1].split(',')
196
+ elsif arg =~ /^has_many:/
197
+ @has_manies = arg.split(":")[1].split(",")
198
+ elsif arg =~ /^belongs_to:/
199
+ @belongs_tos = arg.split(":")[1].split(',')
200
+ elsif arg =~ /^attachment_field:/
201
+ @attachment_field = arg.split(":")[1].split(',')
202
+ elsif arg =~ /^polymorphic:/
203
+ @polymorphic = arg.split(":")[1].split(',')
204
+ elsif arg =~ /^tree_model:/
205
+ @tree_model = arg.split(":")[1].split(',')
206
+ elsif arg =~ /^layout:/
207
+ @layout = arg.split(":")[1].split(',')
208
+ elsif arg =~ /^ignored_fields:/
209
+ @ignored_fields = arg.split(":")[1].split(',')
210
+ # hashes
211
+ elsif arg =~ /^has_many_through:/
212
+ hmt_arr = arg.split(":")[1].split(',')
213
+ @has_many_through[hmt_arr.first] = hmt_arr.last
214
+ end
215
+ end
216
+
217
+ # delete special fields from @args ivar
218
+ %w(has_one has_many belongs_to attachment_field has_many_through
219
+ polymorphic tree_model layout ignored_fields).each do |special_field|
220
+ @args.delete_if { |f| f =~ /^(#{special_field}):/ }
221
+ end
222
+
223
+ @args_for_generation = @args.clone
224
+
225
+ # delete ignored_fields from @args ivar
226
+ @ignored_fields.each do |ignored|
227
+ @args.delete_if { |f| f =~ /^(#{ignored}):/ }
228
+ end
229
+
230
+ end
231
+
232
+ def add_options!(opt)
233
+ opt.separator ''
234
+ opt.separator 'Options:'
235
+ opt.on("-f", "--flex-only", "Only generate the Flex/AIR files",
236
+ "Default: false") { |v| options[:flex_only] = v }
237
+ opt.on("-r", "--rails-only", "Only generate the Rails files",
238
+ "Default: false") { |v| options[:rails_only] = v }
239
+ opt.on("-fv", "--flex-view-only", "Only generate the Flex component files",
240
+ "Default: false") { |v| options[:flex_view_only] = v }
241
+ end
242
+ end
@@ -0,0 +1,125 @@
1
+ class <%= controller_class_name %>Controller < ApplicationController
2
+ # GET /<%= table_name %>
3
+ # GET /<%= table_name %>.xml
4
+ # GET /<%= table_name %>.fxml
5
+ def index
6
+ @<%= table_name %> = <%= class_name %>.find(:all)
7
+
8
+ respond_to do |format|
9
+ format.html # index.html.erb
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 -%>
14
+ format.fxml { render :fxml => @<%= table_name %> }
15
+ <% end -%>
16
+ end
17
+ end
18
+
19
+ # GET /<%= table_name %>/1
20
+ # GET /<%= table_name %>/1.xml
21
+ # GET /<%= table_name %>/1.fxml
22
+ def show
23
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
24
+
25
+ respond_to do |format|
26
+ format.html # show.html.erb
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 -%>
31
+ format.fxml { render :fxml => @<%= file_name %> }
32
+ <% end -%>
33
+ end
34
+ end
35
+
36
+ # GET /<%= table_name %>/new
37
+ # GET /<%= table_name %>/new.xml
38
+ def new
39
+ @<%= file_name %> = <%= class_name %>.new
40
+
41
+ respond_to do |format|
42
+ format.html # new.html.erb
43
+ format.xml { render :xml => @<%= file_name %> }
44
+ end
45
+ end
46
+
47
+ # GET /<%= table_name %>/1/edit
48
+ def edit
49
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
50
+ end
51
+
52
+ # POST /<%= table_name %>
53
+ # POST /<%= table_name %>.xml
54
+ # POST /<%= table_name %>.fxml
55
+ def create
56
+ @<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])
57
+
58
+ respond_to do |format|
59
+ if @<%= file_name %>.save
60
+ flash[:notice] = '<%= class_name %> was successfully created.'
61
+ format.html { redirect_to(@<%= file_name %>) }
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 -%>
66
+ format.fxml { render :fxml => @<%= file_name %> }
67
+ <% end -%>
68
+ else
69
+ format.html { render :action => "new" }
70
+ format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
71
+ format.fxml { render :fxml => @<%= file_name %>.errors }
72
+ end
73
+ end
74
+ end
75
+
76
+ # PUT /<%= table_name %>/1
77
+ # PUT /<%= table_name %>/1.xml
78
+ # PUT /<%= table_name %>/1.fxml
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 -%>
90
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
91
+ @saved = @<%= file_name %>.update_attributes(params[:<%= file_name %>])
92
+ <% end -%>
93
+
94
+ respond_to do |format|
95
+ if @saved
96
+ flash[:notice] = '<%= class_name %> was successfully updated.'
97
+ format.html { redirect_to(@<%= file_name %>) }
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 -%>
102
+ format.fxml { render :fxml => @<%= file_name %> }
103
+ <% end -%>
104
+ else
105
+ format.html { render :action => "edit" }
106
+ format.xml { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity }
107
+ format.fxml { render :fxml => @<%= file_name %>.errors }
108
+ end
109
+ end
110
+ end
111
+
112
+ # DELETE /<%= table_name %>/1
113
+ # DELETE /<%= table_name %>/1.xml
114
+ # DELETE /<%= table_name %>/1.fxml
115
+ def destroy
116
+ @<%= file_name %> = <%= class_name %>.find(params[:id])
117
+ @<%= file_name %>.destroy
118
+
119
+ respond_to do |format|
120
+ format.html { redirect_to(<%= table_name %>_url) }
121
+ format.xml { head :ok }
122
+ format.fxml { render :fxml => @<%= file_name %> }
123
+ end
124
+ end
125
+ end