emergent-core 0.1.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/.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
|