emergent-core 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.bnsignore +16 -0
- data/History.txt +4 -0
- data/Manifest.txt +348 -0
- data/README.rdoc +47 -0
- data/Rakefile +39 -0
- data/app_generators/emergent_core/USAGE +5 -0
- data/app_generators/emergent_core/emergent_core_generator.rb +73 -0
- data/app_generators/emergent_core/templates/core/actionscript.properties +16 -0
- data/app_generators/emergent_core/templates/core/actionscriptair.properties +16 -0
- data/app_generators/emergent_core/templates/core/app.yaml.erb +12 -0
- data/app_generators/emergent_core/templates/core/default_tasks.rake +51 -0
- data/app_generators/emergent_core/templates/core/empty.txt +0 -0
- data/app_generators/emergent_core/templates/core/expressInstall.swf +0 -0
- data/app_generators/emergent_core/templates/core/flex.properties +2 -0
- data/app_generators/emergent_core/templates/core/generate.rb +17 -0
- data/app_generators/emergent_core/templates/core/html-template/AC_OETags.js +276 -0
- data/app_generators/emergent_core/templates/core/html-template/history/history.css +6 -0
- data/app_generators/emergent_core/templates/core/html-template/history/history.js +645 -0
- data/app_generators/emergent_core/templates/core/html-template/history/historyFrame.html +29 -0
- data/app_generators/emergent_core/templates/core/html-template/index.template.html +121 -0
- data/app_generators/emergent_core/templates/core/html-template/playerProductInstall.swf +0 -0
- data/app_generators/emergent_core/templates/core/index.html.erb +18 -0
- data/app_generators/emergent_core/templates/core/index.yaml +11 -0
- data/app_generators/emergent_core/templates/core/mainair-app.xml +134 -0
- data/app_generators/emergent_core/templates/core/mainapp-config.xml +21 -0
- data/app_generators/emergent_core/templates/core/mainapp.mxml +106 -0
- data/app_generators/emergent_core/templates/core/project-textmate.erb +52 -0
- data/app_generators/emergent_core/templates/core/project.properties +18 -0
- data/app_generators/emergent_core/templates/core/projectair.properties +24 -0
- data/app_generators/emergent_core/templates/core/swfobject.js +5 -0
- data/bin/emergent +17 -0
- data/lib/emergent_core.rb +49 -0
- data/lib/restfulx/active_foo.rb +194 -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/emergent_cms/USAGE +5 -0
- data/rails_generators/emergent_cms/emergent_cms_generator.rb +21 -0
- data/rails_generators/emergent_cms/templates/PagesEditModel.as +114 -0
- data/rails_generators/emergent_cms/templates/PagesEditView.mxml +102 -0
- data/rails_generators/emergent_config/USAGE +5 -0
- data/rails_generators/emergent_config/emergent_config_generator.rb +330 -0
- data/rails_generators/emergent_config/templates/app/controllers/accounts_controller.rb +104 -0
- data/rails_generators/emergent_config/templates/app/controllers/addresses_controller.rb +97 -0
- data/rails_generators/emergent_config/templates/app/controllers/application.rb +26 -0
- data/rails_generators/emergent_config/templates/app/controllers/assets_controller.rb +1 -0
- data/rails_generators/emergent_config/templates/app/controllers/content_assignments_controller.rb +97 -0
- data/rails_generators/emergent_config/templates/app/controllers/contents_controller.rb +114 -0
- data/rails_generators/emergent_config/templates/app/controllers/sessions_controller.rb +72 -0
- data/rails_generators/emergent_config/templates/app/controllers/sites_controller.rb +1 -0
- data/rails_generators/emergent_config/templates/app/controllers/users_controller.rb +97 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/command/ICommand.as +16 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/command/Undoable.as +46 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/command/UpdateDocumentCommand.as +73 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/event/DocumentEvent.as +46 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/event/NavigationEvent.as +31 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/event/ResourceEvent.as +27 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/event/UndoEvent.as +36 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/AboutUsManager.as +15 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/AccountManager.as +31 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/AuthenticationManager.as +76 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/ContentManager.as +92 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/DocumentManager.as +131 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/DocumentsManager.as +156 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/HomeManager.as +18 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/MainManager.as +23 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/PagesManager.as +71 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/ResourceManager.as +195 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/SiteManager.as +25 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/manager/UndoManager.as +143 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/map/DocumentMap.mxml +123 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/map/DocumentsMap.mxml +134 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/map/ManagerPresentationModelMap.mxml +59 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/map/ObjectMap.mxml +75 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/map/PresentationModelViewMap.mxml +81 -0
- data/rails_generators/emergent_config/templates/app/flex/application/controllers/map/PresenterViewMap.mxml +67 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/constant/DocumentType.as +52 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/constant/Resource.as +25 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/constant/ResourceAction.as +28 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/constant/ResourceResult.as +8 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/Account.as +32 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/Address.as +26 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/Asset.as +25 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/AssetAssignment.as +25 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/Content.as +46 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/ContentAssignment.as +33 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/Document.as +131 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/PlainDocument.as +19 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/RichDocument.as +19 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/Session.as +13 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/Snapshot.as +21 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/domain/User.as +28 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/factory/DocumentFactory.as +61 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/factory/DocumentViewFactory.as +59 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/factory/ResourceFactory.as +28 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/AboutUsModel.as +22 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/AccountModel.as +68 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/AuthenticationModel.as +44 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/ContactUsModel.as +45 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/ContentModel.as +70 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/DocumentModel.as +235 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/DocumentsModel.as +169 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/HomeModel.as +23 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/MainModel.as +35 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/PagesModel.as +44 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/ProfileModel.as +99 -0
- data/rails_generators/emergent_config/templates/app/flex/application/models/presentation/ResourceModel.as +100 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/about_us/about_us.mxml +105 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/account/account.mxml +97 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/contact_us/contact_us.mxml +65 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/document/document.mxml +71 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/document/documents.mxml +201 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/document/plain_document.mxml +9 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/document/rich_document.mxml +12 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/gallery/gallery.mxml +37 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/home/home.mxml +58 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/home/home_presenter.as +81 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/home/home_troparchy.mxml +71 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/login/login.mxml +50 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/main/main.mxml +131 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/main/main_presenter.as +166 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/main/main_troparchy.mxml +74 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_bottom_model.as +13 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_bottom_presenter.as +10 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_bottom_view.mxml +48 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_left_model.as +13 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_left_presenter.as +10 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_left_view.mxml +43 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_right_model.as +13 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_right_presenter.as +10 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_right_view.mxml +47 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_top_model.as +13 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_top_presenter.as +10 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bar_top_view.mxml +49 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bars_presenter.as +63 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bars_troparchy.mxml +63 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/navigation/navigation_bars_view.mxml +59 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/pages/pages.mxml +44 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/pages/pages_presenter.as +83 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/pages/pages_troparchy.mxml +62 -0
- data/rails_generators/emergent_config/templates/app/flex/application/views/profile/profile.mxml +73 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/fonts/MyriadPro-Bold.otf +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/fonts/MyriadPro-Regular.otf +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/html/lorem.html +3 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture10.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture11.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture12.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture13.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture14.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture3.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture4.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture5.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture6.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture7.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture8.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/alexgrey/Picture9.png +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/hot_nebula_0.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/hot_nebula_180.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/hot_nebula_270.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/hot_nebula_90.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/hot_nebula_bottom.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/images/hot_nebula_top.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/styles/itunes7Bg.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/styles/jukebox.css +764 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/styles/jukeboxGfx.swf +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/styles/obsidian.css +734 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/styles/obsidianBg.jpg +0 -0
- data/rails_generators/emergent_config/templates/app/flex/assets/styles/obsidianGfx.swf +0 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/actions/LayoutAction.as +377 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/actions/SimpleLayoutAction.as +210 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/animators/FourDTweenCollection.mxml +50 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/animators/IAnimator.as +39 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/animators/TweenMaxAnimator.as +269 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/cameras/AstroCamera.as +177 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/components/FourDDataGrid.mxml +105 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/components/FourDItemRenderer.mxml +54 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/CenterPerspectiveProjection.as +72 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/ComplexCondition.as +44 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/ConditionsUtil.as +82 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/FourDComponent.as +309 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/InstanceMethodInvoker.as +50 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/InstancePropertyInjector.as +43 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/MethodCaller.as +51 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/Pathway.as +10 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/PathwayEvent.as +28 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/Pheron.as +34 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/Pheron2.as +41 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/PheronReceptor.as +125 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/Properties.as +57 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/Router.as +50 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/RouterUtil.as +70 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/SimpleCondition.as +42 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/SimpleZSortVO.as +1 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/SimpleZSorter.as +1 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/Tecton.as +70 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/Tecton2.as +234 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonCache.as +111 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonEvent.as +39 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonMap.as +515 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonMap2.as +289 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonMapSample.mxml +73 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonReceptor.as +43 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonScope.as +38 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonScopeProperties.as +18 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/core/TectonUtils.as +51 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/events/LayoutActionEvent.as +75 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/layouts/CarouselLayout.as +85 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/layouts/CircleLayout.as +102 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/layouts/CoverFlowLayout.as +136 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/layouts/FourDLayout.as +272 -0
- data/rails_generators/emergent_config/templates/app/flex/com/fourD/utils/TweenUtil.as +110 -0
- data/rails_generators/emergent_config/templates/app/helpers/accounts_helper.rb +93 -0
- data/rails_generators/emergent_config/templates/app/helpers/application_helper.rb +3 -0
- data/rails_generators/emergent_config/templates/app/models/account.rb +84 -0
- data/rails_generators/emergent_config/templates/app/models/account_mailer.rb +24 -0
- data/rails_generators/emergent_config/templates/app/models/account_observer.rb +17 -0
- data/rails_generators/emergent_config/templates/app/models/address.rb +2 -0
- data/rails_generators/emergent_config/templates/app/models/asset.rb +6 -0
- data/rails_generators/emergent_config/templates/app/models/asset_assignment.rb +4 -0
- data/rails_generators/emergent_config/templates/app/models/category.rb +35 -0
- data/rails_generators/emergent_config/templates/app/models/comment.rb +98 -0
- data/rails_generators/emergent_config/templates/app/models/content.rb +89 -0
- data/rails_generators/emergent_config/templates/app/models/content_assignment.rb +21 -0
- data/rails_generators/emergent_config/templates/app/models/image.rb +3 -0
- data/rails_generators/emergent_config/templates/app/models/post.rb +76 -0
- data/rails_generators/emergent_config/templates/app/models/section.rb +97 -0
- data/rails_generators/emergent_config/templates/app/models/site.rb +1 -0
- data/rails_generators/emergent_config/templates/app/models/tag.rb +1 -0
- data/rails_generators/emergent_config/templates/app/models/user.rb +4 -0
- data/rails_generators/emergent_config/templates/app/views/account_mailer/activation.erb +3 -0
- data/rails_generators/emergent_config/templates/app/views/account_mailer/signup_notification.erb +8 -0
- data/rails_generators/emergent_config/templates/config/Capfile +4 -0
- data/rails_generators/emergent_config/templates/config/README.txt +18 -0
- data/rails_generators/emergent_config/templates/config/deploy.rb +36 -0
- data/rails_generators/emergent_config/templates/config/routes.rb +72 -0
- data/rails_generators/emergent_config/templates/core/actionscript.properties +16 -0
- data/rails_generators/emergent_config/templates/core/actionscriptair.properties +16 -0
- data/rails_generators/emergent_config/templates/core/app.yaml.erb +12 -0
- data/rails_generators/emergent_config/templates/core/default_tasks.rake +51 -0
- data/rails_generators/emergent_config/templates/core/emergent_tasks.rake +42 -0
- data/rails_generators/emergent_config/templates/core/empty.txt +0 -0
- data/rails_generators/emergent_config/templates/core/expressInstall.swf +0 -0
- data/rails_generators/emergent_config/templates/core/flex.properties +2 -0
- data/rails_generators/emergent_config/templates/core/generate.rb +17 -0
- data/rails_generators/emergent_config/templates/core/html-template/AC_OETags.js +276 -0
- data/rails_generators/emergent_config/templates/core/html-template/history/history.css +6 -0
- data/rails_generators/emergent_config/templates/core/html-template/history/history.js +645 -0
- data/rails_generators/emergent_config/templates/core/html-template/history/historyFrame.html +29 -0
- data/rails_generators/emergent_config/templates/core/html-template/index.template.html +121 -0
- data/rails_generators/emergent_config/templates/core/html-template/playerProductInstall.swf +0 -0
- data/rails_generators/emergent_config/templates/core/index.html.erb +18 -0
- data/rails_generators/emergent_config/templates/core/index.yaml +11 -0
- data/rails_generators/emergent_config/templates/core/mainair-app.xml +134 -0
- data/rails_generators/emergent_config/templates/core/mainapp-config.xml +21 -0
- data/rails_generators/emergent_config/templates/core/mainapp.mxml +101 -0
- data/rails_generators/emergent_config/templates/core/project-textmate.erb +52 -0
- data/rails_generators/emergent_config/templates/core/project.properties +18 -0
- data/rails_generators/emergent_config/templates/core/projectair.properties +24 -0
- data/rails_generators/emergent_config/templates/core/restfulx.yml +14 -0
- data/rails_generators/emergent_config/templates/core/restfulx_tasks.rake +6 -0
- data/rails_generators/emergent_config/templates/core/swfobject.js +5 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_accounts.rb +40 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_addresses.rb +18 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_asset_assignments.rb +19 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_assets.rb +20 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_content_assignments.rb +26 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_contents.rb +21 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_sessions.rb +16 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_sites.rb +27 -0
- data/rails_generators/emergent_config/templates/db/migrate/create_users.rb +15 -0
- data/rails_generators/emergent_config/templates/lib/analytics.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/app_controller.rb.erb +26 -0
- data/rails_generators/emergent_config/templates/lib/as3corelib-0.92.1.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/as3crypto-1.3patched.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/as3crypto.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/as3ds-1.04.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/as3httpclientlib-1.0.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/authenticated_system.rb +189 -0
- data/rails_generators/emergent_config/templates/lib/authenticated_test_helper.rb +11 -0
- data/rails_generators/emergent_config/templates/lib/containerEx.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/flare.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/flash_session_hack.rb +27 -0
- data/rails_generators/emergent_config/templates/lib/flex2BrowserManager.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/flexlib.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/fluint.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/mate_0_8_6_enhanced.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/openflux.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/pv3d.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/restfulx.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/site_keys.rb +38 -0
- data/rails_generators/emergent_config/templates/lib/tweenMax.swc +0 -0
- data/rails_generators/emergent_config/templates/lib/urlkitFlex3.swc +0 -0
- data/rails_generators/emergent_config/templates/shell_script +31 -0
- data/rails_generators/emergent_controller/USAGE +5 -0
- data/rails_generators/emergent_controller/emergent_controller_generator.rb +25 -0
- data/rails_generators/emergent_controller/templates/controller.as.erb +37 -0
- data/rails_generators/emergent_core/USAGE +5 -0
- data/rails_generators/emergent_core/emergent_core_generator.rb +157 -0
- data/rails_generators/emergent_iphone/USAGE +5 -0
- data/rails_generators/emergent_iphone/emergent_iphone_generator.rb +27 -0
- data/rails_generators/emergent_scaffold/USAGE +5 -0
- data/rails_generators/emergent_scaffold/emergent_scaffold_generator.rb +157 -0
- data/rails_generators/emergent_scaffold/templates/component.mxml.erb +101 -0
- data/rails_generators/emergent_scaffold/templates/controller.rb.erb +101 -0
- data/rails_generators/emergent_scaffold/templates/edit_index_view.mxml.erb +114 -0
- data/rails_generators/emergent_scaffold/templates/edit_show_view.mxml.erb +84 -0
- data/rails_generators/emergent_scaffold/templates/filter_view.mxml.erb +1 -0
- data/rails_generators/emergent_scaffold/templates/fixtures.yml.erb +128 -0
- data/rails_generators/emergent_scaffold/templates/index_view.mxml.erb +58 -0
- data/rails_generators/emergent_scaffold/templates/item_renderer.mxml.erb +53 -0
- data/rails_generators/emergent_scaffold/templates/manager.as.erb +31 -0
- data/rails_generators/emergent_scaffold/templates/migration.rb.erb +22 -0
- data/rails_generators/emergent_scaffold/templates/model.as.erb +42 -0
- data/rails_generators/emergent_scaffold/templates/model.rb.erb +11 -0
- data/rails_generators/emergent_scaffold/templates/presentation_model.as.erb +33 -0
- data/rails_generators/emergent_scaffold/templates/presenter.as.erb +98 -0
- data/rails_generators/emergent_scaffold/templates/show_view.mxml.erb +50 -0
- data/rails_generators/emergent_scaffold/templates/view_map.mxml.erb +40 -0
- data/rails_generators/emergent_scaffold/templates/views_panel.mxml.erb +64 -0
- data/rails_generators/emergent_styler/USAGE +5 -0
- data/rails_generators/emergent_styler/emergent_styler_generator.rb +21 -0
- data/rails_generators/rx_yaml_scaffold/USAGE +51 -0
- data/rails_generators/rx_yaml_scaffold/rx_yaml_scaffold_generator.rb +49 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/emergent_core_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/test_emergent_core.rb +0 -0
- data/test/test_emergent_iphone_generator.rb +46 -0
- data/test/test_generator_helper.rb +29 -0
- metadata +437 -0
@@ -0,0 +1,194 @@
|
|
1
|
+
# There's a number of things that ActiveRecord/ActiveSupport and the rest of the family get
|
2
|
+
# ~wrong~ from the point of view of Flex clients.
|
3
|
+
#
|
4
|
+
# Some of these things are:
|
5
|
+
# * Date formats
|
6
|
+
# * XML format (Flex *really* doesn't like dashes in XML messages)
|
7
|
+
# * Errors (we need to be more specific and communicate what went wrong *where*)
|
8
|
+
#
|
9
|
+
# This is where we try to fix this stuff.
|
10
|
+
#
|
11
|
+
# Some of the things that are done can be called _monkey_ _patching_ while others can
|
12
|
+
# be called extensions. Caveat emptor.
|
13
|
+
|
14
|
+
# Flex friendly date, datetime formats
|
15
|
+
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(:flex_date => "%Y/%m/%d")
|
16
|
+
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(:flex_datetime => "%Y/%m/%d %H:%M:%S")
|
17
|
+
|
18
|
+
Hash::XML_FORMATTING['date'] = Proc.new { |date| date.to_s(:flex_date) }
|
19
|
+
Hash::XML_FORMATTING['datetime'] = Proc.new { |datetime| datetime.to_s(:flex_datetime) }
|
20
|
+
|
21
|
+
# ActiveSupport specific patches. More specifically we add +to_fxml+ methods to Array and
|
22
|
+
# Hash conversion modules
|
23
|
+
module ActiveSupport
|
24
|
+
# refer to: http://api.rubyonrails.org/ for more details
|
25
|
+
module CoreExtensions
|
26
|
+
# Add Flex friendly +to_fxml+ to Hash conversions
|
27
|
+
module Hash
|
28
|
+
# refer to: http://api.rubyonrails.org/ for more details
|
29
|
+
module Conversions
|
30
|
+
|
31
|
+
# Flex friendly XML format, no dashes, etc
|
32
|
+
def to_fxml(options = {})
|
33
|
+
options.merge!(:dasherize => false)
|
34
|
+
options[:indent] ||= 2
|
35
|
+
options.reverse_merge!({ :builder => Builder::XmlMarkup.new(:indent => options[:indent]),
|
36
|
+
:root => "hash" })
|
37
|
+
options[:builder].instruct! unless options.delete(:skip_instruct)
|
38
|
+
dasherize = !options.has_key?(:dasherize) || options[:dasherize]
|
39
|
+
root = dasherize ? options[:root].to_s.dasherize : options[:root].to_s
|
40
|
+
|
41
|
+
options[:builder].__send__(:method_missing, root) do
|
42
|
+
each do |key, value|
|
43
|
+
case value
|
44
|
+
when ::Hash
|
45
|
+
value.to_fxml(options.merge({ :root => key, :skip_instruct => true }))
|
46
|
+
when ::Array
|
47
|
+
value.to_fxml(options.merge({ :root => key, :children => key.to_s.singularize, :skip_instruct => true}))
|
48
|
+
when ::Method, ::Proc
|
49
|
+
# If the Method or Proc takes two arguments, then
|
50
|
+
# pass the suggested child element name. This is
|
51
|
+
# used if the Method or Proc will be operating over
|
52
|
+
# multiple records and needs to create an containing
|
53
|
+
# element that will contain the objects being
|
54
|
+
# serialized.
|
55
|
+
if 1 == value.arity
|
56
|
+
value.call(options.merge({ :root => key, :skip_instruct => true }))
|
57
|
+
else
|
58
|
+
value.call(options.merge({ :root => key, :skip_instruct => true }), key.to_s.singularize)
|
59
|
+
end
|
60
|
+
else
|
61
|
+
if value.respond_to?(:to_fxml)
|
62
|
+
value.to_fxml(options.merge({ :root => key, :skip_instruct => true }))
|
63
|
+
else
|
64
|
+
type_name = XML_TYPE_NAMES[value.class.name]
|
65
|
+
|
66
|
+
key = dasherize ? key.to_s.dasherize : key.to_s
|
67
|
+
|
68
|
+
attributes = options[:skip_types] || value.nil? || type_name.nil? ? { } : { :type => type_name }
|
69
|
+
if value.nil?
|
70
|
+
attributes[:nil] = true
|
71
|
+
end
|
72
|
+
|
73
|
+
options[:builder].tag!(key,
|
74
|
+
XML_FORMATTING[type_name] ? XML_FORMATTING[type_name].call(value) : value,
|
75
|
+
attributes
|
76
|
+
)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
yield options[:builder] if block_given?
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
# Add Flex friendly to_fxml to array conversions
|
87
|
+
module Array
|
88
|
+
# refer to: http://api.rubyonrails.org/ for more details
|
89
|
+
module Conversions
|
90
|
+
# Flex friendly XML format (no dashes, etc)
|
91
|
+
def to_fxml(options = {})
|
92
|
+
raise "Not all elements respond to to_fxml" unless all? { |e| e.respond_to? :to_fxml }
|
93
|
+
|
94
|
+
options[:root] ||= all? { |e| e.is_a?(first.class) && first.class.to_s != "Hash" } ? first.class.to_s.underscore.pluralize : "records"
|
95
|
+
options[:children] ||= options[:root].singularize
|
96
|
+
options[:indent] ||= 2
|
97
|
+
options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
|
98
|
+
options.merge!(:dasherize => false)
|
99
|
+
|
100
|
+
root = options.delete(:root).to_s
|
101
|
+
children = options.delete(:children)
|
102
|
+
|
103
|
+
if !options.has_key?(:dasherize) || options[:dasherize]
|
104
|
+
root = root.dasherize
|
105
|
+
end
|
106
|
+
|
107
|
+
options[:builder].instruct! unless options.delete(:skip_instruct)
|
108
|
+
|
109
|
+
opts = options.merge({ :root => children })
|
110
|
+
|
111
|
+
xml = options[:builder]
|
112
|
+
if empty?
|
113
|
+
xml.tag!(root, options[:skip_types] ? {} : {:type => "array"})
|
114
|
+
else
|
115
|
+
xml.tag!(root, options[:skip_types] ? {} : {:type => "array"}) {
|
116
|
+
yield xml if block_given?
|
117
|
+
# Extended by Lance Pollard
|
118
|
+
each_with_index do |e, i|
|
119
|
+
if options[:child_proc]
|
120
|
+
e.to_fxml(opts.merge!({ :skip_instruct => true,
|
121
|
+
:procs => options[:child_proc][i] }))
|
122
|
+
else
|
123
|
+
e.to_fxml(opts.merge!({ :skip_instruct => true }))
|
124
|
+
end
|
125
|
+
end
|
126
|
+
}
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# Flex friendly ActiveRecord patches. More specifically XML serialization improvements.
|
135
|
+
# These won't override whatever you may normally do with XML, hence there's Flex specific
|
136
|
+
# name for this stuff +to_fxml+.
|
137
|
+
module ActiveRecord
|
138
|
+
# refer to: http://api.rubyonrails.org/ for more details
|
139
|
+
module Serialization
|
140
|
+
# Enforces Flex friendly options on XML and delegates processing to standard +to_xml+
|
141
|
+
def to_fxml(options = {}, &block)
|
142
|
+
options.merge!(:dasherize => false)
|
143
|
+
default_except = [:crypted_password, :salt, :remember_token, :remember_token_expires_at]
|
144
|
+
options[:except] = (options[:except] ? options[:except] + default_except : default_except)
|
145
|
+
to_xml(options, &block)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# Change the xml serializer so that '?'s are stripped from attribute names.
|
150
|
+
# This makes it possible to serialize methods that end in a question mark, like 'valid?' or 'is_true?'
|
151
|
+
class XmlSerializer
|
152
|
+
# Strips '?' from serialized method names
|
153
|
+
def add_tag(attribute)
|
154
|
+
builder.tag!(
|
155
|
+
dasherize? ? attribute.display_name.dasherize : attribute.display_name,
|
156
|
+
attribute.value.to_s,
|
157
|
+
attribute.decorations(!options[:skip_types])
|
158
|
+
)
|
159
|
+
end
|
160
|
+
# Strips '?' from serialized method names
|
161
|
+
class Attribute
|
162
|
+
# Strips '?' from serialized method names
|
163
|
+
def display_name
|
164
|
+
@name.gsub('?','')
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# Add more extensive reporting on errors including field name along with a message
|
170
|
+
# when errors are serialized to XML
|
171
|
+
class Errors
|
172
|
+
# Flex friendly errors
|
173
|
+
def to_fxml(options={})
|
174
|
+
options[:root] ||= "errors"
|
175
|
+
options[:indent] ||= 2
|
176
|
+
options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
|
177
|
+
options[:builder].instruct! unless options.delete(:skip_instruct)
|
178
|
+
options[:builder].errors do |e|
|
179
|
+
# The @errors instance variable is a Hash inside the Errors class
|
180
|
+
@errors.each_key do |attr|
|
181
|
+
@errors[attr].each do |msg|
|
182
|
+
next if msg.nil?
|
183
|
+
if attr == "base"
|
184
|
+
options[:builder].error("message" => msg)
|
185
|
+
else
|
186
|
+
fullmsg = @base.class.human_attribute_name(attr) + ' ' + msg
|
187
|
+
options[:builder].error("field" => attr.camelcase(:lower), "message" => fullmsg)
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# ActiveRecord specific Rake tasks. Namely, nice little extras such as:
|
2
|
+
# - db:mysql:stage
|
3
|
+
# - db:refresh
|
4
|
+
require File.join(File.dirname(__FILE__), 'tasks')
|
5
|
+
|
6
|
+
# stores local copy of the application environment ('production', 'test', etc)
|
7
|
+
# so that appropriate values in config/database.yml are used
|
8
|
+
APP_ENV = defined?(ENV['RAILS_ENV']) ? ENV['RAILS_ENV'] : ENV['MERB_ENV']
|
9
|
+
|
10
|
+
namespace :db do
|
11
|
+
namespace :mysql do
|
12
|
+
namespace :stage do
|
13
|
+
desc "Stage production, test and development databases"
|
14
|
+
task :all do
|
15
|
+
db_names = %w(development test production)
|
16
|
+
admin_password = ENV["ADMINPASS"] || ""
|
17
|
+
db_user_name = ENV["USER"] || "root"
|
18
|
+
db_password = ENV["PASS"] || ""
|
19
|
+
stage_database(db_names, admin_password, db_user_name, db_password)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "Stage the database environment for #{APP_ENV}"
|
24
|
+
task :stage do
|
25
|
+
db_names = [APP_ENV]
|
26
|
+
admin_password = ENV["ADMINPASS"] || ""
|
27
|
+
db_user_name = ENV["USER"] || "root"
|
28
|
+
db_password = ENV["PASS"] || ""
|
29
|
+
stage_database(db_names, admin_password, db_user_name, db_password)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Performs MySQL database set-up based on the username and password
|
34
|
+
# provided. Also updates Rails config/database.yml file with database
|
35
|
+
# username and password
|
36
|
+
def stage_database(db_names, admin_password, db_user_name, db_password)
|
37
|
+
sql_command = ""
|
38
|
+
|
39
|
+
db_names.each do |name|
|
40
|
+
db_name = ActiveRecord::Base.configurations[name]['database']
|
41
|
+
sql_command += "drop database if exists #{db_name}; " <<
|
42
|
+
"create database #{db_name}; grant all privileges on #{db_name}.* " <<
|
43
|
+
"to #{db_user_name}@localhost identified by \'#{db_password}\';"
|
44
|
+
ActiveRecord::Base.configurations[name]['username'] = db_user_name
|
45
|
+
ActiveRecord::Base.configurations[name]['password'] = db_password
|
46
|
+
end
|
47
|
+
|
48
|
+
if (!File.exist?("#{APP_ROOT}/tmp/stage.sql"))
|
49
|
+
File.open("#{APP_ROOT}/tmp/stage.sql", "w") do |file|
|
50
|
+
file.print sql_command
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# back up the original database.yml file just in case
|
55
|
+
File.copy("#{APP_ROOT}/config/database.yml",
|
56
|
+
"#{APP_ROOT}/config/database.yml.sample") if !File.exist?("#{APP_ROOT}/config/database.yml.sample")
|
57
|
+
|
58
|
+
dbconfig = File.read("#{APP_ROOT}/config/database.yml")
|
59
|
+
dbconfig.gsub!(/username:.*/, "username: #{db_user_name}")
|
60
|
+
dbconfig.gsub!(/password:.*/, "password: #{db_password}")
|
61
|
+
|
62
|
+
File.open("#{APP_ROOT}/config/database.yml", "w") do |file|
|
63
|
+
file.print dbconfig
|
64
|
+
end
|
65
|
+
|
66
|
+
if system %(mysql -h localhost -u root --password=#{admin_password} < tmp/stage.sql)
|
67
|
+
puts "Updated config/database.yml and staged the database based on your settings"
|
68
|
+
File.delete("tmp/stage.sql") if File.file?("tmp/stage.sql")
|
69
|
+
else
|
70
|
+
puts "Staging was not performed. Check console for errors. It is possible that 'mysql' executable was not found."
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
desc "Drop the database environment for #{APP_ENV} only if it exists"
|
75
|
+
task :drop_if_exists do
|
76
|
+
Rake::Task["db:drop"].invoke rescue nil
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Refresh the database environment for #{APP_ENV}"
|
80
|
+
task :refresh => ['db:drop_if_exists', 'db:create', 'db:migrate', 'db:fixtures:load']
|
81
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Interestingly enough there's no way to *just* upper-case or down-case first letter of a given
|
2
|
+
# string. Ruby's own +capitalize+ actually downcases all the rest of the characters in the string
|
3
|
+
# We patch the class to add our own implementation.
|
4
|
+
class String
|
5
|
+
# Upper-case first character of a string leave the rest of the string intact
|
6
|
+
def ucfirst
|
7
|
+
self[0,1].capitalize + self[1..-1]
|
8
|
+
end
|
9
|
+
|
10
|
+
# Down-case first character of a string leaving the rest of it intact
|
11
|
+
def dcfirst
|
12
|
+
self[0,1].downcase + self[1..-1]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module RestfulX
|
17
|
+
# Computes necessary configuration options from the environment. This can be used in Rails, Merb
|
18
|
+
# or standalone from the command line.
|
19
|
+
module Configuration
|
20
|
+
APP_ROOT = defined?(RAILS_ROOT) ? RAILS_ROOT : defined?(Merb) ? Merb.root : File.expand_path(".")
|
21
|
+
|
22
|
+
# Extract project, package, controller names from the environment. This will respect
|
23
|
+
# config/restfulx.yml if it exists, you can override all of the defaults there. The defaults are:
|
24
|
+
# - *base-package* same as project name downcased
|
25
|
+
# - *controller-name* 'ApplicationController'
|
26
|
+
#
|
27
|
+
# Here's a sample restfulx.yml file:
|
28
|
+
#
|
29
|
+
# RestfulX code generation configuration options
|
30
|
+
#
|
31
|
+
# By default flex models, commands, controllers and components are genearated into
|
32
|
+
# app/flex/<your rails project name> folder. If you'd like to customize the target folder
|
33
|
+
# (to say append a "com" package before your rails project name) uncomment the line below
|
34
|
+
# base-package must follow the usual flex package notation (a string separated by ".")
|
35
|
+
#
|
36
|
+
# base-package: com.pomodo
|
37
|
+
#
|
38
|
+
# Main RestfulX controller is typically named AppicationController. This controller is created in
|
39
|
+
# <base-package>.controllers folder. You can customize the name by uncommenting the following line
|
40
|
+
# and changing the controller name.
|
41
|
+
#
|
42
|
+
# controller-name: ApplicationController
|
43
|
+
def extract_names(project = nil)
|
44
|
+
if project
|
45
|
+
project_name = project.camelcase.gsub(/\s/, '')
|
46
|
+
project_name_downcase = project_name.downcase
|
47
|
+
else
|
48
|
+
project_name = APP_ROOT.split("/").last.camelcase.gsub(/\s/, '')
|
49
|
+
project_name_downcase = project_name.downcase
|
50
|
+
end
|
51
|
+
|
52
|
+
# give a chance to override the settings via restfulx.yml
|
53
|
+
begin
|
54
|
+
config = YAML.load(File.open("#{APP_ROOT}/config/restfulx.yml"))
|
55
|
+
base_package = config['base-package'] || project_name_downcase
|
56
|
+
base_folder = base_package.gsub('.', '/').gsub(/\s/, '')
|
57
|
+
project_name = config['project-name'].camelcase.gsub(/\s/, '') || project_name
|
58
|
+
controller_name = config['controller-name'] || "ApplicationController"
|
59
|
+
rescue
|
60
|
+
base_folder = base_package = project_name_downcase
|
61
|
+
controller_name = "ApplicationController"
|
62
|
+
end
|
63
|
+
[project_name, project_name_downcase, controller_name, base_package, base_folder]
|
64
|
+
end
|
65
|
+
|
66
|
+
# List files ending in *.as (ActionScript) in a given folder
|
67
|
+
def list_as_files(dir_name)
|
68
|
+
Dir.entries(dir_name).grep(/\.as$/).map { |name| name.sub(/\.as$/, "") }.join(", ")
|
69
|
+
end
|
70
|
+
|
71
|
+
# List files ending in *.mxml in a given folder
|
72
|
+
def list_mxml_files(dir_name)
|
73
|
+
Dir.entries(dir_name).grep(/\.mxml$/).map { |name| name.sub(/\.mxml$/, "") }
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'builder'
|
2
|
+
require RestfulX::LIB_DIR + 'configuration'
|
3
|
+
|
4
|
+
# Flex friendly DataMapper patches, more specifically we just add +to_xml+ on
|
5
|
+
# ValidationErrors class
|
6
|
+
module DataMapper
|
7
|
+
# see DataMapper docs for more details
|
8
|
+
module Validate
|
9
|
+
# By default DataMapper validation errors doesn't have +to_xml+ method. This is
|
10
|
+
# actually very useful when dealing with remote stateful clients such as Flex/AIR.
|
11
|
+
class ValidationErrors
|
12
|
+
# Add Flex-friendly +to_xml+ implementation
|
13
|
+
def to_xml
|
14
|
+
xml = Builder::XmlMarkup.new(:indent => 2)
|
15
|
+
xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
|
16
|
+
xml.errors do |e|
|
17
|
+
@errors.each_key do |attribute|
|
18
|
+
@errors[attribute].each do |msg|
|
19
|
+
next if msg.nil?
|
20
|
+
if attribute == "base"
|
21
|
+
e.error("message" => msg)
|
22
|
+
else
|
23
|
+
e.error("field" => attribute.to_s.camelcase(:lower), "message" => msg)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Adds Capistrano recipes for deploying Flex applications
|
2
|
+
#
|
3
|
+
# To use these recipes, add the following to your Capfile:
|
4
|
+
#
|
5
|
+
# require 'restfulx/rails/recipes'
|
6
|
+
require 'find'
|
7
|
+
|
8
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
9
|
+
after "deploy:setup", "deploy:flex:setup"
|
10
|
+
|
11
|
+
namespace :db do
|
12
|
+
desc "runs db:refresh in the latest release directory."
|
13
|
+
task :refresh, :roles => :db do
|
14
|
+
run("cd #{latest_release} && rake db:refresh RAILS_ENV=production")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :deploy do
|
19
|
+
namespace :flex do
|
20
|
+
|
21
|
+
desc "Creates the flex_files directory in the shared directory"
|
22
|
+
task :setup do
|
23
|
+
flex_dir = File.join(shared_path, 'flex_files')
|
24
|
+
run "#{try_sudo} mkdir -p #{flex_dir} && #{try_sudo} chmod g+w #{flex_dir}"
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "uploads everything in public/bin up to the server"
|
28
|
+
task :via_dumb_copy, :roles => :app do
|
29
|
+
# the -p flag on mkdir makes intermediate directories (i.e. both /bin and /bin/history),
|
30
|
+
# and doesn't raise an error if any of the directories already exist.
|
31
|
+
rails_root = Dir.pwd # You have to run cap tasks from RAILS_ROOT anyways
|
32
|
+
base_dir = File.join(rails_root, 'public', 'bin')
|
33
|
+
ec2_base_dir = File.join(shared_path, 'flex_files')
|
34
|
+
|
35
|
+
Find.find(base_dir) do |file|
|
36
|
+
filename_without_base_dir = file.sub(base_dir, '')
|
37
|
+
if File.directory?(file)
|
38
|
+
run "mkdir -p #{File.join(ec2_base_dir, filename_without_base_dir)}"
|
39
|
+
else
|
40
|
+
content = File.open(file, 'rb') {|f| f.read}
|
41
|
+
put content, File.join(ec2_base_dir, filename_without_base_dir)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
desc "synchronizes the local and remote public/bin directories using rsync"
|
47
|
+
task :via_rsync, :roles => :app do
|
48
|
+
username = user || ENV['USER']
|
49
|
+
rails_root = Dir.pwd # You have to run cap tasks from RAILS_ROOT anyways
|
50
|
+
execute_on_servers do |server|
|
51
|
+
`rsync -r -p -v -e \"ssh -i #{ssh_options[:keys]}\" #{File.join(rails_root, 'public', 'bin')}/ #{username}@#{server}:#{File.join(shared_path, 'flex_files')}/`
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
task :make_symlink, :roles => :app do
|
56
|
+
run "ln -s #{shared_path}/flex_files #{release_path}/public/bin"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Adds a little helper to make it easier empbedding SWFs in ERB templates.
|
2
|
+
module SWFHelper
|
3
|
+
|
4
|
+
# Creates a swfObject Javascript call. You must include swfobject.js to use this.
|
5
|
+
# See http://code.google.com/p/swfobject/wiki/documentation for full details and documentation
|
6
|
+
# of the swfobject js library.
|
7
|
+
def swfobject(swf_url, params = {})
|
8
|
+
params.reverse_merge!({:width => '100%',
|
9
|
+
:height => '100%',
|
10
|
+
:id => 'flashContent',
|
11
|
+
:version => '9.0.0',
|
12
|
+
:express_install_swf => '/expressInstall.swf',
|
13
|
+
:flash_vars => nil,
|
14
|
+
:params => nil,
|
15
|
+
:attributes => nil,
|
16
|
+
:create_div => false,
|
17
|
+
:include_authenticity_token => true,
|
18
|
+
:include_session_token => true
|
19
|
+
})
|
20
|
+
arg_order = [:id, :width, :height, :version, :express_install_swf]
|
21
|
+
js_params = ["'#{swf_url}?#{rails_asset_id(swf_url)}'"]
|
22
|
+
js_params += arg_order.collect {|arg| "'#{params[arg]}'" }
|
23
|
+
|
24
|
+
# Add authenticity_token and the session key to flashVars. This will only work if flashVars is a Hash or nil
|
25
|
+
# If it's a string representing the name of a Javascript variable, then you need to add them yourself
|
26
|
+
# like this:
|
27
|
+
# <script>
|
28
|
+
# ... other code that defines flashVars and sets some of its parameters
|
29
|
+
# flashVars['authenticity_token'] = <%= form_authenticity_token -%>
|
30
|
+
# flashVars['session_token'] = <%= session.session_id -%>
|
31
|
+
# </script>
|
32
|
+
# If you include an authenticity_token parameter in flashVars,
|
33
|
+
# then the Flex app will add it to Rx.defaultMetadata, so that it will be sent
|
34
|
+
# back up to your Rails app with every request.
|
35
|
+
params[:flash_vars] ||= {}
|
36
|
+
if params[:flash_vars].is_a?(Hash)
|
37
|
+
if params[:include_authenticity_token] && ActionController::Base.allow_forgery_protection
|
38
|
+
params[:flash_vars].reverse_merge!(:authenticity_token => form_authenticity_token)
|
39
|
+
end
|
40
|
+
if params[:include_session_token]
|
41
|
+
params[:flash_vars].reverse_merge!(:session_token => session.session_id)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
js_params += [params[:flash_vars], params[:params], params[:attributes]].collect do |hash_or_string|
|
46
|
+
if hash_or_string.is_a?(Hash)
|
47
|
+
hash_or_string.to_json
|
48
|
+
else # If it's not a hash, then it should be a string giving the name of the Javascript variable to use
|
49
|
+
hash_or_string
|
50
|
+
end
|
51
|
+
end.compact
|
52
|
+
|
53
|
+
swf_tag = javascript_tag do
|
54
|
+
"swfobject.embedSWF(#{js_params.join(',')})"
|
55
|
+
end
|
56
|
+
swf_tag += content_tag(:div, nil, :id => params[:id]) if params[:create_div]
|
57
|
+
swf_tag
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# Rake tasks for building RestfulX-based Flex and AIR applications
|
2
|
+
require 'rake'
|
3
|
+
require 'ftools'
|
4
|
+
require 'rexml/document'
|
5
|
+
require File.join(File.dirname(__FILE__), 'configuration')
|
6
|
+
|
7
|
+
APP_ROOT = RestfulX::Configuration::APP_ROOT
|
8
|
+
|
9
|
+
namespace :rx do
|
10
|
+
# Compile the main Flex/AIR application using given executable to the given
|
11
|
+
# destination folder
|
12
|
+
def compile_app(executable, destination, opts = '')
|
13
|
+
app_properties = REXML::Document.new(File.open(File.join(APP_ROOT, ".actionScriptProperties")))
|
14
|
+
app_properties.elements.each("*/applications/application") do |elm|
|
15
|
+
app_path = elm.attributes['path']
|
16
|
+
project_path = File.join(APP_ROOT, "app/flex", app_path)
|
17
|
+
target_project_path = project_path.sub(/.mxml$/, '.swf')
|
18
|
+
target_project_air_descriptor = project_path.sub(/.mxml$/, '-app.xml')
|
19
|
+
|
20
|
+
libs = Dir.glob(File.join(APP_ROOT, 'lib', '*.swc')).map {|lib| lib.gsub(' ', '\ ')}
|
21
|
+
|
22
|
+
cmd = "#{executable} #{opts} -library-path+=#{libs.join(',')} " <<
|
23
|
+
"-keep-as3-metadata+=Resource,HasOne,HasMany,BelongsTo,DateTime,Lazy,Ignored #{project_path.gsub(' ', '\ ')}"
|
24
|
+
puts "Compiling #{project_path}"
|
25
|
+
if system(cmd)
|
26
|
+
FileUtils.makedirs File.join(APP_ROOT, destination)
|
27
|
+
puts "Moving #{target_project_path} to " + File.join(APP_ROOT, destination)
|
28
|
+
FileUtils.mv target_project_path, File.join(APP_ROOT, destination), :force => true
|
29
|
+
if File.exist?(target_project_air_descriptor)
|
30
|
+
descriptor = File.read(target_project_air_descriptor)
|
31
|
+
descriptor_name = target_project_air_descriptor.split("/").last
|
32
|
+
app_swf = target_project_path.split("/").last
|
33
|
+
descriptor.gsub!("[This value will be overwritten by Flex Builder in the output app.xml]",
|
34
|
+
app_swf)
|
35
|
+
|
36
|
+
File.open("#{APP_ROOT}/#{destination}/#{descriptor_name}", "w") do |file|
|
37
|
+
file.print descriptor
|
38
|
+
end
|
39
|
+
puts "Created #{APP_ROOT}/#{destination}/#{descriptor_name} descriptor."
|
40
|
+
end
|
41
|
+
puts 'Done!'
|
42
|
+
else
|
43
|
+
puts "The application was not compiled. Check console for errors. " <<
|
44
|
+
"It is possible that '(a)mxmlc' executable was not found or there are compilation errors."
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Find what the main application is based on .actionScriptProperties file
|
50
|
+
def get_main_application
|
51
|
+
app_properties = REXML::Document.new(File.open(File.join(APP_ROOT, ".actionScriptProperties")))
|
52
|
+
app_properties.root.attributes['mainApplicationPath'].split("/").last
|
53
|
+
end
|
54
|
+
|
55
|
+
# Get appropriate executable based on platform
|
56
|
+
def get_executable(executable)
|
57
|
+
if RUBY_PLATFORM =~ /mswin32/
|
58
|
+
executable << '.exe'
|
59
|
+
end
|
60
|
+
executable
|
61
|
+
end
|
62
|
+
|
63
|
+
namespace :flex do
|
64
|
+
desc "Build project swf file and move it into public/bin folder"
|
65
|
+
task :build do
|
66
|
+
compile_app(get_executable('mxmlc'), 'public/bin')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
namespace :air do
|
71
|
+
desc "Build project swf file as an AIR application and move it into bin-debug folder"
|
72
|
+
task :build do
|
73
|
+
compile_app(get_executable('mxmlc'), 'bin-debug', '+configname=air')
|
74
|
+
end
|
75
|
+
|
76
|
+
desc "Run the AIR application (if this project is configured as an AIR project)"
|
77
|
+
task :run do
|
78
|
+
target = get_main_application.gsub(/.mxml$/, '-app.xml')
|
79
|
+
puts "Running AIR application with descriptor: #{target}"
|
80
|
+
if !system("#{get_executable('adl')} bin-debug/#{target}")
|
81
|
+
puts "Could not run the application with descriptor: #{target}. Check console for errors."
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|