brick_layer 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (312) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +13 -0
  3. data/README.rdoc +278 -0
  4. data/Rakefile +36 -0
  5. data/app/assets/javascripts/tiny_mce/langs/en.js +1 -0
  6. data/app/assets/javascripts/tiny_mce/license.txt +504 -0
  7. data/app/assets/javascripts/tiny_mce/plugins/advhr/css/advhr.css +5 -0
  8. data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
  9. data/app/assets/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
  10. data/app/assets/javascripts/tiny_mce/plugins/advhr/js/rule.js +43 -0
  11. data/app/assets/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
  12. data/app/assets/javascripts/tiny_mce/plugins/advhr/rule.htm +58 -0
  13. data/app/assets/javascripts/tiny_mce/plugins/advimage/css/advimage.css +13 -0
  14. data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
  15. data/app/assets/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
  16. data/app/assets/javascripts/tiny_mce/plugins/advimage/image.htm +235 -0
  17. data/app/assets/javascripts/tiny_mce/plugins/advimage/img/sample.gif +0 -0
  18. data/app/assets/javascripts/tiny_mce/plugins/advimage/js/image.js +462 -0
  19. data/app/assets/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
  20. data/app/assets/javascripts/tiny_mce/plugins/advlink/css/advlink.css +8 -0
  21. data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
  22. data/app/assets/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
  23. data/app/assets/javascripts/tiny_mce/plugins/advlink/js/advlink.js +539 -0
  24. data/app/assets/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
  25. data/app/assets/javascripts/tiny_mce/plugins/advlink/link.htm +338 -0
  26. data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
  27. data/app/assets/javascripts/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
  28. data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
  29. data/app/assets/javascripts/tiny_mce/plugins/autolink/editor_plugin_src.js +174 -0
  30. data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
  31. data/app/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -0
  32. data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin.js +1 -0
  33. data/app/assets/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js +431 -0
  34. data/app/assets/javascripts/tiny_mce/plugins/autosave/langs/en.js +4 -0
  35. data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js +1 -0
  36. data/app/assets/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js +120 -0
  37. data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
  38. data/app/assets/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js +161 -0
  39. data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
  40. data/app/assets/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
  41. data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin.js +1 -0
  42. data/app/assets/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js +43 -0
  43. data/app/assets/javascripts/tiny_mce/plugins/emotions/emotions.htm +42 -0
  44. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif +0 -0
  45. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif +0 -0
  46. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif +0 -0
  47. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
  48. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif +0 -0
  49. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif +0 -0
  50. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif +0 -0
  51. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif +0 -0
  52. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
  53. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif +0 -0
  54. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif +0 -0
  55. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif +0 -0
  56. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
  57. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif +0 -0
  58. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif +0 -0
  59. data/app/assets/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif +0 -0
  60. data/app/assets/javascripts/tiny_mce/plugins/emotions/js/emotions.js +43 -0
  61. data/app/assets/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js +1 -0
  62. data/app/assets/javascripts/tiny_mce/plugins/example/dialog.htm +22 -0
  63. data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin.js +1 -0
  64. data/app/assets/javascripts/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
  65. data/app/assets/javascripts/tiny_mce/plugins/example/img/example.gif +0 -0
  66. data/app/assets/javascripts/tiny_mce/plugins/example/js/dialog.js +19 -0
  67. data/app/assets/javascripts/tiny_mce/plugins/example/langs/en.js +3 -0
  68. data/app/assets/javascripts/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
  69. data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
  70. data/app/assets/javascripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
  71. data/app/assets/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css +143 -0
  72. data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js +1 -0
  73. data/app/assets/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +405 -0
  74. data/app/assets/javascripts/tiny_mce/plugins/fullpage/fullpage.htm +259 -0
  75. data/app/assets/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js +232 -0
  76. data/app/assets/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js +1 -0
  77. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
  78. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +159 -0
  79. data/app/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +110 -0
  80. data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
  81. data/app/assets/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
  82. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
  83. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
  84. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  85. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  86. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  87. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  88. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  89. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  90. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  91. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
  92. data/app/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
  93. data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js +1 -0
  94. data/app/assets/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js +83 -0
  95. data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin.js +1 -0
  96. data/app/assets/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js +262 -0
  97. data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin.js +1 -0
  98. data/app/assets/javascripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js +139 -0
  99. data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin.js +1 -0
  100. data/app/assets/javascripts/tiny_mce/plugins/lists/editor_plugin_src.js +954 -0
  101. data/app/assets/javascripts/tiny_mce/plugins/media/css/media.css +17 -0
  102. data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin.js +1 -0
  103. data/app/assets/javascripts/tiny_mce/plugins/media/editor_plugin_src.js +890 -0
  104. data/app/assets/javascripts/tiny_mce/plugins/media/js/embed.js +73 -0
  105. data/app/assets/javascripts/tiny_mce/plugins/media/js/media.js +470 -0
  106. data/app/assets/javascripts/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
  107. data/app/assets/javascripts/tiny_mce/plugins/media/media.htm +922 -0
  108. data/app/assets/javascripts/tiny_mce/plugins/media/moxieplayer.swf +0 -0
  109. data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js +1 -0
  110. data/app/assets/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js +54 -0
  111. data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js +1 -0
  112. data/app/assets/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +433 -0
  113. data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js +1 -0
  114. data/app/assets/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js +74 -0
  115. data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
  116. data/app/assets/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js +871 -0
  117. data/app/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -0
  118. data/app/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -0
  119. data/app/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
  120. data/app/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +27 -0
  121. data/app/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -0
  122. data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin.js +1 -0
  123. data/app/assets/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js +53 -0
  124. data/app/assets/javascripts/tiny_mce/plugins/preview/example.html +28 -0
  125. data/app/assets/javascripts/tiny_mce/plugins/preview/jscripts/embed.js +73 -0
  126. data/app/assets/javascripts/tiny_mce/plugins/preview/preview.html +17 -0
  127. data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin.js +1 -0
  128. data/app/assets/javascripts/tiny_mce/plugins/print/editor_plugin_src.js +34 -0
  129. data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin.js +1 -0
  130. data/app/assets/javascripts/tiny_mce/plugins/save/editor_plugin_src.js +101 -0
  131. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css +6 -0
  132. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js +1 -0
  133. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js +61 -0
  134. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +142 -0
  135. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js +1 -0
  136. data/app/assets/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm +100 -0
  137. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/css/content.css +1 -0
  138. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
  139. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +436 -0
  140. data/app/assets/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
  141. data/app/assets/javascripts/tiny_mce/plugins/style/css/props.css +14 -0
  142. data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin.js +1 -0
  143. data/app/assets/javascripts/tiny_mce/plugins/style/editor_plugin_src.js +71 -0
  144. data/app/assets/javascripts/tiny_mce/plugins/style/js/props.js +709 -0
  145. data/app/assets/javascripts/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
  146. data/app/assets/javascripts/tiny_mce/plugins/style/props.htm +845 -0
  147. data/app/assets/javascripts/tiny_mce/plugins/style/readme.txt +19 -0
  148. data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js +1 -0
  149. data/app/assets/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js +122 -0
  150. data/app/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -0
  151. data/app/assets/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
  152. data/app/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
  153. data/app/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
  154. data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
  155. data/app/assets/javascripts/tiny_mce/plugins/table/editor_plugin_src.js +1428 -0
  156. data/app/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -0
  157. data/app/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -0
  158. data/app/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -0
  159. data/app/assets/javascripts/tiny_mce/plugins/table/js/table.js +489 -0
  160. data/app/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
  161. data/app/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -0
  162. data/app/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -0
  163. data/app/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -0
  164. data/app/assets/javascripts/tiny_mce/plugins/template/blank.htm +12 -0
  165. data/app/assets/javascripts/tiny_mce/plugins/template/css/template.css +23 -0
  166. data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin.js +1 -0
  167. data/app/assets/javascripts/tiny_mce/plugins/template/editor_plugin_src.js +159 -0
  168. data/app/assets/javascripts/tiny_mce/plugins/template/js/template.js +106 -0
  169. data/app/assets/javascripts/tiny_mce/plugins/template/langs/en_dlg.js +1 -0
  170. data/app/assets/javascripts/tiny_mce/plugins/template/template.htm +31 -0
  171. data/app/assets/javascripts/tiny_mce/plugins/visualblocks/css/visualblocks.css +19 -0
  172. data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin.js +1 -0
  173. data/app/assets/javascripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js +63 -0
  174. data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js +1 -0
  175. data/app/assets/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js +83 -0
  176. data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js +1 -0
  177. data/app/assets/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js +122 -0
  178. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm +142 -0
  179. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm +142 -0
  180. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm +149 -0
  181. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm +142 -0
  182. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css +11 -0
  183. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css +9 -0
  184. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm +162 -0
  185. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js +1 -0
  186. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js +132 -0
  187. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm +162 -0
  188. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js +28 -0
  189. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js +28 -0
  190. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js +111 -0
  191. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js +28 -0
  192. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js +53 -0
  193. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js +229 -0
  194. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js +53 -0
  195. data/app/assets/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js +1 -0
  196. data/app/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -0
  197. data/app/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -0
  198. data/app/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +55 -0
  199. data/app/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -0
  200. data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
  201. data/app/assets/javascripts/tiny_mce/themes/advanced/editor_template_src.js +1467 -0
  202. data/app/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -0
  203. data/app/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  204. data/app/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
  205. data/app/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  206. data/app/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  207. data/app/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  208. data/app/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  209. data/app/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  210. data/app/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  211. data/app/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
  212. data/app/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
  213. data/app/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  214. data/app/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -0
  215. data/app/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +44 -0
  216. data/app/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +363 -0
  217. data/app/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +345 -0
  218. data/app/assets/javascripts/tiny_mce/themes/advanced/js/image.js +251 -0
  219. data/app/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -0
  220. data/app/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +78 -0
  221. data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -0
  222. data/app/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
  223. data/app/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -0
  224. data/app/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -0
  225. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +50 -0
  226. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
  227. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  228. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  229. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  230. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  231. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  232. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  233. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
  234. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +24 -0
  235. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
  236. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
  237. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +48 -0
  238. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
  239. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  240. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  241. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  242. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +218 -0
  243. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
  244. data/app/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
  245. data/app/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -0
  246. data/app/assets/javascripts/tiny_mce/themes/simple/editor_template.js +1 -0
  247. data/app/assets/javascripts/tiny_mce/themes/simple/editor_template_src.js +84 -0
  248. data/app/assets/javascripts/tiny_mce/themes/simple/img/icons.gif +0 -0
  249. data/app/assets/javascripts/tiny_mce/themes/simple/langs/en.js +1 -0
  250. data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/content.css +25 -0
  251. data/app/assets/javascripts/tiny_mce/themes/simple/skins/default/ui.css +32 -0
  252. data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
  253. data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
  254. data/app/assets/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
  255. data/app/assets/javascripts/tiny_mce/tiny_mce.js +1 -0
  256. data/app/assets/javascripts/tiny_mce/tiny_mce_popup.js +5 -0
  257. data/app/assets/javascripts/tiny_mce/tiny_mce_src.js +17480 -0
  258. data/app/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -0
  259. data/app/assets/javascripts/tiny_mce/utils/form_utils.js +210 -0
  260. data/app/assets/javascripts/tiny_mce/utils/mctabs.js +162 -0
  261. data/app/assets/javascripts/tiny_mce/utils/validate.js +252 -0
  262. data/app/assets/stylesheets/brick_layer.css +4 -0
  263. data/app/assets/stylesheets/default_form.css.scss +117 -0
  264. data/app/assets/stylesheets/default_style.css.scss +90 -0
  265. data/app/assets/stylesheets/default_table.css.scss +40 -0
  266. data/app/assets/stylesheets/default_typography.css.scss +10 -0
  267. data/app/assets/stylesheets/reset.css +102 -0
  268. data/app/controllers/brick_layer/admin_controller.rb +3 -0
  269. data/app/controllers/brick_layer/data_sets_controller.rb +95 -0
  270. data/app/controllers/brick_layer/manager_controller.rb +7 -0
  271. data/app/controllers/brick_layer/routes_controller.rb +103 -0
  272. data/app/helpers/brick_layer/data_set_helper.rb +148 -0
  273. data/app/helpers/brick_layer/layout_helper.rb +20 -0
  274. data/app/helpers/brick_layer/site_helper.rb +5 -0
  275. data/app/models/brick_layer/data_set.rb +219 -0
  276. data/app/models/brick_layer/file_uploader.rb +7 -0
  277. data/app/models/brick_layer/route.rb +68 -0
  278. data/app/models/brick_layer/search.rb +61 -0
  279. data/app/views/brick_layer/data_sets/_form.html.haml +18 -0
  280. data/app/views/brick_layer/data_sets/edit.html.haml +7 -0
  281. data/app/views/brick_layer/data_sets/index.html.haml +25 -0
  282. data/app/views/brick_layer/data_sets/new.html.haml +5 -0
  283. data/app/views/brick_layer/data_sets/search.html.haml +1 -0
  284. data/app/views/brick_layer/data_sets/show.html.haml +32 -0
  285. data/app/views/brick_layer/layouts/brick_layer_layout.html.haml +40 -0
  286. data/app/views/brick_layer/manager/data_set_list.html.haml +1 -0
  287. data/app/views/brick_layer/manager/index.html.haml +1 -0
  288. data/app/views/brick_layer/routes/_form.html.haml +11 -0
  289. data/app/views/brick_layer/routes/_route.html.haml +15 -0
  290. data/app/views/brick_layer/routes/edit.html.haml +21 -0
  291. data/app/views/brick_layer/routes/index.html.haml +5 -0
  292. data/app/views/brick_layer/routes/new.html.haml +5 -0
  293. data/app/views/brick_layer/routes/show.html.haml +27 -0
  294. data/app/views/brick_layer/shared/_custom_data_sets_list.html.haml +9 -0
  295. data/config/initializers/brick_layer_carrierwave.rb +6 -0
  296. data/config/initializers/brick_layer_dragonfly.rb +10 -0
  297. data/config/routes.rb +28 -0
  298. data/lib/brick_layer/engine.rb +11 -0
  299. data/lib/brick_layer/extensions.rb +8 -0
  300. data/lib/brick_layer/serve_grid_fs_file.rb +22 -0
  301. data/lib/brick_layer.rb +27 -0
  302. data/lib/tasks/brick_layer_tasks.rake +4 -0
  303. data/lib/version.rb +3 -0
  304. data/spec/controllers/brick_layer/data_sets_controller_spec.rb +69 -0
  305. data/spec/helpers/brick_layer/data_set_helper_spec.rb +174 -0
  306. data/spec/helpers/brick_layer/layout_helper_spec.rb +17 -0
  307. data/spec/models/brick_layer/data_set_spec.rb +81 -0
  308. data/spec/models/brick_layer/route_spec.rb +76 -0
  309. data/spec/models/brick_layer/search_spec.rb +101 -0
  310. data/spec/routing/data_set_routing_spec.rb +83 -0
  311. data/spec/spec_helper.rb +44 -0
  312. 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,8 @@
1
+ class Array
2
+ def paginate(options={:page => 1, :per_page => 50})
3
+ page = options[:page]
4
+ per_page = options[:per_page]
5
+
6
+ self[((page - 1) * per_page)...(page * per_page)]
7
+ end
8
+ 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
@@ -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
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :brick_layer do
3
+ # # Task goes here
4
+ # end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module BrickLayer
2
+ VERSION = "0.9.0"
3
+ end
@@ -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