lolita 3.0.4 → 3.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (330) hide show
  1. data/GUIDELINE +5 -0
  2. data/Gemfile +18 -13
  3. data/VERSION +1 -1
  4. data/app/controllers/lolita/rest_controller.rb +4 -1
  5. data/app/helpers/lolita_helper.rb +10 -1
  6. data/app/views/components/lolita/list/_new_resource.html.erb +1 -1
  7. data/app/views/components/lolita/list/_tool_cell.html.erb +3 -3
  8. data/app/views/components/lolita/shared/_flash.html.erb +13 -0
  9. data/app/views/components/lolita/shared/_right_sidebar.html.erb +14 -0
  10. data/app/views/components/lolita/tab/_default.html.erb +1 -0
  11. data/app/views/components/lolita/tabs/_display.html.erb +4 -19
  12. data/app/views/lolita/layouts/application.html.erb +1 -1
  13. data/app/views/lolita/layouts/application.html.erb_spec.rb +0 -0
  14. data/config/locales/en.yml +2 -0
  15. data/features/create_page.feature +20 -0
  16. data/features/step_definitions/lolita_steps.rb +7 -0
  17. data/features/step_definitions/web_steps.rb +219 -0
  18. data/features/support/env.rb +73 -0
  19. data/features/support/paths.rb +35 -0
  20. data/lib/lolita.rb +5 -3
  21. data/lib/lolita/adapter/abstract_adapter.rb +1 -0
  22. data/lib/lolita/adapter/active_record.rb +4 -0
  23. data/lib/lolita/adapter/mongoid.rb +4 -0
  24. data/lib/lolita/base_configuration.rb +50 -12
  25. data/lib/lolita/configuration/tab.rb +7 -6
  26. data/lib/lolita/configuration/tabs.rb +9 -0
  27. data/lib/lolita/mapping.rb +4 -1
  28. data/lib/lolita/modules.rb +3 -17
  29. data/lib/lolita/rails/all.rb +3 -0
  30. data/lib/lolita/rails/routes.rb +9 -5
  31. data/lib/lolita/test/matchers.rb +77 -0
  32. data/lolita.gemspec +86 -215
  33. data/public/images/lolita/plus.png +0 -0
  34. data/public/javascripts/lolita/tab.js +40 -37
  35. data/public/javascripts/tinymce/langs/en.js +221 -221
  36. data/public/javascripts/tinymce/license.txt +504 -504
  37. data/public/javascripts/tinymce/themes/advanced/about.htm +52 -52
  38. data/public/javascripts/tinymce/themes/advanced/anchor.htm +26 -26
  39. data/public/javascripts/tinymce/themes/advanced/charmap.htm +51 -51
  40. data/public/javascripts/tinymce/themes/advanced/color_picker.htm +74 -74
  41. data/public/javascripts/tinymce/themes/advanced/editor_template_src.js +1328 -1328
  42. data/public/javascripts/tinymce/themes/advanced/image.htm +80 -80
  43. data/public/javascripts/tinymce/themes/advanced/js/about.js +73 -73
  44. data/public/javascripts/tinymce/themes/advanced/js/anchor.js +42 -42
  45. data/public/javascripts/tinymce/themes/advanced/js/charmap.js +354 -354
  46. data/public/javascripts/tinymce/themes/advanced/js/color_picker.js +329 -329
  47. data/public/javascripts/tinymce/themes/advanced/js/image.js +247 -247
  48. data/public/javascripts/tinymce/themes/advanced/js/link.js +153 -153
  49. data/public/javascripts/tinymce/themes/advanced/js/source_editor.js +56 -56
  50. data/public/javascripts/tinymce/themes/advanced/langs/en.js +68 -68
  51. data/public/javascripts/tinymce/themes/advanced/langs/en_dlg.js +53 -53
  52. data/public/javascripts/tinymce/themes/advanced/link.htm +57 -57
  53. data/public/javascripts/tinymce/themes/advanced/shortcuts.htm +47 -47
  54. data/public/javascripts/tinymce/themes/advanced/skins/cirkuit/content.css +66 -66
  55. data/public/javascripts/tinymce/themes/advanced/skins/cirkuit/dialog.css +117 -117
  56. data/public/javascripts/tinymce/themes/advanced/skins/cirkuit/ui.css +988 -988
  57. data/public/javascripts/tinymce/themes/advanced/source_editor.htm +25 -25
  58. data/public/stylesheets/lolita/style.css +30 -2
  59. data/spec/configuration/tab_spec.rb +42 -0
  60. data/spec/configuration/tabs_spec.rb +12 -0
  61. data/spec/lolita_spec.rb +1 -1
  62. data/spec/rails_app/app/mongoid/post.rb +3 -2
  63. data/spec/rails_app/config/application.rb +13 -13
  64. data/spec/rails_app/public/images/lolita/plus.png +0 -0
  65. data/spec/rails_app/public/javascripts/jquery-1.5.1.min.js +16 -0
  66. data/spec/rails_app/public/javascripts/lolita/main.js +6 -0
  67. data/spec/rails_app/public/javascripts/lolita/tab.js +41 -0
  68. data/spec/rails_app/public/javascripts/modernizr-1.7.min.js +2 -0
  69. data/spec/rails_app/public/javascripts/rails.js +137 -0
  70. data/spec/rails_app/public/javascripts/tinymce/jquery.tinymce.js +1 -0
  71. data/spec/rails_app/public/javascripts/tinymce/langs/en.js +222 -0
  72. data/spec/rails_app/public/javascripts/tinymce/license.txt +504 -0
  73. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/about.htm +52 -0
  74. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/anchor.htm +26 -0
  75. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/charmap.htm +51 -0
  76. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/color_picker.htm +74 -0
  77. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/editor_template.js +1 -0
  78. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/editor_template_src.js +1328 -0
  79. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/image.htm +80 -0
  80. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/colorpicker.jpg +0 -0
  81. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/flash.gif +0 -0
  82. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/icons.gif +0 -0
  83. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/iframe.gif +0 -0
  84. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/pagebreak.gif +0 -0
  85. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/quicktime.gif +0 -0
  86. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/realmedia.gif +0 -0
  87. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/shockwave.gif +0 -0
  88. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/trans.gif +0 -0
  89. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/video.gif +0 -0
  90. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/img/windowsmedia.gif +0 -0
  91. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/about.js +73 -0
  92. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/anchor.js +42 -0
  93. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/charmap.js +354 -0
  94. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/color_picker.js +329 -0
  95. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/image.js +247 -0
  96. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/link.js +153 -0
  97. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/js/source_editor.js +56 -0
  98. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/langs/en.js +68 -0
  99. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/langs/en_dlg.js +54 -0
  100. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/link.htm +57 -0
  101. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/shortcuts.htm +47 -0
  102. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/content.css +66 -0
  103. data/{public/javascripts/tinymce/themes/advanced/skins/default → spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit}/dialog.css +117 -117
  104. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/butt2.png +0 -0
  105. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/button-bg.png +0 -0
  106. data/{public/javascripts/tinymce/themes/advanced/skins/default → spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit}/img/buttons.png +0 -0
  107. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/down_arrow.gif +0 -0
  108. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/fade-butt.png +0 -0
  109. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/icons.png +0 -0
  110. data/{public/javascripts/tinymce/themes/advanced/skins/default → spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit}/img/items.gif +0 -0
  111. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/menu-arrow.png +0 -0
  112. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/menu-check.png +0 -0
  113. data/{public/javascripts/tinymce/themes/advanced/skins/default → spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit}/img/progress.gif +0 -0
  114. data/{public/javascripts/tinymce/themes/advanced/skins/default → spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit}/img/tabs.gif +0 -0
  115. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/img/toolbarbg.png +0 -0
  116. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/skins/cirkuit/ui.css +988 -0
  117. data/spec/rails_app/public/javascripts/tinymce/themes/advanced/source_editor.htm +25 -0
  118. data/spec/rails_app/public/javascripts/tinymce/tiny_mce.js +1 -0
  119. data/spec/rails_app/public/javascripts/tinymce/tiny_mce_popup.js +5 -0
  120. data/spec/rails_app/public/stylesheets/lolita/default.css +169 -0
  121. data/spec/rails_app/public/stylesheets/lolita/style.css +214 -0
  122. metadata +138 -227
  123. data/public/javascripts/tinymce/plugins/advhr/css/advhr.css +0 -5
  124. data/public/javascripts/tinymce/plugins/advhr/editor_plugin.js +0 -1
  125. data/public/javascripts/tinymce/plugins/advhr/editor_plugin_src.js +0 -57
  126. data/public/javascripts/tinymce/plugins/advhr/js/rule.js +0 -43
  127. data/public/javascripts/tinymce/plugins/advhr/langs/en_dlg.js +0 -7
  128. data/public/javascripts/tinymce/plugins/advhr/rule.htm +0 -58
  129. data/public/javascripts/tinymce/plugins/advimage/css/advimage.css +0 -13
  130. data/public/javascripts/tinymce/plugins/advimage/editor_plugin.js +0 -1
  131. data/public/javascripts/tinymce/plugins/advimage/editor_plugin_src.js +0 -50
  132. data/public/javascripts/tinymce/plugins/advimage/image.htm +0 -235
  133. data/public/javascripts/tinymce/plugins/advimage/img/sample.gif +0 -0
  134. data/public/javascripts/tinymce/plugins/advimage/js/image.js +0 -445
  135. data/public/javascripts/tinymce/plugins/advimage/langs/en_dlg.js +0 -45
  136. data/public/javascripts/tinymce/plugins/advlink/css/advlink.css +0 -8
  137. data/public/javascripts/tinymce/plugins/advlink/editor_plugin.js +0 -1
  138. data/public/javascripts/tinymce/plugins/advlink/editor_plugin_src.js +0 -61
  139. data/public/javascripts/tinymce/plugins/advlink/js/advlink.js +0 -525
  140. data/public/javascripts/tinymce/plugins/advlink/langs/en_dlg.js +0 -54
  141. data/public/javascripts/tinymce/plugins/advlink/link.htm +0 -338
  142. data/public/javascripts/tinymce/plugins/advlist/editor_plugin.js +0 -1
  143. data/public/javascripts/tinymce/plugins/advlist/editor_plugin_src.js +0 -154
  144. data/public/javascripts/tinymce/plugins/autoresize/editor_plugin.js +0 -1
  145. data/public/javascripts/tinymce/plugins/autoresize/editor_plugin_src.js +0 -119
  146. data/public/javascripts/tinymce/plugins/autosave/editor_plugin.js +0 -1
  147. data/public/javascripts/tinymce/plugins/autosave/editor_plugin_src.js +0 -431
  148. data/public/javascripts/tinymce/plugins/autosave/langs/en.js +0 -4
  149. data/public/javascripts/tinymce/plugins/bbcode/editor_plugin.js +0 -1
  150. data/public/javascripts/tinymce/plugins/bbcode/editor_plugin_src.js +0 -120
  151. data/public/javascripts/tinymce/plugins/contextmenu/editor_plugin.js +0 -1
  152. data/public/javascripts/tinymce/plugins/contextmenu/editor_plugin_src.js +0 -154
  153. data/public/javascripts/tinymce/plugins/directionality/editor_plugin.js +0 -1
  154. data/public/javascripts/tinymce/plugins/directionality/editor_plugin_src.js +0 -82
  155. data/public/javascripts/tinymce/plugins/emotions/editor_plugin.js +0 -1
  156. data/public/javascripts/tinymce/plugins/emotions/editor_plugin_src.js +0 -43
  157. data/public/javascripts/tinymce/plugins/emotions/emotions.htm +0 -41
  158. data/public/javascripts/tinymce/plugins/emotions/img/smiley-cool.gif +0 -0
  159. data/public/javascripts/tinymce/plugins/emotions/img/smiley-cry.gif +0 -0
  160. data/public/javascripts/tinymce/plugins/emotions/img/smiley-embarassed.gif +0 -0
  161. data/public/javascripts/tinymce/plugins/emotions/img/smiley-foot-in-mouth.gif +0 -0
  162. data/public/javascripts/tinymce/plugins/emotions/img/smiley-frown.gif +0 -0
  163. data/public/javascripts/tinymce/plugins/emotions/img/smiley-innocent.gif +0 -0
  164. data/public/javascripts/tinymce/plugins/emotions/img/smiley-kiss.gif +0 -0
  165. data/public/javascripts/tinymce/plugins/emotions/img/smiley-laughing.gif +0 -0
  166. data/public/javascripts/tinymce/plugins/emotions/img/smiley-money-mouth.gif +0 -0
  167. data/public/javascripts/tinymce/plugins/emotions/img/smiley-sealed.gif +0 -0
  168. data/public/javascripts/tinymce/plugins/emotions/img/smiley-smile.gif +0 -0
  169. data/public/javascripts/tinymce/plugins/emotions/img/smiley-surprised.gif +0 -0
  170. data/public/javascripts/tinymce/plugins/emotions/img/smiley-tongue-out.gif +0 -0
  171. data/public/javascripts/tinymce/plugins/emotions/img/smiley-undecided.gif +0 -0
  172. data/public/javascripts/tinymce/plugins/emotions/img/smiley-wink.gif +0 -0
  173. data/public/javascripts/tinymce/plugins/emotions/img/smiley-yell.gif +0 -0
  174. data/public/javascripts/tinymce/plugins/emotions/js/emotions.js +0 -22
  175. data/public/javascripts/tinymce/plugins/emotions/langs/en_dlg.js +0 -20
  176. data/public/javascripts/tinymce/plugins/example/dialog.htm +0 -22
  177. data/public/javascripts/tinymce/plugins/example/editor_plugin.js +0 -1
  178. data/public/javascripts/tinymce/plugins/example/editor_plugin_src.js +0 -84
  179. data/public/javascripts/tinymce/plugins/example/img/example.gif +0 -0
  180. data/public/javascripts/tinymce/plugins/example/js/dialog.js +0 -19
  181. data/public/javascripts/tinymce/plugins/example/langs/en.js +0 -3
  182. data/public/javascripts/tinymce/plugins/example/langs/en_dlg.js +0 -3
  183. data/public/javascripts/tinymce/plugins/fullpage/css/fullpage.css +0 -182
  184. data/public/javascripts/tinymce/plugins/fullpage/editor_plugin.js +0 -1
  185. data/public/javascripts/tinymce/plugins/fullpage/editor_plugin_src.js +0 -166
  186. data/public/javascripts/tinymce/plugins/fullpage/fullpage.htm +0 -571
  187. data/public/javascripts/tinymce/plugins/fullpage/js/fullpage.js +0 -492
  188. data/public/javascripts/tinymce/plugins/fullpage/langs/en_dlg.js +0 -85
  189. data/public/javascripts/tinymce/plugins/fullscreen/editor_plugin.js +0 -1
  190. data/public/javascripts/tinymce/plugins/fullscreen/editor_plugin_src.js +0 -159
  191. data/public/javascripts/tinymce/plugins/fullscreen/fullscreen.htm +0 -109
  192. data/public/javascripts/tinymce/plugins/iespell/editor_plugin.js +0 -1
  193. data/public/javascripts/tinymce/plugins/iespell/editor_plugin_src.js +0 -54
  194. data/public/javascripts/tinymce/plugins/inlinepopups/editor_plugin.js +0 -1
  195. data/public/javascripts/tinymce/plugins/inlinepopups/editor_plugin_src.js +0 -696
  196. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  197. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  198. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  199. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  200. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  201. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  202. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  203. data/public/javascripts/tinymce/plugins/inlinepopups/skins/clearlooks2/window.css +0 -90
  204. data/public/javascripts/tinymce/plugins/inlinepopups/template.htm +0 -387
  205. data/public/javascripts/tinymce/plugins/insertdatetime/editor_plugin.js +0 -1
  206. data/public/javascripts/tinymce/plugins/insertdatetime/editor_plugin_src.js +0 -83
  207. data/public/javascripts/tinymce/plugins/layer/editor_plugin.js +0 -1
  208. data/public/javascripts/tinymce/plugins/layer/editor_plugin_src.js +0 -214
  209. data/public/javascripts/tinymce/plugins/legacyoutput/editor_plugin.js +0 -1
  210. data/public/javascripts/tinymce/plugins/legacyoutput/editor_plugin_src.js +0 -139
  211. data/public/javascripts/tinymce/plugins/media/css/media.css +0 -17
  212. data/public/javascripts/tinymce/plugins/media/editor_plugin.js +0 -1
  213. data/public/javascripts/tinymce/plugins/media/editor_plugin_src.js +0 -770
  214. data/public/javascripts/tinymce/plugins/media/js/embed.js +0 -73
  215. data/public/javascripts/tinymce/plugins/media/js/media.js +0 -340
  216. data/public/javascripts/tinymce/plugins/media/langs/en_dlg.js +0 -109
  217. data/public/javascripts/tinymce/plugins/media/media.htm +0 -812
  218. data/public/javascripts/tinymce/plugins/media/moxieplayer.swf +0 -0
  219. data/public/javascripts/tinymce/plugins/nonbreaking/editor_plugin.js +0 -1
  220. data/public/javascripts/tinymce/plugins/nonbreaking/editor_plugin_src.js +0 -53
  221. data/public/javascripts/tinymce/plugins/noneditable/editor_plugin.js +0 -1
  222. data/public/javascripts/tinymce/plugins/noneditable/editor_plugin_src.js +0 -90
  223. data/public/javascripts/tinymce/plugins/pagebreak/editor_plugin.js +0 -1
  224. data/public/javascripts/tinymce/plugins/pagebreak/editor_plugin_src.js +0 -74
  225. data/public/javascripts/tinymce/plugins/paste/editor_plugin.js +0 -1
  226. data/public/javascripts/tinymce/plugins/paste/editor_plugin_src.js +0 -899
  227. data/public/javascripts/tinymce/plugins/paste/js/pastetext.js +0 -36
  228. data/public/javascripts/tinymce/plugins/paste/js/pasteword.js +0 -51
  229. data/public/javascripts/tinymce/plugins/paste/langs/en_dlg.js +0 -5
  230. data/public/javascripts/tinymce/plugins/paste/pastetext.htm +0 -27
  231. data/public/javascripts/tinymce/plugins/paste/pasteword.htm +0 -21
  232. data/public/javascripts/tinymce/plugins/preview/editor_plugin.js +0 -1
  233. data/public/javascripts/tinymce/plugins/preview/editor_plugin_src.js +0 -53
  234. data/public/javascripts/tinymce/plugins/preview/example.html +0 -28
  235. data/public/javascripts/tinymce/plugins/preview/jscripts/embed.js +0 -73
  236. data/public/javascripts/tinymce/plugins/preview/preview.html +0 -17
  237. data/public/javascripts/tinymce/plugins/print/editor_plugin.js +0 -1
  238. data/public/javascripts/tinymce/plugins/print/editor_plugin_src.js +0 -34
  239. data/public/javascripts/tinymce/plugins/save/editor_plugin.js +0 -1
  240. data/public/javascripts/tinymce/plugins/save/editor_plugin_src.js +0 -101
  241. data/public/javascripts/tinymce/plugins/searchreplace/css/searchreplace.css +0 -6
  242. data/public/javascripts/tinymce/plugins/searchreplace/editor_plugin.js +0 -1
  243. data/public/javascripts/tinymce/plugins/searchreplace/editor_plugin_src.js +0 -61
  244. data/public/javascripts/tinymce/plugins/searchreplace/js/searchreplace.js +0 -140
  245. data/public/javascripts/tinymce/plugins/searchreplace/langs/en_dlg.js +0 -16
  246. data/public/javascripts/tinymce/plugins/searchreplace/searchreplace.htm +0 -100
  247. data/public/javascripts/tinymce/plugins/spellchecker/css/content.css +0 -1
  248. data/public/javascripts/tinymce/plugins/spellchecker/editor_plugin.js +0 -1
  249. data/public/javascripts/tinymce/plugins/spellchecker/editor_plugin_src.js +0 -415
  250. data/public/javascripts/tinymce/plugins/spellchecker/img/wline.gif +0 -0
  251. data/public/javascripts/tinymce/plugins/style/css/props.css +0 -13
  252. data/public/javascripts/tinymce/plugins/style/editor_plugin.js +0 -1
  253. data/public/javascripts/tinymce/plugins/style/editor_plugin_src.js +0 -55
  254. data/public/javascripts/tinymce/plugins/style/js/props.js +0 -635
  255. data/public/javascripts/tinymce/plugins/style/langs/en_dlg.js +0 -70
  256. data/public/javascripts/tinymce/plugins/style/props.htm +0 -838
  257. data/public/javascripts/tinymce/plugins/tabfocus/editor_plugin.js +0 -1
  258. data/public/javascripts/tinymce/plugins/tabfocus/editor_plugin_src.js +0 -114
  259. data/public/javascripts/tinymce/plugins/table/cell.htm +0 -178
  260. data/public/javascripts/tinymce/plugins/table/css/cell.css +0 -17
  261. data/public/javascripts/tinymce/plugins/table/css/row.css +0 -25
  262. data/public/javascripts/tinymce/plugins/table/css/table.css +0 -13
  263. data/public/javascripts/tinymce/plugins/table/editor_plugin.js +0 -1
  264. data/public/javascripts/tinymce/plugins/table/editor_plugin_src.js +0 -1183
  265. data/public/javascripts/tinymce/plugins/table/js/cell.js +0 -284
  266. data/public/javascripts/tinymce/plugins/table/js/merge_cells.js +0 -27
  267. data/public/javascripts/tinymce/plugins/table/js/row.js +0 -232
  268. data/public/javascripts/tinymce/plugins/table/js/table.js +0 -450
  269. data/public/javascripts/tinymce/plugins/table/langs/en_dlg.js +0 -74
  270. data/public/javascripts/tinymce/plugins/table/merge_cells.htm +0 -32
  271. data/public/javascripts/tinymce/plugins/table/row.htm +0 -157
  272. data/public/javascripts/tinymce/plugins/table/table.htm +0 -188
  273. data/public/javascripts/tinymce/plugins/template/blank.htm +0 -12
  274. data/public/javascripts/tinymce/plugins/template/css/template.css +0 -23
  275. data/public/javascripts/tinymce/plugins/template/editor_plugin.js +0 -1
  276. data/public/javascripts/tinymce/plugins/template/editor_plugin_src.js +0 -159
  277. data/public/javascripts/tinymce/plugins/template/js/template.js +0 -106
  278. data/public/javascripts/tinymce/plugins/template/langs/en_dlg.js +0 -15
  279. data/public/javascripts/tinymce/plugins/template/template.htm +0 -31
  280. data/public/javascripts/tinymce/plugins/visualchars/editor_plugin.js +0 -1
  281. data/public/javascripts/tinymce/plugins/visualchars/editor_plugin_src.js +0 -83
  282. data/public/javascripts/tinymce/plugins/wordcount/editor_plugin.js +0 -1
  283. data/public/javascripts/tinymce/plugins/wordcount/editor_plugin_src.js +0 -114
  284. data/public/javascripts/tinymce/plugins/xhtmlxtras/abbr.htm +0 -142
  285. data/public/javascripts/tinymce/plugins/xhtmlxtras/acronym.htm +0 -142
  286. data/public/javascripts/tinymce/plugins/xhtmlxtras/attributes.htm +0 -149
  287. data/public/javascripts/tinymce/plugins/xhtmlxtras/cite.htm +0 -142
  288. data/public/javascripts/tinymce/plugins/xhtmlxtras/css/attributes.css +0 -11
  289. data/public/javascripts/tinymce/plugins/xhtmlxtras/css/popup.css +0 -9
  290. data/public/javascripts/tinymce/plugins/xhtmlxtras/del.htm +0 -162
  291. data/public/javascripts/tinymce/plugins/xhtmlxtras/editor_plugin.js +0 -1
  292. data/public/javascripts/tinymce/plugins/xhtmlxtras/editor_plugin_src.js +0 -132
  293. data/public/javascripts/tinymce/plugins/xhtmlxtras/ins.htm +0 -162
  294. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/abbr.js +0 -28
  295. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/acronym.js +0 -28
  296. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/attributes.js +0 -125
  297. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/cite.js +0 -28
  298. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/del.js +0 -53
  299. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/element_common.js +0 -229
  300. data/public/javascripts/tinymce/plugins/xhtmlxtras/js/ins.js +0 -53
  301. data/public/javascripts/tinymce/plugins/xhtmlxtras/langs/en_dlg.js +0 -32
  302. data/public/javascripts/tinymce/themes/advanced/skins/default/content.css +0 -47
  303. data/public/javascripts/tinymce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  304. data/public/javascripts/tinymce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  305. data/public/javascripts/tinymce/themes/advanced/skins/default/ui.css +0 -213
  306. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/content.css +0 -23
  307. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/dialog.css +0 -105
  308. data/public/javascripts/tinymce/themes/advanced/skins/highcontrast/ui.css +0 -101
  309. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/content.css +0 -46
  310. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/dialog.css +0 -116
  311. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  312. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  313. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  314. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui.css +0 -215
  315. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui_black.css +0 -8
  316. data/public/javascripts/tinymce/themes/advanced/skins/o2k7/ui_silver.css +0 -5
  317. data/public/javascripts/tinymce/themes/simple/editor_template.js +0 -1
  318. data/public/javascripts/tinymce/themes/simple/editor_template_src.js +0 -84
  319. data/public/javascripts/tinymce/themes/simple/img/icons.gif +0 -0
  320. data/public/javascripts/tinymce/themes/simple/langs/en.js +0 -11
  321. data/public/javascripts/tinymce/themes/simple/skins/default/content.css +0 -25
  322. data/public/javascripts/tinymce/themes/simple/skins/default/ui.css +0 -32
  323. data/public/javascripts/tinymce/themes/simple/skins/o2k7/content.css +0 -17
  324. data/public/javascripts/tinymce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
  325. data/public/javascripts/tinymce/themes/simple/skins/o2k7/ui.css +0 -35
  326. data/public/javascripts/tinymce/tiny_mce_src.js +0 -14724
  327. data/public/javascripts/tinymce/utils/editable_selects.js +0 -70
  328. data/public/javascripts/tinymce/utils/form_utils.js +0 -207
  329. data/public/javascripts/tinymce/utils/mctabs.js +0 -162
  330. data/public/javascripts/tinymce/utils/validate.js +0 -252
