restfulx 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README.rdoc +1 -1
  2. data/Rakefile +3 -1
  3. data/VERSION.yml +1 -1
  4. data/app_generators/rx_app/rx_app_generator.rb +2 -2
  5. data/app_generators/rx_app/templates/actionscript.properties +1 -1
  6. data/app_generators/rx_app/templates/actionscriptair.properties +1 -1
  7. data/app_generators/rx_app/templates/mainapp-config.xml +1 -0
  8. data/app_generators/rx_app/templates/mainapp.mxml +1 -1
  9. data/app_generators/rx_app/templates/restfulx.yml +26 -5
  10. data/lib/restfulx.rb +1 -1
  11. data/lib/restfulx/active_foo.rb +5 -2
  12. data/lib/restfulx/active_record_uuid_helper.rb +1 -1
  13. data/lib/restfulx/configuration.rb +15 -4
  14. data/lib/restfulx/rails/schema_to_yaml.rb +0 -11
  15. data/lib/restfulx/rails/schema_to_yaml/settings/core.rb +4 -1
  16. data/lib/restfulx/rails/swf_helper.rb +7 -3
  17. data/lib/restfulx/tasks.rb +0 -1
  18. data/rails_generators/rx_config/rx_config_generator.rb +16 -7
  19. data/rails_generators/rx_config/templates/actionscript.properties +1 -1
  20. data/rails_generators/rx_config/templates/actionscriptair.properties +1 -1
  21. data/rails_generators/rx_config/templates/mainapp-config.xml +1 -0
  22. data/rails_generators/rx_config/templates/restfulx.erb +45 -8
  23. data/rails_generators/rx_config/templates/restfulx.yml +4 -4
  24. data/rails_generators/rx_config/templates/session_store_flash.erb +1 -0
  25. data/rails_generators/rx_main_app/rx_main_app_generator.rb +2 -2
  26. data/rails_generators/rx_main_app/templates/mainapp.mxml +1 -1
  27. data/rails_generators/rx_scaffold/rx_scaffold_generator.rb +15 -6
  28. data/rails_generators/rx_scaffold/templates/controllers/resource_controller.rb.erb +2 -2
  29. data/rails_generators/rx_scaffold/templates/functional_test.rb +45 -0
  30. data/rails_generators/rx_scaffold/templates/helper_test.rb +4 -0
  31. data/rails_generators/rx_scaffold/templates/layouts/default.erb +7 -5
  32. data/rails_generators/rx_scaffold/templates/migration.rb.erb +4 -4
  33. data/rxgen_generators/rx_config/rx_config_generator.rb +2 -0
  34. data/rxgen_generators/rx_controller/templates/assist.py +1 -1
  35. data/rxgen_generators/rx_main_app/rx_main_app_generator.rb +2 -2
  36. data/rxgen_generators/rx_main_app/templates/mainapp.mxml +1 -1
  37. data/rxgen_generators/rx_scaffold/rx_scaffold_generator.rb +56 -9
  38. data/rxgen_generators/rx_scaffold/templates/{component.mxml.erb → layouts/default.erb} +56 -10
  39. data/rxgen_generators/rx_scaffold/templates/model.as.erb +33 -2
  40. data/test/rails/controllers/{application.rb → application_controller.rb} +0 -0
  41. data/test/rails/helpers/functional_test_helper.rb +1 -1
  42. data/test/rails/helpers/test_helper.rb +1 -8
  43. data/test/rails/helpers/unit_test_helper.rb +2 -3
  44. data/test/rails/test_active_foo.rb +1 -1
  45. data/test/rails/test_rails_integration_functional.rb +1 -1
  46. data/test/rails/test_to_fxml.rb +1 -1
  47. data/test/rails/test_to_json.rb +1 -1
  48. metadata +59 -73
@@ -0,0 +1 @@
1
+ ActionController::Dispatcher.middleware.use FlashSessionCookieMiddleware, ActionController::Base.session_options[:key]
@@ -43,8 +43,8 @@ class RxMainAppGenerator < Rails::Generator::Base
43
43
  end
