refinerycms 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. data/CONTRIBUTORS +8 -0
  2. data/LICENSE +21 -0
  3. data/README +40 -0
  4. data/app/controllers/application.rb +3 -0
  5. data/app/controllers/application_controller.rb +8 -0
  6. data/config/amazon_s3.yml +17 -0
  7. data/config/boot.rb +110 -0
  8. data/config/database.yml.example +20 -0
  9. data/config/environment.rb +67 -0
  10. data/config/environments/development.rb +17 -0
  11. data/config/environments/production.rb +19 -0
  12. data/config/environments/test.rb +22 -0
  13. data/config/initializers/inflections.rb +10 -0
  14. data/config/initializers/mime_types.rb +5 -0
  15. data/config/rackspace_cloudfiles.yml +14 -0
  16. data/config/routes.rb +19 -0
  17. data/db/migrate/20090903030652_remove_title_from_resources.rb +9 -0
  18. data/db/migrate/20090914025122_change_default_image_thumbnails.rb +9 -0
  19. data/db/migrate/20090916025552_resave_refinery_settings_through_serializer.rb +13 -0
  20. data/db/migrate/20090916045536_create_user_plugins.rb +41 -0
  21. data/db/migrate/20090916055243_add_position_to_user_plugins.rb +9 -0
  22. data/db/schema.rb +141 -0
  23. data/db/seeds.rb +109 -0
  24. data/lib/refinery_initializer.rb +9 -0
  25. data/public/.htaccess +40 -0
  26. data/public/404.html +29 -0
  27. data/public/422.html +30 -0
  28. data/public/500.html +30 -0
  29. data/public/favicon.ico +0 -0
  30. data/public/images/lightbox/bullet.gif +0 -0
  31. data/public/images/lightbox/close.gif +0 -0
  32. data/public/images/lightbox/closelabel.gif +0 -0
  33. data/public/images/lightbox/donate-button.gif +0 -0
  34. data/public/images/lightbox/download-icon.gif +0 -0
  35. data/public/images/lightbox/loading.gif +0 -0
  36. data/public/images/lightbox/nextlabel.gif +0 -0
  37. data/public/images/lightbox/prevlabel.gif +0 -0
  38. data/public/images/refinery/add.gif +0 -0
  39. data/public/images/refinery/add.png +0 -0
  40. data/public/images/refinery/admin_bg.png +0 -0
  41. data/public/images/refinery/ajax-loader.gif +0 -0
  42. data/public/images/refinery/branch-end.gif +0 -0
  43. data/public/images/refinery/branch-start.gif +0 -0
  44. data/public/images/refinery/branch.gif +0 -0
  45. data/public/images/refinery/cross.gif +0 -0
  46. data/public/images/refinery/deactive-gradient.gif +0 -0
  47. data/public/images/refinery/delete.gif +0 -0
  48. data/public/images/refinery/drag.gif +0 -0
  49. data/public/images/refinery/edit.gif +0 -0
  50. data/public/images/refinery/header-background.gif +0 -0
  51. data/public/images/refinery/header_background.png +0 -0
  52. data/public/images/refinery/hover-gradient.jpg +0 -0
  53. data/public/images/refinery/icons/accept.png +0 -0
  54. data/public/images/refinery/icons/add.png +0 -0
  55. data/public/images/refinery/icons/application_edit.png +0 -0
  56. data/public/images/refinery/icons/application_go.png +0 -0
  57. data/public/images/refinery/icons/arrow_left.png +0 -0
  58. data/public/images/refinery/icons/arrow_switch.png +0 -0
  59. data/public/images/refinery/icons/arrow_up.png +0 -0
  60. data/public/images/refinery/icons/bin_closed.png +0 -0
  61. data/public/images/refinery/icons/cancel.png +0 -0
  62. data/public/images/refinery/icons/cog_add.png +0 -0
  63. data/public/images/refinery/icons/cog_edit.png +0 -0
  64. data/public/images/refinery/icons/cross.png +0 -0
  65. data/public/images/refinery/icons/delete.png +0 -0
  66. data/public/images/refinery/icons/edit.png +0 -0
  67. data/public/images/refinery/icons/email_edit.png +0 -0
  68. data/public/images/refinery/icons/email_go.png +0 -0
  69. data/public/images/refinery/icons/email_open.png +0 -0
  70. data/public/images/refinery/icons/eye.png +0 -0
  71. data/public/images/refinery/icons/help.png +0 -0
  72. data/public/images/refinery/icons/image_add.png +0 -0
  73. data/public/images/refinery/icons/image_edit.png +0 -0
  74. data/public/images/refinery/icons/layout_add.png +0 -0
  75. data/public/images/refinery/icons/layout_edit.png +0 -0
  76. data/public/images/refinery/icons/page_add.png +0 -0
  77. data/public/images/refinery/icons/page_edit.png +0 -0
  78. data/public/images/refinery/icons/page_link.png +0 -0
  79. data/public/images/refinery/icons/page_white_edit.png +0 -0
  80. data/public/images/refinery/icons/page_white_put.png +0 -0
  81. data/public/images/refinery/icons/reorder.png +0 -0
  82. data/public/images/refinery/icons/tick.png +0 -0
  83. data/public/images/refinery/icons/user.png +0 -0
  84. data/public/images/refinery/icons/user_add.png +0 -0
  85. data/public/images/refinery/icons/user_comment.png +0 -0
  86. data/public/images/refinery/icons/user_edit.png +0 -0
  87. data/public/images/refinery/info.gif +0 -0
  88. data/public/images/refinery/logo.png +0 -0
  89. data/public/images/refinery/m-tools.gif +0 -0
  90. data/public/images/refinery/magnifier.png +0 -0
  91. data/public/images/refinery/nav-3-background.gif +0 -0
  92. data/public/images/refinery/page_bg.png +0 -0
  93. data/public/images/refinery/resolve-digital.gif +0 -0
  94. data/public/images/refinery/search.gif +0 -0
  95. data/public/images/refinery/shad_blcorner.png +0 -0
  96. data/public/images/refinery/shad_bottom.png +0 -0
  97. data/public/images/refinery/shad_brcorner.png +0 -0
  98. data/public/images/refinery/shad_tlcorner.png +0 -0
  99. data/public/images/refinery/shad_trcorner.png +0 -0
  100. data/public/images/refinery/tableft.gif +0 -0
  101. data/public/images/refinery/tabright.gif +0 -0
  102. data/public/images/refinery/tick.gif +0 -0
  103. data/public/images/thickbox/cross.png +0 -0
  104. data/public/images/thickbox/loadingAnimation.gif +0 -0
  105. data/public/images/thickbox/macFFBgHack.png +0 -0
  106. data/public/images/wymeditor/skins/refinery/blockquote.png +0 -0
  107. data/public/images/wymeditor/skins/refinery/center.png +0 -0
  108. data/public/images/wymeditor/skins/refinery/css.png +0 -0
  109. data/public/images/wymeditor/skins/refinery/h1.png +0 -0
  110. data/public/images/wymeditor/skins/refinery/h2.png +0 -0
  111. data/public/images/wymeditor/skins/refinery/h3.png +0 -0
  112. data/public/images/wymeditor/skins/refinery/h4.png +0 -0
  113. data/public/images/wymeditor/skins/refinery/h5.png +0 -0
  114. data/public/images/wymeditor/skins/refinery/h6.png +0 -0
  115. data/public/images/wymeditor/skins/refinery/icons.png +0 -0
  116. data/public/images/wymeditor/skins/refinery/iframe/lbl-blockquote.png +0 -0
  117. data/public/images/wymeditor/skins/refinery/iframe/lbl-h1.png +0 -0
  118. data/public/images/wymeditor/skins/refinery/iframe/lbl-h2.png +0 -0
  119. data/public/images/wymeditor/skins/refinery/iframe/lbl-h3.png +0 -0
  120. data/public/images/wymeditor/skins/refinery/iframe/lbl-h4.png +0 -0
  121. data/public/images/wymeditor/skins/refinery/iframe/lbl-h5.png +0 -0
  122. data/public/images/wymeditor/skins/refinery/iframe/lbl-h6.png +0 -0
  123. data/public/images/wymeditor/skins/refinery/iframe/lbl-p.png +0 -0
  124. data/public/images/wymeditor/skins/refinery/iframe/lbl-pre.png +0 -0
  125. data/public/images/wymeditor/skins/refinery/justify.png +0 -0
  126. data/public/images/wymeditor/skins/refinery/left.png +0 -0
  127. data/public/images/wymeditor/skins/refinery/paragraph.png +0 -0
  128. data/public/images/wymeditor/skins/refinery/right.png +0 -0
  129. data/public/images/wymeditor/skins/wymeditor_icon.png +0 -0
  130. data/public/javascripts/admin.js +26 -0
  131. data/public/javascripts/application.js +2 -0
  132. data/public/javascripts/builder.js +136 -0
  133. data/public/javascripts/controls.js +963 -0
  134. data/public/javascripts/dialog.js +52 -0
  135. data/public/javascripts/dragdrop.js +973 -0
  136. data/public/javascripts/effects.js +1128 -0
  137. data/public/javascripts/fastinit.js +84 -0
  138. data/public/javascripts/jquery/GPL-LICENSE.txt +278 -0
  139. data/public/javascripts/jquery/MIT-LICENSE.txt +20 -0
  140. data/public/javascripts/jquery/README +67 -0
  141. data/public/javascripts/jquery/jquery.js +11 -0
  142. data/public/javascripts/jquery/jquery.ui.draggable.js +1 -0
  143. data/public/javascripts/jquery/jquery.ui.js +1 -0
  144. data/public/javascripts/jquery/jquery.ui.resizable.js +1 -0
  145. data/public/javascripts/jquery/jquery.ui.sortable.js +1 -0
  146. data/public/javascripts/lightbox.js +503 -0
  147. data/public/javascripts/livepipe.js +356 -0
  148. data/public/javascripts/overlabel.js +66 -0
  149. data/public/javascripts/parse_url.js +38 -0
  150. data/public/javascripts/prototype.enhancements.js +24 -0
  151. data/public/javascripts/prototype.js +4320 -0
  152. data/public/javascripts/scriptaculous.js +47 -0
  153. data/public/javascripts/slider.js +275 -0
  154. data/public/javascripts/tabs.js +147 -0
  155. data/public/javascripts/thickbox.js +363 -0
  156. data/public/javascripts/tooltips.js +173 -0
  157. data/public/javascripts/wymeditor/boot_wym.js +163 -0
  158. data/public/javascripts/wymeditor/jquery.refinery.wymeditor.js +4986 -0
  159. data/public/javascripts/wymeditor/lang/ca.js +45 -0
  160. data/public/javascripts/wymeditor/lang/cs.js +45 -0
  161. data/public/javascripts/wymeditor/lang/de.js +45 -0
  162. data/public/javascripts/wymeditor/lang/en.js +48 -0
  163. data/public/javascripts/wymeditor/lang/es.js +45 -0
  164. data/public/javascripts/wymeditor/lang/fa.js +46 -0
  165. data/public/javascripts/wymeditor/lang/fr.js +45 -0
  166. data/public/javascripts/wymeditor/lang/he.js +45 -0
  167. data/public/javascripts/wymeditor/lang/hu.js +45 -0
  168. data/public/javascripts/wymeditor/lang/it.js +45 -0
  169. data/public/javascripts/wymeditor/lang/nb.js +45 -0
  170. data/public/javascripts/wymeditor/lang/nl.js +45 -0
  171. data/public/javascripts/wymeditor/lang/nn.js +45 -0
  172. data/public/javascripts/wymeditor/lang/pl.js +45 -0
  173. data/public/javascripts/wymeditor/lang/pt-br.js +45 -0
  174. data/public/javascripts/wymeditor/lang/pt.js +45 -0
  175. data/public/javascripts/wymeditor/lang/ru.js +45 -0
  176. data/public/javascripts/wymeditor/lang/sv.js +45 -0
  177. data/public/javascripts/wymeditor/lang/tr.js +45 -0
  178. data/public/javascripts/wymeditor/lang/zh_cn.js +47 -0
  179. data/public/javascripts/wymeditor/skins/refinery/skin.js +40 -0
  180. data/public/robots.txt +2 -0
  181. data/public/stylesheets/application.css +0 -0
  182. data/public/stylesheets/application.css.example +76 -0
  183. data/public/stylesheets/formatting.css +0 -0
  184. data/public/stylesheets/formatting.css.example +86 -0
  185. data/public/stylesheets/home.css +0 -0
  186. data/public/stylesheets/home.css.example +27 -0
  187. data/public/stylesheets/ie6.css +0 -0
  188. data/public/stylesheets/ie7.css +0 -0
  189. data/public/stylesheets/lightbox.css +27 -0
  190. data/public/stylesheets/overlabel.css +21 -0
  191. data/public/stylesheets/refinery.css +1036 -0
  192. data/public/stylesheets/theme.css +36 -0
  193. data/public/stylesheets/thickbox.css +165 -0
  194. data/public/stylesheets/tooltips.css +38 -0
  195. data/public/stylesheets/wymeditor/skins/refinery/skin.css +211 -0
  196. data/public/stylesheets/wymeditor/skins/refinery/wymiframe.css +92 -0
  197. data/public/wymeditor/GPL-license.txt +278 -0
  198. data/public/wymeditor/MIT-license.txt +20 -0
  199. data/public/wymeditor/README +35 -0
  200. data/vendor/plugins/acts_as_indexed/CHANGELOG +74 -0
  201. data/vendor/plugins/acts_as_indexed/MIT-LICENSE +20 -0
  202. data/vendor/plugins/acts_as_indexed/README.rdoc +114 -0
  203. data/vendor/plugins/acts_as_indexed/Rakefile +35 -0
  204. data/vendor/plugins/acts_as_indexed/init.rb +2 -0
  205. data/vendor/plugins/acts_as_indexed/lib/acts_as_indexed.rb +224 -0
  206. data/vendor/plugins/acts_as_indexed/lib/search_atom.rb +107 -0
  207. data/vendor/plugins/acts_as_indexed/lib/search_index.rb +329 -0
  208. data/vendor/plugins/acts_as_indexed/lib/will_paginate_search.rb +29 -0
  209. data/vendor/plugins/acts_as_indexed/test/abstract_unit.rb +47 -0
  210. data/vendor/plugins/acts_as_indexed/test/acts_as_indexed_test.rb +102 -0
  211. data/vendor/plugins/acts_as_indexed/test/database.yml +10 -0
  212. data/vendor/plugins/acts_as_indexed/test/fixtures/post.rb +5 -0
  213. data/vendor/plugins/acts_as_indexed/test/fixtures/posts.yml +31 -0
  214. data/vendor/plugins/acts_as_indexed/test/schema.rb +6 -0
  215. data/vendor/plugins/acts_as_tree/README +26 -0
  216. data/vendor/plugins/acts_as_tree/Rakefile +22 -0
  217. data/vendor/plugins/acts_as_tree/init.rb +1 -0
  218. data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +141 -0
  219. data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
  220. data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
  221. data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
  222. data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
  223. data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
  224. data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
  225. data/vendor/plugins/attachment_fu/CHANGELOG +35 -0
  226. data/vendor/plugins/attachment_fu/LICENSE +20 -0
  227. data/vendor/plugins/attachment_fu/README +193 -0
  228. data/vendor/plugins/attachment_fu/Rakefile +22 -0
  229. data/vendor/plugins/attachment_fu/amazon_s3.yml.tpl +17 -0
  230. data/vendor/plugins/attachment_fu/init.rb +16 -0
  231. data/vendor/plugins/attachment_fu/install.rb +7 -0
  232. data/vendor/plugins/attachment_fu/lib/geometry.rb +93 -0
  233. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu.rb +514 -0
  234. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/cloud_file_backend.rb +211 -0
  235. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/db_file_backend.rb +39 -0
  236. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/file_system_backend.rb +126 -0
  237. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/s3_backend.rb +394 -0
  238. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/core_image_processor.rb +59 -0
  239. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/gd2_processor.rb +54 -0
  240. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/image_science_processor.rb +61 -0
  241. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/mini_magick_processor.rb +132 -0
  242. data/vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/processors/rmagick_processor.rb +57 -0
  243. data/vendor/plugins/attachment_fu/rackspace_cloudfiles.yml.tpl +14 -0
  244. data/vendor/plugins/attachment_fu/test/backends/db_file_test.rb +16 -0
  245. data/vendor/plugins/attachment_fu/test/backends/file_system_test.rb +143 -0
  246. data/vendor/plugins/attachment_fu/test/backends/remote/cloudfiles_test.rb +102 -0
  247. data/vendor/plugins/attachment_fu/test/backends/remote/s3_test.rb +119 -0
  248. data/vendor/plugins/attachment_fu/test/base_attachment_tests.rb +77 -0
  249. data/vendor/plugins/attachment_fu/test/basic_test.rb +70 -0
  250. data/vendor/plugins/attachment_fu/test/database.yml +18 -0
  251. data/vendor/plugins/attachment_fu/test/extra_attachment_test.rb +67 -0
  252. data/vendor/plugins/attachment_fu/test/fixtures/attachment.rb +226 -0
  253. data/vendor/plugins/attachment_fu/test/fixtures/files/fake/rails.png +0 -0
  254. data/vendor/plugins/attachment_fu/test/fixtures/files/foo.txt +1 -0
  255. data/vendor/plugins/attachment_fu/test/fixtures/files/rails.png +0 -0
  256. data/vendor/plugins/attachment_fu/test/geometry_test.rb +108 -0
  257. data/vendor/plugins/attachment_fu/test/processors/core_image_test.rb +37 -0
  258. data/vendor/plugins/attachment_fu/test/processors/gd2_test.rb +31 -0
  259. data/vendor/plugins/attachment_fu/test/processors/image_science_test.rb +31 -0
  260. data/vendor/plugins/attachment_fu/test/processors/mini_magick_test.rb +103 -0
  261. data/vendor/plugins/attachment_fu/test/processors/rmagick_test.rb +255 -0
  262. data/vendor/plugins/attachment_fu/test/schema.rb +134 -0
  263. data/vendor/plugins/attachment_fu/test/test_helper.rb +150 -0
  264. data/vendor/plugins/attachment_fu/test/validation_test.rb +55 -0
  265. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/color.rb +27 -0
  266. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/effects.rb +31 -0
  267. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/perspective.rb +25 -0
  268. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/quality.rb +25 -0
  269. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/scale.rb +47 -0
  270. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/filters/watermark.rb +32 -0
  271. data/vendor/plugins/attachment_fu/vendor/red_artisan/core_image/processor.rb +123 -0
  272. data/vendor/plugins/authentication/README +0 -0
  273. data/vendor/plugins/authentication/Rakefile +0 -0
  274. data/vendor/plugins/authentication/app/controllers/admin/users_controller.rb +93 -0
  275. data/vendor/plugins/authentication/app/controllers/sessions_controller.rb +30 -0
  276. data/vendor/plugins/authentication/app/controllers/users_controller.rb +86 -0
  277. data/vendor/plugins/authentication/app/helpers/sessions_helper.rb +2 -0
  278. data/vendor/plugins/authentication/app/helpers/users_helper.rb +2 -0
  279. data/vendor/plugins/authentication/app/models/user.rb +146 -0
  280. data/vendor/plugins/authentication/app/models/user_mailer.rb +25 -0
  281. data/vendor/plugins/authentication/app/models/user_observer.rb +11 -0
  282. data/vendor/plugins/authentication/app/models/user_plugin.rb +5 -0
  283. data/vendor/plugins/authentication/app/views/admin/users/_form.html.erb +42 -0
  284. data/vendor/plugins/authentication/app/views/admin/users/edit.html.erb +1 -0
  285. data/vendor/plugins/authentication/app/views/admin/users/index.html.erb +41 -0
  286. data/vendor/plugins/authentication/app/views/admin/users/new.html.erb +1 -0
  287. data/vendor/plugins/authentication/app/views/sessions/new.html.erb +21 -0
  288. data/vendor/plugins/authentication/app/views/user_mailer/activation.html.erb +3 -0
  289. data/vendor/plugins/authentication/app/views/user_mailer/signup_notification.html.erb +8 -0
  290. data/vendor/plugins/authentication/app/views/users/new.html.erb +28 -0
  291. data/vendor/plugins/authentication/config/routes.rb +10 -0
  292. data/vendor/plugins/authentication/init.rb +13 -0
  293. data/vendor/plugins/authentication/lib/authenticated_system.rb +115 -0
  294. data/vendor/plugins/authentication/lib/authenticated_test_helper.rb +10 -0
  295. data/vendor/plugins/authentication/test/fixtures/users.yml +19 -0
  296. data/vendor/plugins/authentication/test/functional/admin/base_controller_test.rb +8 -0
  297. data/vendor/plugins/authentication/test/functional/admin/dashboard_controller_test.rb +8 -0
  298. data/vendor/plugins/authentication/test/functional/admin/pages_controller_test.rb +8 -0
  299. data/vendor/plugins/authentication/test/functional/sessions_controller_test.rb +85 -0
  300. data/vendor/plugins/authentication/test/functional/users_controller_test.rb +99 -0
  301. data/vendor/plugins/authentication/test/test_helper.rb +38 -0
  302. data/vendor/plugins/authentication/test/unit/user_mailer_test.rb +31 -0
  303. data/vendor/plugins/authentication/test/unit/user_test.rb +164 -0
  304. data/vendor/plugins/dashboard/app/controllers/admin/dashboard_controller.rb +16 -0
  305. data/vendor/plugins/dashboard/app/helpers/admin/dashboard_helper.rb +19 -0
  306. data/vendor/plugins/dashboard/app/views/admin/dashboard/_recent_activity.html.erb +14 -0
  307. data/vendor/plugins/dashboard/app/views/admin/dashboard/index.html.erb +31 -0
  308. data/vendor/plugins/dashboard/config/routes.rb +5 -0
  309. data/vendor/plugins/dashboard/init.rb +7 -0
  310. data/vendor/plugins/images/app/controllers/admin/images_controller.rb +72 -0
  311. data/vendor/plugins/images/app/helpers/admin/images_helper.rb +17 -0
  312. data/vendor/plugins/images/app/models/image.rb +51 -0
  313. data/vendor/plugins/images/app/views/admin/images/_form.html.erb +36 -0
  314. data/vendor/plugins/images/app/views/admin/images/_grid_view.html.erb +17 -0
  315. data/vendor/plugins/images/app/views/admin/images/_list_view.html.erb +21 -0
  316. data/vendor/plugins/images/app/views/admin/images/edit.html.erb +1 -0
  317. data/vendor/plugins/images/app/views/admin/images/index.html.erb +43 -0
  318. data/vendor/plugins/images/app/views/admin/images/insert.html.erb +115 -0
  319. data/vendor/plugins/images/app/views/admin/images/new.html.erb +1 -0
  320. data/vendor/plugins/images/config/routes.rb +5 -0
  321. data/vendor/plugins/images/init.rb +8 -0
  322. data/vendor/plugins/images/lib/tasks/images.rake +28 -0
  323. data/vendor/plugins/inquiries/app/controllers/admin/inquiries_controller.rb +29 -0
  324. data/vendor/plugins/inquiries/app/controllers/admin/inquiry_settings_controller.rb +16 -0
  325. data/vendor/plugins/inquiries/app/controllers/inquiries_controller.rb +41 -0
  326. data/vendor/plugins/inquiries/app/helpers/inquiries_helper.rb +13 -0
  327. data/vendor/plugins/inquiries/app/models/inquiry.rb +18 -0
  328. data/vendor/plugins/inquiries/app/models/inquiry_mailer.rb +19 -0
  329. data/vendor/plugins/inquiries/app/models/inquiry_setting.rb +11 -0
  330. data/vendor/plugins/inquiries/app/views/admin/inquiries/_inquiry.html.erb +27 -0
  331. data/vendor/plugins/inquiries/app/views/admin/inquiries/index.html.erb +44 -0
  332. data/vendor/plugins/inquiries/app/views/admin/inquiries/show.html.erb +62 -0
  333. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/_confirmation_email_form.html.erb +50 -0
  334. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/_notification_recipients_form.html.erb +22 -0
  335. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/edit.html.erb +5 -0
  336. data/vendor/plugins/inquiries/app/views/admin/inquiry_settings/index.html.erb +32 -0
  337. data/vendor/plugins/inquiries/app/views/inquiries/new.html.erb +33 -0
  338. data/vendor/plugins/inquiries/app/views/inquiries/thank_you.html.erb +9 -0
  339. data/vendor/plugins/inquiries/app/views/inquiry_mailer/confirmation.html.erb +1 -0
  340. data/vendor/plugins/inquiries/app/views/inquiry_mailer/notification.html.erb +18 -0
  341. data/vendor/plugins/inquiries/config/routes.rb +8 -0
  342. data/vendor/plugins/inquiries/init.rb +11 -0
  343. data/vendor/plugins/news/app/controllers/admin/news_items_controller.rb +5 -0
  344. data/vendor/plugins/news/app/controllers/news_items_controller.rb +20 -0
  345. data/vendor/plugins/news/app/models/news_item.rb +26 -0
  346. data/vendor/plugins/news/app/views/admin/news_items/_form.html.erb +33 -0
  347. data/vendor/plugins/news/app/views/admin/news_items/_news_item.html.erb +15 -0
  348. data/vendor/plugins/news/app/views/admin/news_items/edit.html.erb +1 -0
  349. data/vendor/plugins/news/app/views/admin/news_items/index.html.erb +36 -0
  350. data/vendor/plugins/news/app/views/admin/news_items/new.html.erb +1 -0
  351. data/vendor/plugins/news/app/views/news_items/_recent_posts.html.erb +8 -0
  352. data/vendor/plugins/news/app/views/news_items/index.html.erb +23 -0
  353. data/vendor/plugins/news/app/views/news_items/show.html.erb +18 -0
  354. data/vendor/plugins/news/config/routes.rb +7 -0
  355. data/vendor/plugins/news/init.rb +7 -0
  356. data/vendor/plugins/pages/app/controllers/admin/page_dialogs_controller.rb +48 -0
  357. data/vendor/plugins/pages/app/controllers/admin/page_parts_controller.rb +35 -0
  358. data/vendor/plugins/pages/app/controllers/admin/pages_controller.rb +12 -0
  359. data/vendor/plugins/pages/app/controllers/pages_controller.rb +20 -0
  360. data/vendor/plugins/pages/app/helpers/pages_helper.rb +2 -0
  361. data/vendor/plugins/pages/app/models/page.rb +97 -0
  362. data/vendor/plugins/pages/app/models/page_part.rb +17 -0
  363. data/vendor/plugins/pages/app/views/admin/page_dialogs/_page_link.html.erb +6 -0
  364. data/vendor/plugins/pages/app/views/admin/page_dialogs/link_to.html.erb +253 -0
  365. data/vendor/plugins/pages/app/views/admin/page_parts/new.html.erb +11 -0
  366. data/vendor/plugins/pages/app/views/admin/pages/_form.html.erb +179 -0
  367. data/vendor/plugins/pages/app/views/admin/pages/_list.html.erb +29 -0
  368. data/vendor/plugins/pages/app/views/admin/pages/_sortable_list.html.erb +4 -0
  369. data/vendor/plugins/pages/app/views/admin/pages/edit.html.erb +1 -0
  370. data/vendor/plugins/pages/app/views/admin/pages/index.html.erb +42 -0
  371. data/vendor/plugins/pages/app/views/admin/pages/new.html.erb +1 -0
  372. data/vendor/plugins/pages/app/views/pages/home.html.erb +9 -0
  373. data/vendor/plugins/pages/app/views/pages/show.html.erb +10 -0
  374. data/vendor/plugins/pages/config/routes.rb +12 -0
  375. data/vendor/plugins/pages/init.rb +8 -0
  376. data/vendor/plugins/refinery/app/controllers/admin/base_controller.rb +37 -0
  377. data/vendor/plugins/refinery/app/controllers/admin/refinery_core_controller.rb +14 -0
  378. data/vendor/plugins/refinery/app/helpers/application_helper.rb +84 -0
  379. data/vendor/plugins/refinery/app/views/admin/_head.html.erb +27 -0
  380. data/vendor/plugins/refinery/app/views/admin/_menu.html.erb +85 -0
  381. data/vendor/plugins/refinery/app/views/layouts/admin.html.erb +25 -0
  382. data/vendor/plugins/refinery/app/views/layouts/application.html.erb +32 -0
  383. data/vendor/plugins/refinery/app/views/shared/_footer.html.erb +3 -0
  384. data/vendor/plugins/refinery/app/views/shared/_google_analytics.html.erb +12 -0
  385. data/vendor/plugins/refinery/app/views/shared/_ie6check.html.erb +11 -0
  386. data/vendor/plugins/refinery/app/views/shared/_menu.html.erb +16 -0
  387. data/vendor/plugins/refinery/app/views/shared/_menu_branch.html.erb +28 -0
  388. data/vendor/plugins/refinery/app/views/shared/_message.html.erb +10 -0
  389. data/vendor/plugins/refinery/app/views/shared/_submenu.html.erb +4 -0
  390. data/vendor/plugins/refinery/app/views/shared/_submenu_branch.html.erb +10 -0
  391. data/vendor/plugins/refinery/app/views/shared/admin/_make_sortable.html.erb +71 -0
  392. data/vendor/plugins/refinery/app/views/shared/admin/_search.html.erb +5 -0
  393. data/vendor/plugins/refinery/app/views/shared/admin/_sortable_list.html.erb +10 -0
  394. data/vendor/plugins/refinery/app/views/welcome.html.erb +13 -0
  395. data/vendor/plugins/refinery/app/views/wymiframe.html.erb +8 -0
  396. data/vendor/plugins/refinery/config/routes.rb +10 -0
  397. data/vendor/plugins/refinery/init.rb +9 -0
  398. data/vendor/plugins/refinery/lib/crud.rb +134 -0
  399. data/vendor/plugins/refinery/lib/generators/refinery/README +29 -0
  400. data/vendor/plugins/refinery/lib/generators/refinery/Rakefile +12 -0
  401. data/vendor/plugins/refinery/lib/generators/refinery/USAGE +2 -0
  402. data/vendor/plugins/refinery/lib/generators/refinery/install.rb +2 -0
  403. data/vendor/plugins/refinery/lib/generators/refinery/refinery_generator.rb +65 -0
  404. data/vendor/plugins/refinery/lib/generators/refinery/templates/config/routes.rb +7 -0
  405. data/vendor/plugins/refinery/lib/generators/refinery/templates/controller.rb +5 -0
  406. data/vendor/plugins/refinery/lib/generators/refinery/templates/init.rb +7 -0
  407. data/vendor/plugins/refinery/lib/generators/refinery/templates/migration.rb +36 -0
  408. data/vendor/plugins/refinery/lib/generators/refinery/templates/model.rb +8 -0
  409. data/vendor/plugins/refinery/lib/generators/refinery/templates/public_controller.rb +20 -0
  410. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_form.html.erb +18 -0
  411. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_singular_name.html.erb +15 -0
  412. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/_sortable_list.html.erb +2 -0
  413. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/edit.html.erb +1 -0
  414. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/index.html.erb +45 -0
  415. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/admin/new.html.erb +1 -0
  416. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/index.html.erb +15 -0
  417. data/vendor/plugins/refinery/lib/generators/refinery/templates/views/show.html.erb +23 -0
  418. data/vendor/plugins/refinery/lib/refinery.rb +15 -0
  419. data/vendor/plugins/refinery/lib/refinery/activity.rb +16 -0
  420. data/vendor/plugins/refinery/lib/refinery/application_controller.rb +53 -0
  421. data/vendor/plugins/refinery/lib/refinery/form_helpers.rb +28 -0
  422. data/vendor/plugins/refinery/lib/refinery/initializer.rb +28 -0
  423. data/vendor/plugins/refinery/lib/refinery/link_renderer.rb +45 -0
  424. data/vendor/plugins/refinery/lib/refinery/plugin.rb +47 -0
  425. data/vendor/plugins/refinery/lib/refinery/plugins.rb +53 -0
  426. data/vendor/plugins/refinery/lib/tasks/refinery.rake +28 -0
  427. data/vendor/plugins/refinery_dialogs/app/controllers/admin/dialogs_controller.rb +24 -0
  428. data/vendor/plugins/refinery_dialogs/app/views/admin/dialogs/show.html.erb +20 -0
  429. data/vendor/plugins/refinery_dialogs/app/views/layouts/admin_dialog.html.erb +31 -0
  430. data/vendor/plugins/refinery_dialogs/config/routes.rb +5 -0
  431. data/vendor/plugins/refinery_dialogs/init.rb +8 -0
  432. data/vendor/plugins/refinery_settings/app/controllers/admin/refinery_settings_controller.rb +5 -0
  433. data/vendor/plugins/refinery_settings/app/models/refinery_setting.rb +62 -0
  434. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_form.html.erb +21 -0
  435. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_make_sortable.html.erb +7 -0
  436. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/_refinery_setting.html.erb +13 -0
  437. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/edit.html.erb +4 -0
  438. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/index.html.erb +33 -0
  439. data/vendor/plugins/refinery_settings/app/views/admin/refinery_settings/new.html.erb +1 -0
  440. data/vendor/plugins/refinery_settings/config/routes.rb +5 -0
  441. data/vendor/plugins/refinery_settings/init.rb +9 -0
  442. data/vendor/plugins/resources/app/controllers/admin/resources_controller.rb +25 -0
  443. data/vendor/plugins/resources/app/models/resource.rb +36 -0
  444. data/vendor/plugins/resources/app/views/admin/resources/_form.html.erb +18 -0
  445. data/vendor/plugins/resources/app/views/admin/resources/_resource.html.erb +16 -0
  446. data/vendor/plugins/resources/app/views/admin/resources/edit.html.erb +1 -0
  447. data/vendor/plugins/resources/app/views/admin/resources/index.html.erb +33 -0
  448. data/vendor/plugins/resources/app/views/admin/resources/new.html.erb +1 -0
  449. data/vendor/plugins/resources/config/routes.rb +7 -0
  450. data/vendor/plugins/resources/init.rb +7 -0
  451. metadata +567 -0
