brick_layer 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +9 -0
- data/Gemfile +13 -0
- data/README.rdoc +278 -0
- data/Rakefile +36 -0
- data/app/assets/javascripts/tiny_mce/langs/en.js +1 -0
- data/app/assets/javascripts/tiny_mce/license.txt +504 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/js/rule.js +43 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advhr/rule.htm +58 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/image.htm +235 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/js/image.js +462 -0
- data/app/assets/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/js/advlink.js +539 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlink/link.htm +338 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
- data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin_src.js +174 -0
- data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -0
- data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js +431 -0
- data/app/assets/javascripts/tiny_mce/plugins/autosave/langs/en.js +4 -0
- data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +120 -0
- data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js +161 -0
- data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js +43 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/emotions.htm +42 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/js/emotions.js +43 -0
- data/app/assets/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/dialog.htm +22 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/img/example.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/langs/en.js +3 -0
- data/app/assets/javascripts/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css +143 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +405 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/fullpage.htm +259 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js +232 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +159 -0
- data/app/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -0
- data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +83 -0
- data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js +262 -0
- data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +139 -0
- data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin_src.js +954 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/css/media.css +17 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin_src.js +890 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/js/embed.js +73 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/js/media.js +470 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/media.htm +922 -0
- data/app/assets/javascripts/tiny_mce/plugins/media/moxieplayer.swf +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +54 -0
- data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +433 -0
- data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js +871 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +27 -0
- data/app/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js +53 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/example.html +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
- data/app/assets/javascripts/tiny_mce/plugins/preview/preview.html +17 -0
- data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin_src.js +34 -0
- data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin_src.js +101 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js +61 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm +100 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +436 -0
- data/app/assets/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/css/props.css +14 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin_src.js +71 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/js/props.js +709 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/props.htm +845 -0
- data/app/assets/javascripts/tiny_mce/plugins/style/readme.txt +19 -0
- data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js +122 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin_src.js +1428 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/js/table.js +489 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -0
- data/app/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/blank.htm +12 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/css/template.css +23 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin_src.js +159 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/js/template.js +106 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/template/template.htm +31 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualblocks/css/visualblocks.css +19 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js +63 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js +83 -0
- data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js +122 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm +149 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm +142 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm +162 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +132 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm +162 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js +111 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js +28 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js +53 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js +229 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js +53 -0
- data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +55 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template_src.js +1467 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +44 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +363 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +345 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/image.js +251 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +78 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +50 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +218 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/app/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/editor_template.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/editor_template_src.js +84 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/langs/en.js +1 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/app/assets/javascripts/tiny_mce/tiny_mce.js +1 -0
- data/app/assets/javascripts/tiny_mce/tiny_mce_popup.js +5 -0
- data/app/assets/javascripts/tiny_mce/tiny_mce_src.js +17480 -0
- data/app/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -0
- data/app/assets/javascripts/tiny_mce/utils/form_utils.js +210 -0
- data/app/assets/javascripts/tiny_mce/utils/mctabs.js +162 -0
- data/app/assets/javascripts/tiny_mce/utils/validate.js +252 -0
- data/app/assets/stylesheets/brick_layer.css +4 -0
- data/app/assets/stylesheets/default_form.css.scss +117 -0
- data/app/assets/stylesheets/default_style.css.scss +90 -0
- data/app/assets/stylesheets/default_table.css.scss +40 -0
- data/app/assets/stylesheets/default_typography.css.scss +10 -0
- data/app/assets/stylesheets/reset.css +102 -0
- data/app/controllers/brick_layer/admin_controller.rb +3 -0
- data/app/controllers/brick_layer/data_sets_controller.rb +95 -0
- data/app/controllers/brick_layer/manager_controller.rb +7 -0
- data/app/controllers/brick_layer/routes_controller.rb +103 -0
- data/app/helpers/brick_layer/data_set_helper.rb +148 -0
- data/app/helpers/brick_layer/layout_helper.rb +20 -0
- data/app/helpers/brick_layer/site_helper.rb +5 -0
- data/app/models/brick_layer/data_set.rb +219 -0
- data/app/models/brick_layer/file_uploader.rb +7 -0
- data/app/models/brick_layer/route.rb +68 -0
- data/app/models/brick_layer/search.rb +61 -0
- data/app/views/brick_layer/data_sets/_form.html.haml +18 -0
- data/app/views/brick_layer/data_sets/edit.html.haml +7 -0
- data/app/views/brick_layer/data_sets/index.html.haml +25 -0
- data/app/views/brick_layer/data_sets/new.html.haml +5 -0
- data/app/views/brick_layer/data_sets/search.html.haml +1 -0
- data/app/views/brick_layer/data_sets/show.html.haml +32 -0
- data/app/views/brick_layer/layouts/brick_layer_layout.html.haml +40 -0
- data/app/views/brick_layer/manager/data_set_list.html.haml +1 -0
- data/app/views/brick_layer/manager/index.html.haml +1 -0
- data/app/views/brick_layer/routes/_form.html.haml +11 -0
- data/app/views/brick_layer/routes/_route.html.haml +15 -0
- data/app/views/brick_layer/routes/edit.html.haml +21 -0
- data/app/views/brick_layer/routes/index.html.haml +5 -0
- data/app/views/brick_layer/routes/new.html.haml +5 -0
- data/app/views/brick_layer/routes/show.html.haml +27 -0
- data/app/views/brick_layer/shared/_custom_data_sets_list.html.haml +9 -0
- data/config/initializers/brick_layer_carrierwave.rb +6 -0
- data/config/initializers/brick_layer_dragonfly.rb +10 -0
- data/config/routes.rb +28 -0
- data/lib/brick_layer/engine.rb +11 -0
- data/lib/brick_layer/extensions.rb +8 -0
- data/lib/brick_layer/serve_grid_fs_file.rb +22 -0
- data/lib/brick_layer.rb +27 -0
- data/lib/tasks/brick_layer_tasks.rake +4 -0
- data/lib/version.rb +3 -0
- data/spec/controllers/brick_layer/data_sets_controller_spec.rb +69 -0
- data/spec/helpers/brick_layer/data_set_helper_spec.rb +174 -0
- data/spec/helpers/brick_layer/layout_helper_spec.rb +17 -0
- data/spec/models/brick_layer/data_set_spec.rb +81 -0
- data/spec/models/brick_layer/route_spec.rb +76 -0
- data/spec/models/brick_layer/search_spec.rb +101 -0
- data/spec/routing/data_set_routing_spec.rb +83 -0
- data/spec/spec_helper.rb +44 -0
- metadata +588 -0
data/config/routes.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
match "/files/*key" => BrickLayer::ServeGridFsFile
|
3
|
+
|
4
|
+
scope "/brick_layer", :module => :brick_layer do
|
5
|
+
match "/data-sets/search(.:format(/:model))" => "data_sets#search", :via => :get, :as => "search_data_set"
|
6
|
+
|
7
|
+
match "/data-sets/:model" => "data_sets#index", :via => :get, :as => "data_sets"
|
8
|
+
match "/data-sets/:model" => "data_sets#create", :via => :post, :as => "data_sets"
|
9
|
+
match "/data-sets/:model/new" => "data_sets#new", :via => :get, :as => "new_data_set"
|
10
|
+
|
11
|
+
match "/data-sets/:model/:id" => "data_sets#show", :via => :get, :as => "data_set"
|
12
|
+
match "/data-sets/:model/:id" => "data_sets#update", :via => :put
|
13
|
+
match "/data-sets/:model/:id" => "data_sets#destroy", :via => :delete
|
14
|
+
match "/data-sets/:model/:id/edit" => "data_sets#edit", :via => :get, :as => "edit_data_set"
|
15
|
+
|
16
|
+
match "/data-sets" => "manager#data_set_list", :via => :get, :as => "list_data_sets"
|
17
|
+
|
18
|
+
resources :routes
|
19
|
+
|
20
|
+
scope "/pages" do
|
21
|
+
root :to => "routes#show"
|
22
|
+
match "root", :to => "routes#show"
|
23
|
+
match "*path", :to => "routes#show", :as => "display_page"
|
24
|
+
end
|
25
|
+
|
26
|
+
root :to => "manager#index"
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module BrickLayer
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
initializer "brick_layer.load_app_instance_data" do |app|
|
4
|
+
BrickLayer.setup do |config|
|
5
|
+
config.app_root = Rails.root
|
6
|
+
config.enable_pages ||= false
|
7
|
+
config.data_sets_standalones ||= []
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class BrickLayer::ServeGridFsFile
|
2
|
+
class << self
|
3
|
+
def call(env)
|
4
|
+
if env["PATH_INFO"] =~ /^\/files\/(.+)$/
|
5
|
+
process_request(env, $1)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def process_request(env, key)
|
12
|
+
begin
|
13
|
+
Mongo::GridFileSystem.new(Mongoid.database).open(key, 'r') do |file|
|
14
|
+
[200, { 'Content-Type' => file.content_type }, [file.read]]
|
15
|
+
end
|
16
|
+
rescue
|
17
|
+
[404, { 'Content-Type' => 'text/plain' }, ['File not found.']]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/brick_layer.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "bson"
|
2
|
+
require "bson_ext/cbson"
|
3
|
+
require "mongoid"
|
4
|
+
require "haml"
|
5
|
+
require "kaminari"
|
6
|
+
require "mongoid_nested_set"
|
7
|
+
require "mongoid_fulltext"
|
8
|
+
require "simple_form"
|
9
|
+
require "mongoid-ancestry"
|
10
|
+
require "rack/cache"
|
11
|
+
require "dragonfly"
|
12
|
+
require "carrierwave"
|
13
|
+
require "carrierwave/orm/mongoid"
|
14
|
+
|
15
|
+
require "brick_layer/engine"
|
16
|
+
require "brick_layer/extensions"
|
17
|
+
require "brick_layer/serve_grid_fs_file"
|
18
|
+
|
19
|
+
module BrickLayer
|
20
|
+
mattr_accessor :app_root, :enable_pages, :data_sets_standalones
|
21
|
+
|
22
|
+
def self.setup
|
23
|
+
Mongoid.config.preload_models = true
|
24
|
+
|
25
|
+
yield self
|
26
|
+
end
|
27
|
+
end
|
data/lib/version.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BrickLayer::DataSetsController do
|
4
|
+
before(:all) do
|
5
|
+
@root_route = BrickLayer::Route.where(:slug => "").first || BrickLayer::Route.create(:slug => "")
|
6
|
+
end
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
BrickLayer::DataSet.destroy_all
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "basic REST" do
|
13
|
+
it "should assign @data_set to be a NEW employee" do
|
14
|
+
@employee = Employee.create(:title => "Employee Data Set", :route_id => @root_route.id)
|
15
|
+
get :new, :model => "employees"
|
16
|
+
assigns(:data_set).new_record?.should be_true
|
17
|
+
assigns(:data_set).is_a?(Employee).should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should assign @data_sets with a LIST of employees" do
|
21
|
+
get :index, :model => "employees"
|
22
|
+
assigns(:data_sets).should == Employee.all
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should assign @data_set to a specific employee to SHOW" do
|
26
|
+
@employee = Employee.create(:title => "Employee Data Set", :route_id => @root_route.id)
|
27
|
+
get :show, :model => "employees", :id => @employee.id
|
28
|
+
assigns(:data_set).should == @employee
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should assign @data_set to a specific employee to EDIT" do
|
32
|
+
@employee = Employee.create(:title => "Employee Data Set", :route_id => @root_route.id)
|
33
|
+
get :edit, :model => "employees", :id => @employee.id
|
34
|
+
assigns(:data_set).should == @employee
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should CREATE the employee data set if a post request is made" do
|
38
|
+
Employee.destroy_all
|
39
|
+
post :create, :model => "employees", :data_set => { :title => "Employee Data Set On Create", :route_id => BrickLayer::Route.first.id }
|
40
|
+
Employee.first.title.should == "Employee Data Set On Create"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should UPDATE the employee data set if a put request is made" do
|
44
|
+
@employee = Employee.create(:title => "Employee Data Set", :route_id => BrickLayer::Route.first.id)
|
45
|
+
put :update, :model => "employees", :id => @employee.id, :data_set => { :title => "New Title" }
|
46
|
+
@employee.reload
|
47
|
+
Employee.find(@employee.id).title.should == "New Title"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should DELETE the employee data set if a delete request is made" do
|
51
|
+
@employee = Employee.create(:title => "Employee Data Set", :route_id => BrickLayer::Route.first.id)
|
52
|
+
Employee.find(@employee.id).should_not be_nil
|
53
|
+
|
54
|
+
delete :destroy, :model => "employees", :id => @employee.id
|
55
|
+
Employee.where(:id => @employee.id).first.should be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "basic SEARCH" do
|
60
|
+
it "should return results searching all documents" do
|
61
|
+
@employee = Employee.create(:title => "Employee Data Set", :route_id => @root_route.id)
|
62
|
+
@one_off_set = OneOffSet.create(:title => "One Off Data Set", :route_id => @root_route.id)
|
63
|
+
|
64
|
+
get :search, :title_in => ["Employee Data Set"]
|
65
|
+
assigns(:data_sets).count.should == 1
|
66
|
+
assigns(:data_sets).first.should == @employee
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BrickLayer::DataSetHelper do
|
4
|
+
before(:each) { BrickLayer::DataSet.destroy_all }
|
5
|
+
|
6
|
+
it "#attributes_for(klass) should list the fields for a data set in an array" do
|
7
|
+
helper.attributes_for(Employee,{:added_only => true}).should == ["first_name","last_name"]
|
8
|
+
end
|
9
|
+
|
10
|
+
context "#form_field_formatter(obj,attribute)" do
|
11
|
+
before(:all) do
|
12
|
+
class TestOwner < BrickLayer::DataSet
|
13
|
+
field :name
|
14
|
+
|
15
|
+
has_one :group, autosave: true
|
16
|
+
end
|
17
|
+
|
18
|
+
class Group < BrickLayer::DataSet
|
19
|
+
field :name
|
20
|
+
|
21
|
+
belongs_to :test_owner
|
22
|
+
has_many :set_helper_data_sets, autosave: true
|
23
|
+
end
|
24
|
+
|
25
|
+
class SetHelperDataSet < BrickLayer::DataSet
|
26
|
+
field :first_name, type: String
|
27
|
+
field :last_name, type: String
|
28
|
+
field :dob, type: DateTime
|
29
|
+
field :some_time, type: Time
|
30
|
+
field :some_boolean, type: Boolean
|
31
|
+
field :some_date, type: Date
|
32
|
+
field :some_int, type: Integer
|
33
|
+
field :some_float, type: Float
|
34
|
+
field :some_decimal, type: BigDecimal
|
35
|
+
|
36
|
+
custom_field :some_text_area, :text
|
37
|
+
custom_field :some_email_field, :email
|
38
|
+
custom_field :some_url_field, :url
|
39
|
+
custom_field :some_phone_field, :tel
|
40
|
+
custom_field :some_password_field, :password
|
41
|
+
custom_field :some_file_field, :file
|
42
|
+
custom_field :some_image_field, :image
|
43
|
+
|
44
|
+
belongs_to :group
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
class Book < BrickLayer::DataSet
|
49
|
+
has_and_belongs_to_many :libraries
|
50
|
+
end
|
51
|
+
|
52
|
+
class Library < BrickLayer::DataSet
|
53
|
+
has_and_belongs_to_many :books
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
before(:each) do
|
58
|
+
@form = SimpleForm::FormBuilder.new(:data_set, SetHelperDataSet.new, helper, {:url => data_sets_path(:model => "set_helper_data_sets")}, lambda {})
|
59
|
+
end
|
60
|
+
|
61
|
+
context "BASIC FIELDS" do
|
62
|
+
it "should properly display STRING fields" do
|
63
|
+
result = helper.form_field_formatter(@form, "first_name")
|
64
|
+
result.should == @form.input(:first_name)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should properly display DATETIME fields" do
|
68
|
+
result = helper.form_field_formatter(@form, "dob")
|
69
|
+
result.should == @form.input(:dob, :as => :datetime)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should properly display TIME fields" do
|
73
|
+
result = helper.form_field_formatter(@form, "some_time")
|
74
|
+
result.should == @form.input(:some_time, :as => :time)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should properly display BOOLEAN fields" do
|
78
|
+
result = helper.form_field_formatter(@form, "some_boolean")
|
79
|
+
result.should == @form.input(:some_boolean, :as => :boolean)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should properly display DATE fields" do
|
83
|
+
result = helper.form_field_formatter(@form, "some_date")
|
84
|
+
result.should == @form.input(:some_date, :as => :date)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should properly display INTEGER fields" do
|
88
|
+
result = helper.form_field_formatter(@form, "some_int")
|
89
|
+
result.should == @form.input(:some_int, :as => :integer)
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should properly display FLOAT fields" do
|
93
|
+
result = helper.form_field_formatter(@form, "some_float")
|
94
|
+
result.should == @form.input(:some_float, :as => :float)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should properly display DECIMAL fields" do
|
98
|
+
result = helper.form_field_formatter(@form, "some_decimal")
|
99
|
+
result.should == @form.input(:some_decimal, :as => :decimal)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "CUSTOM FIELDS" do
|
104
|
+
it "should properly display a TEXT AREA field" do
|
105
|
+
result = helper.form_field_formatter(@form, "some_text_area")
|
106
|
+
result.should == @form.input(:some_text_area, :as => :text)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should properly display a EMAIL field" do
|
110
|
+
result = helper.form_field_formatter(@form, "some_email_field")
|
111
|
+
result.should == @form.input(:some_email_field, :as => :email)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should properly display a URL field" do
|
115
|
+
result = helper.form_field_formatter(@form, "some_url_field")
|
116
|
+
result.should == @form.input(:some_url_field, :as => :url)
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should properly display a PHONE field" do
|
120
|
+
result = helper.form_field_formatter(@form, "some_phone_field")
|
121
|
+
result.should == @form.input(:some_phone_field, :as => :tel)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should properly display a PASSWORD field" do
|
125
|
+
result = helper.form_field_formatter(@form, "some_password_field")
|
126
|
+
result.should == @form.input(:some_password_field, :as => :password)
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should properly display a FILE field" do
|
130
|
+
result = helper.form_field_formatter(@form, "some_file_field")
|
131
|
+
result.should == @form.input(:some_file_field, :as => :file)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should properly display a IMAGE field" do
|
135
|
+
result = helper.form_field_formatter(@form, "some_image_field")
|
136
|
+
result.should == @form.input(:some_image_field, :as => :file)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context "RELATIONSHIPS" do
|
141
|
+
it "should properly display BELONGS TO field" do
|
142
|
+
result = helper.relation_field_formatter(@form, "group")
|
143
|
+
result.should == helper.belongs_to_form_field(@form, "group")
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should properly display HAS MANY field" do
|
147
|
+
@group_form = SimpleForm::FormBuilder.new(:data_set, Group.new, helper, {:url => data_sets_path(:model => "groups")}, lambda {})
|
148
|
+
|
149
|
+
result = helper.relation_field_formatter(@group_form, "set_helper_data_sets")
|
150
|
+
result.should == helper.has_many_form_field(@group_form, "set_helper_data_sets")
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should properly display HAS ONE field" do
|
154
|
+
@owner_form = SimpleForm::FormBuilder.new(:data_set, TestOwner.new, helper, {:url => data_sets_path(:model => "test_owners")}, lambda {})
|
155
|
+
|
156
|
+
result = helper.relation_field_formatter(@owner_form, "group")
|
157
|
+
result.should == helper.has_one_form_field(@owner_form, "group")
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should properly display HAS AND BELONGS TO MANY field" do
|
161
|
+
@book_form = SimpleForm::FormBuilder.new(:data_set, Book.new, helper, {:url => data_sets_path(:model => "books")}, lambda {})
|
162
|
+
|
163
|
+
result = helper.relation_field_formatter(@book_form, "libraries")
|
164
|
+
result.should == helper.has_many_form_field(@book_form, "libraries")
|
165
|
+
|
166
|
+
@library_form = SimpleForm::FormBuilder.new(:data_set, Library.new, helper, {:url => data_sets_path(:model => "books")}, lambda {})
|
167
|
+
|
168
|
+
result = helper.relation_field_formatter(@library_form, "books")
|
169
|
+
result.should == helper.has_many_form_field(@library_form, "books")
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BrickLayer::LayoutHelper do
|
4
|
+
before(:each) { BrickLayer::DataSet.destroy_all }
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
BrickLayer.data_sets_standalones = [:test_book, :test_friend]
|
8
|
+
|
9
|
+
class TestBook < BrickLayer::DataSet
|
10
|
+
field :name
|
11
|
+
end
|
12
|
+
|
13
|
+
class TestFriend < BrickLayer::DataSet
|
14
|
+
field :name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BrickLayer::DataSet do
|
4
|
+
before(:each) do
|
5
|
+
BrickLayer::DataSet.destroy_all
|
6
|
+
end
|
7
|
+
|
8
|
+
context "READONLY or AGGREGATE FIELDS" do
|
9
|
+
before(:all) do
|
10
|
+
class GroupedData < BrickLayer::DataSet
|
11
|
+
field :some_field_1, type: String
|
12
|
+
field :some_field_2, type: String
|
13
|
+
|
14
|
+
expose_data :employees, :recent_updates
|
15
|
+
|
16
|
+
def employees
|
17
|
+
[{name: "Jim Watson"},{name: "Ella Wright"}]
|
18
|
+
end
|
19
|
+
|
20
|
+
def recent_updates
|
21
|
+
[{event: "Some Event 1", by: "James Jones"},{event: "Some Event 2", by: "Boris Gnoesh"}]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should output the adding of these fields AS JSON" do
|
27
|
+
grouped_data = GroupedData.create(:some_field_1 => "Foo", :some_field_2 => "Bar")
|
28
|
+
grouped_data.to_json.should == "{\"employees\":[{\"name\":\"Jim Watson\"},{\"name\":\"Ella Wright\"}],\"recent_updates\":[{\"event\":\"Some Event 1\",\"by\":\"James Jones\"},{\"event\":\"Some Event 2\",\"by\":\"Boris Gnoesh\"}],\"_id\":\"#{grouped_data.id.to_s}\",\"created_at\":\"#{grouped_data.created_at.to_json.gsub('"',"")}\",\"meta_description\":null,\"meta_keywords\":null,\"route_id\":null,\"some_field_1\":\"Foo\",\"some_field_2\":\"Bar\",\"title\":null,\"updated_at\":\"#{grouped_data.updated_at.to_json.gsub('"',"")}\"}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "INTROSPECTION" do
|
33
|
+
it "self#all_fields(:added_only => true) should list only added fields" do
|
34
|
+
Employee.all_fields(:added_only => true).should == ["first_name", "last_name"]
|
35
|
+
end
|
36
|
+
|
37
|
+
it "self#all_fields should list all fields in an array" do
|
38
|
+
Employee.all_fields.should == ["_type", "_id", "created_at", "updated_at", "title", "meta_description", "meta_keywords", "route_id", "first_name", "last_name"]
|
39
|
+
end
|
40
|
+
|
41
|
+
it "self#exposed_data_methods should list all exposed data in an array" do
|
42
|
+
Employee.exposed_data_methods.should == ["name"]
|
43
|
+
end
|
44
|
+
|
45
|
+
it "self#fields_and_exposed_data should list all FIELDS AND EXPOSED DATA in an array" do
|
46
|
+
Employee.all_fields_and_exposed_data_methods.should == ["_type", "_id", "created_at", "updated_at", "title", "meta_description", "meta_keywords", "route_id", "first_name", "last_name","name"]
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
context "CUSTOM FIELDS (klass#custom_field)" do
|
52
|
+
before(:all) do
|
53
|
+
class Employee < BrickLayer::DataSet
|
54
|
+
custom_field :some_text_area, :text
|
55
|
+
custom_field :some_email_field, :email
|
56
|
+
custom_field :some_image_field, :image
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "BUILDING FIELDS" do
|
61
|
+
it "self#custom_fields should LIST ALL CUSTOM FIELDS" do
|
62
|
+
Employee.custom_fields.should == { :some_text_area => :text,
|
63
|
+
:some_email_field => :email,
|
64
|
+
:some_image_field => :image
|
65
|
+
}
|
66
|
+
end
|
67
|
+
|
68
|
+
it "self#custom_fields should properly CREATE A STRING FIELD" do
|
69
|
+
Employee.new.fields["some_text_area"].type.should == String
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "IMAGE FIELD" do
|
74
|
+
it "should create a field for a CREATE PROPER FIELDS" do
|
75
|
+
Employee.new.fields["some_image_field_uid"].type.should == String
|
76
|
+
Employee.new.fields["some_image_field_name"].type.should == String
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BrickLayer::Route do
|
4
|
+
before(:each) do
|
5
|
+
BrickLayer::Route.destroy_all
|
6
|
+
@root = BrickLayer::Route.create(:slug => "")
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should allow the creation of a route" do
|
10
|
+
route = @root.children.create(:slug => "test1")
|
11
|
+
route.should be_valid
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should not allow a route with the same slug to be entered on the same parent" do
|
15
|
+
route1 = @root.children.create(:slug => "route1")
|
16
|
+
route2 = route1.children.create(:slug => "route2")
|
17
|
+
|
18
|
+
route2_again = route1.children.create(:slug => "route2")
|
19
|
+
route2_again.should_not be_valid
|
20
|
+
|
21
|
+
route3 = route2.children.create(:slug => "route3")
|
22
|
+
route2_again_valid = route3.children.create(:slug => "route2")
|
23
|
+
route2_again_valid.should be_valid
|
24
|
+
end
|
25
|
+
|
26
|
+
it "it should give it's full path in this/path/format" do
|
27
|
+
route1 = @root.children.create(:slug => "route1")
|
28
|
+
route2 = route1.children.create(:slug => "route2")
|
29
|
+
route3 = route2.children.create(:slug => "route3")
|
30
|
+
|
31
|
+
route3.full_path.should == "/route1/route2/route3"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should allow you to change it's parent" do
|
35
|
+
route1 = @root.children.create(:slug => "route1")
|
36
|
+
route2 = route1.children.create(:slug => "route2")
|
37
|
+
route3 = route2.children.create(:slug => "route3")
|
38
|
+
|
39
|
+
route3.full_path.should == "/route1/route2/route3"
|
40
|
+
route3.change_parent_to(route1)
|
41
|
+
route3.save
|
42
|
+
route3.full_path.should == "/route1/route3"
|
43
|
+
|
44
|
+
route2.full_path.should == "/route1/route2"
|
45
|
+
route2.change_parent_to(route3)
|
46
|
+
route2.save
|
47
|
+
route2.full_path.should == "/route1/route3/route2"
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should remove children routes if they exist" do
|
51
|
+
route1 = @root.children.create(:slug => "route1")
|
52
|
+
route2 = route1.children.create(:slug => "route2")
|
53
|
+
route3 = route2.children.create(:slug => "route3")
|
54
|
+
|
55
|
+
lambda { BrickLayer::Route.find(route3.id) }.should_not raise_error
|
56
|
+
route2.destroy
|
57
|
+
lambda { BrickLayer::Route.find(route3.id) }.should raise_error(Mongoid::Errors::DocumentNotFound)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should properly display cached path" do
|
61
|
+
route1 = @root.children.create(:slug => "route1")
|
62
|
+
route2 = route1.children.create(:slug => "route2")
|
63
|
+
route3 = route2.children.create(:slug => "route3")
|
64
|
+
|
65
|
+
route3.set_full_path_cache.should == "/route1/route2/route3"
|
66
|
+
route3.change_parent_to(route1)
|
67
|
+
route3.save
|
68
|
+
route3.set_full_path_cache.should == "/route1/route3"
|
69
|
+
|
70
|
+
route2.set_full_path_cache.should == "/route1/route2"
|
71
|
+
route2.change_parent_to(route3)
|
72
|
+
route2.save
|
73
|
+
route2.set_full_path_cache.should == "/route1/route3/route2"
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BrickLayer::Search do
|
4
|
+
before(:each) do
|
5
|
+
BrickLayer::DataSet.destroy_all
|
6
|
+
end
|
7
|
+
|
8
|
+
context "PARAMS to QUERY HASH" do
|
9
|
+
it "should convert a params hash to a usable mongoid query hash" do
|
10
|
+
query = BrickLayer::Search.params_to_query({:controller => "something", :action => "something", :title_in => "Title"})
|
11
|
+
query.expand_complex_criteria.should == {:title=>{"$in"=>["Title"]}}
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should create query using the correct value by type of search" do
|
15
|
+
|
16
|
+
describe "ARRAYS" do
|
17
|
+
query = BrickLayer::Search.params_to_query({:title_all => "Title"})
|
18
|
+
query.expand_complex_criteria.should == {:title=>{"$all"=>["Title"]}}
|
19
|
+
|
20
|
+
query = BrickLayer::Search.params_to_query({:title_in => "Title"})
|
21
|
+
query.expand_complex_criteria.should == {:title=>{"$in"=>["Title"]}}
|
22
|
+
|
23
|
+
query = BrickLayer::Search.params_to_query({:title_nin => "Title"})
|
24
|
+
query.expand_complex_criteria.should == {:title=>{"$nin"=>["Title"]}}
|
25
|
+
|
26
|
+
query = BrickLayer::Search.params_to_query({:title_nin => "['Another Name','My Name','Maybe']"})
|
27
|
+
query.expand_complex_criteria.should == {:title=>{"$nin"=>['Another Name','My Name','Maybe']}}
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "INTEGERS" do
|
31
|
+
query = BrickLayer::Search.params_to_query({:title_gt => "5"})
|
32
|
+
query.expand_complex_criteria.should == {:title=>{"$gt"=>5}}
|
33
|
+
|
34
|
+
query = BrickLayer::Search.params_to_query({:title_gte => "5"})
|
35
|
+
query.expand_complex_criteria.should == {:title=>{"$gte"=>5}}
|
36
|
+
|
37
|
+
query = BrickLayer::Search.params_to_query({:title_lt => "10"})
|
38
|
+
query.expand_complex_criteria.should == {:title=>{"$lt"=>10}}
|
39
|
+
|
40
|
+
query = BrickLayer::Search.params_to_query({:title_lte => "12"})
|
41
|
+
query.expand_complex_criteria.should == {:title=>{"$lte"=>12}}
|
42
|
+
|
43
|
+
query = BrickLayer::Search.params_to_query({:title_size => "2"})
|
44
|
+
query.expand_complex_criteria.should == {:title=>{"$size"=>2}}
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "BOOLEANS" do
|
48
|
+
query = BrickLayer::Search.params_to_query({:title_exists => "true"})
|
49
|
+
query.expand_complex_criteria.should == {:title=>{"$exists"=>true}}
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "STRINGS" do
|
54
|
+
query = BrickLayer::Search.params_to_query({:title_ne => "Title"})
|
55
|
+
query.expand_complex_criteria.should == {:title=>{"$ne"=>"Title"}}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "searching ALL data sets" do
|
61
|
+
before(:each) do
|
62
|
+
@employee_1 = Employee.create(:title => "Some Title 1", :meta_description => "Some Description")
|
63
|
+
@employee_2 = Employee.create(:title => "Some Title 2", :meta_description => "Some Description")
|
64
|
+
@one_off_set = OneOffSet.create(:title => "Some Title 3", :meta_description => "Some Description")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should allow a STANDARD query" do
|
68
|
+
results = BrickLayer::Search.perform_search({:meta_description_in => ['Some Description']})
|
69
|
+
results.count.should == 3
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should allow FULL TEXT search" do
|
73
|
+
results = BrickLayer::Search.perform_search({:q => 'Title 2'})
|
74
|
+
results.first.should == @employee_2
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should allow QUERY CHAINING" do
|
78
|
+
results = BrickLayer::Search.perform_search(:queries => { :meta_description_in => ['Some Description'], :title_in => "Some Title 3" })
|
79
|
+
results.first.should == @one_off_set
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "searching SPECIFIC data sets" do
|
84
|
+
before(:each) do
|
85
|
+
@employee = Employee.create(:title => "Title", :meta_description => "Some description")
|
86
|
+
@employee2 = Employee.create(:title => "My Employee 2", :meta_description => "Some Meta Description")
|
87
|
+
@one_off_set = OneOffSet.create(:title => "Set Title", :meta_description => "Some description")
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should allow a STANDARD query" do
|
91
|
+
results = BrickLayer::Search.perform_search({:meta_description_in => 'Some Meta Description', :model => "employees"})
|
92
|
+
results.count.should == 1
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should allow FULL TEXT search" do
|
96
|
+
results = BrickLayer::Search.perform_search({:q => 'Title', :model => "employee"})
|
97
|
+
results.count.should == 1
|
98
|
+
results.first.should == @employee
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|