44
44
 
45
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")
46
+ if File.exists?("#{flex_root}/#{base_folder}/views/generated")
47
+ @component_names = list_mxml_files("#{flex_root}/#{base_folder}/views/generated")
48
48
  end
49
49
  end
50
50
 
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
2
  <mx:<%= application_tag %> xmlns:mx="http://www.adobe.com/2006/mxml"
3
- xmlns:generated="<%= base_package %>.components.generated.*"
3
+ xmlns:generated="<%= base_package %>.views.generated.*"
4
4
  paddingBottom="8" paddingLeft="8" paddingRight="8" paddingTop="8"
5
5
  layout="horizontal" styleName="plain" initialize="init()">
6
6
  <mx:Script>
@@ -139,11 +139,11 @@ class RxScaffoldGenerator < Rails::Generator::NamedBase
139
139
 
140
140
  if @layout.size > 0
141
141
  m.template "layouts/#{@layout}.erb",
142
- File.join("#{@flex_root}", base_folder, "components", "generated", "#{@class_name}Box.mxml"),
142
+ File.join("#{@flex_root}", base_folder, "views", "generated", "#{@class_name}Box.mxml"),
143
143
  :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
144
144
  else
145
145
  m.template "layouts/#{RxSettings.layouts.default}.erb",
146
- File.join("#{@flex_root}", base_folder, "components", "generated", "#{@class_name}Box.mxml"),
146
+ File.join("#{@flex_root}", base_folder, "views", "generated", "#{@class_name}Box.mxml"),
147
147
  :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
148
148
  end
149
149
 
@@ -155,11 +155,20 @@ class RxScaffoldGenerator < Rails::Generator::NamedBase
155
155
  unless options[:skip_migration]
156
156
  FileUtils.rm Dir.glob("db/migrate/[0-9]*_create_#{file_path.gsub(/\//, '_').pluralize}.rb"), :force => true
157
157
  m.migration_template 'migration.rb.erb', 'db/migrate', :assigns => {
158
- :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
158
+ :migration_name => "Create#{file_path.gsub(/\//, '_').pluralize.camelcase.gsub(/::/, '')}"
159
159
  }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}" unless options[:flex_only]
160
160
  end
161
-
162
- m.route_resources controller_file_name
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
163
172
 
164
173
  m.dependency 'rx_controller', [name] + @args, :collision => :force
165
174
  end
@@ -230,4 +239,4 @@ class RxScaffoldGenerator < Rails::Generator::NamedBase
230
239
  opt.on("-fv", "--flex-view-only", "Only generate the Flex component files",
231
240
  "Default: false") { |v| options[:flex_view_only] = v }
232
241
  end
233
- end
242
+ end
@@ -10,8 +10,8 @@ class <%= controller_class_name %>Controller < ResourceController::Base
10
10
  update.failure.wants.fxml { render :fxml => @object.errors }
11
11
  destroy.wants.fxml { render :fxml => @object }
12
12
 
13
- private
14
-
13
+ private
14
+
15
15
  def collection
16
16
  @collection = end_of_association_chain.all
17
17
  end
@@ -0,0 +1,45 @@
1
+ require 'test_helper'
2
+
3
+ class <%= controller_class_name %>ControllerTest < ActionController::TestCase
4
+ test "should get index" do
5
+ get :index
6
+ assert_response :success
7
+ assert_not_nil assigns(:<%= table_name %>)
8
+ end
9
+
10
+ test "should get new" do
11
+ get :new
12
+ assert_response :success
13
+ end
14
+
15
+ test "should create <%= file_name %>" do
16
+ assert_difference('<%= class_name %>.count') do
17
+ post :create, :<%= file_name %> => { }
18
+ end
19
+
20
+ assert_redirected_to <%= file_name %>_path(assigns(:<%= file_name %>))
21
+ end
22
+
23
+ test "should show <%= file_name %>" do
24
+ get :show, :id => <%= table_name %>(:one).id
25
+ assert_response :success
26
+ end
27
+
28
+ test "should get edit" do
29
+ get :edit, :id => <%= table_name %>(:one).id
30
+ assert_response :success
31
+ end
32
+
33
+ test "should update <%= file_name %>" do
34
+ put :update, :id => <%= table_name %>(:one).id, :<%= file_name %> => { }
35
+ assert_redirected_to <%= file_name %>_path(assigns(:<%= file_name %>))
36
+ end
37
+
38
+ test "should destroy <%= file_name %>" do
39
+ assert_difference('<%= class_name %>.count', -1) do
40
+ delete :destroy, :id => <%= table_name %>(:one).id
41
+ end
42
+
43
+ assert_redirected_to <%= table_name %>_path
44
+ end
45
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class <%= controller_class_name %>HelperTest < ActionView::TestCase
4
+ end
@@ -9,12 +9,14 @@
9
9
  import <%= base_package %>.models.<%= model.camelcase %>;