@@ -0,0 +1,73 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+ ENV["RAILS_ENV"] ||= "test"
8
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec/rails_app/config/environment')
9
+
10
+ require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
11
+ require 'cucumber/rails/world'
12
+ require 'cucumber/rails/active_record'
13
+ require 'cucumber/web/tableish'
14
+
15
+ require 'capybara/rails'
16
+ require 'capybara/cucumber'
17
+ require 'capybara/session'
18
+ #require 'cucumber/rails/capybara_javascript_emulation' # Lets you click links with onclick javascript handlers without using @culerity or @javascript
19
+ # Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In
20
+ # order to ease the transition to Capybara we set the default here. If you'd
21
+ # prefer to use XPath just remove this line and adjust any selectors in your
22
+ # steps to use the XPath syntax.
23
+ Capybara.default_selector = :css
24
+
25
+ require 'akephalos'
26
+ Capybara.default_driver = :akephalos
27
+ #Capybara.default_driver = :selenium
28
+
29
+ # If you set this to false, any error raised from within your app will bubble
30
+ # up to your step definition and out to cucumber unless you catch it somewhere
31
+ # on the way. You can make Rails rescue errors and render error pages on a
32
+ # per-scenario basis by tagging a scenario or feature with the @allow-rescue tag.
33
+ #
34
+ # If you set this to true, Rails will rescue all errors and render error
35
+ # pages, more or less in the same way your application would behave in the
36
+ # default production environment. It's not recommended to do this for all
37
+ # of your scenarios, as this makes it hard to discover errors in your application.
38
+ ActionController::Base.allow_rescue = false
39
+
40
+ # If you set this to true, each scenario will run in a database transaction.
41
+ # You can still turn off transactions on a per-scenario basis, simply tagging
42
+ # a feature or scenario with the @no-txn tag. If you are using Capybara,
43
+ # tagging with @culerity or @javascript will also turn transactions off.
44
+ #
45
+ # If you set this to false, transactions will be off for all scenarios,
46
+ # regardless of whether you use @no-txn or not.
47
+ #
48
+ # Beware that turning transactions off will leave data in your database
49
+ # after each scenario, which can lead to hard-to-debug failures in
50
+ # subsequent scenarios. If you do this, we recommend you create a Before
51
+ # block that will explicitly put your database in a known state.
52
+ #Cucumber::Rails::World.use_transactional_fixtures = true
53
+ # How to clean your database when transactions are turned off. See
54
+ # http://github.com/bmabey/database_cleaner for more info.
55
+ if defined?(ActiveRecord::Base)
56
+ begin
57
+ require 'database_cleaner'
58
+ DatabaseCleaner.strategy = :truncation
59
+ rescue LoadError => ignore_if_database_cleaner_not_present
60
+ end
61
+ end
62
+
63
+ require 'mongoid'
64
+ Mongoid.configure do |config|
65
+ name = "lolita3_test"
66
+ host = "localhost"
67
+ config.master = Mongo::Connection.new.db(name)
68
+ config.slaves = [
69
+ Mongo::Connection.new(host, 27017, :slave_ok => true).db(name)
70
+ ]
71
+ #config.use_object_ids = true
72
+ config.persist_in_safe_mode = false
73
+ end
@@ -0,0 +1,35 @@
1
+ module NavigationHelpers
2
+ # Maps a name to a path. Used by the
3
+ #
4
+ # When /^I go to (.+)$/ do |page_name|
5
+ #
6
+ # step definition in web_steps.rb
7
+ #
8
+ def path_to(page_name)
9
+ case page_name
10
+
11
+ when /list/
12
+ lolita_posts_path
13
+ when /the home\s?page/
14
+ '/'
15
+
16
+ # Add more mappings here.
17
+ # Here is an example that pulls values out of the Regexp:
18
+ #
19
+ # when /^(.*)'s profile page$/i
20
+ # user_profile_path(User.find_by_login($1))
21
+
22
+ else
23
+ begin
24
+ page_name =~ /the (.*) page/
25
+ path_components = $1.split(/\s+/)
26
+ self.send(path_components.push('path').join('_').to_sym)
27
+ rescue Object => e
28
+ raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
29
+ "Now, go and add a mapping in #{__FILE__}"
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ World(NavigationHelpers)
data/lib/lolita.rb CHANGED
@@ -83,6 +83,10 @@ module Lolita
83
83
  end