@@ -0,0 +1,329 @@
1
+ # ActsAsIndexed
2
+ # Copyright (c) 2007 Douglas F Shearer.
3
+ # http://douglasfshearer.com
4
+ # Distributed under the MIT license as included with this plugin.
5
+
6
+ module Foo #:nodoc:
7
+ module Acts #:nodoc:
8
+ module Indexed #:nodoc:
9
+ class SearchIndex
10
+
11
+ # root:: Location of index on filesystem.
12
+ # index_depth:: Degree of index partitioning.
13
+ # fields:: Fields or instance methods of ActiveRecord model to be indexed.
14
+ # min_word_size:: Smallest query term that will be run through search.
15
+ def initialize(root, index_depth, fields, min_word_size)
16
+ @root = root
17
+ @fields = fields
18
+ @index_depth = index_depth
19
+ @atoms = {}
20
+ @min_word_size = min_word_size
21
+ @records_size = exists? ? load_record_size : 0
22
+ end
23
+
24
+ # Adds +record+ to the index.
25
+ def add_record(record)
26
+ condensed_record = condense_record(record)
27
+ load_atoms(condensed_record)
28
+ add_occurences(condensed_record,record.id)
29
+ @records_size += 1
30
+ end
31
+
32
+ # Adds multiple records to the index. Accepts an array of +records+.
33
+ def add_records(records)
34
+ records.each do |r|
35
+ condensed_record = condense_record(r)
36
+ load_atoms(condensed_record)
37
+ add_occurences(condensed_record,r.id)
38
+ @records_size += 1
39
+ end
40
+ end
41
+
42
+ # Removes +record+ from the index.
43
+ def remove_record(record)
44
+ atoms = condense_record(record)
45
+ load_atoms(atoms)
46
+ atoms.each do |a|
47
+ @atoms[a].remove_record(record.id) if @atoms.has_key?(a)
48
+ @records_size -= 1
49
+ #p "removing #{record.id} from #{a}"
50
+ end
51
+ end
52
+
53
+ def update_record(record_new, record_old)
54
+ # Work out which atoms have modifications.
55
+ # Minimises loading and saving of partitions.
56
+ old_atoms = condense_record(record_old)
57
+ new_atoms = condense_record(record_new)
58
+
59
+ # Remove the old version from the appropriate atoms.
60
+ load_atoms(old_atoms)
61
+ old_atoms.each do |a|
62
+ @atoms[a].remove_record(record_new.id) if @atoms.has_key?(a)
63
+ end
64
+
65
+ # Add the new version to the appropriate atoms.
66
+ load_atoms(new_atoms)
67
+ # TODO: Make a version of this method that takes the
68
+ # atomised version of the record.
69
+ add_occurences(new_atoms, record_new.id)
70
+ end
71
+
72
+ # Saves the current index partitions to the filesystem.
73
+ def save
74
+ prepare
75
+ atoms_sorted = {}
76
+ @atoms.each do |atom_name, records|
77
+ e_p = encoded_prefix(atom_name)
78
+ atoms_sorted[e_p] = {} if !atoms_sorted.has_key?(e_p)
79
+ atoms_sorted[e_p][atom_name] = records
80
+ end
81
+ atoms_sorted.each do |e_p, atoms|
82
+ #p "Saving #{e_p}."
83
+ File.open(File.join(@root + [e_p.to_s]),'w+') do |f|
84
+ Marshal.dump(atoms,f)
85
+ end
86
+ end
87
+ save_record_size
88
+ end
89
+
90
+ # Deletes the current model's index from the filesystem.
91
+ #--
92
+ # TODO: Write a public method that will delete all indexes.
93
+ def destroy
94
+ FileUtils.rm_rf(@root)
95
+ true
96
+ end
97
+
98
+ # Returns an array of IDs for records matching +query+.
99
+ def search(query)
100
+ load_atoms(cleanup_atoms(query))
101
+ return [] if query.nil?
102
+ queries = parse_query(query.dup)
103
+ positive = run_queries(queries[:positive])
104
+ positive_quoted = run_quoted_queries(queries[:positive_quoted])
105
+ negative = run_queries(queries[:negative])
106
+ negative_quoted = run_quoted_queries(queries[:negative_quoted])
107
+
108
+ if !queries[:positive].empty? && !queries[:positive_quoted].empty?
109
+ p = positive.delete_if{ |r_id,w| !positive_quoted.include?(r_id) }
110
+ pq = positive_quoted.delete_if{ |r_id,w| !positive.include?(r_id) }
111
+ results = p.merge(pq) { |r_id,old_val,new_val| old_val + new_val}
112
+ elsif !queries[:positive].empty?
113
+ results = positive
114
+ else
115
+ results = positive_quoted
116
+ end
117
+
118
+ negative_results = (negative.keys + negative_quoted.keys)
119
+ results.delete_if { |r_id, w| negative_results.include?(r_id) }
120
+ #p results
121
+ results
122
+ end
123
+
124
+ # Returns true if the index root exists on the FS.
125
+ #--
126
+ # TODO: Make a private method called 'root_exists?' which checks for the root directory.
127
+ def exists?
128
+ File.exists?(File.join(@root))
129
+ end
130
+
131
+ private
132
+
133
+ # Gets the size file from the index.
134
+ def load_record_size
135
+ File.open(File.join(@root + ['size'])) do |f|
136
+ return (Marshal.load(f))
137
+ end
138
+ end
139
+
140
+ # Saves the size to the size file.
141
+ def save_record_size
142
+ File.open(File.join(@root + ['size']),'w+') do |f|
143
+ Marshal.dump(@records_size,f)
144
+ end
145
+ end
146
+
147
+ # Returns true if the given atom is present.
148
+ def include_atom?(atom)
149
+ @atoms.has_key?(atom)
150
+ end
151
+
152
+ # Returns true if all the given atoms are present.
153
+ def include_atoms?(atoms_arr)
154
+ atoms_arr.each do |a|
155
+ return false if !include_atom?(a)
156
+ end
157
+ true
158
+ end
159
+
160
+ # Returns true if the given record is present.
161
+ def include_record?(record_id)
162
+ @atoms.each do |atomname, atom|
163
+ return true if atom.include_record?(record_id)
164
+ end
165
+ end
166
+
167
+ def add_atom(atom)
168
+ @atoms[atom] = SearchAtom.new if !include_atom?(atom)
169
+ end
170
+
171
+ def add_occurences(condensed_record,record_id)
172
+ condensed_record.each_with_index do |atom, i|
173
+ add_atom(atom)
174
+ @atoms[atom].add_position(record_id, i)
175
+ #p "adding #{record.id} to #{atom}"
176
+ end
177
+ end
178
+
179
+ def encoded_prefix(atom)
180
+ prefix = atom[0,@index_depth]
181
+ if !@prefix_cache || !@prefix_cache.has_key?(prefix)
182
+ @prefix_cache = {} if !@prefix_cache
183
+ len = atom.length
184
+ if len > 1
185
+ @prefix_cache[prefix] = prefix.split(//).map{|c| encode_character(c)}.join('_')
186
+ else
187
+ @prefix_cache[prefix] = encode_character(atom)
188
+ end
189
+ end
190
+ @prefix_cache[prefix]
191
+ end
192
+
193
+ # Allows compatibility with 1.8.6 which has no ord method.
194
+ def encode_character(char)
195
+ if @@has_ord ||= char.respond_to?(:ord)
196
+ char.ord.to_s
197
+ else
198
+ char[0]
199
+ end
200
+ end
201
+
202
+ def parse_query(s)
203
+
204
+ # Find -"foo bar".
205
+ negative_quoted = []
206
+ while neg_quoted = s.slice!(/-\"[^\"]*\"/)
207
+ negative_quoted << cleanup_atoms(neg_quoted)
208
+ end
209
+
210
+ # Find "foo bar".
211
+ positive_quoted = []
212
+ while pos_quoted = s.slice!(/\"[^\"]*\"/)
213
+ positive_quoted << cleanup_atoms(pos_quoted)
214
+ end
215
+
216
+ # Find -foo.
217
+ negative = []
218
+ while neg = s.slice!(/-[\S]*/)
219
+ negative << cleanup_atoms(neg).first
220
+ end
221
+
222
+ # Find +foo
223
+ positive = []
224
+ while pos = s.slice!(/\+[\S]*/)
225
+ positive << cleanup_atoms(pos).first
226
+ end
227
+
228
+ # Find all other terms.
229
+ positive += cleanup_atoms(s,true)
230
+
231
+ return {:negative_quoted => negative_quoted, :positive_quoted => positive_quoted, :negative => negative, :positive => positive}
232
+ end
233
+
234
+ def run_queries(atoms)
235
+ results = {}
236
+ atoms.uniq.each do |atom|
237
+ interim_results = {}
238
+ if include_atom?(atom)
239
+
240
+ interim_results = @atoms[atom].weightings(@records_size)
241
+ end
242
+ if results.empty?
243
+ results = interim_results
244
+ else
245
+ rr = {}
246
+ interim_results.each do |r,w|
247
+ rr[r] = w + results[r] if results[r]
248
+ end
249
+ results = rr
250
+ end
251
+ end
252
+ #p results
253
+ results
254
+ end
255
+
256
+ def run_quoted_queries(quoted_atoms)
257
+ results = {}
258
+ quoted_atoms.each do |quoted_atom|
259
+ interim_results = {}
260
+ # Check the index contains all the required atoms.
261
+ # match_atom = first_word_atom
262
+ # for each of the others
263
+ # return atom containing records + positions where current atom is preceded by following atom.
264
+ # end
265
+ # return records from final atom.
266
+ next if !include_atoms?(quoted_atom)
267
+ matches = @atoms[quoted_atom.first]
268
+ quoted_atom[1..-1].each do |atom_name|
269
+ matches = @atoms[atom_name].preceded_by(matches)
270
+ end
271
+ #results += matches.record_ids
272
+
273
+ interim_results = matches.weightings(@records_size)
274
+ if results.empty?
275
+ results = interim_results
276
+ else
277
+ rr = {}
278
+ interim_results.each do |r,w|
279
+ rr[r] = w + results[r] if results[r]
280
+ end
281
+ #p results.class
282
+ results = rr
283
+ end
284
+
285
+ end
286
+ return results
287
+ end
288
+
289
+ def load_atoms(atoms)
290
+ # Remove duplicates
291
+ # Remove atoms already in index.
292
+ # Calculate prefixes.
293
+ # Remove duplicates
294
+ atoms.uniq.reject{|a| include_atom?(a)}.collect{|a| encoded_prefix(a)}.uniq.each do |name|
295
+ if File.exists?(File.join(@root + [name.to_s]))
296
+ File.open(File.join(@root + [name.to_s])) do |f|
297
+ @atoms.merge!(Marshal.load(f))
298
+ end
299
+ end
300
+ end
301
+ end
302
+
303
+ def prepare
304
+ # Makes the RAILS_ROOT/index directory
305
+ Dir.mkdir(File.join(@root[0,2])) if !File.exists?(File.join(@root[0,2]))
306
+ # Makes the RAILS_ROOT/index/ENVIRONMENT directory
307
+ Dir.mkdir(File.join(@root[0,3])) if !File.exists?(File.join(@root[0,3]))
308
+ # Makes the RAILS_ROOT/index/ENVIRONMENT/CLASS directory
309
+ Dir.mkdir(File.join(@root)) if !File.exists?(File.join(@root))
310
+ end
311
+
312
+ def cleanup_atoms(s, limit_size=false, min_size = @min_word_size || 3)
313
+ atoms = s.downcase.gsub(/\W/,' ').squeeze(' ').split
314
+ return atoms if !limit_size
315
+ atoms.reject{|w| w.size < min_size}
316
+ end
317
+
318
+ def condense_record(record)
319
+ record_condensed = ''
320
+ @fields.each do |f|
321
+ record_condensed += ' ' + record.send(f).to_s if record.send(f)
322
+ end
323
+ cleanup_atoms(record_condensed)
324
+ end
325
+
326
+ end
327
+ end
328
+ end
329
+ end
@@ -0,0 +1,29 @@
1
+ # WillPaginateSearch
2
+ # Copyright (c) 2007 Douglas F Shearer.
3
+ # http://douglasfshearer.com
4
+
5
+ module WillPaginate
6
+
7
+ module Finder
8
+
9
+ module ClassMethods
10
+
11
+
12
+ def paginate_search(query, options)
13
+
14
+ page, per_page, total_entries = wp_parse_options(options)
15
+
16
+ total_entries ||= find_with_index(query,{},{:ids_only => true}).size
17
+
18
+ returning WillPaginate::Collection.new(page, per_page, total_entries) do |pager|
19
+ options.update :offset => pager.offset, :limit => pager.per_page
20
+
21
+ options = options.delete_if {|key, value| [:page, :per_page].include?(key) }
22
+
23
+ pager.replace find_with_index(query, options)
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,47 @@
1
+ require 'test/unit'
2
+ require 'fileutils'
3
+ require 'rubygems'
4
+ require 'active_record'
5
+ require 'active_record/fixtures'
6
+ require File.dirname(__FILE__) + '/../lib/acts_as_indexed'
7
+
8
+ # Mock out the required environment variables.
9
+ RAILS_ENV = 'test'
10
+ RAILS_ROOT = Dir.pwd
11
+
12
+ ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + '/test.log')
13
+ ActiveRecord::Base.configurations = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
14
+ ActiveRecord::Base.establish_connection(ENV['DB'] || 'sqlite3')
15
+
16
+ # Load Schema
17
+ load(File.dirname(__FILE__) + '/schema.rb')
18
+
19
+ # Load model.
20
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/fixtures/')
21
+
22
+ class ActiveSupport::TestCase #:nodoc:
23
+ include ActiveRecord::TestFixtures
24
+ self.fixture_path = File.dirname(__FILE__) + '/fixtures/'
25
+ self.use_transactional_fixtures = true
26
+ self.use_instantiated_fixtures = false
27
+
28
+ def destroy_index
29
+ FileUtils::rm_rf(index_loc) if File.exists?(index_loc)
30
+ assert !File.exists?(index_loc)
31
+ true
32
+ end
33
+
34
+ def build_index
35
+ # Makes a query to invoke the index build.
36
+ assert_equal [], Post.find_with_index('badger')
37
+ assert File.exists?(index_loc)
38
+ true
39
+ end
40
+
41
+ protected
42
+
43
+ def index_loc
44
+ File.join(RAILS_ROOT,'index')
45
+ end
46
+
47
+ end
@@ -0,0 +1,102 @@
1
+ require File.dirname(__FILE__) + '/abstract_unit'
2
+
3
+ class ActsAsIndexedTest < ActiveSupport::TestCase
4
+ fixtures :posts
5
+
6
+ def setup
7
+ destroy_index
8
+ end
9
+
10
+ def teardown
11
+ destroy_index
12
+ end
13
+
14
+ def test_adds_to_index
15
+ original_post_count = Post.count
16
+ assert_equal [], Post.find_with_index('badger')
17
+ p = Post.new(:title => 'badger', :body => 'Thousands of them!')
18
+ assert p.save
19
+ assert_equal original_post_count+1, Post.count
20
+ assert_equal [p.id], Post.find_with_index('badger',{},{:ids_only => true})
21
+ end
22
+
23
+ def test_removes_from_index
24
+ original_post_count = Post.count
25
+ assert_equal [posts(:wikipedia_article_4).id], Post.find_with_index('album',{},{:ids_only => true})
26
+ assert Post.find(posts(:wikipedia_article_4).id).destroy
27
+ assert_equal [], Post.find_with_index('album',{},{:ids_only => true})
28
+ assert_equal original_post_count-1, Post.count
29
+ end
30
+
31
+ def test_search_returns_posts
32
+ Post.find_with_index('album').each do |p|
33
+ assert_equal Post, p.class
34
+ end
35
+ end
36
+
37
+ def test_search_returns_post_ids
38
+ Post.find_with_index('album',{},{:ids_only => true}).each do |pid|
39
+ assert p = Post.find(pid)
40
+ assert_equal Post, p.class
41
+ end
42
+ end
43
+
44
+ # After a portion of a record has been removed
45
+ # the portion removes should no longer be in the index.
46
+ def test_updates_index
47
+ p = Post.create(:title => 'A special title', :body => 'foo bar bla bla bla')
48
+ assert Post.find_with_index('title',{},{:ids_only => true}).include?(p.id)
49
+ p.update_attributes(:title => 'No longer special')
50
+ assert !Post.find_with_index('title',{},{:ids_only => true}).include?(p.id)
51
+ end
52
+
53
+ def test_simple_queries
54
+ assert_equal [5, 6], Post.find_with_index('ship',{},{:ids_only => true}).sort
55
+ assert_equal [6], Post.find_with_index('foo',{},{:ids_only => true})
56
+ assert_equal [6], Post.find_with_index('foo ship',{},{:ids_only => true})
57
+ assert_equal [6], Post.find_with_index('ship foo',{},{:ids_only => true})
58
+ end
59
+
60
+ def test_negative_queries
61
+ assert_equal [5, 6], Post.find_with_index('crane',{},{:ids_only => true}).sort
62
+ assert_equal [5], Post.find_with_index('crane -foo',{},{:ids_only => true})
63
+ assert_equal [5], Post.find_with_index('-foo crane',{},{:ids_only => true})
64
+ assert_equal [], Post.find_with_index('-foo',{},{:ids_only => true}) #Edgecase
65
+ end
66
+
67
+ def test_quoted_queries
68
+ assert_equal [5], Post.find_with_index('"crane ship"',{},{:ids_only => true})
69
+ assert_equal [6], Post.find_with_index('"crane big"',{},{:ids_only => true})
70
+ assert_equal [], Post.find_with_index('foo "crane ship"',{},{:ids_only => true})
71
+ assert_equal [], Post.find_with_index('"crane badger"',{},{:ids_only => true})
72
+ end
73
+
74
+ def test_negative_quoted_queries
75
+ assert_equal [6], Post.find_with_index('crane -"crane ship"',{},{:ids_only => true})
76
+ assert_equal [], Post.find_with_index('-"crane big"',{},{:ids_only => true}) # Edgecase
77
+ end
78
+
79
+ def test_find_options
80
+ all_results = Post.find_with_index('crane',{},{:ids_only => true})
81
+ first_result = Post.find_with_index('crane',{:limit => 1})
82
+
83
+ assert_equal 1, first_result.size
84
+ assert_equal all_results.first, first_result.first.id
85
+
86
+ second_result = Post.find_with_index('crane',{:limit => 1, :offset => 1})
87
+ assert_equal 1, second_result.size
88
+ assert_equal all_results[1], second_result.first.id
89
+
90
+ end
91
+
92
+ # When a atom already in a record is duplicated, it removes
93
+ # all records with that same atom from the index.
94
+ def test_update_record_bug
95
+ assert_equal 2, Post.find_with_index('crane',{},{:ids_only => true}).size
96
+ p = Post.find(6)
97
+ assert p.update_attributes(:body => p.body + ' crane')
98
+ assert_equal 2, Post.find_with_index('crane',{},{:ids_only => true}).size
99
+ assert_equal 2, Post.find_with_index('ship',{},{:ids_only => true}).size
100
+ end
101
+
102
+ end