restfulx 1.2.0

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 (141) hide show
  1. data/History.txt +7 -0
  2. data/Manifest.txt +127 -0
  3. data/README.rdoc +50 -0
  4. data/Rakefile +42 -0
  5. data/app_generators/rx_app/USAGE +22 -0
  6. data/app_generators/rx_app/rx_app_generator.rb +94 -0
  7. data/app_generators/rx_app/templates/actionscript.properties +16 -0
  8. data/app_generators/rx_app/templates/actionscriptair.properties +16 -0
  9. data/app_generators/rx_app/templates/app.yaml.erb +12 -0
  10. data/app_generators/rx_app/templates/default_tasks.rake +51 -0
  11. data/app_generators/rx_app/templates/empty.txt +0 -0
  12. data/app_generators/rx_app/templates/expressInstall.swf +0 -0
  13. data/app_generators/rx_app/templates/flex.properties +2 -0
  14. data/app_generators/rx_app/templates/generate.rb +17 -0
  15. data/app_generators/rx_app/templates/html-template/AC_OETags.js +276 -0
  16. data/app_generators/rx_app/templates/html-template/history/history.css +6 -0
  17. data/app_generators/rx_app/templates/html-template/history/history.js +645 -0
  18. data/app_generators/rx_app/templates/html-template/history/historyFrame.html +29 -0
  19. data/app_generators/rx_app/templates/html-template/index.template.html +121 -0
  20. data/app_generators/rx_app/templates/html-template/playerProductInstall.swf +0 -0
  21. data/app_generators/rx_app/templates/index.html.erb +18 -0
  22. data/app_generators/rx_app/templates/index.yaml +11 -0
  23. data/app_generators/rx_app/templates/mainair-app.xml +134 -0
  24. data/app_generators/rx_app/templates/mainapp-config.xml +21 -0
  25. data/app_generators/rx_app/templates/mainapp.mxml +31 -0
  26. data/app_generators/rx_app/templates/project-textmate.erb +52 -0
  27. data/app_generators/rx_app/templates/project.properties +18 -0
  28. data/app_generators/rx_app/templates/projectair.properties +24 -0
  29. data/app_generators/rx_app/templates/swfobject.js +5 -0
  30. data/bin/rx-gen +31 -0
  31. data/generators/rx_config/USAGE +5 -0
  32. data/generators/rx_config/rx_config_generator.rb +19 -0
  33. data/generators/rx_controller/USAGE +10 -0
  34. data/generators/rx_controller/rx_controller_generator.rb +39 -0
  35. data/generators/rx_controller/templates/assist.py +65 -0
  36. data/generators/rx_controller/templates/controller.as.erb +36 -0
  37. data/generators/rx_controller/templates/restful.py +136 -0
  38. data/generators/rx_main_app/USAGE +8 -0
  39. data/generators/rx_main_app/rx_main_app_generator.rb +60 -0
  40. data/generators/rx_main_app/templates/main.py.erb +29 -0
  41. data/generators/rx_main_app/templates/mainapp.mxml +35 -0
  42. data/generators/rx_scaffold/USAGE +29 -0
  43. data/generators/rx_scaffold/rx_scaffold_generator.rb +146 -0
  44. data/generators/rx_scaffold/templates/component.mxml.erb +149 -0
  45. data/generators/rx_scaffold/templates/controller.py.erb +27 -0
  46. data/generators/rx_scaffold/templates/model.as.erb +42 -0
  47. data/generators/rx_scaffold/templates/model.py.erb +14 -0
  48. data/generators/rx_yaml_scaffold/USAGE +45 -0
  49. data/generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +47 -0
  50. data/lib/restfulx/active_foo.rb +186 -0
  51. data/lib/restfulx/active_record_tasks.rb +81 -0
  52. data/lib/restfulx/configuration.rb +76 -0
  53. data/lib/restfulx/datamapper_foo.rb +31 -0
  54. data/lib/restfulx/rails/recipes.rb +60 -0
  55. data/lib/restfulx/rails/swf_helper.rb +60 -0
  56. data/lib/restfulx/tasks.rb +85 -0
  57. data/lib/restfulx.rb +117 -0
  58. data/rails_generators/rx_config/USAGE +18 -0
  59. data/rails_generators/rx_config/rx_config_generator.rb +115 -0
  60. data/rails_generators/rx_config/templates/actionscript.properties +16 -0
  61. data/rails_generators/rx_config/templates/actionscriptair.properties +16 -0
  62. data/rails_generators/rx_config/templates/expressInstall.swf +0 -0
  63. data/rails_generators/rx_config/templates/flex.properties +2 -0
  64. data/rails_generators/rx_config/templates/html-template/AC_OETags.js +276 -0
  65. data/rails_generators/rx_config/templates/html-template/history/history.css +6 -0
  66. data/rails_generators/rx_config/templates/html-template/history/history.js +645 -0
  67. data/rails_generators/rx_config/templates/html-template/history/historyFrame.html +29 -0
  68. data/rails_generators/rx_config/templates/html-template/index.template.html +121 -0
  69. data/rails_generators/rx_config/templates/html-template/playerProductInstall.swf +0 -0
  70. data/rails_generators/rx_config/templates/index.html.erb +18 -0
  71. data/rails_generators/rx_config/templates/mainair-app.xml +134 -0
  72. data/rails_generators/rx_config/templates/mainapp-config.xml +21 -0
  73. data/rails_generators/rx_config/templates/mainapp.mxml +31 -0
  74. data/rails_generators/rx_config/templates/project-textmate.erb +52 -0
  75. data/rails_generators/rx_config/templates/project.properties +18 -0
  76. data/rails_generators/rx_config/templates/projectair.properties +24 -0
  77. data/rails_generators/rx_config/templates/restfulx.yml +14 -0
  78. data/rails_generators/rx_config/templates/restfulx_tasks.rake +6 -0
  79. data/rails_generators/rx_config/templates/swfobject.js +5 -0
  80. data/rails_generators/rx_controller/USAGE +10 -0
  81. data/rails_generators/rx_controller/rx_controller_generator.rb +28 -0
  82. data/rails_generators/rx_controller/templates/controller.as.erb +40 -0
  83. data/rails_generators/rx_scaffold/USAGE +35 -0
  84. data/rails_generators/rx_scaffold/rx_scaffold_generator.rb +179 -0
  85. data/rails_generators/rx_scaffold/templates/component.mxml.erb +149 -0
  86. data/rails_generators/rx_scaffold/templates/controller.rb.erb +97 -0
  87. data/rails_generators/rx_scaffold/templates/fixtures.yml.erb +35 -0
  88. data/rails_generators/rx_scaffold/templates/migration.rb.erb +19 -0
  89. data/rails_generators/rx_scaffold/templates/model.as.erb +42 -0
  90. data/rails_generators/rx_scaffold/templates/model.rb.erb +11 -0
  91. data/rails_generators/rx_yaml_scaffold/USAGE +51 -0
  92. data/rails_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +49 -0
  93. data/rdoc/generators/template/html/jamis.rb +588 -0
  94. data/spec/restfulx_spec.rb +7 -0
  95. data/spec/spec_helper.rb +16 -0
  96. data/tasks/ann.rake +80 -0
  97. data/tasks/bones.rake +20 -0
  98. data/tasks/gem.rake +201 -0
  99. data/tasks/git.rake +40 -0
  100. data/tasks/manifest.rake +48 -0
  101. data/tasks/notes.rake +27 -0
  102. data/tasks/post_load.rake +39 -0
  103. data/tasks/rdoc.rake +50 -0
  104. data/tasks/rubyforge.rake +55 -0
  105. data/tasks/setup.rb +279 -0
  106. data/tasks/spec.rake +54 -0
  107. data/tasks/svn.rake +47 -0
  108. data/tasks/test.rake +40 -0
  109. data/test/rails/controllers/application.rb +15 -0
  110. data/test/rails/controllers/locations_controller.rb +93 -0
  111. data/test/rails/controllers/notes_controller.rb +96 -0
  112. data/test/rails/controllers/projects_controller.rb +93 -0
  113. data/test/rails/controllers/tasks_controller.rb +93 -0
  114. data/test/rails/controllers/users_controller.rb +93 -0
  115. data/test/rails/database.yml +4 -0
  116. data/test/rails/fixtures/locations.yml +8 -0
  117. data/test/rails/fixtures/notes.yml +17 -0
  118. data/test/rails/fixtures/projects.yml +25 -0
  119. data/test/rails/fixtures/simple_properties.yml +19 -0
  120. data/test/rails/fixtures/tasks.yml +46 -0
  121. data/test/rails/fixtures/users.yml +13 -0
  122. data/test/rails/helpers/functional_test_helper.rb +21 -0
  123. data/test/rails/helpers/test_helper.rb +61 -0
  124. data/test/rails/helpers/unit_test_helper.rb +30 -0
  125. data/test/rails/model.yml +35 -0
  126. data/test/rails/models/location.rb +4 -0
  127. data/test/rails/models/note.rb +3 -0
  128. data/test/rails/models/project.rb +4 -0
  129. data/test/rails/models/simple_property.rb +2 -0
  130. data/test/rails/models/task.rb +18 -0
  131. data/test/rails/models/user.rb +20 -0
  132. data/test/rails/playing_around_in_a_console.txt +71 -0
  133. data/test/rails/schema.rb +77 -0
  134. data/test/rails/test.swf +1 -0
  135. data/test/rails/test_active_foo.rb +36 -0
  136. data/test/rails/test_rails_integration_functional.rb +22 -0
  137. data/test/rails/test_to_fxml.rb +35 -0
  138. data/test/rails/test_to_json.rb +23 -0
  139. data/test/rails/views/notes/empty_params_action.html.erb +1 -0
  140. data/test/rails/views/notes/index.html.erb +1 -0
  141. metadata +227 -0