84
84
  end
85
85
 
86
+ module Test
87
+ autoload :Matchers, 'lolita/test/matchers'
88
+ end
89
+
86
90
  module Controllers
87
91
  autoload :InternalHelpers, 'lolita/controllers/internal_helpers'
88
92
  autoload :UserHelpers, 'lolita/controllers/user_helpers'
@@ -124,9 +128,7 @@ end
124
128
  engine_time=Time.now
125
129
 
126
130
  if defined?(Rails)
127
- require 'lolita/mapping'
128
- require 'lolita/rails'
129
- require 'lolita/modules'
131
+ require 'lolita/rails/all'
130
132
  end
131
133
 
132
134
  puts "Lolita engine started in #{Time.at(Time.now-engine_time).strftime("%M:%S.%3N")}"
@@ -8,6 +8,7 @@ module Lolita
8
8
  abstract_method 'name',:reflect_on_association
9
9
  abstract_method 'association',:association_macro,:association_class_name
10
10
  abstract_method 'id',:find_by_id
11
+ abstract_method '*args', :find
11
12
  end
12
13
  end
13
14
  end
@@ -57,6 +57,10 @@ module Lolita
57
57
  self.klass.where(:id=>id).first
58
58
  end
59
59
 
60
+ def find(*args)
61
+ self.klass.find(*args)
62
+ end
63
+
60
64
  def paginate(opt={})
