ruboss4ruby 1.0.1 → 1.0.2

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 (41) hide show
  1. data/Manifest.txt +30 -6
  2. data/config/hoe.rb +1 -1
  3. data/lib/ruboss4ruby/configuration.rb +24 -0
  4. data/lib/ruboss4ruby/generated_attribute.rb +61 -0
  5. data/lib/ruboss4ruby/tasks.rb +3 -3
  6. data/lib/ruboss4ruby/version.rb +2 -2
  7. data/lib/ruboss4ruby.rb +7 -0
  8. data/merb_generators/ruboss_config/templates/index.html.erb +1 -2
  9. data/merb_generators/ruboss_config.rb +105 -0
  10. data/merb_generators/ruboss_controller.rb +61 -0
  11. data/merb_generators/ruboss_flex_app.rb +69 -0
  12. data/merb_generators/ruboss_resource_controller.rb +4 -0
  13. data/merb_generators/ruboss_scaffold/ruboss_scaffold_generator.rb +0 -62
  14. data/merb_generators/ruboss_scaffold.rb +158 -0
  15. data/merb_generators/templates/ruboss_config/actionscript.properties +16 -0
  16. data/merb_generators/templates/ruboss_config/actionscriptair.properties +16 -0
  17. data/merb_generators/templates/ruboss_config/expressInstall.swf +0 -0
  18. data/merb_generators/templates/ruboss_config/flex.properties +2 -0
  19. data/merb_generators/templates/ruboss_config/html-template/AC_OETags.js +276 -0
  20. data/merb_generators/templates/ruboss_config/html-template/history/history.css +6 -0
  21. data/merb_generators/templates/ruboss_config/html-template/history/history.js +645 -0
  22. data/merb_generators/templates/ruboss_config/html-template/history/historyFrame.html +29 -0
  23. data/merb_generators/templates/ruboss_config/html-template/index.template.html +121 -0
  24. data/merb_generators/templates/ruboss_config/html-template/playerProductInstall.swf +0 -0
  25. data/merb_generators/templates/ruboss_config/index.html.erb +18 -0
  26. data/merb_generators/templates/ruboss_config/mainair-app.xml +134 -0
  27. data/merb_generators/templates/ruboss_config/project.properties +18 -0
  28. data/merb_generators/templates/ruboss_config/projectair.properties +24 -0
  29. data/merb_generators/templates/ruboss_config/ruboss.yml +16 -0
  30. data/merb_generators/templates/ruboss_config/swfobject.js +5 -0
  31. data/merb_generators/{ruboss_controller/templates → templates/ruboss_controller}/controller.as.erb +0 -0
  32. data/merb_generators/templates/ruboss_flex_app/mainapp.mxml +34 -0
  33. data/merb_generators/templates/ruboss_resource_controller/controller.rb.erb +49 -0
  34. data/merb_generators/{ruboss_scaffold/templates → templates/ruboss_scaffold}/component.mxml.erb +0 -0
  35. data/merb_generators/{ruboss_scaffold/templates → templates/ruboss_scaffold}/fixtures.yml.erb +0 -0
  36. data/merb_generators/{ruboss_scaffold/templates → templates/ruboss_scaffold}/migration.rb.erb +0 -0
  37. data/merb_generators/{ruboss_scaffold/templates → templates/ruboss_scaffold}/model.as.erb +0 -0
  38. data/merb_generators/{ruboss_scaffold/templates → templates/ruboss_scaffold}/model.rb.erb +0 -0
  39. data/rails_generators/ruboss_config/templates/index.html.erb +1 -2
  40. data/website/index.html +1 -1
  41. metadata +32 -8
