cms-lite 0.3.3 → 0.4.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 (268) hide show
  1. data/.gitignore +5 -0
  2. data/{README.markdown → README.rdoc} +18 -30
  3. data/Rakefile +20 -3
  4. data/VERSION +1 -1
  5. data/app/controllers/cms_lite_controller.rb +10 -7
  6. data/cms-lite.gemspec +305 -8
  7. data/lib/cms_lite.rb +48 -35
  8. data/rails/init.rb +21 -1
  9. data/test/rails_root/.gitignore +8 -0
  10. data/test/rails_root/.rake_tasks +103 -0
  11. data/test/rails_root/Capfile +3 -0
  12. data/test/rails_root/Rakefile +14 -0
  13. data/test/rails_root/app/controllers/application_controller.rb +22 -0
  14. data/test/rails_root/app/models/.keep +0 -0
  15. data/test/rails_root/app/models/user.rb +10 -0
  16. data/test/rails_root/app/models/user_session.rb +2 -0
  17. data/test/rails_root/app/views/layouts/default.html.erb +26 -0
  18. data/test/rails_root/app/views/layouts/test.html.erb +26 -0
  19. data/test/rails_root/config/amazon_s3.yml +14 -0
  20. data/test/rails_root/config/boot.rb +109 -0
  21. data/test/rails_root/config/database.yml +14 -0
  22. data/test/rails_root/config/environment.rb +27 -0
  23. data/test/rails_root/config/environments/development.rb +19 -0
  24. data/test/rails_root/config/environments/production.rb +1 -0
  25. data/test/rails_root/config/environments/test.rb +33 -0
  26. data/test/rails_root/config/global_config.yml +20 -0
  27. data/test/rails_root/config/initializers/cms_lite.rb +4 -0
  28. data/test/rails_root/config/initializers/inflections.rb +10 -0
  29. data/test/rails_root/config/initializers/mime_types.rb +5 -0
  30. data/test/rails_root/config/initializers/requires.rb +13 -0
  31. data/test/rails_root/config/initializers/session_store.rb +8 -0
  32. data/test/rails_root/config/routes.rb +9 -0
  33. data/test/rails_root/content/pages/en/demo/hi.html.erb +1 -0
  34. data/test/rails_root/content/pages/en/open/hello.html.erb +1 -0
  35. data/test/rails_root/content/protected-pages/en/demo/hi.html.erb +1 -0
  36. data/test/rails_root/content/protected-pages/en/protected/safe-hello.html.erb +1 -0
  37. data/test/rails_root/db/.keep +0 -0
  38. data/test/rails_root/db/migrate/20090320174818_create_muck_permissions_and_roles.rb +16 -0
  39. data/test/rails_root/db/migrate/20090402234137_create_languages.rb +18 -0
  40. data/test/rails_root/db/migrate/20090426041056_create_countries.rb +15 -0
  41. data/test/rails_root/db/migrate/20090426041103_create_states.rb +18 -0
  42. data/test/rails_root/db/migrate/20090530170040_create_themes.rb +11 -0
  43. data/test/rails_root/db/migrate/20090602041838_create_users.rb +39 -0
  44. data/test/rails_root/db/migrate/20090606153236_create_domain_themes.rb +13 -0
  45. data/test/rails_root/features/step_definitions/cms_steps.rb +19 -0
  46. data/test/rails_root/features/step_definitions/common_steps.rb +86 -0
  47. data/test/rails_root/features/step_definitions/webrat_steps.rb +109 -0
  48. data/test/rails_root/features/support/env.rb +16 -0
  49. data/test/rails_root/features/view_cms_pages.feature +36 -0
  50. data/test/rails_root/lib/tasks/cucumber.rake +7 -0
  51. data/test/rails_root/public/.htaccess +40 -0
  52. data/test/rails_root/public/404.html +30 -0
  53. data/test/rails_root/public/422.html +30 -0
  54. data/test/rails_root/public/500.html +30 -0
  55. data/test/rails_root/public/dispatch.rb +10 -0
  56. data/test/rails_root/public/favicon.ico +0 -0
  57. data/test/rails_root/public/images/arrow_left.gif +0 -0
  58. data/test/rails_root/public/images/arrow_right.gif +0 -0
  59. data/test/rails_root/public/images/blue/preview.gif +0 -0
  60. data/test/rails_root/public/images/fancybox/fancy_closebox.png +0 -0
  61. data/test/rails_root/public/images/fancybox/fancy_left.png +0 -0
  62. data/test/rails_root/public/images/fancybox/fancy_progress.png +0 -0
  63. data/test/rails_root/public/images/fancybox/fancy_right.png +0 -0
  64. data/test/rails_root/public/images/fancybox/fancy_shadow_e.png +0 -0
  65. data/test/rails_root/public/images/fancybox/fancy_shadow_n.png +0 -0
  66. data/test/rails_root/public/images/fancybox/fancy_shadow_ne.png +0 -0
  67. data/test/rails_root/public/images/fancybox/fancy_shadow_nw.png +0 -0
  68. data/test/rails_root/public/images/fancybox/fancy_shadow_s.png +0 -0
  69. data/test/rails_root/public/images/fancybox/fancy_shadow_se.png +0 -0
  70. data/test/rails_root/public/images/fancybox/fancy_shadow_sw.png +0 -0
  71. data/test/rails_root/public/images/fancybox/fancy_shadow_w.png +0 -0
  72. data/test/rails_root/public/images/fancybox/fancy_title_left.png +0 -0
  73. data/test/rails_root/public/images/fancybox/fancy_title_main.png +0 -0
  74. data/test/rails_root/public/images/fancybox/fancy_title_right.png +0 -0
  75. data/test/rails_root/public/images/icons/accept.png +0 -0
  76. data/test/rails_root/public/images/icons/add.png +0 -0
  77. data/test/rails_root/public/images/icons/delete.png +0 -0
  78. data/test/rails_root/public/images/icons/vote.png +0 -0
  79. data/test/rails_root/public/images/kjh/preview.gif +0 -0
  80. data/test/rails_root/public/images/kjy/preview.gif +0 -0
  81. data/test/rails_root/public/images/loading.gif +0 -0
  82. data/test/rails_root/public/images/profile_default.jpg +0 -0
  83. data/test/rails_root/public/images/rails.png +0 -0
  84. data/test/rails_root/public/images/red/preview.gif +0 -0
  85. data/test/rails_root/public/images/spinner.gif +0 -0
  86. data/test/rails_root/public/images/sprites.png +0 -0
  87. data/test/rails_root/public/javascripts/application.js +2 -0
  88. data/test/rails_root/public/javascripts/builder.js +136 -0
  89. data/test/rails_root/public/javascripts/controls.js +963 -0
  90. data/test/rails_root/public/javascripts/dragdrop.js +972 -0
  91. data/test/rails_root/public/javascripts/effects.js +1120 -0
  92. data/test/rails_root/public/javascripts/fancyzoom.min.js +1 -0
  93. data/test/rails_root/public/javascripts/jquery/jquery-ui.js +273 -0
  94. data/test/rails_root/public/javascripts/jquery/jquery.easing.js +1 -0
  95. data/test/rails_root/public/javascripts/jquery/jquery.fancybox.js +9 -0
  96. data/test/rails_root/public/javascripts/jquery/jquery.form.js +637 -0
  97. data/test/rails_root/public/javascripts/jquery/jquery.jgrowl.js +2 -0
  98. data/test/rails_root/public/javascripts/jquery/jquery.js +19 -0
  99. data/test/rails_root/public/javascripts/jquery/jquery.tips.js +69 -0
  100. data/test/rails_root/public/javascripts/muck.js +80 -0
  101. data/test/rails_root/public/javascripts/prototype.js +4225 -0
  102. data/test/rails_root/public/javascripts/scriptaculous.js +58 -0
  103. data/test/rails_root/public/javascripts/slider.js +277 -0
  104. data/test/rails_root/public/javascripts/sound.js +60 -0
  105. data/test/rails_root/public/robots.txt +1 -0
  106. data/test/rails_root/public/stylesheets/.keep +0 -0
  107. data/test/rails_root/public/stylesheets/admin.css +12 -0
  108. data/test/rails_root/public/stylesheets/blue.css +1 -0
  109. data/test/rails_root/public/stylesheets/blueprint/ie.css +26 -0
  110. data/test/rails_root/public/stylesheets/blueprint/liquid_screen.css +203 -0
  111. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/cross.png +0 -0
  112. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/key.png +0 -0
  113. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/icons/tick.png +0 -0
  114. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/readme.txt +32 -0
  115. data/test/rails_root/public/stylesheets/blueprint/plugins/buttons/screen.css +97 -0
  116. data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/readme.txt +14 -0
  117. data/test/rails_root/public/stylesheets/blueprint/plugins/fancy-type/screen.css +71 -0
  118. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/doc.png +0 -0
  119. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/email.png +0 -0
  120. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/external.png +0 -0
  121. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/feed.png +0 -0
  122. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/im.png +0 -0
  123. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  124. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/visited.png +0 -0
  125. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/icons/xls.png +0 -0
  126. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/readme.txt +18 -0
  127. data/test/rails_root/public/stylesheets/blueprint/plugins/link-icons/screen.css +40 -0
  128. data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/liquid.css +134 -0
  129. data/test/rails_root/public/stylesheets/blueprint/plugins/liquid/src/liquid.css +197 -0
  130. data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/readme.txt +10 -0
  131. data/test/rails_root/public/stylesheets/blueprint/plugins/rtl/screen.css +109 -0
  132. data/test/rails_root/public/stylesheets/blueprint/print.css +30 -0
  133. data/test/rails_root/public/stylesheets/blueprint/screen.css +251 -0
  134. data/test/rails_root/public/stylesheets/blueprint/sprite.css +1 -0
  135. data/test/rails_root/public/stylesheets/blueprint/src/forms.css +49 -0
  136. data/test/rails_root/public/stylesheets/blueprint/src/grid.css +213 -0
  137. data/test/rails_root/public/stylesheets/blueprint/src/grid.png +0 -0
  138. data/test/rails_root/public/stylesheets/blueprint/src/ie.css +59 -0
  139. data/test/rails_root/public/stylesheets/blueprint/src/print.css +85 -0
  140. data/test/rails_root/public/stylesheets/blueprint/src/reset.css +38 -0
  141. data/test/rails_root/public/stylesheets/blueprint/src/typography.css +105 -0
  142. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
  143. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
  144. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_100_f0f0f0_1x400.png +0 -0
  145. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_50_99c2ff_1x400.png +0 -0
  146. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
  147. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_80_e6e6e6_1x400.png +0 -0
  148. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  149. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
  150. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-bg_highlight-soft_100_e7eef3_1x100.png +0 -0
  151. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_222222_256x240.png +0 -0
  152. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2694e8_256x240.png +0 -0
  153. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_2e83ff_256x240.png +0 -0
  154. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_72a7cf_256x240.png +0 -0
  155. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_888888_256x240.png +0 -0
  156. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_cd0a0a_256x240.png +0 -0
  157. data/test/rails_root/public/stylesheets/jquery/cupertino/images/ui-icons_ffffff_256x240.png +0 -0
  158. data/test/rails_root/public/stylesheets/jquery/cupertino/jquery-ui-1.7.1.custom.css +404 -0
  159. data/test/rails_root/public/stylesheets/jquery/jquery.fancybox.css +44 -0
  160. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  161. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  162. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  163. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  164. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  165. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  166. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  167. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  168. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_217bc0_256x240.png +0 -0
  169. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_2e83ff_256x240.png +0 -0
  170. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_469bdd_256x240.png +0 -0
  171. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_6da8d5_256x240.png +0 -0
  172. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_cd0a0a_256x240.png +0 -0
  173. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_d8e7f3_256x240.png +0 -0
  174. data/test/rails_root/public/stylesheets/jquery/redmond/images/ui-icons_f9bd01_256x240.png +0 -0
  175. data/test/rails_root/public/stylesheets/jquery/redmond/jquery-ui-1.7.1.custom.css +404 -0
  176. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  177. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  178. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  179. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  180. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  181. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  182. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  183. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  184. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_222222_256x240.png +0 -0
  185. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  186. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_454545_256x240.png +0 -0
  187. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_888888_256x240.png +0 -0
  188. data/test/rails_root/public/stylesheets/jquery/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  189. data/test/rails_root/public/stylesheets/jquery/smoothness/jquery-ui-1.7.1.custom.css +404 -0
  190. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  191. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  192. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  193. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  194. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  195. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  196. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  197. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  198. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  199. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  200. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  201. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  202. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  203. data/test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  204. data/test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.1.custom.css +404 -0
  205. data/test/rails_root/public/stylesheets/kjh.css +1 -0
  206. data/test/rails_root/public/stylesheets/kjy.css +1 -0
  207. data/test/rails_root/public/stylesheets/red.css +1 -0
  208. data/test/rails_root/public/stylesheets/reset.css +0 -0
  209. data/test/rails_root/public/stylesheets/styles.css +83 -0
  210. data/test/rails_root/public/stylesheets/themes/blue/styles.css +1 -0
  211. data/test/rails_root/public/stylesheets/themes/red/styles.css +1 -0
  212. data/test/rails_root/script/about +3 -0
  213. data/test/rails_root/script/breakpointer +3 -0
  214. data/test/rails_root/script/console +3 -0
  215. data/test/rails_root/script/create_project.rb +52 -0
  216. data/test/rails_root/script/cucumber +7 -0
  217. data/test/rails_root/script/dbconsole +3 -0
  218. data/test/rails_root/script/destroy +3 -0
  219. data/test/rails_root/script/generate +3 -0
  220. data/test/rails_root/script/performance/benchmarker +3 -0
  221. data/test/rails_root/script/performance/profiler +3 -0
  222. data/test/rails_root/script/performance/request +3 -0
  223. data/test/rails_root/script/plugin +3 -0
  224. data/test/rails_root/script/process/inspector +3 -0
  225. data/test/rails_root/script/process/reaper +3 -0
  226. data/test/rails_root/script/process/spawner +3 -0
  227. data/test/rails_root/script/runner +3 -0
  228. data/test/rails_root/script/server +3 -0
  229. data/test/rails_root/test/factories.rb +45 -0
  230. data/test/rails_root/test/functional/.keep +0 -0
  231. data/test/rails_root/test/functional/cms_lite_controller_test.rb +35 -0
  232. data/test/rails_root/test/mocks/development/.keep +0 -0
  233. data/test/rails_root/test/mocks/test/.keep +0 -0
  234. data/test/rails_root/test/shoulda_macros/controller.rb +62 -0
  235. data/test/rails_root/test/shoulda_macros/models.rb +50 -0
  236. data/test/rails_root/test/test_helper.rb +38 -0
  237. data/test/rails_root/test/unit/.keep +0 -0
  238. data/test/rails_root/test/unit/cms_lite_test.rb +84 -0
  239. data/test/rails_root/themes/blue/content/pages/en/blue/blue.html.erb +1 -0
  240. data/test/rails_root/themes/blue/content/pages/en/open/blue.html.erb +1 -0
  241. data/test/rails_root/themes/blue/description.txt +1 -0
  242. data/test/rails_root/themes/blue/locales/en.yml +2 -0
  243. data/test/rails_root/themes/blue/views/layouts/default.html.erb +17 -0
  244. data/test/rails_root/themes/blue/views/layouts/global/_footer.html.erb +3 -0
  245. data/test/rails_root/themes/blue/views/layouts/global/_head.html.erb +8 -0
  246. data/test/rails_root/themes/blue/views/layouts/global/_header.html.erb +3 -0
  247. data/test/rails_root/themes/red/content/protected-pages/en/red/red.html.erb +1 -0
  248. data/test/rails_root/themes/red/description.txt +1 -0
  249. data/test/rails_root/themes/red/locales/en.yml +2 -0
  250. data/test/rails_root/themes/red/views/layouts/default.html.erb +17 -0
  251. data/test/rails_root/themes/red/views/layouts/global/_footer.html.erb +3 -0
  252. data/test/rails_root/themes/red/views/layouts/global/_head.html.erb +8 -0
  253. data/test/rails_root/themes/red/views/layouts/global/_header.html.erb +3 -0
  254. data/test/rails_root/vendor/plugins/ssl_requirement/README +43 -0
  255. data/test/rails_root/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb +62 -0
  256. data/test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb +132 -0
  257. data/test/rails_root/vendor/plugins/validation_reflection/CHANGELOG +24 -0
  258. data/test/rails_root/vendor/plugins/validation_reflection/LICENSE +20 -0
  259. data/test/rails_root/vendor/plugins/validation_reflection/README +64 -0
  260. data/test/rails_root/vendor/plugins/validation_reflection/Rakefile +22 -0
  261. data/test/rails_root/vendor/plugins/validation_reflection/about.yml +7 -0
  262. data/test/rails_root/vendor/plugins/validation_reflection/init.rb +8 -0
  263. data/test/rails_root/vendor/plugins/validation_reflection/lib/boiler_plate/validation_reflection.rb +129 -0
  264. data/test/rails_root/vendor/plugins/validation_reflection/test/test_helper.rb +36 -0
  265. data/test/rails_root/vendor/plugins/validation_reflection/test/validation_reflection_test.rb +126 -0
  266. metadata +313 -10
  267. data/test/cms_lite_test.rb +0 -8
  268. data/test/test_helper.rb +0 -3