61
65
  #FIXME depend on will_paginate
62
66
  if order=opt.delete(:sort)
@@ -56,6 +56,10 @@ module Lolita
56
56
  self.klass.where(:_id=>id).first
57
57
  end
58
58
 
59
+ def find *args
60
+ self.klass.find(*args)
61
+ end
62
+
59
63
  def paginate(options={})
60
64
  self.klass.paginate(options)
61
65
  end
@@ -1,8 +1,10 @@
1
1
  module Lolita
2
+ # Base::Configuration methods are accessable through Lolita module.
3
+ # Like Lolita.modules and Lolita.routes and so on.
2
4
  class BaseConfiguration
3
5
 
4
6
  attr_reader :scope, :modules, :routes, :controllers
5
- attr_accessor :mappings,:default_module,:user_classes,:authentication
7
+ attr_accessor :mappings,:default_route,:user_classes,:authentication
6
8
 
7
9
  def initialize(scope)
8
10
  @scope=scope
@@ -14,30 +16,57 @@ module Lolita
14
16
  @controllers={}
15
17
  end
16
18
 
17
- def use(module_name)
19
+ def conditional_routes(klass=nil)
20
+ @routes.map{|name,route|
21
+ if route.is_a?(Proc)
22
+ route.call(klass)
23
+ else
24
+ nil
25
+ end
26
+ }.compact
27
+ end
18
28
 