10
10
  <% end -%>
11
11
  <% if attachment_field.size > 0 -%>
12
+ import flash.net.FileReference;
12
13
  import org.restfulx.utils.RxFileReference;
13
14
  <% end -%>
14
15
 
15
16
  [Bindable]
16
17
  private var <%= class_name.dcfirst %>:<%= class_name %> = new <%= class_name %>();
17
18
  <% if attachment_field.size > 0 -%>
19
+
18
20
  [Bindable]
19
21
  private var fileName:String = "None selected";
20
22
 
@@ -83,10 +85,10 @@
83
85
 
84
86
  private function chooseFile():void {
85
87
  file = new RxFileReference("<%= attachment_field[0].camelcase(:lower) %>");
86
- file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);
87
- file.addEventListener(Event.SELECT, selectFile, false, 0, true);
88
- file.addEventListener(Event.CANCEL, cancelBrowse, false, 0, true);
89
- file.browse();
88
+ file.reference.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);
89
+ file.reference.addEventListener(Event.SELECT, selectFile, false, 0, true);
90
+ file.reference.addEventListener(Event.CANCEL, cancelBrowse, false, 0, true);
91
+ file.reference.browse();
90
92
  }
91
93
 
92
94
  private function selectFile(event:Event):void {
@@ -98,7 +100,7 @@
98
100
  }
99
101
 
100
102
  private function fileSelected(event:Event):void {
101
- fileName = RxFileReference(event.target).name;
103
+ fileName = FileReference(event.target).name;
102
104
  }
103
105
 