@@ -0,0 +1 @@
1
+ /*Add styles specific to your theme here*/
@@ -0,0 +1 @@
1
+ /*Add styles specific to your theme here*/
@@ -0,0 +1 @@
1
+ /*Add styles specific to your theme here*/
@@ -0,0 +1,83 @@
1
+ /* general */
2
+ .center{text-align:center;}
3
+
4
+ /* forms */
5
+ input{margin:0 10px 5px 0;padding:4px;font-size:1.3em;}
6
+ input[type="text"],input[type="password"]{border:1px solid #8f8685;}
7
+ input[type="checkbox"]{border:none;margin-bottom:0px;}
8
+ input[type="radio"]{border:none;}
9
+ textarea{font-size:1.4em;margin:0 10px 0 0;padding:4px;border:1px solid #8f8685;}
10
+ label{font-size:1.5em;font-weight:bold;margin:0 10px 5px 0;padding:0px;display:block;}
11
+ form em{color:#b61e12;font-style:normal;font-size:90%;}
12
+ form hr{border:1px solid #e3e0c3;height:1px;margin:15px 0;}
13
+ fieldset span.var{margin:2px 5px 5px 18px;display:block;}
14
+ fieldset{border:none;margin:0;padding:0;}
15
+ form fieldset{margin:0 0 2px;padding:0px;}
16
+ form fieldset input[type="text"],form fieldset input[type="password"]{width:500px;}
17
+ .common-form{width:500px;margin:40px auto;}
18
+ .wide-form h1, .common-form h1{font-size:1.8em;}
19
+ .wide-form{width:700px;margin:40px auto;}
20
+ .form-item{float:left;}
21
+ .common-content{width:500px;margin:40px auto;font-size:1.2em;color:#555;}
22
+ .button-link {background-color:transparent;border-top-width: 0px;border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;}
23
+
24
+ /*images*/
25
+ .icon{width:50px;height:50px;}
26
+ .thumb{width:100px;height:100px;}
27
+ .medium{width:300px;height:300px;}
28
+
29
+ /* tips */
30
+ .availability{color:#b61e12;position:absolute;}
31
+ .hidden-tips{display:none;}
32
+ .required-tip{color:#555555;font-size:1.2em;margin:0pt;font-weight:bolder;height:0px;}
33
+ .tip{position:absolute;z-index:100;border:2px solid #CCCCCC;background-color:#fff;width:400px;}
34
+ #tip-title{font-size:1.1em;background-color:#CCCCCC;text-align:left;padding:2px 0px 5px 8px;font-weight:bold;}
35
+ #tip-main{padding:10px;color:#333333;}
36
+ #tip-main p,#tip-main ul{font-size:1.3em;}
37
+ #tip-main p{margin:3px 0;}
38
+ #tip-header{position:absolute;z-index:101;background-repeat:no-repeat;}
39
+ .tip-content{width:100%;}
40
+ .top-tip{margin:0px 0px 12px 0px;}
41
+ .top-tip #tip-header{background-image:url(/images/arrow_down.gif);height:10px;width:23px;}
42
+ .left-tip{margin-right:12px;}
43
+ .left-tip #tip-header{background-image:url(/images/arrow_right.gif);height:23px;width:11px;top:-2px;left:12px;background-position:right top;width:100%;}
44
+ .bottom-tip{margin:12px 0px 0px 0px;}
45
+ .bottom-tip #tip-header{background-image:url(/images/arrow_up.gif);left:0px;height:10px;width:23px;top:-12px;}
46
+ .right-tip{margin:1px 0px 0px 12px;}
47
+ .right-tip #tip-header{background-image:url(/images/arrow_left.gif);left:-12px;height:23px;width:10px;top:-3px;}
48
+ .bottom-tip #tip-header, .right-tip #tip-header{background-position:left top;}
49
+
50
+ /*jGrowl*/
51
+ div.jGrowl{padding:10px;z-index:9999;}
52
+ /** Special IE6 Style Positioning **/
53
+ div.ie6{position:absolute;}
54
+ div.ie6.top-right{right:auto;bottom:auto;left:expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth :document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft ) ) + 'px' );top:expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop ) ) + 'px' );}
55
+ div.ie6.top-left{left:expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft ) ) + 'px' );top:expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop ) ) + 'px' );}
56
+ div.ie6.bottom-right{left:expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth :document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft ) ) + 'px' );top:expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight :document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop ) ) + 'px' );}
57
+ div.ie6.bottom-left{left:expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft ) ) + 'px' );top:expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight :document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop ) ) + 'px' );}
58
+ div.ie6.center{left:expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft :document.body.scrollLeft ) ) + 'px' );top:expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop :document.body.scrollTop ) ) + 'px' );width:100%;}
59
+ /** Normal Style Positions **/
60
+ body > div.jGrowl{position:fixed;}
61
+ body > div.jGrowl.top-left{left:0px;top:0px;}
62
+ body > div.jGrowl.top-right{right:0px;top:0px;}
63
+ body > div.jGrowl.bottom-left{left:0px;bottom:0px;}
64
+ body > div.jGrowl.bottom-right{right:0px;bottom:0px;}
65
+ body > div.jGrowl.center{top:0px;width:50%;left:25%;}
66
+ /** Cross Browser Styling **/
67
+ div.center div.jGrowl-notification,div.center div.jGrowl-closer{margin-left:auto;margin-right:auto;}
68
+ div.jGrowl div.jGrowl-notification,div.jGrowl div.jGrowl-closer{background-color:#F0F7F9;color:#000;opacity:.95;filter:alpha(opacity = 95);zoom:1;width:550px;padding:10px;margin-top:5px;margin-bottom:5px;font-size:1.5em;text-align:left;display:none;-moz-border-radius:5px;-webkit-border-radius:5px;border:solid 3px #555;}
69
+ div.jGrowl div.jGrowl-notification{min-height:40px;}
70
+ div.jGrowl div.jGrowl-notification div.header{font-weight:bold;font-size:1.6em;}
71
+ div.jGrowl div.jGrowl-notification div.close{float:right;font-weight:bold;font-size:2em;cursor:pointer;color:#555;}
72
+ div.jGrowl div.jGrowl-notification div.close:hover{color:#ccc;}
73
+ div.jGrowl div.jGrowl-closer{height:15px;padding-top:4px;padding-bottom:4px;cursor:pointer;font-size:11px;font-weight:bold;text-align:center;}
74
+ div.jGrowl div.jGrowl-notification .notice, div.jGrowl div.jGrowl-notification .error, div.jGrowl div.jGrowl-notification .success{background:none;border:none;}
75
+ div.jGrowl div.jGrowl-notification h2{text-align:left;font-weight:bold;padding:5px 5px 5px 15px;font-size:1.1em;}
76
+
77
+ /* Errors */
78
+ .help-box{font-size:1.2em;color:#555;}
79
+ .fieldWithErrors input{border:solid 2px #B61E12;}
80
+ #errorExplanation{padding:7px;padding-bottom:12px;margin-bottom:20px;}
81
+ #errorExplanation h2{text-align:left;font-weight:bold;padding:5px 5px 5px 15px;font-size:16px;background-color:#B61E12;color:#fff;}
82
+ #errorExplanation p{color:#333;margin-bottom:0;padding:5px;}
83
+ #errorExplanation ul li{list-style:square;}
@@ -0,0 +1 @@
1
+ /*Add styles specific to your theme here*/
@@ -0,0 +1 @@
1
+ /*Add styles specific to your theme here*/
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/about'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/breakpointer'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/console'
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'activesupport'
4
+ require 'pathname'
5
+
6
+ project_name = ARGV[0]
7
+ fail("Usage: #{File.basename(__FILE__)} new_project_name") unless project_name
8
+ fail("Project name must only contain [a-z0-9_]") unless project_name =~ /^[a-z0-9_]+$/
9
+
10
+ base_directory = Pathname.new(File.join(File.dirname(__FILE__), '..', '..')).realpath
11
+ project_directory = base_directory + project_name
12
+ fail("Project directory (#{project_directory}) already exists") if project_directory.exist?
13
+
14
+ template_url = "git@github.com:thoughtbot/rails-template.git"
15
+ changeme = "CHANGEME"
16
+
17
+ def run(cmd)
18
+ puts "Running '#{cmd}'"
19
+ out = `#{cmd}`
20
+ if $? != 0
21
+ fail "Command #{cmd} failed: #$?\n#{out}"
22
+ end
23
+ out
24
+ end
25
+
26
+ def search_and_replace(file, search, replace)
27
+ if File.file?(file)
28
+ contents = File.read(file)
29
+ if contents[search]
30
+ puts "Replacing #{search} with #{replace} in #{file}"
31
+ contents.gsub!(search, replace)
32
+ File.open(file, "w") { |f| f << contents }
33
+ end
34
+ end
35
+ end
36
+
37
+ run("mkdir #{project_directory}")
38
+ Dir.chdir(project_directory) or fail("Couldn't change to #{project_directory}")
39
+ run("git init")
40
+ run("git remote add template #{template_url}")
41
+ run("git pull template master")
42
+
43
+ Dir.glob("#{project_directory}/**/*").each do |file|
44
+ search_and_replace(file, changeme, project_name)
45
+ end
46
+
47
+ run("git commit -a -m 'Initial commit'")
48
+
49
+ puts
50
+ puts "Now login to github and add a new project named '#{project_name.humanize.titleize}'"
51
+
52
+
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ begin
3
+ load File.expand_path(File.dirname(__FILE__) + "/../vendor/plugins/cucumber/bin/cucumber")
4
+ rescue LoadError
5
+ require "rubygems"
6
+ load File.join(Gem.bindir, "cucumber")
7
+ end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/dbconsole'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/destroy'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/generate'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/benchmarker'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/profiler'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/request'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/plugin'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/inspector'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/reaper'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/spawner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/runner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/server'
@@ -0,0 +1,45 @@
1
+ Factory.sequence :email do |n|
2
+ "somebody#{n}@example.com"
3
+ end
4
+
5
+ Factory.sequence :login do |n|
6
+ "inquire#{n}"
7
+ end
8
+
9
+ Factory.sequence :name do |n|
10
+ "a_name#{n}"
11
+ end
12
+
13
+ Factory.sequence :abbr do |n|
14
+ "abbr#{n}"
15
+ end
16
+
17
+ Factory.sequence :description do |n|
18
+ "This is the description: #{n}"
19
+ end
20
+
21
+ Factory.sequence :title do |n|
22
+ "This is the title: #{n}"
23
+ end
24
+
25
+
26
+ Factory.define :user do |f|
27
+ f.login { Factory.next(:login) }
28
+ f.email { Factory.next(:email) }
29
+ f.password 'asdfasdf'
30
+ f.password_confirmation 'asdfasdf'
31
+ f.first_name 'test'
32
+ f.last_name 'guy'
33
+ f.terms_of_service true
34
+ f.activated_at DateTime.now
35
+ end
36
+
37
+ Factory.define :permission do |f|
38
+ f.role {|a| a.association(:role)}
39
+ f.user {|a| a.association(:user)}
40
+ end
41
+
42
+ Factory.define :role do |f|
43
+ f.rolename 'administrator'
44
+ end
45
+
File without changes
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class CmsLiteControllerTest < ActionController::TestCase
4
+
5
+ tests CmsLiteController
6
+
7
+ context "cms lite controller" do
8
+ context "unprotected pages" do
9
+ setup do
10
+ get :show_page, :content_key => 'open', :content_page => ['hello']
11
+ end
12
+ should_respond_with :success
13
+ end
14
+
15
+ context "protected pages"do
16
+ context "not logged in" do
17
+ setup do
18
+ get :show_protected_page, :content_key => 'protected', :content_page => ['safe-hello']
19
+ end
20
+ should_redirect_to("login") { login_path }
21
+ end
22
+ context "logged in" do
23
+ setup do
24
+ activate_authlogic
25
+ @user = Factory(:user)
26
+ login_as @user
27
+ get :show_protected_page, :content_key => 'protected', :content_page => ['safe-hello']
28
+ end
29
+ should_respond_with :success
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ end
File without changes
@@ -0,0 +1,62 @@
1
+ module MuckControllerMacros
2
+
3
+ def should_require_login(*args)
4
+ args = Hash[*args]
5
+ login_url = args.delete :login_url
6
+ args.each do |action, verb|
7
+ should "Require login for '#{action}' action" do
8
+ send(verb, action)
9
+ assert_redirected_to(login_url)
10
+ end
11
+ end
12
+ end
13
+
14
+ def should_require_role(role, redirect_url, *actions)
15
+ actions = Hash[*actions]
16
+ actions.each do |action, verb|
17
+ should "require role for '#{action}' action" do
18
+ user = Factory(:user)
19
+ login_as(user)
20
+ send(verb, action)
21
+ assert_redirected_to(redirect_url)
22
+ ensure_flash(/permission/i)
23
+ end
24
+ end
25
+ end
26
+
27
+ #from: http://blog.internautdesign.com/2008/9/11/more-on-custom-shoulda-macros-scoping-of-instance-variables
28
+ def should_not_allow action, object, url= "/login", msg=nil
29
+ msg ||= "a #{object.class.to_s.downcase}"
30
+ should "not be able to #{action} #{msg}" do
31
+ object = eval(object, self.send(:binding), __FILE__, __LINE__)
32
+ get action, :id => object.id
33
+ assert_redirected_to url
34
+ end
35
+ end
36
+
37
+ def should_allow action, object, msg=nil
38
+ msg ||= "a #{object.class.to_s.downcase}"
39
+ should "be able to #{action} #{msg}" do
40
+ object = eval(object, self.send(:binding), __FILE__, __LINE__)
41
+ get action, :id => object.id
42
+ assert_response :success
43
+ end
44
+ end
45
+
46
+ # make sure the response body matches the text exactly
47
+ def should_render_text(text)
48
+ should "render text #{text}" do
49
+ assert_equal text, @response.body
50
+ end
51
+ end
52
+
53
+ # look for the given text in the response body
54
+ def should_render_partial_text(text)
55
+ should "contain text #{text}" do
56
+ assert @response.body.include?(text), "Response did not contain the text '#{text}'"
57
+ end
58
+ end
59
+
60
+ end
61
+
62
+ ActionController::TestCase.extend(MuckControllerMacros)
@@ -0,0 +1,50 @@
1
+ module ShouldaModelMacros
2
+
3
+ def self.should_whitelist(*attributes)
4
+ bad_scripts = [
5
+ %|';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>|,
6
+ %|'';!--"<XSS>=&{()}|,
7
+ %|<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>|,
8
+ %|<IMG SRC="javascript:alert('XSS');">|,
9
+ %|<IMG SRC=javascript:alert('XSS')>|,
10
+ %|<IMG SRC=JaVaScRiPt:alert('XSS')>|,
11
+ %|<IMG SRC=JaVaScRiPt:alert('XSS')>|,
12
+ %|<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>|,
13
+ %|<IMG """><SCRIPT>alert("XSS")</SCRIPT>">|,
14
+ %|<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>|,
15
+ %|<A HREF="h
16
+ tt p://6&#9;6.000146.0x7.147/">XSS</A>|,
17
+ %|<script>alert('message');</script>| ]
18
+
19
+ klass = model_class
20
+ attributes.each do |attribute|
21
+ attribute = attribute.to_sym
22
+ should "white list #{attribute}" do
23
+ assert object = klass.find(:first), "Can't find first #{klass}"
24
+ bad_scripts.each do |bad_value|
25
+ object.send("#{attribute}=", bad_value)
26
+ object.save
27
+ clean_value = object.send("#{attribute}")
28
+ assert !clean_value.include?(bad_value), "#{attribute} is not white listed. #{bad_value} made it through"
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ def should_accept_nested_attributes_for(*attr_names)
35
+ klass = self.name.gsub(/Test$/, '').constantize
36
+
37
+ context "#{klass}" do
38
+ attr_names.each do |association_name|
39
+ should "accept nested attrs for #{association_name}" do
40
+ assert klass.instance_methods.include?("#{association_name}_attributes="),
41
+ "#{klass} does not accept nested attributes for #{association_name}"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ class ActiveSupport::TestCase
49
+ extend ShouldaModelMacros
50
+ end
@@ -0,0 +1,38 @@
1
+ $:.reject! { |e| e.include? 'TextMate' }
2
+ ENV["RAILS_ENV"] = "test"
3
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
4
+ require 'test_help'
5
+ gem 'thoughtbot-factory_girl' # from github
6
+ require 'factory_girl'
7
+ require 'mocha'
8
+ require 'authlogic/test_case'
9
+ require 'redgreen' rescue LoadError
10
+ require File.expand_path(File.dirname(__FILE__) + '/factories')
11
+ require File.join(File.dirname(__FILE__), 'shoulda_macros', 'controller')
12
+ require File.join(File.dirname(__FILE__), 'shoulda_macros', 'models')
13
+
14
+ class ActiveSupport::TestCase
15
+ self.use_transactional_fixtures = true
16
+ self.use_instantiated_fixtures = false
17
+
18
+ include Authlogic::TestCase
19
+
20
+ def login_as(user)
21
+ success = UserSession.create(user)
22
+ if !success
23
+ errors = user.errors.full_messages.to_sentence
24
+ message = 'User has not been activated' if !user.active?
25
+ raise "could not login as #{user.to_param}. Please make sure the user is valid. #{message} #{errors}"
26
+ end
27
+ UserSession.find
28
+ end
29
+
30
+ def assure_logout
31
+ user_session = UserSession.find
32
+ user_session.destroy if user_session
33
+ end
34
+
35
+ def ensure_flash(val)
36
+ assert_contains flash.values, val, ", Flash: #{flash.inspect}"
37
+ end
38
+ end