29
+ # Include module in Lolita, don't know why i need this
30
+ def use(module_name)
31
+ Lolita.send(:include,module_name)
19
32
  end
20
33
 
21
34
  def add_mapping(resource,options={})
22
35
  mapping = Lolita::Mapping.new(resource, options)
23
36
  self.mappings[mapping.name] = mapping
24
- #self.default_scope ||= mapping.name
25
37
  mapping
26
38
  end
27
39
 
28
- def add_module name, options={}
29
- options.assert_valid_keys(:controller,:route,:model,:path)
30
- self.modules<<name.to_sym
40
+ # Add new module to Lolita
41
+ # Accpted options
42
+ # * <tt>controller</tt> - not in use
43
+ # * <tt>route</tt> - Symbol of route name or lambad, that return route name based on resource.
44
+ # Route name is used to call method lolita_[route_name] in Mapper class, and that should draw route.
45
+ # * <tt>:name</tt> - name of module, underscored symbol. Used to draw default route, by default always
46
+ # lolita_rest is called, but if route with resource name is found, than by default this route will be drawn.
47
+ # Like lolita_for :posts, can go to different controller than rest and do other things.
48
+ # * <tt>:path</tt> - some file that will be included. Deprecated will be removed
49
+ # ====Example
50
+ # Lolita.add_module Lolita::Posts, :route=>:post, :name=>:post
51
+ # lolita_for :posts #=> create url whatever is defined in lolita_post method, and goes to :controller=>"lolita/posts"
52
+ # Lolita.add_module Lolita::FileUpload, :route=>lambda{|resource| resource.lolita.tabs.by_type(:file) ? :file_upload : nil}
53
+ # lolita_for :users #=> creat default rest urls and also call method lolita_file_upload if user lolita define :file tab.
54
+ def add_module module_container, options={}
55
+ options.assert_valid_keys(:controller,:route,:model,:path,:name)
56
+ name=options[:name]||module_container.to_s.to_sym
57
+ self.modules<<module_container
31
58
  config={
32
59
  :route=>self.routes,
33
60
  :controller=>self.controllers
34
61
  }