104
106
  private function ioErrorHandler(event:Event):void {
@@ -19,10 +19,10 @@ class <%= migration_name %> < ActiveRecord::Migration
19
19
  <% if attachment_field.size > 0 -%>
20
20
  <% if RxSettings.attachment_plugin == 'paperclip' -%>
21
21
  # For paperclip
22
- t.column :avatar_file_name, :string
23
- t.column :avatar_content_type, :string
24
- t.column :avatar_file_size, :integer
25
- t.column :avatar_updated_at, :datetime
22
+ t.column :<%= attachment_field[0] %>_file_name, :string
23
+ t.column :<%= attachment_field[0] %>_content_type, :string
24
+ t.column :<%= attachment_field[0] %>_file_size, :integer
25
+ t.column :<%= attachment_field[0] %>_updated_at, :datetime
26
26
  <% elsif RxSettings.attachment_plugin == 'attachment_fu' -%>
27
27
  # For attachment_fu
28
28
  t.column :parent_id, :integer
@@ -14,6 +14,8 @@ class RxConfigGenerator < RubiGen::Base
14
14
  open(framework_destination_file, "wb").write(open(framework_distribution_url).read)
15
15
  puts "done. saved to #{framework_destination_file}"
16
16
  end
17
+
18
+ m.dependency 'rx_controller', @args
17
19
  end
18
20
  end
19
21
  end
@@ -27,7 +27,7 @@ import datetime, iso8601
27
27
 
28
28
  # Some useful module methods
29
29
  def all(model):
30
- items = "".join(str(item.to_xml()) for item in model.all())
30
+ items = "".join(str(item.to_xml().encode('UTF-8')) for item in model.all())
31
31
  if items == "":
32
32
  return '<entities type="array"/>'
33
33
  else:
@@ -32,8 +32,8 @@ class RxMainAppGenerator < RubiGen::Base
32
32
  end
33
33
 
34
34
  @component_names = []
35
- if File.exists?("#{flex_root}/#{base_folder}/components/generated")
36
- @component_names = list_mxml_files("#{flex_root}/#{base_folder}/components/generated")
35
+ if File.exists?("#{flex_root}/#{base_folder}/views/generated")
36
+ @component_names = list_mxml_files("#{flex_root}/#{base_folder}/views/generated")
37
37
  end
38
38
 
39
39
  @controller_names = []
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
2
  <mx:<%= application_tag %> xmlns:mx="http://www.adobe.com/2006/mxml"
3
- xmlns:generated="<%= base_package %>.components.generated.*"
3
+ xmlns:generated="<%= base_package %>.views.generated.*"
4
4
  paddingBottom="8" paddingLeft="8" paddingRight="8" paddingTop="8"
5
5
  layout="horizontal" styleName="plain" initialize="init()">
6
6
  <mx:Script>
@@ -70,7 +70,14 @@ class RxScaffoldGenerator < RubiGen::Base
70
70
 
71
71
  attr_reader :belongs_tos,
72
72
  :has_manies,
73
- :has_ones
73
+ :has_ones,
74
+ :attachment_field,
75
+ :has_many_through,
76
+ :polymorphic,
77
+ :tree_model,
78
+ :layout,
79
+ :ignored_fields,
80
+ :args_for_generation
74
81
 
75
82
  attr_reader :name,
76
83
  :class_name,
@@ -98,9 +105,15 @@ class RxScaffoldGenerator < RubiGen::Base
98
105
  File.join("#{flex_root}", base_folder, "models", "#{@class_name}.as"),
99
106
  :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
100
107
 
101
- m.template 'component.mxml.erb',
102
- File.join("#{flex_root}", base_folder, "components", "generated", "#{@class_name}Box.mxml"),
103
- :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
108
+ if @layout.size > 0
109
+ m.template "layouts/#{@layout}.erb",
110
+ File.join("#{@flex_root}", base_folder, "views", "generated", "#{@class_name}Box.mxml"),
111
+ :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
112
+ else
113
+ m.template "layouts/#{RxSettings.layouts.default}.erb",
114
+ File.join("#{@flex_root}", base_folder, "views", "generated", "#{@class_name}Box.mxml"),
115
+ :assigns => { :resource_controller_name => "#{file_name.pluralize}" }
116
+ end
104
117
 
105
118
  if options[:gae]
106
119
  m.template 'controller.py.erb', "app/controllers/#{file_name.pluralize}.py"
@@ -113,23 +126,57 @@ class RxScaffoldGenerator < RubiGen::Base
113
126
 
114
127
  protected
115
128
  def extract_relationships
129
+ # arrays
116
130
  @belongs_tos = []
117
131
  @has_ones = []
118
132
  @has_manies = []
119
- # Figure out has_one, has_many and belongs_to based on args
133
+ @attachment_field = []
134
+ @polymorphic = []
135
+ @tree_model = []
136
+ @layout = []
137
+ @ignored_fields = []
138
+
139
+ # hashes
140
+ @has_many_through = {}
141
+
120
142
  @args.each do |arg|
143
+ # arrays
121
144
  if arg =~ /^has_one:/
122
- # arg = "has_one:arg1,arg2", so all the has_one are together
123
145
  @has_ones = arg.split(':')[1].split(',')
124
146
  elsif arg =~ /^has_many:/
125
- # arg = "has_many:arg1,arg2", so all the has_many are together
126
147
  @has_manies = arg.split(":")[1].split(",")
127
- elsif arg =~ /^belongs_to:/ # belongs_to:arg1,arg2
148
+ elsif arg =~ /^belongs_to:/
128
149
  @belongs_tos = arg.split(":")[1].split(',')
150
+ elsif arg =~ /^attachment_field:/
151
+ @attachment_field = arg.split(":")[1].split(',')
152
+ elsif arg =~ /^polymorphic:/
153
+ @polymorphic = arg.split(":")[1].split(',')
154
+ elsif arg =~ /^tree_model:/
155
+ @tree_model = arg.split(":")[1].split(',')
156
+ elsif arg =~ /^layout:/
157
+ @layout = arg.split(":")[1].split(',')
158
+ elsif arg =~ /^ignored_fields:/
159
+ @ignored_fields = arg.split(":")[1].split(',')
160
+ # hashes
161
+ elsif arg =~ /^has_many_through:/
162
+ hmt_arr = arg.split(":")[1].split(',')
163
+ @has_many_through[hmt_arr.first] = hmt_arr.last
129
164
  end
130
165
  end
131
166
 
132
- @args.delete_if { |elt| elt =~ /^(has_one|has_many|belongs_to):/ }
167
+ # delete special fields from @args ivar
168
+ %w(has_one has_many belongs_to attachment_field has_many_through
169
+ polymorphic tree_model layout ignored_fields).each do |special_field|
170
+ @args.delete_if { |f| f =~ /^(#{special_field}):/ }
171
+ end
172
+
173
+ @args_for_generation = @args.clone
174
+
175
+ # delete ignored_fields from @args ivar
176
+ @ignored_fields.each do |ignored|
177
+ @args.delete_if { |f| f =~ /^(#{ignored}):/ }
178
+ end
179
+
133
180
  end
134
181
 
135
182
  def attributes
@@ -8,9 +8,20 @@
8
8
  <% for model in belongs_tos -%>
9
9
  import <%= base_package %>.models.<%= model.camelcase %>;
10
10
  <% end -%>
11
+ <% if attachment_field.size > 0 -%>
12
+ import flash.net.FileReference;
13
+ import org.restfulx.utils.RxFileReference;
14
+ <% end -%>
11
15
 
12
16
  [Bindable]
13
17
  private var <%= class_name.dcfirst %>:<%= class_name %> = new <%= class_name %>();
18
+ <% if attachment_field.size > 0 -%>
19
+
20
+ [Bindable]
21
+ private var fileName:String = "None selected";
22
+
23
+ private var file:RxFileReference;
24
+ <% end -%>
14
25
 
15
26
  private function new<%= class_name %>():void {
16
27
  <%= class_name.dcfirst %> = new <%= class_name %>();
@@ -41,36 +52,64 @@
41
52
  <% else -%>
42
53
  <%= class_name.dcfirst %>.<%= attribute.flex_name %> = <%= attribute.flex_type %>(<%= attribute.flex_name %>TextInput.text);
43
54
  <% end -%>
44
- <% end -%>
45
-
55
+ <% end -%>
46
56
  <% for model in belongs_tos -%>
47
57
  <%= class_name.dcfirst %>.<%= model.camelcase(:lower) %> = <%= model.camelcase %>(<%= model.camelcase(:lower) %>ComboBox.selectedItem);
58
+ <% end -%>
59
+ <% if attachment_field.size > 0 -%>
60
+ <%= class_name.dcfirst %>.attachment = file;
48
61
  <% end -%>
49
62
  }
50
-
63
+
51
64
  private function destroy<%= class_name %>():void {
52
65
  <%= class_name.dcfirst %>.destroy({onSuccess: on<%= class_name %>Destroy});
53
66
  }
54
-
67
+
55
68
  private function on<%= class_name %>Select():void {
56
69
  <%= class_name.dcfirst %> = RxUtils.clone(<%= class_name.dcfirst.pluralize %>List.selectedItem) as <%= class_name %>;
57
70
  }
58
-
71
+
59
72
  private function on<%= class_name %>Create(result:<%= class_name %>):void {
60
73
  <%= class_name.dcfirst %> = new <%= class_name %>;
61
74
  }
62
-
75
+
63
76
  private function on<%= class_name %>Update(result:<%= class_name %>):void {
64
77
  <%= class_name.dcfirst.pluralize %>List.selectedItem = result;
65
78
  on<%= class_name %>Select();
66
79
  }
67
-
80
+
68
81
  private function on<%= class_name %>Destroy(result:<%= class_name %>):void {
69
82
  on<%= class_name %>Create(result);
83
+ }
84
+ <% if attachment_field.size > 0 -%>
85
+
86
+ private function chooseFile():void {
87
+ file = new RxFileReference("<%= attachment_field[0].camelcase(:lower) %>");
88
+ file.reference.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler, false, 0, true);
89
+ file.reference.addEventListener(Event.SELECT, selectFile, false, 0, true);
90
+ file.reference.addEventListener(Event.CANCEL, cancelBrowse, false, 0, true);
91
+ file.reference.browse();
92
+ }
93
+
94
+ private function selectFile(event:Event):void {
95
+ fileSelected(event)
96
+ }
97
+
98
+ private function cancelBrowse(event:Event):void {
99
+ file = null;
70
100
  }
101
+
102
+ private function fileSelected(event:Event):void {
103
+ fileName = FileReference(event.target).name;
104
+ }
105
+
106
+ private function ioErrorHandler(event:Event):void {
107
+ fileChooser.errorString = "Failed to selected a file. Please try again.";
108
+ }
109
+ <% end -%>
71
110
  ]]></mx:Script>
72
111
  <mx:Panel id="<%= class_name.dcfirst.pluralize %>Panel"
73
- title="<%= class_name.pluralize %>" cornerRadius="0" dropShadowEnabled="false" borderStyle="solid"
112
+ title="<%= class_name.pluralize %>" cornerRadius="0" dropShadowEnabled="false" borderStyle="solid"
74
113
  borderThickness="1" backgroundColor="#EEEEEE" width="25%" height="100%">
75
114
  <mx:List id="<%= class_name.dcfirst.pluralize %>List"
76
115
  width="100%" height="100%"
@@ -81,7 +120,7 @@
81
120
  click="new<%= class_name %>()"/>
82
121
  </mx:ControlBar>
83
122
  </mx:Panel>
84
- <mx:Panel title="Edit <%= class_name %>" cornerRadius="0" dropShadowEnabled="false" borderStyle="solid"
123
+ <mx:Panel title="Edit <%= class_name %>" cornerRadius="0" dropShadowEnabled="false" borderStyle="solid"
85
124
  borderThickness="1" backgroundColor="#EEEEEE" width="75%" height="100%">
86
125
  <mx:Form width="100%" height="100%">
87
126
  <% for attribute in attributes -%>
@@ -101,12 +140,19 @@
101
140
  <% end -%>
102
141
  </mx:FormItem>
103
142
  <% end -%>
143
+ <% if attachment_field.size > 0 -%>
144
+ <mx:FormItem label="<%= attachment_field[0].camelcase %>:" width="100%" id="fileChooser">
145
+ <mx:Button label="Browse…" id="fileBrowseButton" click="chooseFile()"/>
146
+ <mx:Label text="{fileName}" maxWidth="190"/>
147
+ <mx:Image source="{<%= class_name.dcfirst %>.attachmentUrl}"/>
148
+ </mx:FormItem>
149
+ <% end -%>
104
150
  <% for model in belongs_tos -%>
105
151
  <mx:FormItem label="<%= model.camelcase %>" width="100%">
106
152
  <mx:ComboBox id="<%= model.camelcase(:lower) %>ComboBox" width="200"
107
153
  labelField="{<%= model.camelcase %>.LABEL}"
108
154
  dataProvider="{Rx.models.index(<%= model.camelcase %>)}" prompt="<%= model.camelcase %> ..."
109
- selectedItem="{<%= class_name.dcfirst %>.<%= model.camelcase(:lower) %>}" />
155
+ selectedItem="{<%= class_name.dcfirst %>.<%= model.camelcase(:lower) %>}"/>
110
156
  </mx:FormItem>
111
157
  <% end -%>
112
158
  </mx:Form>