@@ -0,0 +1,121 @@
1
+ <!-- saved from url=(0014)about:internet -->
2
+ <html lang="en">
3
+
4
+ <!--
5
+ Smart developers always View Source.
6
+
7
+ This application was built using Adobe Flex, an open source framework
8
+ for building rich Internet applications that get delivered via the
9
+ Flash Player or to desktops via Adobe AIR.
10
+
11
+ Learn more about Flex at http://flex.org
12
+ // -->
13
+
14
+ <head>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
16
+
17
+ <!-- BEGIN Browser History required section -->
18
+ <link rel="stylesheet" type="text/css" href="history/history.css" />
19
+ <!-- END Browser History required section -->
20
+
21
+ <title>${title}</title>
22
+ <script src="AC_OETags.js" language="javascript"></script>
23
+
24
+ <!-- BEGIN Browser History required section -->
25
+ <script src="history/history.js" language="javascript"></script>
26
+ <!-- END Browser History required section -->
27
+
28
+ <style>
29
+ body { margin: 0px; overflow:hidden }
30
+ </style>
31
+ <script language="JavaScript" type="text/javascript">
32
+ <!--
33
+ // -----------------------------------------------------------------------------
34
+ // Globals
35
+ // Major version of Flash required
36
+ var requiredMajorVersion = ${version_major};
37
+ // Minor version of Flash required
38
+ var requiredMinorVersion = ${version_minor};
39
+ // Minor version of Flash required
40
+ var requiredRevision = ${version_revision};
41
+ // -----------------------------------------------------------------------------
42
+ // -->
43
+ </script>
44
+ </head>
45
+
46
+ <body scroll="no">
47
+ <script language="JavaScript" type="text/javascript">
48
+ <!--
49
+ // Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
50
+ var hasProductInstall = DetectFlashVer(6, 0, 65);
51
+
52
+ // Version check based upon the values defined in globals
53
+ var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
54
+
55
+ if ( hasProductInstall && !hasRequestedVersion ) {
56
+ // DO NOT MODIFY THE FOLLOWING FOUR LINES
57
+ // Location visited after installation is complete if installation is required
58
+ var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
59
+ var MMredirectURL = window.location;
60
+ document.title = document.title.slice(0, 47) + " - Flash Player Installation";
61
+ var MMdoctitle = document.title;
62
+
63
+ AC_FL_RunContent(
64
+ "src", "playerProductInstall",
65
+ "FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
66
+ "width", "${width}",
67
+ "height", "${height}",
68
+ "align", "middle",
69
+ "id", "${application}",
70
+ "quality", "high",
71
+ "bgcolor", "${bgcolor}",
72
+ "name", "${application}",
73
+ "allowScriptAccess","sameDomain",
74
+ "type", "application/x-shockwave-flash",
75
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
76
+ );
77
+ } else if (hasRequestedVersion) {
78
+ // if we've detected an acceptable version
79
+ // embed the Flash Content SWF when all tests are passed
80
+ AC_FL_RunContent(
81
+ "src", "${swf}",
82
+ "width", "${width}",
83
+ "height", "${height}",
84
+ "align", "middle",
85
+ "id", "${application}",
86
+ "quality", "high",
87
+ "bgcolor", "${bgcolor}",
88
+ "name", "${application}",
89
+ "allowScriptAccess","sameDomain",
90
+ "type", "application/x-shockwave-flash",
91
+ "pluginspage", "http://www.adobe.com/go/getflashplayer"
92
+ );
93
+ } else { // flash is too old or we can't detect the plugin
94
+ var alternateContent = 'Alternate HTML content should be placed here. '
95
+ + 'This content requires the Adobe Flash Player. '
96
+ + '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
97
+ document.write(alternateContent); // insert non-flash content
98
+ }
99
+ // -->
100
+ </script>
101
+ <noscript>
102
+ <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
103
+ id="${application}" width="${width}" height="${height}"
104
+ codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
105
+ <param name="movie" value="${swf}.swf" />
106
+ <param name="quality" value="high" />
107
+ <param name="bgcolor" value="${bgcolor}" />
108
+ <param name="allowScriptAccess" value="sameDomain" />
109
+ <embed src="${swf}.swf" quality="high" bgcolor="${bgcolor}"
110
+ width="${width}" height="${height}" name="${application}" align="middle"
111
+ play="true"
112
+ loop="false"
113
+ quality="high"
114
+ allowScriptAccess="sameDomain"
115
+ type="application/x-shockwave-flash"
116
+ pluginspage="http://www.adobe.com/go/getflashplayer">
117
+ </embed>
118
+ </object>
119
+ </noscript>
120
+ </body>
121
+ </html>
@@ -0,0 +1,18 @@
1
+ <html>
2
+ <head>
3
+ <title><%= project_name %></title>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5
+ <script type="text/javascript" src="javascripts/swfobject.js"></script>
6
+ <script type="text/javascript">
7
+ swfobject.embedSWF("bin/<%= project_name %>.swf", "mainApp", "100%", "100%", "9.0.0", "expressInstall.swf");
8
+ </script>
9
+ <style>
10
+ body { margin: 0px; overflow: hidden; }
11
+ </style>
12
+ </head>
13
+ <body>
14
+ <div id="mainApp">
15
+ <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
16
+ </div>
17
+ </body>
18
+ </html>
@@ -0,0 +1,134 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <application xmlns="http://ns.adobe.com/air/application/1.5">
3
+
4
+ <!-- Adobe AIR Application Descriptor File Template.
5
+
6
+ Specifies parameters for identifying, installing, and launching AIR applications.
7
+ See http://www.adobe.com/go/air_1.0_application_descriptor for complete documentation.
8
+
9
+ xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.0
10
+ The last segment of the namespace specifies the version
11
+ of the AIR runtime required for this application to run.
12
+
13
+ minimumPatchLevel - The minimum patch level of the AIR runtime required to run
14
+ the application. Optional.
15
+ -->
16
+
17
+ <!-- The application identifier string, unique to this application. Required. -->
18
+ <id><%= project_name %></id>
19
+
20
+ <!-- Used as the filename for the application. Required. -->
21
+ <filename><%= project_name %></filename>
22
+
23
+ <!-- The name that is displayed in the AIR application installer. Optional. -->
24
+ <name><%= project_name %></name>
25
+
26
+ <!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
27
+ <version>v1</version>
28
+
29
+ <!-- Description, displayed in the AIR application installer. Optional. -->
30
+ <!-- <description></description> -->
31
+
32
+ <!-- Copyright information. Optional -->
33
+ <!-- <copyright></copyright> -->
34
+
35
+ <!-- Settings for the application's initial window. Required. -->
36
+ <initialWindow>
37
+ <!-- The main SWF or HTML file of the application. Required. -->
38
+ <!-- Note: In Flex Builder, the SWF reference is set automatically. -->
39
+ <content>[This value will be overwritten by Flex Builder in the output app.xml]</content>
40
+
41
+ <!-- The title of the main window. Optional. -->
42
+ <!-- <title></title> -->
43
+
44
+ <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
45
+ <!-- <systemChrome></systemChrome> -->
46
+
47
+ <!-- Whether the window is transparent. Only applicable when systemChrome is false. Optional. Default false. -->
48
+ <!-- <transparent></transparent> -->
49
+
50
+ <!-- Whether the window is initially visible. Optional. Default false. -->
51
+ <!-- <visible></visible> -->
52
+
53
+ <!-- Whether the user can minimize the window. Optional. Default true. -->
54
+ <!-- <minimizable></minimizable> -->
55
+
56
+ <!-- Whether the user can maximize the window. Optional. Default true. -->
57
+ <!-- <maximizable></maximizable> -->
58
+
59
+ <!-- Whether the user can resize the window. Optional. Default true. -->
60
+ <!-- <resizable></resizable> -->
61
+
62
+ <!-- The window's initial width. Optional. -->
63
+ <width>800</width>
64
+
65
+ <!-- The window's initial height. Optional. -->
66
+ <height>600</height>
67
+
68
+ <!-- The window's initial x position. Optional. -->
69
+ <!-- <x></x> -->
70
+
71
+ <!-- The window's initial y position. Optional. -->
72
+ <!-- <y></y> -->
73
+
74
+ <!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
75
+ <!-- <minSize></minSize> -->
76
+
77
+ <!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
78
+ <!-- <maxSize></maxSize> -->
79
+ </initialWindow>
80
+
81
+ <!-- The subpath of the standard default installation location to use. Optional. -->
82
+ <!-- <installFolder></installFolder> -->
83
+
84
+ <!-- The subpath of the Windows Start/Programs menu to use. Optional. -->
85
+ <!-- <programMenuFolder></programMenuFolder> -->
86
+
87
+ <!-- The icon the system uses for the application. For at least one resolution,
88
+ specify the path to a PNG file included in the AIR package. Optional. -->
89
+ <!-- <icon>
90
+ <image16x16></image16x16>
91
+ <image32x32></image32x32>
92
+ <image48x48></image48x48>
93
+ <image128x128></image128x128>
94
+ </icon> -->
95
+
96
+ <!-- Whether the application handles the update when a user double-clicks an update version
97
+ of the AIR file (true), or the default AIR application installer handles the update (false).
98
+ Optional. Default false. -->
99
+ <!-- <customUpdateUI></customUpdateUI> -->
100
+
101
+ <!-- Whether the application can be launched when the user clicks a link in a web browser.
102
+ Optional. Default false. -->
103
+ <!-- <allowBrowserInvocation></allowBrowserInvocation> -->
104
+
105
+ <!-- Listing of file types for which the application can register. Optional. -->
106
+ <!-- <fileTypes> -->
107
+
108
+ <!-- Defines one file type. Optional. -->
109
+ <!-- <fileType> -->
110
+
111
+ <!-- The name that the system displays for the registered file type. Required. -->
112
+ <!-- <name></name> -->
113
+
114
+ <!-- The extension to register. Required. -->
115
+ <!-- <extension></extension> -->
116
+
117
+ <!-- The description of the file type. Optional. -->
118
+ <!-- <description></description> -->
119
+
120
+ <!-- The MIME type. Optional. -->
121
+ <!-- <contentType></contentType> -->
122
+
123
+ <!-- The icon to display for the file type. Optional. -->
124
+ <!-- <icon>
125
+ <image16x16></image16x16>
126
+ <image32x32></image32x32>
127
+ <image48x48></image48x48>
128
+ <image128x128></image128x128>
129
+ </icon> -->
130
+
131
+ <!-- </fileType> -->
132
+ <!-- </fileTypes> -->
133
+
134
+ </application>
@@ -0,0 +1,21 @@
1
+ <flex-config>
2
+ <benchmark>false</benchmark>
3
+ <default-background-color>#FFFFFF</default-background-color>
4
+ <compiler>
5
+ <incremental>false</incremental>
6
+ <keep-as3-metadata append="true">
7
+ <name>Resource</name>
8
+ <name>HasOne</name>
9
+ <name>HasMany</name>
10
+ <name>BelongsTo</name>
11
+ <name>DateTime</name>
12
+ <name>Lazy</name>
13
+ <name>Ignored</name>
14
+ </keep-as3-metadata>
15
+ <optimize>true</optimize>
16
+ <keep-generated-actionscript>false</keep-generated-actionscript>
17
+ <warn-no-constructor>false</warn-no-constructor>
18
+ <warn-no-explicit-super-call-in-constructor>false</warn-no-explicit-super-call-in-constructor>
19
+ <debug>false</debug>
20
+ </compiler>
21
+ </flex-config>
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <mx:<%= application_tag %> xmlns:mx="http://www.adobe.com/2006/mxml"
3
+ xmlns:generated="<%= base_package %>.components.generated.*"
4
+ paddingBottom="8" paddingLeft="8" paddingRight="8" paddingTop="8"
5
+ layout="horizontal" styleName="plain" initialize="init()">
6
+ <mx:Script>
7
+ <![CDATA[
8
+ <% if use_air -%>
9
+ import org.restfulx.services.air.AIRServiceProvider;
10
+ <% end -%>
11
+ import org.restfulx.Rx;
12
+ import <%= base_package %>.controllers.<%= command_controller_name %>;
13
+
14
+ private function init():void {
15
+ <% if use_air -%>
16
+ <%= command_controller_name %>.initialize([AIRServiceProvider], AIRServiceProvider.ID, "<%= base_package %>");
17
+ <% else -%>
18
+ <%= command_controller_name %>.initialize();
19
+ <% end -%>
20
+ }
21
+ ]]>
22
+ </mx:Script>
23
+ <mx:LinkBar dataProvider="{mainViewStack}" direction="vertical" borderStyle="solid" backgroundColor="#EEEEEE"/>
24
+ <mx:ViewStack id="mainViewStack" width="100%" height="100%">
25
+ <!-- For a simple demo, put all the components here. -->
26
+ <% for component in component_names -%>
27
+ <generated:<%= component %>/>
28
+ <% end -%>
29
+ </mx:ViewStack>
30
+ </mx:<%= application_tag %>>
31
+
@@ -0,0 +1,52 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>currentDocument</key>
6
+ <string>app/flex/<%= project_name %>.mxml</string>
7
+ <key>documents</key>
8
+ <array>
9
+ <dict>
10
+ <key>expanded</key>
11
+ <true/>
12
+ <key>name</key>
13
+ <string><%= project_name.underscore %></string>
14
+ <key>regexFolderFilter</key>
15
+ <string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
16
+ <key>sourceDirectory</key>
17
+ <string></string>
18
+ </dict>
19
+ </array>
20
+ <key>fileHierarchyDrawerWidth</key>
21
+ <integer>299</integer>
22
+ <key>metaData</key>
23
+ <dict/>
24
+ <key>openDocuments</key>
25
+ <array>
26
+ <string>app/flex/<%= project_name %>.mxml</string>
27
+ </array>
28
+ <key>shellVariables</key>
29
+ <array>
30
+ <dict>
31
+ <key>enabled</key>
32
+ <true/>
33
+ <key>value</key>
34
+ <string>app/flex/<%= project_name %>.mxml</string>
35
+ <key>variable</key>
36
+ <string>TM_FLEX_FILE_SPECS</string>
37
+ </dict>
38
+ <dict>
39
+ <key>enabled</key>
40
+ <true/>
41
+ <key>value</key>
42
+ <string>public/bin/<%= project_name %>.swf</string>
43
+ <key>variable</key>
44
+ <string>TM_FLEX_OUTPUT</string>
45
+ </dict>
46
+ </array>
47
+ <key>showFileHierarchyDrawer</key>
48
+ <false/>
49
+ <key>windowFrame</key>
50
+ <string>{{5, 15}, {1073, 860}}</string>
51
+ </dict>
52
+ </plist>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name><%= flex_project_name %></name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ <buildCommand>
9
+ <name>com.adobe.flexbuilder.project.flexbuilder</name>
10
+ <arguments>
11
+ </arguments>
12
+ </buildCommand>
13
+ </buildSpec>
14
+ <natures>
15
+ <nature>com.adobe.flexbuilder.project.flexnature</nature>
16
+ <nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
17
+ </natures>
18
+ </projectDescription>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <projectDescription>
3
+ <name><%= flex_project_name %></name>
4
+ <comment></comment>
5
+ <projects>
6
+ </projects>
7
+ <buildSpec>
8
+ <buildCommand>
9
+ <name>com.adobe.flexbuilder.project.flexbuilder</name>
10
+ <arguments>
11
+ </arguments>
12
+ </buildCommand>
13
+ <buildCommand>
14
+ <name>com.adobe.flexbuilder.apollo.apollobuilder</name>
15
+ <arguments>
16
+ </arguments>
17
+ </buildCommand>
18
+ </buildSpec>
19
+ <natures>
20
+ <nature>com.adobe.flexbuilder.apollo.apollonature</nature>
21
+ <nature>com.adobe.flexbuilder.project.flexnature</nature>
22
+ <nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
23
+ </natures>
24
+ </projectDescription>
@@ -0,0 +1,14 @@
1
+ # RestfulX code generation configuration options
2
+
3
+ # By default flex models, commands, controllers and components are genearated into
4
+ # app/flex/<your rails project name> folder. If you'd like to customize the target folder
5
+ # (to say append a "com" package before your rails project name) uncomment the line below
6
+ # base-package must follow the usual flex package notation (a string separated by ".")
7
+
8
+ #base-package: com.pomodo
9
+
10
+ # Main RestfulX controller is typically named AppicationController. This controller is created in
11
+ # <base-package>.controllers folder. You can customize the name by uncommenting the following line
12
+ # and changing the controller name.
13
+
14
+ #controller-name: ApplicationController
@@ -0,0 +1,6 @@
1
+ # if the gem is not installed system wide, we'll just skip the tasks
2
+ begin
3
+ # this will load the latest restfulx gem version
4
+ require 'restfulx/active_record_tasks'
5
+ rescue LoadError
6
+ end
@@ -0,0 +1,5 @@
1
+ /* SWFObject v2.0 <http://code.google.com/p/swfobject/>
2
+ Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
3
+ This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
4
+ */
5
+ var swfobject=function(){var Z="undefined",P="object",B="Shockwave Flash",h="ShockwaveFlash.ShockwaveFlash",W="application/x-shockwave-flash",K="SWFObjectExprInst",G=window,g=document,N=navigator,f=[],H=[],Q=null,L=null,T=null,S=false,C=false;var a=function(){var l=typeof g.getElementById!=Z&&typeof g.getElementsByTagName!=Z&&typeof g.createElement!=Z&&typeof g.appendChild!=Z&&typeof g.replaceChild!=Z&&typeof g.removeChild!=Z&&typeof g.cloneNode!=Z,t=[0,0,0],n=null;if(typeof N.plugins!=Z&&typeof N.plugins[B]==P){n=N.plugins[B].description;if(n){n=n.replace(/^.*\s+(\S+\s+\S+$)/,"$1");t[0]=parseInt(n.replace(/^(.*)\..*$/,"$1"),10);t[1]=parseInt(n.replace(/^.*\.(.*)\s.*$/,"$1"),10);t[2]=/r/.test(n)?parseInt(n.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof G.ActiveXObject!=Z){var o=null,s=false;try{o=new ActiveXObject(h+".7")}catch(k){try{o=new ActiveXObject(h+".6");t=[6,0,21];o.AllowScriptAccess="always"}catch(k){if(t[0]==6){s=true}}if(!s){try{o=new ActiveXObject(h)}catch(k){}}}if(!s&&o){try{n=o.GetVariable("$version");if(n){n=n.split(" ")[1].split(",");t=[parseInt(n[0],10),parseInt(n[1],10),parseInt(n[2],10)]}}catch(k){}}}}var v=N.userAgent.toLowerCase(),j=N.platform.toLowerCase(),r=/webkit/.test(v)?parseFloat(v.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,i=false,q=j?/win/.test(j):/win/.test(v),m=j?/mac/.test(j):/mac/.test(v);/*@cc_on i=true;@if(@_win32)q=true;@elif(@_mac)m=true;@end@*/return{w3cdom:l,pv:t,webkit:r,ie:i,win:q,mac:m}}();var e=function(){if(!a.w3cdom){return }J(I);if(a.ie&&a.win){try{g.write("<script id=__ie_ondomload defer=true src=//:><\/script>");var i=c("__ie_ondomload");if(i){i.onreadystatechange=function(){if(this.readyState=="complete"){this.parentNode.removeChild(this);V()}}}}catch(j){}}if(a.webkit&&typeof g.readyState!=Z){Q=setInterval(function(){if(/loaded|complete/.test(g.readyState)){V()}},10)}if(typeof g.addEventListener!=Z){g.addEventListener("DOMContentLoaded",V,null)}M(V)}();function V(){if(S){return }if(a.ie&&a.win){var m=Y("span");try{var l=g.getElementsByTagName("body")[0].appendChild(m);l.parentNode.removeChild(l)}catch(n){return }}S=true;if(Q){clearInterval(Q);Q=null}var j=f.length;for(var k=0;k<j;k++){f[k]()}}function J(i){if(S){i()}else{f[f.length]=i}}function M(j){if(typeof G.addEventListener!=Z){G.addEventListener("load",j,false)}else{if(typeof g.addEventListener!=Z){g.addEventListener("load",j,false)}else{if(typeof G.attachEvent!=Z){G.attachEvent("onload",j)}else{if(typeof G.onload=="function"){var i=G.onload;G.onload=function(){i();j()}}else{G.onload=j}}}}}function I(){var l=H.length;for(var j=0;j<l;j++){var m=H[j].id;if(a.pv[0]>0){var k=c(m);if(k){H[j].width=k.getAttribute("width")?k.getAttribute("width"):"0";H[j].height=k.getAttribute("height")?k.getAttribute("height"):"0";if(O(H[j].swfVersion)){if(a.webkit&&a.webkit<312){U(k)}X(m,true)}else{if(H[j].expressInstall&&!C&&O("6.0.65")&&(a.win||a.mac)){D(H[j])}else{d(k)}}}}else{X(m,true)}}}function U(m){var k=m.getElementsByTagName(P)[0];if(k){var p=Y("embed"),r=k.attributes;if(r){var o=r.length;for(var n=0;n<o;n++){if(r[n].nodeName.toLowerCase()=="data"){p.setAttribute("src",r[n].nodeValue)}else{p.setAttribute(r[n].nodeName,r[n].nodeValue)}}}var q=k.childNodes;if(q){var s=q.length;for(var l=0;l<s;l++){if(q[l].nodeType==1&&q[l].nodeName.toLowerCase()=="param"){p.setAttribute(q[l].getAttribute("name"),q[l].getAttribute("value"))}}}m.parentNode.replaceChild(p,m)}}function F(i){if(a.ie&&a.win&&O("8.0.0")){G.attachEvent("onunload",function(){var k=c(i);if(k){for(var j in k){if(typeof k[j]=="function"){k[j]=function(){}}}k.parentNode.removeChild(k)}})}}function D(j){C=true;var o=c(j.id);if(o){if(j.altContentId){var l=c(j.altContentId);if(l){L=l;T=j.altContentId}}else{L=b(o)}if(!(/%$/.test(j.width))&&parseInt(j.width,10)<310){j.width="310"}if(!(/%$/.test(j.height))&&parseInt(j.height,10)<137){j.height="137"}g.title=g.title.slice(0,47)+" - Flash Player Installation";var n=a.ie&&a.win?"ActiveX":"PlugIn",k=g.title,m="MMredirectURL="+G.location+"&MMplayerType="+n+"&MMdoctitle="+k,p=j.id;if(a.ie&&a.win&&o.readyState!=4){var i=Y("div");p+="SWFObjectNew";i.setAttribute("id",p);o.parentNode.insertBefore(i,o);o.style.display="none";G.attachEvent("onload",function(){o.parentNode.removeChild(o)})}R({data:j.expressInstall,id:K,width:j.width,height:j.height},{flashvars:m},p)}}function d(j){if(a.ie&&a.win&&j.readyState!=4){var i=Y("div");j.parentNode.insertBefore(i,j);i.parentNode.replaceChild(b(j),i);j.style.display="none";G.attachEvent("onload",function(){j.parentNode.removeChild(j)})}else{j.parentNode.replaceChild(b(j),j)}}function b(n){var m=Y("div");if(a.win&&a.ie){m.innerHTML=n.innerHTML}else{var k=n.getElementsByTagName(P)[0];if(k){var o=k.childNodes;if(o){var j=o.length;for(var l=0;l<j;l++){if(!(o[l].nodeType==1&&o[l].nodeName.toLowerCase()=="param")&&!(o[l].nodeType==8)){m.appendChild(o[l].cloneNode(true))}}}}}return m}function R(AE,AC,q){var p,t=c(q);if(typeof AE.id==Z){AE.id=q}if(a.ie&&a.win){var AD="";for(var z in AE){if(AE[z]!=Object.prototype[z]){if(z=="data"){AC.movie=AE[z]}else{if(z.toLowerCase()=="styleclass"){AD+=' class="'+AE[z]+'"'}else{if(z!="classid"){AD+=" "+z+'="'+AE[z]+'"'}}}}}var AB="";for(var y in AC){if(AC[y]!=Object.prototype[y]){AB+='<param name="'+y+'" value="'+AC[y]+'" />'}}t.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AD+">"+AB+"</object>";F(AE.id);p=c(AE.id)}else{if(a.webkit&&a.webkit<312){var AA=Y("embed");AA.setAttribute("type",W);for(var x in AE){if(AE[x]!=Object.prototype[x]){if(x=="data"){AA.setAttribute("src",AE[x])}else{if(x.toLowerCase()=="styleclass"){AA.setAttribute("class",AE[x])}else{if(x!="classid"){AA.setAttribute(x,AE[x])}}}}}for(var w in AC){if(AC[w]!=Object.prototype[w]){if(w!="movie"){AA.setAttribute(w,AC[w])}}}t.parentNode.replaceChild(AA,t);p=AA}else{var s=Y(P);s.setAttribute("type",W);for(var v in AE){if(AE[v]!=Object.prototype[v]){if(v.toLowerCase()=="styleclass"){s.setAttribute("class",AE[v])}else{if(v!="classid"){s.setAttribute(v,AE[v])}}}}for(var u in AC){if(AC[u]!=Object.prototype[u]&&u!="movie"){E(s,u,AC[u])}}t.parentNode.replaceChild(s,t);p=s}}return p}function E(k,i,j){var l=Y("param");l.setAttribute("name",i);l.setAttribute("value",j);k.appendChild(l)}function c(i){return g.getElementById(i)}function Y(i){return g.createElement(i)}function O(k){var j=a.pv,i=k.split(".");i[0]=parseInt(i[0],10);i[1]=parseInt(i[1],10);i[2]=parseInt(i[2],10);return(j[0]>i[0]||(j[0]==i[0]&&j[1]>i[1])||(j[0]==i[0]&&j[1]==i[1]&&j[2]>=i[2]))?true:false}function A(m,j){if(a.ie&&a.mac){return }var l=g.getElementsByTagName("head")[0],k=Y("style");k.setAttribute("type","text/css");k.setAttribute("media","screen");if(!(a.ie&&a.win)&&typeof g.createTextNode!=Z){k.appendChild(g.createTextNode(m+" {"+j+"}"))}l.appendChild(k);if(a.ie&&a.win&&typeof g.styleSheets!=Z&&g.styleSheets.length>0){var i=g.styleSheets[g.styleSheets.length-1];if(typeof i.addRule==P){i.addRule(m,j)}}}function X(k,i){var j=i?"visible":"hidden";if(S){c(k).style.visibility=j}else{A("#"+k,"visibility:"+j)}}return{registerObject:function(l,i,k){if(!a.w3cdom||!l||!i){return }var j={};j.id=l;j.swfVersion=i;j.expressInstall=k?k:false;H[H.length]=j;X(l,false)},getObjectById:function(l){var i=null;if(a.w3cdom&&S){var j=c(l);if(j){var k=j.getElementsByTagName(P)[0];if(!k||(k&&typeof j.SetVariable!=Z)){i=j}else{if(typeof k.SetVariable!=Z){i=k}}}}return i},embedSWF:function(n,u,r,t,j,m,k,p,s){if(!a.w3cdom||!n||!u||!r||!t||!j){return }r+="";t+="";if(O(j)){X(u,false);var q=(typeof s==P)?s:{};q.data=n;q.width=r;q.height=t;var o=(typeof p==P)?p:{};if(typeof k==P){for(var l in k){if(k[l]!=Object.prototype[l]){if(typeof o.flashvars!=Z){o.flashvars+="&"+l+"="+k[l]}else{o.flashvars=l+"="+k[l]}}}}J(function(){R(q,o,u);if(q.id==u){X(u,true)}})}else{if(m&&!C&&O("6.0.65")&&(a.win||a.mac)){X(u,false);J(function(){var i={};i.id=i.altContentId=u;i.width=r;i.height=t;i.expressInstall=m;D(i)})}}},getFlashPlayerVersion:function(){return{major:a.pv[0],minor:a.pv[1],release:a.pv[2]}},hasFlashPlayerVersion:O,createSWF:function(k,j,i){if(a.w3cdom&&S){return R(k,j,i)}else{return undefined}},createCSS:function(j,i){if(a.w3cdom){A(j,i)}},addDomLoadEvent:J,addLoadEvent:M,getQueryParamValue:function(m){var l=g.location.search||g.location.hash;if(m==null){return l}if(l){var k=l.substring(1).split("&");for(var j=0;j<k.length;j++){if(k[j].substring(0,k[j].indexOf("="))==m){return k[j].substring((k[j].indexOf("=")+1))}}}return""},expressInstallCallback:function(){if(C&&L){var i=c(K);if(i){i.parentNode.replaceChild(L,i);if(T){X(T,true);if(a.ie&&a.win){L.style.display="block"}}L=null;T=null;C=false}}}}}();
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Generates/updates the main Flex application controller, typically
3
+ app/flex/<yourappname>/controllers/ApplicationController.as
4
+
5
+ It pulls out all available models and commands from respective
6
+ folders and makes sure they'll be pulled into the Flex application
7
+ at runtime. Doesn't require any arguments or options.
8
+
9
+ Examples:
10
+ `./script/generate rx_controller`
@@ -0,0 +1,28 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'lib', 'restfulx') if !defined?(RestfulX)
2
+
3
+ class RxControllerGenerator < Rails::Generator::Base
4
+ include RestfulX::Configuration
5
+
6
+ attr_reader :project_name,
7
+ :flex_project_name,
8
+ :base_package,
9
+ :base_folder,
10
+ :command_controller_name,
11
+ :model_names,
12
+ :command_names
13
+
14
+ def initialize(runtime_args, runtime_options = {})
15
+ super
16
+ @project_name, @flex_project_name, @command_controller_name, @base_package, @base_folder = extract_names
17
+
18
+ @model_names = list_as_files("app/flex/#{base_folder}/models")
19
+ @command_names = list_as_files("app/flex/#{base_folder}/commands")
20
+ end
21
+
22
+ def manifest
23
+ record do |m|
24
+ m.template 'controller.as.erb', File.join("app/flex/#{base_folder}/controllers",
25
+ "#{command_controller_name}.as")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ package <%= base_package %>.controllers {
2
+ import <%= base_package %>.models.*;
3
+ import <%= base_package %>.commands.*;
4
+
5
+ import mx.core.Application;
6
+ import org.restfulx.Rx;
7
+ import org.restfulx.controllers.RxApplicationController;
8
+ import org.restfulx.utils.RxUtils;
9
+
10
+ public class <%= command_controller_name %> extends RxApplicationController {
11
+ private static var controller:<%= command_controller_name %>;
12
+
13
+ public static var models:Array = [<%= model_names %>]; /* Models */
14
+
15
+ public static var commands:Array = [<%= command_names %>]; /* Commands */
16
+
17
+ public function <%= command_controller_name %>(enforcer:SingletonEnforcer, extraServices:Array,
18
+ defaultServiceId:int = -1) {
19
+ super(commands, models, extraServices, defaultServiceId);
20
+ }
21
+
22
+ public static function get instance():<%= command_controller_name %> {
23
+ if (controller == null) initialize();
24
+ return controller;
25
+ }
26
+
27
+ public static function initialize(extraServices:Array = null, defaultServiceId:int = -1,
28
+ airDatabaseName:String = null):void {
29
+ if (!RxUtils.isEmpty(airDatabaseName)) Rx.airDatabaseName = airDatabaseName;
30
+ controller = new <%= command_controller_name %>(new SingletonEnforcer, extraServices,
31
+ defaultServiceId);
32
+ Rx.sessionToken = Application.application.parameters.session_token;
33
+ if (Application.application.parameters.authenticity_token) {
34
+ Rx.defaultMetadata = { authenticity_token : Application.application.parameters.authenticity_token };
35
+ }
36
+ }
37
+ }
38
+ }
39
+
40
+ class SingletonEnforcer {}
@@ -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`