35
62
  config.each{|key,value|
36
63
  next unless options[key]
37
- new_value=options[key]==true ? name : options[key]
64
+ new_value=options[key]
38
65
  if value.is_a?(Hash)
39
66
  value[name]=new_value
40
- elsif !value.include?(new_value)
67
+ elsif value.is_a?(Proc)
68
+ value[name]=new_value
69
+ elsif value.respond_to?(:include?) && !value.include?(new_value)
41
70
  value << new_value
42
71
  end
43
72
  }
@@ -45,11 +74,20 @@ module Lolita
45
74
  if options[:path]
46
75
  require File.join(options[:path],name.to_s)
47
76
  end
48
- # if options[:model]
49
- # model_path = (options[:model] == true ? "lolita/models/#{name}" : options[:model])
50
- # Lolita::Models.send(:autoload, name.to_s.camelize.to_sym, model_path)
51
- # end
77
+
52
78
  end
53
79
 
80
+ # Lolita.extend_route_for(:any,:posts,:file_upload) do |resource|
81
+ # if resource.tabs.by_type(:metadata)
82
+ # with do
83
+ # resources :metadata
84
+ # end
85
+ # end
86
+ #end
87
+ # :any for any
88
+ # lolita/posts/metadata
89
+ # lolita/posts/files/metadata
90
+ def lolita_extend_route_for()
91
+ end
54
92
  end
