ruboss4ruby 1.0.1
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.
- data/History.txt +3 -0
- data/Manifest.txt +102 -0
- data/README.txt +37 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +72 -0
- data/config/requirements.rb +15 -0
- data/gpl-3.0.txt +674 -0
- data/lib/ruboss4ruby/active_foo.rb +127 -0
- data/lib/ruboss4ruby/active_record_tasks.rb +75 -0
- data/lib/ruboss4ruby/configuration.rb +38 -0
- data/lib/ruboss4ruby/tasks.rb +81 -0
- data/lib/ruboss4ruby/version.rb +11 -0
- data/lib/ruboss4ruby.rb +61 -0
- data/merb_generators/ruboss_config/USAGE +18 -0
- data/merb_generators/ruboss_config/ruboss_config_generator.rb +135 -0
- data/merb_generators/ruboss_config/templates/actionscript.properties +16 -0
- data/merb_generators/ruboss_config/templates/actionscriptair.properties +16 -0
- data/merb_generators/ruboss_config/templates/expressInstall.swf +0 -0
- data/merb_generators/ruboss_config/templates/flex.properties +2 -0
- data/merb_generators/ruboss_config/templates/html-template/AC_OETags.js +276 -0
- data/merb_generators/ruboss_config/templates/html-template/history/history.css +6 -0
- data/merb_generators/ruboss_config/templates/html-template/history/history.js +645 -0
- data/merb_generators/ruboss_config/templates/html-template/history/historyFrame.html +29 -0
- data/merb_generators/ruboss_config/templates/html-template/index.template.html +121 -0
- data/merb_generators/ruboss_config/templates/html-template/playerProductInstall.swf +0 -0
- data/merb_generators/ruboss_config/templates/index.html.erb +19 -0
- data/merb_generators/ruboss_config/templates/mainair-app.xml +134 -0
- data/merb_generators/ruboss_config/templates/mainapp.mxml +34 -0
- data/merb_generators/ruboss_config/templates/project.properties +18 -0
- data/merb_generators/ruboss_config/templates/projectair.properties +24 -0
- data/merb_generators/ruboss_config/templates/swfobject.js +5 -0
- data/merb_generators/ruboss_controller/USAGE +11 -0
- data/merb_generators/ruboss_controller/ruboss_controller_generator.rb +32 -0
- data/merb_generators/ruboss_controller/templates/controller.as.erb +35 -0
- data/merb_generators/ruboss_resource_controller/USAGE +5 -0
- data/merb_generators/ruboss_resource_controller/ruboss_resource_controller_generator.rb +70 -0
- data/merb_generators/ruboss_resource_controller/templates/app/controllers/%controller_file_name%.rb +55 -0
- data/merb_generators/ruboss_resource_controller/templates/app/helpers/%controller_file_name%_helper.rb +16 -0
- data/merb_generators/ruboss_scaffold/USAGE +5 -0
- data/merb_generators/ruboss_scaffold/ruboss_scaffold_generator.rb +189 -0
- data/merb_generators/ruboss_scaffold/templates/component.mxml.erb +148 -0
- data/merb_generators/ruboss_scaffold/templates/fixtures.yml.erb +35 -0
- data/merb_generators/ruboss_scaffold/templates/migration.rb.erb +19 -0
- data/merb_generators/ruboss_scaffold/templates/model.as.erb +42 -0
- data/merb_generators/ruboss_scaffold/templates/model.rb.erb +11 -0
- data/merb_generators/ruboss_yaml_scaffold/USAGE +5 -0
- data/merb_generators/ruboss_yaml_scaffold/ruboss_yaml_scaffold_generator.rb +53 -0
- data/rails_generators/ruboss_config/USAGE +18 -0
- data/rails_generators/ruboss_config/ruboss_config_generator.rb +127 -0
- data/rails_generators/ruboss_config/templates/actionscript.properties +16 -0
- data/rails_generators/ruboss_config/templates/actionscriptair.properties +16 -0
- data/rails_generators/ruboss_config/templates/expressInstall.swf +0 -0
- data/rails_generators/ruboss_config/templates/flex.properties +2 -0
- data/rails_generators/ruboss_config/templates/html-template/AC_OETags.js +276 -0
- data/rails_generators/ruboss_config/templates/html-template/history/history.css +6 -0
- data/rails_generators/ruboss_config/templates/html-template/history/history.js +645 -0
- data/rails_generators/ruboss_config/templates/html-template/history/historyFrame.html +29 -0
- data/rails_generators/ruboss_config/templates/html-template/index.template.html +121 -0
- data/rails_generators/ruboss_config/templates/html-template/playerProductInstall.swf +0 -0
- data/rails_generators/ruboss_config/templates/index.html.erb +19 -0
- data/rails_generators/ruboss_config/templates/mainair-app.xml +134 -0
- data/rails_generators/ruboss_config/templates/mainapp.mxml +34 -0
- data/rails_generators/ruboss_config/templates/project.properties +18 -0
- data/rails_generators/ruboss_config/templates/projectair.properties +24 -0
- data/rails_generators/ruboss_config/templates/ruboss.yml +16 -0
- data/rails_generators/ruboss_config/templates/ruboss_tasks.rake +15 -0
- data/rails_generators/ruboss_config/templates/swfobject.js +5 -0
- data/rails_generators/ruboss_controller/USAGE +11 -0
- data/rails_generators/ruboss_controller/ruboss_controller_generator.rb +46 -0
- data/rails_generators/ruboss_controller/templates/controller.as.erb +35 -0
- data/rails_generators/ruboss_scaffold/USAGE +35 -0
- data/rails_generators/ruboss_scaffold/ruboss_scaffold_generator.rb +192 -0
- data/rails_generators/ruboss_scaffold/templates/component.mxml.erb +148 -0
- data/rails_generators/ruboss_scaffold/templates/controller.rb.erb +97 -0
- data/rails_generators/ruboss_scaffold/templates/fixtures.yml.erb +35 -0
- data/rails_generators/ruboss_scaffold/templates/migration.rb.erb +19 -0
- data/rails_generators/ruboss_scaffold/templates/model.as.erb +42 -0
- data/rails_generators/ruboss_scaffold/templates/model.rb.erb +11 -0
- data/rails_generators/ruboss_yaml_scaffold/USAGE +14 -0
- data/rails_generators/ruboss_yaml_scaffold/ruboss_yaml_scaffold_generator.rb +45 -0
- data/rcl-1.0.txt +0 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +82 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/active_foo_test.rb +16 -0
- data/test/test_generator_helper.rb +29 -0
- data/test/test_helper.rb +2 -0
- data/test/test_ruboss_config_generator.rb +45 -0
- data/test/test_ruboss_controller_generator.rb +45 -0
- data/test/test_ruboss_on_ruby.rb +11 -0
- data/test/test_ruboss_scaffold_generator.rb +45 -0
- data/test/test_ruboss_yaml_scaffold_generator.rb +46 -0
- data/website/index.html +63 -0
- data/website/index.txt +34 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.html.erb +47 -0
- metadata +167 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
require 'ruboss4ruby/configuration'
|
|
2
|
+
|
|
3
|
+
module Ruboss
|
|
4
|
+
module Generator
|
|
5
|
+
class GeneratedAttribute
|
|
6
|
+
attr_accessor :name, :type, :flex_name
|
|
7
|
+
|
|
8
|
+
def initialize(name, type)
|
|
9
|
+
@name, @type = name, type.to_sym
|
|
10
|
+
@flex_name = name.camelcase(:lower)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def field_type
|
|
14
|
+
@field_type ||= case type
|
|
15
|
+
when :integer, :float, :decimal then :text_field
|
|
16
|
+
when :datetime, :timestamp, :time then :datetime_select
|
|
17
|
+
when :date then :date_select
|
|
18
|
+
when :string then :text_field
|
|
19
|
+
when :text then :text_area
|
|
20
|
+
when :boolean then :check_box
|
|
21
|
+
else
|
|
22
|
+
:text_field
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def default(prefix = '')
|
|
27
|
+
@default = case type
|
|
28
|
+
when :integer then 1
|
|
29
|
+
when :float then 1.5
|
|
30
|
+
when :decimal then "9.99"
|
|
31
|
+
when :datetime, :timestamp, :time then Time.now.to_s(:db)
|
|
32
|
+
when :date then Date.today.to_s(:db)
|
|
33
|
+
when :string then prefix + name.camelize + "String"
|
|
34
|
+
when :text then prefix + name.camelize + "Text"
|
|
35
|
+
when :boolean then false
|
|
36
|
+
else
|
|
37
|
+
""
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def flex_type
|
|
42
|
+
@flex_type = case type
|
|
43
|
+
when :integer then 'int'
|
|
44
|
+
when :date, :datetime, :time then 'Date'
|
|
45
|
+
when :boolean then 'Boolean'
|
|
46
|
+
when :float, :decimal then 'Number'
|
|
47
|
+
else
|
|
48
|
+
'String'
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def flex_default(prefix = '')
|
|
53
|
+
@flex_default = case type
|
|
54
|
+
when :integer, :float, :decimal then '0'
|
|
55
|
+
when :string, :text then '""'
|
|
56
|
+
when :boolean then 'false'
|
|
57
|
+
else
|
|
58
|
+
'null'
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
class RubossScaffoldGenerator < Merb::GeneratorBase
|
|
66
|
+
include Ruboss::Configuration
|
|
67
|
+
|
|
68
|
+
attr_reader :class_name,
|
|
69
|
+
:file_name,
|
|
70
|
+
:table_name,
|
|
71
|
+
:provided_args,
|
|
72
|
+
:actual_args
|
|
73
|
+
|
|
74
|
+
attr_reader :project_name,
|
|
75
|
+
:flex_project_name,
|
|
76
|
+
:base_package,
|
|
77
|
+
:base_folder,
|
|
78
|
+
:command_controller_name
|
|
79
|
+
|
|
80
|
+
attr_reader :belongs_tos,
|
|
81
|
+
:has_manies,
|
|
82
|
+
:has_ones
|
|
83
|
+
|
|
84
|
+
def initialize(runtime_args, runtime_options = {})
|
|
85
|
+
@base = File.dirname(__FILE__)
|
|
86
|
+
super
|
|
87
|
+
@project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder = extract_names
|
|
88
|
+
|
|
89
|
+
@actual_args = runtime_args
|
|
90
|
+
@provided_args = runtime_args.dup
|
|
91
|
+
@file_name = actual_args.shift.snake_case
|
|
92
|
+
@table_name = @file_name.pluralize
|
|
93
|
+
@class_name = @file_name.to_const_string
|
|
94
|
+
|
|
95
|
+
@belongs_tos = []
|
|
96
|
+
@has_ones = []
|
|
97
|
+
@has_manies = []
|
|
98
|
+
# Figure out has_one, has_many and belongs_to based on args
|
|
99
|
+
@args.each do |arg|
|
|
100
|
+
if arg =~ /^has_one:/
|
|
101
|
+
# arg = "has_one:arg1,arg2", so all the has_one are together
|
|
102
|
+
@has_ones = arg.split(':')[1].split(',')
|
|
103
|
+
elsif arg =~ /^has_many:/
|
|
104
|
+
# arg = "has_many:arg1,arg2", so all the has_many are together
|
|
105
|
+
@has_manies = arg.split(":")[1].split(",")
|
|
106
|
+
elsif arg =~ /^belongs_to:/ # belongs_to:arg1,arg2
|
|
107
|
+
@belongs_tos = arg.split(":")[1].split(',')
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Remove the has_one and has_many arguments since they are
|
|
112
|
+
# not for consumption by the scaffold generator, and since
|
|
113
|
+
# we have already used them to set the @belongs_tos, @has_ones and
|
|
114
|
+
# @has_manies.
|
|
115
|
+
@actual_args.delete_if { |elt| elt =~ /^(has_one|has_many|belongs_to):/ }
|
|
116
|
+
@provided_args.delete_if { |elt| elt =~ /^(has_one|has_many|belongs_to):/ }
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def manifest
|
|
120
|
+
record do |m|
|
|
121
|
+
@m = m
|
|
122
|
+
|
|
123
|
+
#singularize the model & pluralize the name of the controller
|
|
124
|
+
model_args = provided_args.dup
|
|
125
|
+
controller_args = provided_args.dup
|
|
126
|
+
|
|
127
|
+
# normalize the model_args
|
|
128
|
+
model_args[0] = model_args.first.snake_case.gsub("::", "/").split("/").last.singularize
|
|
129
|
+
|
|
130
|
+
controller_args[0] = controller_args.first.pluralize
|
|
131
|
+
|
|
132
|
+
m.dependency "ruboss_resource_controller", controller_args, options.dup
|
|
133
|
+
|
|
134
|
+
# # Create a new generated ActiveRecord model based on the Ruboss templates.
|
|
135
|
+
m.directory 'app/models'
|
|
136
|
+
m.template 'model.rb.erb', File.join("app", "models", "#{@file_name}.rb"),
|
|
137
|
+
:collision => :force unless options[:flex_only]
|
|
138
|
+
|
|
139
|
+
unless options[:skip_fixture]
|
|
140
|
+
m.directory 'spec/fixtures'
|
|
141
|
+
m.template 'fixtures.yml.erb', File.join("spec", "fixtures", "#{@table_name}.yml"),
|
|
142
|
+
:collision => :force unless options[:flex_only]
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
unless options[:skip_migration]
|
|
146
|
+
m.directory 'schema/migrations'
|
|
147
|
+
current_migration_number = Dir[Dir.pwd+'/schema/migrations/*'].map{|f| File.basename(f) =~ /^(\d+)/; $1}.max
|
|
148
|
+
migration_file_name = format("%03d_%s", (current_migration_number.to_i+1), file_name) + "_migration"
|
|
149
|
+
m.template 'migration.rb.erb', "schema/migrations/#{migration_file_name}.rb", :assigns => {
|
|
150
|
+
:migration_name => "#{@class_name}Migration"
|
|
151
|
+
} unless options[:flex_only]
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
m.dependency "merb_model_test", [@file_name], { :model_file_name => @file_name, :model_class_name => @class_name }
|
|
155
|
+
|
|
156
|
+
# Generate Flex AS model and MXML component based on the
|
|
157
|
+
# Ruboss templates.
|
|
158
|
+
m.template 'model.as.erb',
|
|
159
|
+
File.join("app", "flex", base_folder, "models", "#{@class_name}.as"),
|
|
160
|
+
:assigns => { :resource_controller_name => "#{@table_name}" }
|
|
161
|
+
|
|
162
|
+
m.template 'component.mxml.erb',
|
|
163
|
+
File.join("app", "flex", base_folder, "components", "generated", "#{@class_name}Box.mxml"),
|
|
164
|
+
:assigns => { :resource_controller_name => "#{@table_name}" }
|
|
165
|
+
|
|
166
|
+
# Run the rcontroller generator to clobber the
|
|
167
|
+
# RubossCommandController subclass to include the new models.
|
|
168
|
+
m.dependency 'ruboss_controller', [], :collision => :force
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
protected
|
|
173
|
+
def attributes
|
|
174
|
+
@attributes ||= @args.collect do |attribute|
|
|
175
|
+
Ruboss::Generator::GeneratedAttribute.new(*attribute.split(":"))
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def add_options!(opt)
|
|
180
|
+
opt.separator ''
|
|
181
|
+
opt.separator 'Options:'
|
|
182
|
+
opt.on("-f", "--flex-only", "Scaffold Flex code only",
|
|
183
|
+
"Default: false") { |v| options[:flex_only] = v}
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def banner
|
|
187
|
+
"Usage: #{$0} #{spec.name}"
|
|
188
|
+
end
|
|
189
|
+
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" label="<%= class_name %>"
|
|
3
|
+
xmlns:rcomponents="org.ruboss.components.*">
|
|
4
|
+
<mx:Script><![CDATA[
|
|
5
|
+
import org.ruboss.Ruboss;
|
|
6
|
+
import org.ruboss.utils.RubossUtils;
|
|
7
|
+
import <%= base_package %>.models.<%= class_name %>;
|
|
8
|
+
<% for model in belongs_tos -%>
|
|
9
|
+
import <%= base_package %>.models.<%= model.camelcase %>;
|
|
10
|
+
<% end -%>
|
|
11
|
+
|
|
12
|
+
[Bindable]
|
|
13
|
+
private var _<%= class_name.downcase_first_letter %>:<%= class_name %> = new <%= class_name %>();
|
|
14
|
+
|
|
15
|
+
private function new<%= class_name %>():void {
|
|
16
|
+
_<%= class_name.downcase_first_letter %> = new <%= class_name %>();
|
|
17
|
+
<%= class_name.downcase_first_letter.pluralize %>List.selectedIndex = -1;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
private function save<%= class_name %>():void {
|
|
21
|
+
if (_<%= class_name.downcase_first_letter %>.id) {
|
|
22
|
+
update<%= class_name %>();
|
|
23
|
+
} else {
|
|
24
|
+
create<%= class_name %>();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private function create<%= class_name %>():void {
|
|
29
|
+
var <%= class_name.downcase_first_letter %>:<%= class_name %> = new <%= class_name %>();
|
|
30
|
+
<% for attribute in attributes -%>
|
|
31
|
+
<% if attribute.type == :boolean -%>
|
|
32
|
+
<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>CheckBox.selected;
|
|
33
|
+
<% elsif attribute.type == :string -%>
|
|
34
|
+
<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>TextInput.text;
|
|
35
|
+
<% elsif attribute.type == :text -%>
|
|
36
|
+
<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>TextArea.text;
|
|
37
|
+
<% elsif attribute.type == :datetime || attribute.type == :time -%>
|
|
38
|
+
<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>DateTimeTextInput.date;
|
|
39
|
+
<% elsif attribute.type == :date -%>
|
|
40
|
+
<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>DateField.selectedDate;
|
|
41
|
+
<% else -%>
|
|
42
|
+
<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_type %>(<%= attribute.flex_name %>TextInput.text);
|
|
43
|
+
<% end -%>
|
|
44
|
+
<% end -%>
|
|
45
|
+
|
|
46
|
+
<% for model in belongs_tos -%>
|
|
47
|
+
<%= class_name.downcase_first_letter %>.<%= model.camelcase(:lower) %> = <%= model.camelcase %>(<%= model.camelcase(:lower) %>ComboBox.selectedItem);
|
|
48
|
+
<% end -%>
|
|
49
|
+
<%= class_name.downcase_first_letter %>.create({afterCallback: on<%= class_name %>Create});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private function update<%= class_name %>():void {
|
|
53
|
+
<% for attribute in attributes -%>
|
|
54
|
+
<% if attribute.type == :boolean -%>
|
|
55
|
+
_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>CheckBox.selected;
|
|
56
|
+
<% elsif attribute.type == :string -%>
|
|
57
|
+
_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>TextInput.text;
|
|
58
|
+
<% elsif attribute.type == :text -%>
|
|
59
|
+
_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>TextArea.text;
|
|
60
|
+
<% elsif attribute.type == :datetime || attribute.type == :time -%>
|
|
61
|
+
_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>DateTimeTextInput.date;
|
|
62
|
+
<% elsif attribute.type == :date -%>
|
|
63
|
+
_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_name %>DateField.selectedDate;
|
|
64
|
+
<% else -%>
|
|
65
|
+
_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %> = <%= attribute.flex_type %>(<%= attribute.flex_name %>TextInput.text);
|
|
66
|
+
<% end -%>
|
|
67
|
+
<% end -%>
|
|
68
|
+
|
|
69
|
+
<% for model in belongs_tos -%>
|
|
70
|
+
_<%= class_name.downcase_first_letter %>.<%= model.camelcase(:lower) %> = <%= model.camelcase %>(<%= model.camelcase(:lower) %>ComboBox.selectedItem);
|
|
71
|
+
<% end -%>
|
|
72
|
+
_<%= class_name.downcase_first_letter %>.update({afterCallback: on<%= class_name %>Update});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private function destroy<%= class_name %>():void {
|
|
76
|
+
_<%= class_name.downcase_first_letter %>.destroy({afterCallback: on<%= class_name %>Destroy});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private function on<%= class_name %>Select():void {
|
|
80
|
+
_<%= class_name.downcase_first_letter %> = RubossUtils.clone(<%= class_name.downcase_first_letter.pluralize %>List.selectedItem) as <%= class_name %>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private function on<%= class_name %>Create(<%= class_name.downcase_first_letter %>:<%= class_name %>):void {
|
|
84
|
+
_<%= class_name.downcase_first_letter %> = new <%= class_name %>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private function on<%= class_name %>Update(<%= class_name.downcase_first_letter %>:<%= class_name %>):void {
|
|
88
|
+
<%= class_name.downcase_first_letter.pluralize %>List.selectedItem = <%= class_name.downcase_first_letter %>;
|
|
89
|
+
_<%= class_name.downcase_first_letter %> = RubossUtils.clone(<%= class_name.downcase_first_letter %>) as <%= class_name %>;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private function on<%= class_name %>Destroy(<%= class_name.downcase_first_letter %>:<%= class_name %>):void {
|
|
93
|
+
on<%= class_name %>Create(<%= class_name.downcase_first_letter %>);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private function canDelete<%= class_name %>(<%= class_name.downcase_first_letter %>:<%= class_name %>):Boolean {
|
|
97
|
+
return <%= class_name.downcase_first_letter %> != null && <%= class_name.downcase_first_letter %>.id != 0;
|
|
98
|
+
}
|
|
99
|
+
]]></mx:Script>
|
|
100
|
+
<mx:Panel id="<%= class_name.downcase_first_letter.pluralize %>Panel"
|
|
101
|
+
title="<%= class_name.pluralize %>"
|
|
102
|
+
width="25%" height="100%">
|
|
103
|
+
<mx:List id="<%= class_name.downcase_first_letter.pluralize %>List"
|
|
104
|
+
width="100%" height="100%"
|
|
105
|
+
dataProvider="{Ruboss.models.index(<%= class_name %>)}"
|
|
106
|
+
change="on<%= class_name %>Select()"/>
|
|
107
|
+
<mx:ControlBar width="100%">
|
|
108
|
+
<mx:Button label="New <%= class_name %>" width="100%" height="30"
|
|
109
|
+
click="new<%= class_name %>()"/>
|
|
110
|
+
</mx:ControlBar>
|
|
111
|
+
</mx:Panel>
|
|
112
|
+
<mx:Panel title="Edit <%= class_name %>" width="75%" height="100%">
|
|
113
|
+
<mx:Form width="100%" height="100%">
|
|
114
|
+
<% for attribute in attributes -%>
|
|
115
|
+
<mx:FormItem label="<%= attribute.flex_name.capitalize_without_downcasing %>" width="100%">
|
|
116
|
+
<% if attribute.type == :boolean -%>
|
|
117
|
+
<mx:CheckBox id="<%= attribute.flex_name %>CheckBox" selected="{_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %>}"/>
|
|
118
|
+
<% elsif attribute.type == :string -%>
|
|
119
|
+
<mx:TextInput id="<%= attribute.flex_name %>TextInput" width="100%" text="{_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %>}"/>
|
|
120
|
+
<% elsif attribute.type == :text -%>
|
|
121
|
+
<mx:TextArea id="<%= attribute.flex_name %>TextArea" width="100%" height="200" text="{_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %>}"/>
|
|
122
|
+
<% elsif attribute.type == :datetime || attribute.type == :time -%>
|
|
123
|
+
<rcomponents:DateTimeTextInput id="<%= attribute.flex_name %>DateTimeTextInput" width="200" date="{_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %>}"/>
|
|
124
|
+
<% elsif attribute.type == :date -%>
|
|
125
|
+
<mx:DateField id="<%= attribute.flex_name %>DateField" selectedDate="{_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %>}"/>
|
|
126
|
+
<% else -%>
|
|
127
|
+
<mx:TextInput id="<%= attribute.flex_name %>TextInput" width="100%" text="{_<%= class_name.downcase_first_letter %>.<%= attribute.flex_name %>}"/>
|
|
128
|
+
<% end -%>
|
|
129
|
+
</mx:FormItem>
|
|
130
|
+
<% end -%>
|
|
131
|
+
<% for model in belongs_tos -%>
|
|
132
|
+
<mx:FormItem label="<%= model.camelcase %>" width="100%">
|
|
133
|
+
<mx:ComboBox id="<%= model.camelcase(:lower) %>ComboBox" width="200"
|
|
134
|
+
labelField="{<%= model.camelcase %>.LABEL}"
|
|
135
|
+
dataProvider="{Ruboss.models.index(<%= model.camelcase %>)}" prompt="<%= model.camelcase %> ..."
|
|
136
|
+
selectedItem="{_<%= class_name.downcase_first_letter %>.<%= model.camelcase(:lower) %>}" />
|
|
137
|
+
</mx:FormItem>
|
|
138
|
+
<% end -%>
|
|
139
|
+
</mx:Form>
|
|
140
|
+
<mx:ControlBar width="100%">
|
|
141
|
+
<mx:Button label="Save <%= class_name %>" width="50%" height="30"
|
|
142
|
+
click="save<%= class_name %>()"/>
|
|
143
|
+
<mx:Button label="Delete <%= class_name %>" width="50%" height="30"
|
|
144
|
+
enabled="{canDelete<%= class_name %>(_<%= class_name.downcase_first_letter %>)}"
|
|
145
|
+
click="destroy<%= class_name %>()"/>
|
|
146
|
+
</mx:ControlBar>
|
|
147
|
+
</mx:Panel>
|
|
148
|
+
</mx:HBox>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
|
2
|
+
|
|
3
|
+
<% unless attributes.empty? && belongs_tos.empty? -%>
|
|
4
|
+
<%= class_name.underscore -%>_one:
|
|
5
|
+
<% for attribute in attributes -%>
|
|
6
|
+
<%= attribute.name %>: <%= attribute.default("#{class_name}1") %>
|
|
7
|
+
<% end -%>
|
|
8
|
+
<% for model in belongs_tos -%>
|
|
9
|
+
<%= model %>: <%= model %>_one
|
|
10
|
+
<% end -%>
|
|
11
|
+
|
|
12
|
+
<%= class_name.underscore -%>_two:
|
|
13
|
+
<% for attribute in attributes -%>
|
|
14
|
+
<%= attribute.name %>: <%= attribute.default("#{class_name}2") %>
|
|
15
|
+
<% end -%>
|
|
16
|
+
<% for model in belongs_tos -%>
|
|
17
|
+
<%= model %>: <%= model %>_two
|
|
18
|
+
<% end -%>
|
|
19
|
+
|
|
20
|
+
<%= class_name.underscore -%>_three:
|
|
21
|
+
<% for attribute in attributes -%>
|
|
22
|
+
<%= attribute.name %>: <%= attribute.default("#{class_name}3") %>
|
|
23
|
+
<% end -%>
|
|
24
|
+
<% for model in belongs_tos -%>
|
|
25
|
+
<%= model %>: <%= model %>_three
|
|
26
|
+
<% end -%>
|
|
27
|
+
|
|
28
|
+
<%= class_name.underscore -%>_four:
|
|
29
|
+
<% for attribute in attributes -%>
|
|
30
|
+
<%= attribute.name %>: <%= attribute.default("#{class_name}4") %>
|
|
31
|
+
<% end -%>
|
|
32
|
+
<% for model in belongs_tos -%>
|
|
33
|
+
<%= model %>: <%= model %>_four
|
|
34
|
+
<% end -%>
|
|
35
|
+
<% end -%>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class <%= migration_name %> < ActiveRecord::Migration
|
|
2
|
+
def self.up
|
|
3
|
+
create_table :<%= table_name %> do |t|
|
|
4
|
+
<% for attribute in attributes -%>
|
|
5
|
+
t.<%= attribute.type %> :<%= attribute.name %>
|
|
6
|
+
<% end -%>
|
|
7
|
+
<% for model in belongs_tos -%>
|
|
8
|
+
t.references :<%= model %>
|
|
9
|
+
<% end -%>
|
|
10
|
+
<% unless options[:skip_timestamps] %>
|
|
11
|
+
t.timestamps
|
|
12
|
+
<% end -%>
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.down
|
|
17
|
+
drop_table :<%= table_name %>
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
package <%= base_package %>.models {
|
|
2
|
+
<% if has_manies.length > 0 -%>
|
|
3
|
+
import org.ruboss.models.ModelsCollection;
|
|
4
|
+
<% end -%>
|
|
5
|
+
import org.ruboss.models.RubossModel;
|
|
6
|
+
|
|
7
|
+
[Resource(name="<%= resource_controller_name %>")]
|
|
8
|
+
[Bindable]
|
|
9
|
+
public class <%= class_name %> extends RubossModel {
|
|
10
|
+
<% if attributes && !attributes.empty? && attributes[0].flex_type != "Boolean" -%>
|
|
11
|
+
public static const LABEL:String = "<%= attributes[0].flex_name %>";
|
|
12
|
+
<% else -%>
|
|
13
|
+
public static const LABEL:String = "id";
|
|
14
|
+
<% end -%>
|
|
15
|
+
|
|
16
|
+
<% for attribute in attributes -%>
|
|
17
|
+
<% if attribute.type == :datetime || attribute.type == :time -%>
|
|
18
|
+
[DateTime]
|
|
19
|
+
<% end -%>
|
|
20
|
+
public var <%= attribute.flex_name %>:<%= attribute.flex_type %>;
|
|
21
|
+
|
|
22
|
+
<% end -%>
|
|
23
|
+
<% for model in belongs_tos -%>
|
|
24
|
+
[BelongsTo]
|
|
25
|
+
public var <%= model.camelcase(:lower) %>:<%= model.camelcase %>;
|
|
26
|
+
|
|
27
|
+
<% end -%>
|
|
28
|
+
<% for model in has_ones -%>
|
|
29
|
+
[HasOne]
|
|
30
|
+
public var <%= model.camelcase(:lower) %>:<%= model.camelcase %>;
|
|
31
|
+
|
|
32
|
+
<% end -%>
|
|
33
|
+
<% for model in has_manies -%>
|
|
34
|
+
[HasMany]
|
|
35
|
+
public var <%= model.camelcase(:lower) %>:ModelsCollection;
|
|
36
|
+
|
|
37
|
+
<% end -%>
|
|
38
|
+
public function <%= class_name %>() {
|
|
39
|
+
super(LABEL);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class <%= class_name %> < ActiveRecord::Base
|
|
2
|
+
<% for model in belongs_tos -%>
|
|
3
|
+
belongs_to :<%= model %>
|
|
4
|
+
<% end -%>
|
|
5
|
+
<% for model in has_ones -%>
|
|
6
|
+
has_one :<%= model %>
|
|
7
|
+
<% end -%>
|
|
8
|
+
<% for model in has_manies -%>
|
|
9
|
+
has_many :<%= model %>
|
|
10
|
+
<% end -%>
|
|
11
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'ruboss4ruby/configuration'
|
|
3
|
+
|
|
4
|
+
class RubossYamlScaffoldGenerator < Merb::GeneratorBase
|
|
5
|
+
include Ruboss::Configuration
|
|
6
|
+
|
|
7
|
+
def initialize(runtime_args, runtime_options = {})
|
|
8
|
+
runtime_args.push ""
|
|
9
|
+
super
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def extract_attrs(line, attrs)
|
|
13
|
+
attrs.each do |key,value|
|
|
14
|
+
if value.class == Array
|
|
15
|
+
line << " #{key}:#{value.join(',')}"
|
|
16
|
+
else
|
|
17
|
+
line << " #{key}:#{value}"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
line
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def manifest
|
|
24
|
+
record do |m|
|
|
25
|
+
models = YAML.load(File.open(File.join(APP_ROOT, 'schema/model.yml'), 'r'))
|
|
26
|
+
models.each do |model|
|
|
27
|
+
line = ""
|
|
28
|
+
attrs = model[1]
|
|
29
|
+
if attrs.class == Array
|
|
30
|
+
attrs.each do |elm|
|
|
31
|
+
line = extract_attrs(line, elm)
|
|
32
|
+
end
|
|
33
|
+
else
|
|
34
|
+
line = extract_attrs(line, attrs)
|
|
35
|
+
end
|
|
36
|
+
line = model[0].camelcase + " " + line
|
|
37
|
+
line = '--flex-only ' + line if ARGV.include?('flexonly')
|
|
38
|
+
puts 'running: ruboss_scaffold ' + line
|
|
39
|
+
Merb::ComponentGenerator.run "ruboss_scaffold", line.split(" "), "ruboss_scaffold", "generate"
|
|
40
|
+
puts 'done ...'
|
|
41
|
+
sleep 1
|
|
42
|
+
end
|
|
43
|
+
config_args = ['--main-only']
|
|
44
|
+
config_args << '--skip-framework' if ARGV.include?('skipframework')
|
|
45
|
+
Merb::ComponentGenerator.run "ruboss_config", config_args, "ruboss_config", "generate"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
def banner
|
|
51
|
+
"Usage: #{$0} #{spec.name}"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Description:
|
|
2
|
+
Generates the primary Ruboss directory structure, sets up Flex Builder
|
|
3
|
+
specific descriptor files and options fetches the latest published
|
|
4
|
+
Ruboss 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 ruboss_config` # generates project structure and a
|
|
12
|
+
# default Flex app configuration. Fetches
|
|
13
|
+
# latest ruboss framework SWC to "lib"
|
|
14
|
+
# folder
|
|
15
|
+
`./script/generate ruboss_config -a` # as above but generates an AIR app
|
|
16
|
+
# and configuration
|
|
17
|
+
`./script/generate ruboss_config -s` # generates Flex app but does not fetch
|
|
18
|
+
# the ruboss framework SWC.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
################################################################################
|
|
2
|
+
# Copyright 2008, Ruboss Technology Corporation.
|
|
3
|
+
#
|
|
4
|
+
# This software is dual-licensed under both the terms of the Ruboss Commercial
|
|
5
|
+
# License v1 (RCL v1) as published by Ruboss Technology Corporation and under
|
|
6
|
+
# the terms of the GNU General Public License v3 (GPL v3) as published by the
|
|
7
|
+
# Free Software Foundation.
|
|
8
|
+
#
|
|
9
|
+
# Both the RCL v1 (rcl-1.0.txt) and the GPL v3 (gpl-3.0.txt) are included in
|
|
10
|
+
# the source code. If you have purchased a commercial license then only the
|
|
11
|
+
# RCL v1 applies; otherwise, only the GPL v3 applies. To learn more or to buy a
|
|
12
|
+
# commercial license, please go to http://ruboss.com.
|
|
13
|
+
################################################################################
|
|
14
|
+
require 'open-uri'
|
|
15
|
+
require 'ruboss4ruby/version'
|
|
16
|
+
require 'ruboss4ruby/configuration'
|
|
17
|
+
|
|
18
|
+
class RubossConfigGenerator < Rails::Generator::Base
|
|
19
|
+
include Ruboss::Configuration
|
|
20
|
+
|
|
21
|
+
attr_reader :project_name,
|
|
22
|
+
:flex_project_name,
|
|
23
|
+
:base_package,
|
|
24
|
+
:base_folder,
|
|
25
|
+
:command_controller_name,
|
|
26
|
+
:component_names,
|
|
27
|
+
:application_tag,
|
|
28
|
+
:use_air
|
|
29
|
+
|
|
30
|
+
def initialize(runtime_args, runtime_options = {})
|
|
31
|
+
super
|
|
32
|
+
@project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder = extract_names
|
|
33
|
+
|
|
34
|
+
# if we are updating main file only we probably want to maintain the type of project it is
|
|
35
|
+
if options[:main_only]
|
|
36
|
+
project_file_name = APP_ROOT + '/.project'
|
|
37
|
+
if File.exist?(project_file_name)
|
|
38
|
+
puts "Cannot combine -m (--main-app) and -a (--air) flags at the same time for an existing application.\n" <<
|
|
39
|
+
'If you want to convert to AIR, remove -m flag.' if options[:air_config]
|
|
40
|
+
@use_air = true if File.read(project_file_name) =~/com.adobe.flexbuilder.apollo.apollobuilder/m
|
|
41
|
+
else
|
|
42
|
+
puts "Flex Builder project file doesn't exist. You should run 'ruboss_config' with -a (--air) option " <<
|
|
43
|
+
"or no arguments first to generate primary project structure."
|
|
44
|
+
exit 0;
|
|
45
|
+
end
|
|
46
|
+
else
|
|
47
|
+
@use_air = options[:air_config]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if @use_air
|
|
51
|
+
@application_tag = 'WindowedApplication'
|
|
52
|
+
else
|
|
53
|
+
@application_tag = 'Application'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
@component_names = []
|
|
57
|
+
if File.exists?("app/flex/#{base_folder}/components/generated")
|
|
58
|
+
@component_names = list_mxml_files("app/flex/#{base_folder}/components/generated")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def manifest
|
|
63
|
+
record do |m|
|
|
64
|
+
if !options[:main_only]
|
|
65
|
+
m.file 'ruboss_tasks.rake', 'lib/tasks/ruboss_tasks.rake'
|
|
66
|
+
m.file 'flex.properties', '.flexProperties'
|
|
67
|
+
m.file 'ruboss.yml', 'config/ruboss.yml'
|
|
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.directory 'html-template/history'
|
|
77
|
+
%w(index.template.html AC_OETags.js playerProductInstall.swf).each do |file|
|
|
78
|
+
m.file "html-template/#{file}", "html-template/#{file}"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
%w(history.css history.js historyFrame.html).each do |file|
|
|
82
|
+
m.file "html-template/history/#{file}", "html-template/history/#{file}"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
%w(components controllers commands models events).each do |dir|
|
|
86
|
+
m.directory "app/flex/#{base_folder}/#{dir}"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
m.directory "app/flex/#{base_folder}/components/generated"
|
|
90
|
+
|
|
91
|
+
framework_release = Ruboss::RUBOSS_FRAMEWORK_VERSION
|
|
92
|
+
framework_distribution_url = "http://ruboss.com/releases/ruboss-#{framework_release}.swc"
|
|
93
|
+
framework_destination_file = "lib/ruboss-#{framework_release}.swc"
|
|
94
|
+
|
|
95
|
+
if !options[:skip_framework] && !File.exist?(framework_destination_file)
|
|
96
|
+
puts "fetching #{framework_release} framework binary from: #{framework_distribution_url} ..."
|
|
97
|
+
open(framework_destination_file, "wb").write(open(framework_distribution_url).read)
|
|
98
|
+
puts "done. saved to #{framework_destination_file}"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
m.file 'swfobject.js', 'public/javascripts/swfobject.js'
|
|
102
|
+
m.file 'expressInstall.swf', 'public/expressInstall.swf'
|
|
103
|
+
m.template 'index.html.erb', 'public/index.html'
|
|
104
|
+
|
|
105
|
+
m.dependency 'ruboss_controller', @args
|
|
106
|
+
end
|
|
107
|
+
m.template 'mainapp.mxml', File.join('app/flex', "#{project_name}.mxml")
|
|
108
|
+
m.template 'mainair-app.xml', File.join('app/flex', "#{project_name}-app.xml") if @use_air
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
protected
|
|
113
|
+
def add_options!(opt)
|
|
114
|
+
opt.separator ''
|
|
115
|
+
opt.separator 'Options:'
|
|
116
|
+
opt.on("-m", "--main-only", "Only generate the main Flex/AIR application file.",
|
|
117
|
+
"Default: false") { |v| options[:main_only] = v }
|
|
118
|
+
opt.on("-a", "--air", "Configure AIR project instead of Flex. Flex is default.",
|
|
119
|
+
"Default: false") { |v| options[:air_config] = v }
|
|
120
|
+
opt.on("-s", "--skip-framework", "Don't fetch the latest framework binary. You'll have to link/build the framework yourself.",
|
|
121
|
+
"Default: false") { |v| options[:skip_framework] = v }
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def banner
|
|
125
|
+
"Usage: #{$0} #{spec.name}"
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<actionScriptProperties mainApplicationPath="<%= project_name %>.mxml" version="3">
|
|
3
|
+
<compiler additionalCompilerArguments="-locale en_US -keep-as3-metadata+=Resource,HasOne,HasMany,BelongsTo,DateTime,Lazy,Ignored" 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="app/flex" 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="<%= project_name %>.mxml"/>
|
|
13
|
+
</applications>
|
|
14
|
+
<modules/>
|
|
15
|
+
<buildCSSFiles/>
|
|
16
|
+
</actionScriptProperties>
|