@@ -0,0 +1,158 @@
1
+ require 'ruboss4ruby/configuration'
2
+ require 'ruboss4ruby/generated_attribute'
3
+
4
+ module Merb::Generators
5
+ class RubossScaffoldGenerator < NamespacedGenerator
6
+ include Ruboss::Configuration
7
+
8
+ option :flex_only, :as => :boolean, :default => false, :desc => 'Scaffold Flex code only.'
9
+ option :skip_migration, :as => :boolean, :default => false, :desc => 'Skip migration for this model.'
10
+
11
+ first_argument :name, :required => true, :desc => "model name"
12
+ second_argument :properties, :as => :hash, :required => true, :default => {}, :desc => "space separated model properties in form of name:type. Example: state:string"
13
+
14
+ def initialize(*args)
15
+ super
16
+ @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder = extract_names
17
+
18
+ @belongs_tos = []
19
+ @has_ones = []
20
+ @has_manies = []
21
+ # Figure out has_one, has_many and belongs_to based on args
22
+ self.properties.each do |key,value|
23
+ puts key + value
24
+ key = key.to_sym
25
+ if key == :has_one
26
+ # arg = "has_one:arg1,arg2", so all the has_one are together
27
+ @has_ones = value.split(',')
28
+ elsif key == :has_many
29
+ # arg = "has_many:arg1,arg2", so all the has_many are together
30
+ @has_manies = value.split(",")
31
+ elsif key == :belongs_to # belongs_to:arg1,arg2
32
+ @belongs_tos = value.split(',')
33
+ end
34
+ end
35
+
36
+ puts belongs_tos
37
+ puts has_manies
38
+
39
+ # Remove the has_one and has_many arguments since they are
40
+ # not for consumption by the scaffold generator, and since
41
+ # we have already used them to set the @belongs_tos, @has_ones and
42
+ # @has_manies.
43
+ self.properties.delete_if { |key, value| key =~ /^(has_one|has_many|belongs_to)/ }
44
+ end
45
+
46
+ def table_name
47
+ file_name.pluralize
48
+ end
49
+
50
+ alias_method :resource_controller_name, :table_name
51
+
52
+ def model_name
53
+ name
54
+ end
55
+
56
+ def controller_name
57
+ name.pluralize
58
+ end
59
+
60
+ def project_name
61
+ @project_name
62
+ end
63
+
64
+ def flex_project_name
65
+ @flex_project_name
66
+ end
67
+
68
+ def base_folder
69
+ @base_folder
70
+ end
71
+
72
+ def base_package
73
+ @base_package
74
+ end
75
+
76
+ def command_controller_name
77
+ @command_controller_name
78
+ end
79
+
80
+ def belongs_tos
81
+ @belongs_tos
82
+ end
83
+
84
+ def has_manies
85
+ @has_manies
86
+ end
87
+
88
+ def has_ones
89
+ @has_ones
90
+ end
91
+
92
+ def attributes
93
+ @attributes ||= self.properties.collect do |key, value|
94
+ Ruboss::Generator::GeneratedAttribute.new(key, value)
95
+ end
96
+ end
97
+
98
+ def self.source_root
99
+ File.join(File.dirname(__FILE__), 'templates', 'ruboss_scaffold')
100
+ end
101
+
102
+ # invoke :model do |generator|
103
+ # generator.new(destination_root, options, model_name, self.properties)
104
+ # end
105
+
106
+ invoke :ruboss_resource_controller do |generator|
107
+ generator.new(destination_root, options, controller_name)
108
+ end
109
+
110
+ template :ar_model, :flex_only => false do
111
+ source('model.rb.erb')
112
+ destination(File.join('app', 'models', "#{file_name}.rb"))
113
+ end
114
+
115
+ empty_directory :fixtures, File.join('spec', 'fixtures')
116
+
117
+ template :fixture, :flex_only => false do
118
+ source('fixtures.yml.erb')
119
+ destination(File.join('spec', 'fixtures', "#{table_name}.yml"))
120
+ end
121
+
122
+ empty_directory :migrations, File.join('schema', 'migrations')
123
+
124
+ template :migration, :flex_only => false, :skip_migration => false do
125
+ source('migration.rb.erb')
126
+ destination(File.join('schema', 'migrations', "#{migration_file_name}.rb"))
127
+ end
128
+
129
+ template :as_model do
130
+ source('model.as.erb')
131
+ destination(File.join('app', 'flex', base_folder, 'models', "#{class_name}.as"))
132
+ end
133
+
134
+ template :flex_component do
135
+ source('component.mxml.erb')
136
+ destination(File.join('app', 'flex', base_folder, 'components', 'generated', "#{class_name}Box.mxml"))
137
+ end
138
+
139
+ invoke :ruboss_controller do |generator|
140
+ generator.new(destination_root, options)
141
+ end
142
+
143
+ def migration_file_name
144
+ current_migration_number = Dir[Dir.pwd+'/schema/migrations/*'].map{|f| File.basename(f) =~ /^(\d+)/; $1}.max
145
+ migration_file_name = format("%03d_%s", (current_migration_number.to_i+1), file_name) + "_migration"
146
+ end
147
+
148
+ def migration_name
149
+ "#{class_name}Migration"
150
+ end
151
+
152
+ desc <<-DESC
153
+ Foobar.
154
+ DESC
155
+ end
156
+
157
+ add :ruboss_scaffold, RubossScaffoldGenerator
158
+ 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:4000/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>
@@ -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="false" htmlHistoryManagement="false" htmlPlayerVersion="9.0.28" htmlPlayerVersionCheck="true" outputFolderPath="bin-debug" sourceFolderPath="app/flex" strict="true" useApolloConfig="true" 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>
@@ -0,0 +1,2 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <flexProperties flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="1"/>
@@ -0,0 +1,276 @@
1
+ // Flash Player Version Detection - Rev 1.6
2
+ // Detect Client Browser type
3
+ // Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
4
+ var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
5
+ var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
6
+ var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
7
+
8
+ function ControlVersion()
9
+ {
10
+ var version;
11
+ var axo;
12
+ var e;
13
+
14
+ // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
15
+
16
+ try {
17
+ // version will be set for 7.X or greater players
18
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
19
+ version = axo.GetVariable("$version");
20
+ } catch (e) {
21
+ }
22
+
23
+ if (!version)
24
+ {
25
+ try {
26
+ // version will be set for 6.X players only
27
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
28
+
29
+ // installed player is some revision of 6.0
30
+ // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
31
+ // so we have to be careful.
32
+
33
+ // default to the first public version
34
+ version = "WIN 6,0,21,0";
35
+
36
+ // throws if AllowScripAccess does not exist (introduced in 6.0r47)
37
+ axo.AllowScriptAccess = "always";
38
+
39
+ // safe to call for 6.0r47 or greater
40
+ version = axo.GetVariable("$version");
41
+
42
+ } catch (e) {
43
+ }
44
+ }
45
+
46
+ if (!version)
47
+ {
48
+ try {
49
+ // version will be set for 4.X or 5.X player
50
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
51
+ version = axo.GetVariable("$version");
52
+ } catch (e) {
53
+ }
54
+ }
55
+
56
+ if (!version)
57
+ {
58
+ try {
59
+ // version will be set for 3.X player
60
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
61
+ version = "WIN 3,0,18,0";
62
+ } catch (e) {
63
+ }
64
+ }
65
+
66
+ if (!version)
67
+ {
68
+ try {
69
+ // version will be set for 2.X player
70
+ axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
71
+ version = "WIN 2,0,0,11";
72
+ } catch (e) {
73
+ version = -1;
74
+ }
75
+ }
76
+
77
+ return version;
78
+ }
79
+
80
+ // JavaScript helper required to detect Flash Player PlugIn version information
81
+ function GetSwfVer(){
82
+ // NS/Opera version >= 3 check for Flash plugin in plugin array
83
+ var flashVer = -1;
84
+
85
+ if (navigator.plugins != null && navigator.plugins.length > 0) {
86
+ if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
87
+ var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
88
+ var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
89
+ var descArray = flashDescription.split(" ");
90
+ var tempArrayMajor = descArray[2].split(".");
91
+ var versionMajor = tempArrayMajor[0];
92
+ var versionMinor = tempArrayMajor[1];
93
+ var versionRevision = descArray[3];
94
+ if (versionRevision == "") {
95
+ versionRevision = descArray[4];
96
+ }
97
+ if (versionRevision[0] == "d") {
98
+ versionRevision = versionRevision.substring(1);
99
+ } else if (versionRevision[0] == "r") {
100
+ versionRevision = versionRevision.substring(1);
101
+ if (versionRevision.indexOf("d") > 0) {
102
+ versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
103
+ }
104
+ }
105
+ var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
106
+ }
107
+ }
108
+ // MSN/WebTV 2.6 supports Flash 4
109
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
110
+ // WebTV 2.5 supports Flash 3
111
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
112
+ // older WebTV supports Flash 2
113
+ else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
114
+ else if ( isIE && isWin && !isOpera ) {
115
+ flashVer = ControlVersion();
116
+ }
117
+ return flashVer;
118
+ }
119
+
120
+ // When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
121
+ function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
122
+ {
123
+ versionStr = GetSwfVer();
124
+ if (versionStr == -1 ) {
125
+ return false;
126
+ } else if (versionStr != 0) {
127
+ if(isIE && isWin && !isOpera) {
128
+ // Given "WIN 2,0,0,11"
129
+ tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
130
+ tempString = tempArray[1]; // "2,0,0,11"
131
+ versionArray = tempString.split(","); // ['2', '0', '0', '11']
132
+ } else {
133
+ versionArray = versionStr.split(".");
134
+ }
135
+ var versionMajor = versionArray[0];
136
+ var versionMinor = versionArray[1];
137
+ var versionRevision = versionArray[2];
138
+
139
+ // is the major.revision >= requested major.revision AND the minor version >= requested minor
140
+ if (versionMajor > parseFloat(reqMajorVer)) {
141
+ return true;
142
+ } else if (versionMajor == parseFloat(reqMajorVer)) {
143
+ if (versionMinor > parseFloat(reqMinorVer))
144
+ return true;
145
+ else if (versionMinor == parseFloat(reqMinorVer)) {
146
+ if (versionRevision >= parseFloat(reqRevision))
147
+ return true;
148
+ }
149
+ }
150
+ return false;
151
+ }
152
+ }
153
+
154
+ function AC_AddExtension(src, ext)
155
+ {
156
+ if (src.indexOf('?') != -1)
157
+ return src.replace(/\?/, ext+'?');
158
+ else
159
+ return src + ext;
160
+ }
161
+
162
+ function AC_Generateobj(objAttrs, params, embedAttrs)
163
+ {
164
+ var str = '';
165
+ if (isIE && isWin && !isOpera)
166
+ {
167
+ str += '<object ';
168
+ for (var i in objAttrs)
169
+ str += i + '="' + objAttrs[i] + '" ';
170
+ str += '>';
171
+ for (var i in params)
172
+ str += '<param name="' + i + '" value="' + params[i] + '" /> ';
173
+ str += '</object>';
174
+ } else {
175
+ str += '<embed ';
176
+ for (var i in embedAttrs)
177
+ str += i + '="' + embedAttrs[i] + '" ';
178
+ str += '> </embed>';
179
+ }
180
+
181
+ document.write(str);
182
+ }
183
+
184
+ function AC_FL_RunContent(){
185
+ var ret =
186
+ AC_GetArgs
187
+ ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
188
+ , "application/x-shockwave-flash"
189
+ );
190
+ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
191
+ }
192
+
193
+ function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
194
+ var ret = new Object();
195
+ ret.embedAttrs = new Object();
196
+ ret.params = new Object();
197
+ ret.objAttrs = new Object();
198
+ for (var i=0; i < args.length; i=i+2){
199
+ var currArg = args[i].toLowerCase();
200
+
201
+ switch (currArg){
202
+ case "classid":
203
+ break;
204
+ case "pluginspage":
205
+ ret.embedAttrs[args[i]] = args[i+1];
206
+ break;
207
+ case "src":
208
+ case "movie":
209
+ args[i+1] = AC_AddExtension(args[i+1], ext);
210
+ ret.embedAttrs["src"] = args[i+1];
211
+ ret.params[srcParamName] = args[i+1];
212
+ break;
213
+ case "onafterupdate":
214
+ case "onbeforeupdate":
215
+ case "onblur":
216
+ case "oncellchange":
217
+ case "onclick":
218
+ case "ondblClick":
219
+ case "ondrag":
220
+ case "ondragend":
221
+ case "ondragenter":
222
+ case "ondragleave":
223
+ case "ondragover":
224
+ case "ondrop":
225
+ case "onfinish":
226
+ case "onfocus":
227
+ case "onhelp":
228
+ case "onmousedown":
229
+ case "onmouseup":
230
+ case "onmouseover":
231
+ case "onmousemove":
232
+ case "onmouseout":
233
+ case "onkeypress":
234
+ case "onkeydown":
235
+ case "onkeyup":
236
+ case "onload":
237
+ case "onlosecapture":
238
+ case "onpropertychange":
239
+ case "onreadystatechange":
240
+ case "onrowsdelete":
241
+ case "onrowenter":
242
+ case "onrowexit":
243
+ case "onrowsinserted":
244
+ case "onstart":
245
+ case "onscroll":
246
+ case "onbeforeeditfocus":
247
+ case "onactivate":
248
+ case "onbeforedeactivate":
249
+ case "ondeactivate":
250
+ case "type":
251
+ case "codebase":
252
+ ret.objAttrs[args[i]] = args[i+1];
253
+ break;
254
+ case "id":
255
+ case "width":
256
+ case "height":
257
+ case "align":
258
+ case "vspace":
259
+ case "hspace":
260
+ case "class":
261
+ case "title":
262
+ case "accesskey":
263
+ case "name":
264
+ case "tabindex":
265
+ ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
266
+ break;
267
+ default:
268
+ ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
269
+ }
270
+ }
271
+ ret.objAttrs["classid"] = classid;
272
+ if (mimeType) ret.embedAttrs["type"] = mimeType;
273
+ return ret;
274
+ }
275
+
276
+
@@ -0,0 +1,6 @@
1
+ /* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
2
+
3
+ #ie_historyFrame { width: 0px; height: 0px; display:none }
4
+ #firefox_anchorDiv { width: 0px; height: 0px; display:none }
5
+ #safari_formDiv { width: 0px; height: 0px; display:none }
6
+ #safari_rememberDiv { width: 0px; height: 0px; display:none }