55
93
  end
@@ -23,8 +23,8 @@ module Lolita
23
23
 
24
24
  def add(dbi,*args,&block)
25
25
  type=args.first if args
26
- unless type
27
- temp_tab=self.new(dbi,*args,&block).type
26
+ if !type || type==:default
27
+ temp_tab=self.new(dbi,*args,&block)
28
28
  type=temp_tab.type
29
29
  end
30
30
  unless type==:default
@@ -34,15 +34,15 @@ module Lolita
34
34
  raise Lolita::TabNotFoundError, "Lolita::Configuration::#{type.to_s.camelize}Tab not found. Add it in /lolita/configuration/tab/#{type}.rb"
35
35
  end
36
36
  else
37
- temp
37
+ temp_tab
38
38
  end
39
39
  end
40
40
  end
41
41
  # For different types there are different builders(cells)
42
42
  @@available_types=[:content]
43
43
 
44
- lolita_accessor :title,:name
45
- attr_accessor :dbi,:type,:current_fieldset,:current_dbi
44
+ lolita_accessor :title,:name,:type
45
+ attr_accessor :dbi,:current_fieldset,:current_dbi
46
46
  attr_reader :field_sets,:nested_form
47
47
 
48
48
  # To create new tab the following parametrs need to be provided.
@@ -160,7 +160,7 @@ module Lolita
160
160
  def set_attributes *args
161
161
  if args
162
162
  options=args.extract_options!
163
- self.type=args.first || :default
163
+ self.type=args.first if args.first.is_a?(Symbol)
164
164
  options.each{|method,options|
165
165
  self.send(:"#{method}=",options)
166
166
  }
@@ -175,6 +175,7 @@ module Lolita
175
175
  end
176
176
 
177
177
  def set_default_attributes
178
+ @type=:default unless @type
178
179
  @name="tab_#{self.__id__}" unless @name
179
180
  @title=@type.to_s.humanize unless @title
180
181
  end
@@ -1,5 +1,9 @@
1
1
  module Lolita
2
2
  module Configuration
3
+ # Lolita::Configuration::Tabs is container class that holds all
4
+ # tabs for each lolita instance.
5
+ # Also it has some useful methods.
6
+
3
7
  class Tabs
4
8
  include Enumerable
5
9
  include Lolita::ObservedArray
@@ -38,6 +42,10 @@ module Lolita
38
42
  self<<Lolita::Configuration::Tab.add(@dbi,*args,&block)
39
43
  end
40
44
 
45
+ def by_type(type)
46
+ @tabs.detect{|tab| tab.type==type.to_sym}
47
+ end
48
+
41
49
  def exclude=(values)
42
50
  exclude(values)
43
51
  end
@@ -77,6 +85,7 @@ module Lolita
77
85
  }
78
86
  end
79
87
  end
88
+
80
89
  private
81
90
 
82
91
  def create_content_tab
@@ -3,6 +3,7 @@ module Lolita
3
3
  attr_reader :class_name,:path,:singular,:plural,:path_prefix,:module,:controllers,:as
4
4
  alias :name :singular
5
5
 
6
+ # TODO how it is when lolita plugin extend default path and there is module is this not break the logic?
6
7
  def initialize(name,options={})
7
8
  @plural=name.to_sym#(options[:as] ? "#{options[:as]}_#{name}" : name).to_sym
8
9
  @singular=(options[:singular] || @plural.to_s.singularize).to_sym
