refinerycms 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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