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.
- data/History.txt +7 -0
- data/Manifest.txt +127 -0
- data/README.rdoc +50 -0
- data/Rakefile +42 -0
- data/app_generators/rx_app/USAGE +22 -0
- data/app_generators/rx_app/rx_app_generator.rb +94 -0
- data/app_generators/rx_app/templates/actionscript.properties +16 -0
- data/app_generators/rx_app/templates/actionscriptair.properties +16 -0
- data/app_generators/rx_app/templates/app.yaml.erb +12 -0
- data/app_generators/rx_app/templates/default_tasks.rake +51 -0
- data/app_generators/rx_app/templates/empty.txt +0 -0
- data/app_generators/rx_app/templates/expressInstall.swf +0 -0
- data/app_generators/rx_app/templates/flex.properties +2 -0
- data/app_generators/rx_app/templates/generate.rb +17 -0
- data/app_generators/rx_app/templates/html-template/AC_OETags.js +276 -0
- data/app_generators/rx_app/templates/html-template/history/history.css +6 -0
- data/app_generators/rx_app/templates/html-template/history/history.js +645 -0
- data/app_generators/rx_app/templates/html-template/history/historyFrame.html +29 -0
- data/app_generators/rx_app/templates/html-template/index.template.html +121 -0
- data/app_generators/rx_app/templates/html-template/playerProductInstall.swf +0 -0
- data/app_generators/rx_app/templates/index.html.erb +18 -0
- data/app_generators/rx_app/templates/index.yaml +11 -0
- data/app_generators/rx_app/templates/mainair-app.xml +134 -0
- data/app_generators/rx_app/templates/mainapp-config.xml +21 -0
- data/app_generators/rx_app/templates/mainapp.mxml +31 -0
- data/app_generators/rx_app/templates/project-textmate.erb +52 -0
- data/app_generators/rx_app/templates/project.properties +18 -0
- data/app_generators/rx_app/templates/projectair.properties +24 -0
- data/app_generators/rx_app/templates/swfobject.js +5 -0
- data/bin/rx-gen +31 -0
- data/generators/rx_config/USAGE +5 -0
- data/generators/rx_config/rx_config_generator.rb +19 -0
- data/generators/rx_controller/USAGE +10 -0
- data/generators/rx_controller/rx_controller_generator.rb +39 -0
- data/generators/rx_controller/templates/assist.py +65 -0
- data/generators/rx_controller/templates/controller.as.erb +36 -0
- data/generators/rx_controller/templates/restful.py +136 -0
- data/generators/rx_main_app/USAGE +8 -0
- data/generators/rx_main_app/rx_main_app_generator.rb +60 -0
- data/generators/rx_main_app/templates/main.py.erb +29 -0
- data/generators/rx_main_app/templates/mainapp.mxml +35 -0
- data/generators/rx_scaffold/USAGE +29 -0
- data/generators/rx_scaffold/rx_scaffold_generator.rb +146 -0
- data/generators/rx_scaffold/templates/component.mxml.erb +149 -0
- data/generators/rx_scaffold/templates/controller.py.erb +27 -0
- data/generators/rx_scaffold/templates/model.as.erb +42 -0
- data/generators/rx_scaffold/templates/model.py.erb +14 -0
- data/generators/rx_yaml_scaffold/USAGE +45 -0
- data/generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +47 -0
- data/lib/restfulx/active_foo.rb +186 -0
- data/lib/restfulx/active_record_tasks.rb +81 -0
- data/lib/restfulx/configuration.rb +76 -0
- data/lib/restfulx/datamapper_foo.rb +31 -0
- data/lib/restfulx/rails/recipes.rb +60 -0
- data/lib/restfulx/rails/swf_helper.rb +60 -0
- data/lib/restfulx/tasks.rb +85 -0
- data/lib/restfulx.rb +117 -0
- data/rails_generators/rx_config/USAGE +18 -0
- data/rails_generators/rx_config/rx_config_generator.rb +115 -0
- data/rails_generators/rx_config/templates/actionscript.properties +16 -0
- data/rails_generators/rx_config/templates/actionscriptair.properties +16 -0
- data/rails_generators/rx_config/templates/expressInstall.swf +0 -0
- data/rails_generators/rx_config/templates/flex.properties +2 -0
- data/rails_generators/rx_config/templates/html-template/AC_OETags.js +276 -0
- data/rails_generators/rx_config/templates/html-template/history/history.css +6 -0
- data/rails_generators/rx_config/templates/html-template/history/history.js +645 -0
- data/rails_generators/rx_config/templates/html-template/history/historyFrame.html +29 -0
- data/rails_generators/rx_config/templates/html-template/index.template.html +121 -0
- data/rails_generators/rx_config/templates/html-template/playerProductInstall.swf +0 -0
- data/rails_generators/rx_config/templates/index.html.erb +18 -0
- data/rails_generators/rx_config/templates/mainair-app.xml +134 -0
- data/rails_generators/rx_config/templates/mainapp-config.xml +21 -0
- data/rails_generators/rx_config/templates/mainapp.mxml +31 -0
- data/rails_generators/rx_config/templates/project-textmate.erb +52 -0
- data/rails_generators/rx_config/templates/project.properties +18 -0
- data/rails_generators/rx_config/templates/projectair.properties +24 -0
- data/rails_generators/rx_config/templates/restfulx.yml +14 -0
- data/rails_generators/rx_config/templates/restfulx_tasks.rake +6 -0
- data/rails_generators/rx_config/templates/swfobject.js +5 -0
- data/rails_generators/rx_controller/USAGE +10 -0
- data/rails_generators/rx_controller/rx_controller_generator.rb +28 -0
- data/rails_generators/rx_controller/templates/controller.as.erb +40 -0
- data/rails_generators/rx_scaffold/USAGE +35 -0
- data/rails_generators/rx_scaffold/rx_scaffold_generator.rb +179 -0
- data/rails_generators/rx_scaffold/templates/component.mxml.erb +149 -0
- data/rails_generators/rx_scaffold/templates/controller.rb.erb +97 -0
- data/rails_generators/rx_scaffold/templates/fixtures.yml.erb +35 -0
- data/rails_generators/rx_scaffold/templates/migration.rb.erb +19 -0
- data/rails_generators/rx_scaffold/templates/model.as.erb +42 -0
- data/rails_generators/rx_scaffold/templates/model.rb.erb +11 -0
- data/rails_generators/rx_yaml_scaffold/USAGE +51 -0
- data/rails_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +49 -0
- data/rdoc/generators/template/html/jamis.rb +588 -0
- data/spec/restfulx_spec.rb +7 -0
- data/spec/spec_helper.rb +16 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/manifest.rake +48 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +39 -0
- data/tasks/rdoc.rake +50 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +279 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/test/rails/controllers/application.rb +15 -0
- data/test/rails/controllers/locations_controller.rb +93 -0
- data/test/rails/controllers/notes_controller.rb +96 -0
- data/test/rails/controllers/projects_controller.rb +93 -0
- data/test/rails/controllers/tasks_controller.rb +93 -0
- data/test/rails/controllers/users_controller.rb +93 -0
- data/test/rails/database.yml +4 -0
- data/test/rails/fixtures/locations.yml +8 -0
- data/test/rails/fixtures/notes.yml +17 -0
- data/test/rails/fixtures/projects.yml +25 -0
- data/test/rails/fixtures/simple_properties.yml +19 -0
- data/test/rails/fixtures/tasks.yml +46 -0
- data/test/rails/fixtures/users.yml +13 -0
- data/test/rails/helpers/functional_test_helper.rb +21 -0
- data/test/rails/helpers/test_helper.rb +61 -0
- data/test/rails/helpers/unit_test_helper.rb +30 -0
- data/test/rails/model.yml +35 -0
- data/test/rails/models/location.rb +4 -0
- data/test/rails/models/note.rb +3 -0
- data/test/rails/models/project.rb +4 -0
- data/test/rails/models/simple_property.rb +2 -0
- data/test/rails/models/task.rb +18 -0
- data/test/rails/models/user.rb +20 -0
- data/test/rails/playing_around_in_a_console.txt +71 -0
- data/test/rails/schema.rb +77 -0
- data/test/rails/test.swf +1 -0
- data/test/rails/test_active_foo.rb +36 -0
- data/test/rails/test_rails_integration_functional.rb +22 -0
- data/test/rails/test_to_fxml.rb +35 -0
- data/test/rails/test_to_json.rb +23 -0
- data/test/rails/views/notes/empty_params_action.html.erb +1 -0
- data/test/rails/views/notes/index.html.erb +1 -0
- 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,11 @@
|
|
|
1
|
+
indexes:
|
|
2
|
+
|
|
3
|
+
# AUTOGENERATED
|
|
4
|
+
|
|
5
|
+
# This index.yaml is automatically updated whenever the dev_appserver
|
|
6
|
+
# detects that a new type of query is run. If you want to manage the
|
|
7
|
+
# index.yaml file manually, remove the above marker line (the line
|
|
8
|
+
# saying "# AUTOGENERATED"). If you want to manage some indexes
|
|
9
|
+
# manually, move them above the marker line. The index.yaml file is
|
|
10
|
+
# automatically uploaded to the admin console when you next deploy
|
|
11
|
+
# your application using appcfg.py.
|
|
@@ -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,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}}}}}();
|
data/bin/rx-gen
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# Generates the primary RestfulX project directory structure and
|
|
4
|
+
# sets up Flex Builder and TextMate specific descriptor files
|
|
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
|
+
# `rx-gen pomodo` # generates project structure and a
|
|
12
|
+
# # default Flex app configuration.
|
|
13
|
+
# `rx-gen -a pomodo` # as above but generates an AIR app
|
|
14
|
+
# # and configuration
|
|
15
|
+
#
|
|
16
|
+
# Next Steps:
|
|
17
|
+
# In your new RestfulX project folder run `ruby script/generate` for
|
|
18
|
+
# a list of available generators.
|
|
19
|
+
|
|
20
|
+
require 'rubygems'
|
|
21
|
+
require 'rubigen'
|
|
22
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'restfulx')
|
|
23
|
+
|
|
24
|
+
if %w(-v --version).include? ARGV.first
|
|
25
|
+
puts "#{File.basename($0)} #{RestfulX::VERSION}"
|
|
26
|
+
exit(0)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
require 'rubigen/scripts/generate'
|
|
30
|
+
RubiGen::Base.use_application_sources!
|
|
31
|
+
RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'rx_app')
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'open-uri'
|
|
2
|
+
|
|
3
|
+
class RxConfigGenerator < RubiGen::Base
|
|
4
|
+
include RestfulX::Configuration
|
|
5
|
+
|
|
6
|
+
def manifest
|
|
7
|
+
record do |m|
|
|
8
|
+
framework_release = RestfulX::FRAMEWORK_VERSION
|
|
9
|
+
framework_distribution_url = "http://restfulx.github.com/releases/restfulx-#{framework_release}.swc"
|
|
10
|
+
framework_destination_file = "lib/restfulx-#{framework_release}.swc"
|
|
11
|
+
|
|
12
|
+
if !options[:skip_framework] && !File.exist?(framework_destination_file)
|
|
13
|
+
puts "fetching #{framework_release} framework binary from: #{framework_distribution_url} ..."
|
|
14
|
+
open(framework_destination_file, "wb").write(open(framework_distribution_url).read)
|
|
15
|
+
puts "done. saved to #{framework_destination_file}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -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,39 @@
|
|
|
1
|
+
class RxControllerGenerator < RubiGen::Base
|
|
2
|
+
include RestfulX::Configuration
|
|
3
|
+
|
|
4
|
+
attr_reader :project_name,
|
|
5
|
+
:flex_project_name,
|
|
6
|
+
:base_package,
|
|
7
|
+
:base_folder,
|
|
8
|
+
:command_controller_name,
|
|
9
|
+
:model_names,
|
|
10
|
+
:command_names
|
|
11
|
+
|
|
12
|
+
def initialize(runtime_args, runtime_options = {})
|
|
13
|
+
super
|
|
14
|
+
@project_name, @flex_project_name, @command_controller_name,
|
|
15
|
+
@base_package, @base_folder = extract_names
|
|
16
|
+
|
|
17
|
+
@model_names = list_as_files("app/flex/#{base_folder}/models")
|
|
18
|
+
@command_names = list_as_files("app/flex/#{base_folder}/commands")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def manifest
|
|
22
|
+
record do |m|
|
|
23
|
+
m.template 'controller.as.erb', File.join("app/flex/#{base_folder}/controllers",
|
|
24
|
+
"#{command_controller_name}.as")
|
|
25
|
+
if options[:gae]
|
|
26
|
+
m.file 'restful.py', 'app/controllers/restful.py' if !File.exist?('app/controllers/restful.py')
|
|
27
|
+
m.file 'assist.py', 'app/models/assist.py' if !File.exist?('app/models/assist.py')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
protected
|
|
33
|
+
def add_options!(opt)
|
|
34
|
+
opt.separator ''
|
|
35
|
+
opt.separator 'Options:'
|
|
36
|
+
opt.on("--gae", "Generate Google App Engine Python classes in addition to RestfulX Flex resources.",
|
|
37
|
+
"Default: false") { |v| options[:gae] = v }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# The MIT License
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2008 Dima Berastau
|
|
4
|
+
#
|
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
# of this software and associated documentation files (the "Software"), to
|
|
7
|
+
# deal in the Software without restriction, including without limitation
|
|
8
|
+
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
9
|
+
# and/or sell copies of the Software, and to permit persons to whom the
|
|
10
|
+
# Software is furnished to do so, subject to the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
|
13
|
+
# all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
20
|
+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
21
|
+
# DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
__author__ = 'Dima Berastau'
|
|
24
|
+
|
|
25
|
+
from google.appengine.ext import db
|
|
26
|
+
import datetime
|
|
27
|
+
|
|
28
|
+
# Some useful module methods
|
|
29
|
+
def all(model):
|
|
30
|
+
items = "".join(str(item.to_xml()) for item in model.all())
|
|
31
|
+
if items == "":
|
|
32
|
+
return '<entities type="array"/>'
|
|
33
|
+
else:
|
|
34
|
+
return '<entities kind="%s" type="array">%s</entities>' % (model.kind(), items)
|
|
35
|
+
|
|
36
|
+
def update_model_from_params(model, params):
|
|
37
|
+
for k, v in params.items():
|
|
38
|
+
if k.endswith("_id"):
|
|
39
|
+
if v == "":
|
|
40
|
+
setattr(model, k.replace("_id", ""), None)
|
|
41
|
+
else:
|
|
42
|
+
setattr(model, k.replace("_id", ""), db.Key(v))
|
|
43
|
+
elif hasattr(model, k):
|
|
44
|
+
if isinstance(getattr(model, k), bool):
|
|
45
|
+
if v == "false" or v == "":
|
|
46
|
+
setattr(model, k, False)
|
|
47
|
+
else:
|
|
48
|
+
setattr(model, k, True)
|
|
49
|
+
elif isinstance(getattr(model, k), float) and v != "":
|
|
50
|
+
setattr(model, k, float(v))
|
|
51
|
+
elif isinstance(getattr(model, k), int) and v != "":
|
|
52
|
+
setattr(model, k, int(v))
|
|
53
|
+
elif isinstance(getattr(model, k), datetime.datetime) and v != "":
|
|
54
|
+
value = datetime.datetime.strptime(v, "%Y-%m-%dT%H:%M:%S")
|
|
55
|
+
setattr(model, k, value)
|
|
56
|
+
elif isinstance(getattr(model, k), datetime.date) and v != "":
|
|
57
|
+
value = datetime.datetime.strptime(v, "%Y-%m-%d")
|
|
58
|
+
setattr(model, k, datetime.date(value.year, value.month, value.day))
|
|
59
|
+
elif isinstance(getattr(model, k), datetime.time) and v != "":
|
|
60
|
+
value = datetime.datetime.strptime(v, "%Y-%m-%dT%H:%M:%S")
|
|
61
|
+
setattr(model, k, datetime.time(value.hour, value.minute, value.second))
|
|
62
|
+
else:
|
|
63
|
+
setattr(model, k, v)
|
|
64
|
+
|
|
65
|
+
model.put()
|