@@ -12,7 +13,9 @@ module Lolita
12
13
  @path=(options[:path] || "lolita").to_s
13
14
  @module=options[:module]
14
15
  mod=@module ? nil : "lolita/"
15
- @controllers=Hash.new{|h,k| h[k]="#{mod}#{k}" }
16
+ @controllers=Hash.new{|h,k|
17
+ h[k]="#{mod}#{k}"
18
+ }
16
19
  end
17
20
  #
18
21
  # lolita/posts/new => lolita/crud/new :class=>Post
@@ -1,20 +1,6 @@
1
- Lolita.add_module :rest, :route=>true, :path=>File.expand_path(File.join(__FILE__,'..','modules'))
2
- Lolita.default_module=:rest
1
+ require "lolita/modules/rest"
2
+
3
+ Lolita.default_route = :rest
3
4
 
4
5
 
5
- #Lolita.add_module :pictures
6
- # Lolita.use(:blogs)
7
- # Lolita.use(:threads)
8
- # Lolita.use :lolita-devise-admins
9
- # require 'lolita-devise-users'
10
- # /lolita/admins
11
- # /lolita/admin/1/edit
12
- #Lolita.add_module :statistic, :route=>true
13
- # lolita/questions/statistic => lolita/statistic/index
14
- # lolita_modules :statistic
15
- # Lolita.mapping[:posts].to.lolita.modules.each do |m|
16
- # lolita_rest
17
- # lolita_statistic -> lolita/questions/statistic
18
- # lolita_gallery -> lolita/questions/add_image
19
- #Lolita.mount :blog, :route=>true # lolita/blog
20
6
 
@@ -0,0 +1,3 @@
1
+ require 'lolita/mapping'
2
+ require 'lolita/rails'
3
+ require 'lolita/modules'
@@ -5,13 +5,14 @@ module ActionDispatch::Routing
5
5
  # Every module, that is used with lolita and has routes, need to have
6
6
  # <code>resource method</code>, for example, lolita_rest, that should be added
7
7
  # to ActionDispatch::Routing::Mapper class, as a *protected* method.
8
- # Module can automaticliy add resource route or live it to user.
8
+ # Module can automaticliy add resource route or allow user to do it.
9
9
  # ====Example
10
- # Lolita.add_module :admins
10
+ # Lolita.add_module Lolita::Gallery,:route=>:gallery
11
11
  # # in route.rb
12
- # lolita_for :admins
13
- # # if admins have route added, than new route will point to these module controller
12
+ # lolita_for :galleries
13
+ # # lolita_for try to call :lolita_gallery in Mapper class
14
14
  def lolita_for *resources
15
+ #TODO refactor
15
16
  options = resources.extract_options!
16
17
 
17
18
  if as = options.delete(:as)
@@ -42,12 +43,15 @@ module ActionDispatch::Routing
42
43
  elsif target_class.respond_to?(:lolita) && target_class.instance_variable_get(:@lolita).nil?
43
44
  raise Lolita::NotInitialized, "Call lolita method in #{target_class}."
44
45
  else
45
- route=Lolita::routes[mapping.name] || Lolita::routes[Lolita.default_module]
46
+ route=Lolita.routes[mapping.name] || Lolita.default_route
46
47
  end
47
48
  unless route
48
49
  raise Lolita::ModuleNotFound, "Module #{mapping.name.to_s.capitalize} not found! Add Lolita.use(:#{mapping.name}) to initializers/lolita.rb"
49
50
  end
50
51
  send(:"lolita_#{route}",mapping,mapping.controllers)
52
+ Lolita.conditional_routes(target_class).each do |route_name|
53
+ send(:"lolita_#{route_name}",mapping,mapping.controllers)
54
+ end
51
55
  end
52
56
  end
53
57
  }
@@ -0,0 +1,77 @@
1
+ module Lolita
2
+ module Test
3
+ # Matchers that make easier to test Lolita and Lolita addons
4
+ module Matchers
5
+
6
+ class BeRoutable
7
+
8
+ def matches?(actual)
9
+ @actual=actual
10
+ collect_routes
11
+ set_method_and_url
12
+ result=@routes.detect{|route|
13
+ method_match(route) && @url.to_s.match(route[:path_info])
14
+ }
15
+ !!result
16
+ end
17
+
18
+ def failure_message
19
+ "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""} to be routable"
20
+ end
21
+ def negative_failure_message
22
+ "expected #{@url.inspect}#{@method ? " with method #{@method.inspect}" : ""} to not be routable"
23
+ end
24
+
25
+ private
26
+
27
+ def method_match(route)
28
+ if route[:request_method]
29
+ if @method
30
+ @method.to_s.upcase.match(route[:request_method])
31
+ else
32
+ false
33
+ end
34
+ else
35
+ true
36
+ end
37
+ end
38
+
39
+ def set_method_and_url
40
+ if @actual.is_a?(Hash)
41
+ @method,@url=@actual.keys.first,@actual.values.first
42
+ elsif @actual.is_a?(Array)
43
+ if @actual.size>=2
44
+ @method,@url=@actual[0],@actual[1]
45
+ elsif
46
+ @url=@actual.first
47
+ end
48
+ else
49
+ @url=@actual.to_s
50
+ end
51
+ end
52
+
53
+ def collect_routes
54
+ @routes=[]
55
+ all_applications.each do |application|
56
+ @routes+=application.routes.routes.map(&:conditions)
57
+ end
58
+ end
59
+
60
+ def all_applications
61
+ if defined?(Rails) && defined?(Rails::Application)
62
+ ObjectSpace.each_object(Rails::Application).select { |klass|
63
+ klass.class < Rails::Application
64
+ }.map(&:class)
65
+ else
66
+ []
67
+ end
68
+ end
69
+ end
70
+
71
+ def be_routable
72
+ BeRoutable.new
73
+ end
74
+ end
75
+ end
76
+ end
77
+