typus 0.9.39 → 1.0.0.pre

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 (424) hide show
  1. data/CHANGELOG +104 -0
  2. data/Gemfile +17 -0
  3. data/Gemfile.lock +96 -0
  4. data/MIT-LICENSE +1 -1
  5. data/README.rdoc +45 -0
  6. data/Rakefile +19 -48
  7. data/app/controllers/admin/account_controller.rb +54 -0
  8. data/app/controllers/admin/dashboard_controller.rb +7 -0
  9. data/app/controllers/admin/resource_controller.rb +8 -0
  10. data/app/controllers/admin/resources_controller.rb +307 -0
  11. data/app/controllers/admin/session_controller.rb +38 -0
  12. data/app/controllers/admin_controller.rb +26 -0
  13. data/app/helpers/admin/dashboard_helper.rb +38 -0
  14. data/app/helpers/admin/filters_helper.rb +81 -0
  15. data/app/helpers/admin/form_helper.rb +68 -261
  16. data/app/helpers/admin/preview_helper.rb +48 -0
  17. data/app/helpers/admin/relationships_helper.rb +192 -0
  18. data/app/helpers/admin/resources_helper.rb +80 -0
  19. data/app/helpers/admin/search_helper.rb +19 -0
  20. data/app/helpers/admin/sidebar_helper.rb +32 -210
  21. data/app/helpers/admin/table_helper.rb +207 -200
  22. data/app/helpers/admin_helper.rb +56 -0
  23. data/app/mailers/admin/mailer.rb +13 -0
  24. data/app/models/admin/fake_user.rb +38 -0
  25. data/app/views/admin/account/forgot_password.html.erb +21 -0
  26. data/app/views/admin/account/new.html.erb +21 -0
  27. data/app/views/admin/dashboard/_sidebar.html.erb +3 -3
  28. data/app/views/admin/dashboard/show.html.erb +16 -0
  29. data/app/views/admin/dashboard/styles.html.erb +154 -0
  30. data/app/views/admin/helpers/_apps.html.erb +6 -0
  31. data/app/views/admin/helpers/_flash_message.html.erb +3 -0
  32. data/app/views/admin/helpers/_header.html.erb +7 -0
  33. data/app/views/admin/helpers/_login_info.html.erb +4 -0
  34. data/app/views/admin/helpers/_preview.html.erb +13 -0
  35. data/app/views/admin/helpers/dashboard/_applications.html.erb +32 -0
  36. data/app/views/admin/helpers/dashboard/_resources.html.erb +16 -0
  37. data/app/views/admin/helpers/filters/_filters.html.erb +31 -0
  38. data/app/views/admin/helpers/resources/_display_link_to_previous.html.erb +3 -0
  39. data/app/views/admin/helpers/resources/_pagination.html.erb +28 -0
  40. data/app/views/admin/helpers/search/_search.html.erb +12 -0
  41. data/app/views/admin/helpers/sidebar/_sidebar.html.erb +17 -0
  42. data/app/views/admin/helpers/table/_table.html.erb +22 -0
  43. data/app/views/{typus_mailer/reset_password_link.erb → admin/mailer/reset_password_link.text.erb} +2 -2
  44. data/{test/config/broken/empty.yml → app/views/admin/resources/_edit.html.erb} +0 -0
  45. data/app/views/admin/resources/_form.html.erb +26 -0
  46. data/{test/config/broken/empty_roles.yml → app/views/admin/resources/_index.html.erb} +0 -0
  47. data/{test/config/empty/empty_01.yml → app/views/admin/resources/_new.html.erb} +0 -0
  48. data/{test/config/empty/empty_01_roles.yml → app/views/admin/resources/_show.html.erb} +0 -0
  49. data/app/views/admin/resources/edit.html.erb +23 -21
  50. data/app/views/admin/resources/index.html.erb +31 -18
  51. data/app/views/admin/resources/new.html.erb +20 -18
  52. data/app/views/admin/resources/show.html.erb +29 -20
  53. data/app/views/admin/session/new.html.erb +26 -0
  54. data/app/views/admin/templates/_belongs_to.html.erb +4 -0
  55. data/app/views/admin/templates/_boolean.html.erb +4 -8
  56. data/app/views/admin/templates/_date.html.erb +9 -2
  57. data/app/views/admin/templates/_datetime.html.erb +9 -2
  58. data/app/views/admin/templates/_file.html.erb +20 -5
  59. data/app/views/admin/templates/_has_many.html.erb +24 -0
  60. data/app/views/admin/templates/_has_n.html.erb +17 -0
  61. data/{test/config/empty/empty_02.yml → app/views/admin/templates/_has_one.html.erb} +0 -0
  62. data/app/views/admin/templates/_password.html.erb +4 -2
  63. data/app/views/admin/templates/_relate_form.html.erb +4 -0
  64. data/app/views/admin/templates/_selector.html.erb +6 -18
  65. data/app/views/admin/templates/_string.html.erb +11 -10
  66. data/app/views/admin/templates/_text.html.erb +9 -2
  67. data/app/views/admin/templates/_time.html.erb +9 -2
  68. data/app/views/admin/templates/_tree.html.erb +4 -0
  69. data/app/views/layouts/admin/session.html.erb +44 -0
  70. data/app/views/layouts/admin.html.erb +45 -39
  71. data/config/available_locales/ca.yml +124 -0
  72. data/config/available_locales/ca_models.yml +16 -0
  73. data/config/{locales → available_locales}/de.yml +108 -89
  74. data/config/available_locales/de_models.yml +13 -0
  75. data/config/available_locales/es.yml +124 -0
  76. data/config/available_locales/es_models.yml +13 -0
  77. data/config/available_locales/fr.yml +124 -0
  78. data/config/available_locales/fr_models.yml +13 -0
  79. data/config/available_locales/hu.yml +124 -0
  80. data/config/available_locales/hu_models.yml +13 -0
  81. data/config/available_locales/it.yml +136 -0
  82. data/config/available_locales/it_models.yml +15 -0
  83. data/config/available_locales/language.yml.template +122 -0
  84. data/config/available_locales/language_models.yml.template +13 -0
  85. data/config/{locales → available_locales}/pt-BR.yml +97 -74
  86. data/config/available_locales/pt-BR_models.yml +13 -0
  87. data/config/{locales → available_locales}/ru.yml +107 -85
  88. data/config/available_locales/ru_models.yml +13 -0
  89. data/config/routes.rb +18 -11
  90. data/lib/generators/templates/config/initializers/typus.rb +26 -0
  91. data/lib/generators/templates/config/initializers/typus_authentication.rb +18 -0
  92. data/lib/generators/templates/config/initializers/typus_resources.rb +30 -0
  93. data/{generators/typus → lib/generators}/templates/config/typus/README +34 -16
  94. data/lib/generators/templates/config/typus/application.yml +5 -0
  95. data/lib/generators/templates/config/typus/application_roles.yml +6 -0
  96. data/lib/generators/templates/config/typus/typus.yml +17 -0
  97. data/lib/generators/templates/config/typus/typus_roles.yml +6 -0
  98. data/lib/generators/templates/controller.rb +4 -0
  99. data/lib/generators/templates/functional_test.rb +21 -0
  100. data/{generators/typus/templates/db/create_typus_users.rb → lib/generators/templates/migration.rb} +4 -4
  101. data/lib/generators/templates/model.rb +8 -0
  102. data/lib/generators/templates/model.yml +10 -0
  103. data/{generators/typus/templates/public/images/admin → lib/generators/templates/public/admin/images}/ui-icons.png +0 -0
  104. data/lib/generators/templates/public/admin/javascripts/application.js +6 -0
  105. data/lib/generators/templates/public/admin/javascripts/jquery-1.4.2.min.js +154 -0
  106. data/lib/generators/templates/public/admin/javascripts/jquery.rails.js +126 -0
  107. data/lib/generators/templates/public/admin/javascripts/jquery.searchField.js +91 -0
  108. data/lib/generators/templates/public/admin/stylesheets/application.css +11 -0
  109. data/lib/generators/templates/public/admin/stylesheets/screen.css +356 -0
  110. data/lib/generators/templates/public/admin/vendor/fancybox/blank.gif +0 -0
  111. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_close.png +0 -0
  112. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_loading.png +0 -0
  113. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_left.png +0 -0
  114. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_right.png +0 -0
  115. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_e.png +0 -0
  116. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_n.png +0 -0
  117. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_ne.png +0 -0
  118. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_nw.png +0 -0
  119. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_s.png +0 -0
  120. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_se.png +0 -0
  121. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_sw.png +0 -0
  122. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_w.png +0 -0
  123. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_left.png +0 -0
  124. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_main.png +0 -0
  125. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_over.png +0 -0
  126. data/{generators/typus/templates/public/images/admin → lib/generators/templates/public/admin/vendor}/fancybox/fancy_title_right.png +0 -0
  127. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-x.png +0 -0
  128. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-y.png +0 -0
  129. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox.png +0 -0
  130. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.easing-1.3.pack.js +72 -0
  131. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.1.css +363 -0
  132. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.1.js +1077 -0
  133. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
  134. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.mousewheel-3.0.2.pack.js +13 -0
  135. data/lib/generators/templates/view.html.erb +9 -0
  136. data/lib/generators/typus/migration_generator.rb +85 -0
  137. data/lib/generators/typus/typus_generator.rb +190 -0
  138. data/lib/generators/typus/views_generator.rb +27 -0
  139. data/lib/support/active_record.rb +60 -0
  140. data/lib/support/array.rb +13 -0
  141. data/lib/{typus → support}/hash.rb +2 -2
  142. data/lib/{typus → support}/object.rb +2 -2
  143. data/lib/support/string.rb +47 -0
  144. data/lib/tasks/typus.rake +19 -0
  145. data/lib/typus/authentication.rb +146 -40
  146. data/lib/typus/configuration.rb +14 -49
  147. data/lib/typus/engine.rb +6 -0
  148. data/lib/typus/format.rb +41 -18
  149. data/lib/typus/orm/active_record.rb +378 -0
  150. data/lib/typus/resources.rb +57 -0
  151. data/lib/typus/user.rb +54 -37
  152. data/lib/typus/version.rb +3 -0
  153. data/lib/typus.rb +118 -80
  154. data/lib/vendor/paginator.rb +2 -2
  155. data/test/factories/assets.rb +5 -0
  156. data/test/factories/categories.rb +3 -0
  157. data/test/factories/comments.rb +6 -0
  158. data/test/factories/pages.rb +5 -0
  159. data/test/factories/pictures.rb +7 -0
  160. data/test/factories/posts.rb +6 -0
  161. data/test/factories/typus_users.rb +8 -0
  162. data/test/{config → fixtures/config}/broken/application.yml +0 -0
  163. data/test/{config → fixtures/config}/broken/application_roles.yml +0 -0
  164. data/test/{config/empty/empty_02_roles.yml → fixtures/config/broken/empty.yml} +0 -0
  165. data/test/fixtures/config/broken/empty_roles.yml +0 -0
  166. data/test/{config → fixtures/config}/broken/undefined.yml +0 -0
  167. data/test/{config → fixtures/config}/broken/undefined_roles.yml +0 -0
  168. data/test/{config → fixtures/config}/default/typus.yml +2 -1
  169. data/{generators/typus/templates/config/typus → test/fixtures/config/default}/typus_roles.yml +0 -0
  170. data/test/fixtures/config/empty/empty_01.yml +0 -0
  171. data/test/fixtures/config/empty/empty_01_roles.yml +0 -0
  172. data/test/fixtures/config/empty/empty_02.yml +0 -0
  173. data/test/fixtures/config/empty/empty_02_roles.yml +0 -0
  174. data/test/{config → fixtures/config}/locales/es.yml +0 -0
  175. data/test/fixtures/config/namespaced/application.yml +5 -0
  176. data/test/fixtures/config/namespaced/application_roles.yml +2 -0
  177. data/test/{config → fixtures/config}/ordered/001_roles.yml +0 -0
  178. data/test/{config → fixtures/config}/ordered/002_roles.yml +0 -0
  179. data/test/{config → fixtures/config}/unordered/app_one_roles.yml +0 -0
  180. data/test/{config → fixtures/config}/unordered/app_two_roles.yml +0 -0
  181. data/test/fixtures/config/working/application.yml +73 -0
  182. data/test/fixtures/config/working/application_roles.yml +24 -0
  183. data/{generators/typus/templates/config/typus → test/fixtures/config/working}/typus.yml +2 -1
  184. data/test/{config/default → fixtures/config/working}/typus_roles.yml +0 -0
  185. data/test/fixtures/rails_app/README +244 -0
  186. data/test/fixtures/rails_app/Rakefile +7 -0
  187. data/test/fixtures/rails_app/app/controllers/admin/assets_controller.rb +2 -0
  188. data/test/fixtures/rails_app/app/controllers/admin/categories_controller.rb +2 -0
  189. data/test/fixtures/rails_app/app/controllers/admin/comments_controller.rb +2 -0
  190. data/test/fixtures/rails_app/app/controllers/admin/pages_controller.rb +2 -0
  191. data/test/fixtures/rails_app/app/controllers/admin/pictures_controller.rb +2 -0
  192. data/test/fixtures/rails_app/app/controllers/admin/posts_controller.rb +2 -0
  193. data/test/fixtures/rails_app/app/controllers/admin/status_controller.rb +2 -0
  194. data/test/fixtures/rails_app/app/controllers/admin/typus_users_controller.rb +2 -0
  195. data/test/fixtures/rails_app/app/controllers/admin/watch_dog_controller.rb +2 -0
  196. data/test/fixtures/rails_app/app/controllers/application_controller.rb +4 -0
  197. data/test/fixtures/rails_app/app/helpers/application_helper.rb +2 -0
  198. data/test/fixtures/{app → rails_app/app}/models/asset.rb +1 -1
  199. data/test/fixtures/{app → rails_app/app}/models/category.rb +2 -2
  200. data/test/fixtures/{app → rails_app/app}/models/comment.rb +1 -1
  201. data/test/fixtures/{app → rails_app/app}/models/custom_user.rb +1 -1
  202. data/test/fixtures/{app → rails_app/app}/models/delayed/task.rb +2 -2
  203. data/test/fixtures/rails_app/app/models/page.rb +9 -0
  204. data/test/fixtures/rails_app/app/models/picture.rb +6 -0
  205. data/test/fixtures/{app → rails_app/app}/models/post.rb +6 -6
  206. data/test/fixtures/rails_app/app/models/typus_user.rb +8 -0
  207. data/test/fixtures/{app → rails_app/app}/models/view.rb +1 -1
  208. data/test/fixtures/rails_app/app/views/admin/categories/_form.html.erb +1 -0
  209. data/test/fixtures/rails_app/app/views/admin/dashboard/_sidebar.html.erb +1 -0
  210. data/test/fixtures/rails_app/app/views/admin/mailer/reset_password_link.text.erb +6 -0
  211. data/test/fixtures/rails_app/app/views/admin/posts/_edit.html.erb +1 -0
  212. data/test/fixtures/rails_app/app/views/admin/posts/_index.html.erb +1 -0
  213. data/test/fixtures/rails_app/app/views/admin/posts/_new.html.erb +1 -0
  214. data/test/fixtures/rails_app/app/views/admin/posts/_show.html.erb +1 -0
  215. data/test/fixtures/rails_app/app/views/admin/posts/_sidebar.html.erb +1 -0
  216. data/test/fixtures/rails_app/app/views/admin/resources/_sidebar.html.erb +1 -0
  217. data/test/fixtures/rails_app/app/views/admin/status/index.html.erb +1 -0
  218. data/test/fixtures/rails_app/app/views/admin/templates/_datepicker.html.erb +1 -0
  219. data/test/fixtures/rails_app/app/views/layouts/application.html.erb +14 -0
  220. data/test/fixtures/rails_app/config/application.rb +50 -0
  221. data/test/fixtures/rails_app/config/boot.rb +13 -0
  222. data/test/fixtures/rails_app/config/database.yml +22 -0
  223. data/test/fixtures/rails_app/config/environment.rb +5 -0
  224. data/test/fixtures/rails_app/config/environments/development.rb +19 -0
  225. data/test/fixtures/rails_app/config/environments/production.rb +42 -0
  226. data/test/fixtures/rails_app/config/environments/test.rb +34 -0
  227. data/test/fixtures/rails_app/config/initializers/acts_as_list.rb +258 -0
  228. data/test/fixtures/rails_app/config/initializers/acts_as_tree.rb +98 -0
  229. data/test/fixtures/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  230. data/test/fixtures/rails_app/config/initializers/inflections.rb +10 -0
  231. data/test/fixtures/rails_app/config/initializers/mime_types.rb +5 -0
  232. data/test/fixtures/rails_app/config/initializers/secret_token.rb +7 -0
  233. data/test/fixtures/rails_app/config/initializers/session_store.rb +8 -0
  234. data/test/fixtures/rails_app/config/initializers/typus.rb +6 -0
  235. data/test/fixtures/rails_app/config/locales/en.yml +5 -0
  236. data/test/fixtures/rails_app/config/routes.rb +8 -0
  237. data/test/{config/working → fixtures/rails_app/config/typus}/application.yml +11 -9
  238. data/test/{config/working → fixtures/rails_app/config/typus}/application_roles.yml +0 -0
  239. data/{generators/typus_update_schema_to_01/templates/config → test/fixtures/rails_app/config/typus}/typus.yml +0 -0
  240. data/test/{config/working → fixtures/rails_app/config/typus}/typus_roles.yml +0 -0
  241. data/test/fixtures/rails_app/config.ru +4 -0
  242. data/test/fixtures/rails_app/db/seeds.rb +7 -0
  243. data/test/fixtures/rails_app/db/test.sqlite3 +0 -0
  244. data/test/fixtures/rails_app/log/test.log +4268 -0
  245. data/test/fixtures/rails_app/public/404.html +26 -0
  246. data/test/fixtures/rails_app/public/422.html +26 -0
  247. data/test/fixtures/rails_app/public/500.html +26 -0
  248. data/test/fixtures/rails_app/public/favicon.ico +0 -0
  249. data/test/fixtures/rails_app/public/images/rails.png +0 -0
  250. data/test/fixtures/rails_app/public/index.html +279 -0
  251. data/test/fixtures/rails_app/public/javascripts/application.js +2 -0
  252. data/test/fixtures/rails_app/public/javascripts/controls.js +965 -0
  253. data/test/fixtures/rails_app/public/javascripts/dragdrop.js +974 -0
  254. data/test/fixtures/rails_app/public/javascripts/effects.js +1123 -0
  255. data/test/fixtures/rails_app/public/javascripts/prototype.js +4874 -0
  256. data/test/fixtures/rails_app/public/javascripts/rails.js +118 -0
  257. data/test/fixtures/rails_app/public/robots.txt +5 -0
  258. data/test/fixtures/rails_app/script/rails +9 -0
  259. data/test/fixtures/rails_app/tmp/export-posts-20100902120447.csv +2 -0
  260. data/test/fixtures/rails_app/tmp/export-posts-20100902120700.csv +2 -0
  261. data/test/functional/admin/account_controller_test.rb +90 -0
  262. data/test/functional/admin/dashboard_controller_http_basic_test.rb +24 -0
  263. data/test/functional/admin/dashboard_controller_none_test.rb +18 -0
  264. data/test/functional/admin/dashboard_controller_test.rb +106 -0
  265. data/test/functional/admin/resources_controller_assets_relationships.rb +59 -0
  266. data/test/functional/admin/resources_controller_categories_before_test.rb +10 -0
  267. data/test/functional/admin/resources_controller_categories_lists_test.rb +44 -0
  268. data/test/functional/admin/resources_controller_categories_views_test.rb +10 -0
  269. data/test/functional/admin/resources_controller_comments_toggle_test.rb +21 -0
  270. data/test/functional/admin/{master_controller_posts_before_test.rb → resources_controller_posts_before_test.rb} +3 -3
  271. data/test/functional/admin/resources_controller_posts_crud_custom_test.rb +27 -0
  272. data/test/functional/admin/resources_controller_posts_crud_test.rb +44 -0
  273. data/test/functional/admin/resources_controller_posts_formats_test.rb +39 -0
  274. data/test/functional/admin/resources_controller_posts_forms_test.rb +58 -0
  275. data/test/functional/admin/resources_controller_posts_permissions_test.rb +100 -0
  276. data/test/functional/admin/{master_controller_posts_relationships_test.rb → resources_controller_posts_relationships_test.rb} +25 -20
  277. data/test/functional/admin/resources_controller_posts_roles.rb +52 -0
  278. data/test/functional/admin/resources_controller_posts_views_test.rb +143 -0
  279. data/test/functional/admin/resources_controller_tableless_resource_test.rb +51 -0
  280. data/test/functional/admin/resources_controller_typus_users_test.rb +159 -0
  281. data/test/functional/admin/session_controller_test.rb +85 -0
  282. data/test/helpers/admin/dashboard_helper_test.rb +42 -0
  283. data/test/helpers/admin/form_helper_test.rb +52 -276
  284. data/test/helpers/admin/resources_helper_test.rb +52 -0
  285. data/test/helpers/admin/sidebar_helper_test.rb +133 -224
  286. data/test/helpers/admin/table_helper_test.rb +136 -144
  287. data/test/helpers/admin_helper_test.rb +69 -0
  288. data/test/lib/support/active_record_test.rb +35 -0
  289. data/test/lib/support/array_test.rb +15 -0
  290. data/test/lib/support/hash_test.rb +11 -0
  291. data/test/lib/support/string_test.rb +48 -0
  292. data/test/lib/typus/active_record_test.rb +385 -0
  293. data/test/lib/typus/configuration_test.rb +52 -0
  294. data/test/lib/typus/resource_test.rb +17 -0
  295. data/test/lib/typus/routes_test.rb +29 -0
  296. data/test/lib/typus_test.rb +72 -40
  297. data/test/{vendor → lib/vendor}/paginator_test.rb +7 -4
  298. data/test/schema.rb +28 -3
  299. data/test/test_helper.rb +29 -0
  300. data/test/unit/admin/mailer_test.rb +32 -0
  301. data/test/unit/typus_user_roles_test.rb +69 -61
  302. data/test/unit/typus_user_test.rb +56 -143
  303. data/typus.gemspec +18 -276
  304. metadata +305 -231
  305. data/.gitignore +0 -1
  306. data/AUTHORS.md +0 -34
  307. data/CHANGES +0 -3
  308. data/README.md +0 -75
  309. data/VERSION +0 -1
  310. data/app/controllers/admin/master_controller.rb +0 -394
  311. data/app/controllers/typus_controller.rb +0 -152
  312. data/app/helpers/admin/master_helper.rb +0 -104
  313. data/app/helpers/admin/public_helper.rb +0 -27
  314. data/app/helpers/typus_helper.rb +0 -181
  315. data/app/models/typus_mailer.rb +0 -14
  316. data/app/models/typus_user.rb +0 -5
  317. data/app/views/admin/shared/_feedback.html.erb +0 -6
  318. data/app/views/admin/shared/_footer.html.erb +0 -2
  319. data/app/views/admin/shared/_pagination.html.erb +0 -28
  320. data/app/views/admin/templates/_tiny_mce.html.erb +0 -2
  321. data/app/views/layouts/typus.html.erb +0 -29
  322. data/app/views/typus/dashboard.html.erb +0 -9
  323. data/app/views/typus/recover_password.html.erb +0 -7
  324. data/app/views/typus/reset_password.html.erb +0 -15
  325. data/app/views/typus/sign_in.html.erb +0 -9
  326. data/app/views/typus/sign_up.html.erb +0 -7
  327. data/config/locales/es.yml +0 -105
  328. data/config/locales/fr.yml +0 -98
  329. data/config/locales/language.yml.template +0 -106
  330. data/generators/typus/templates/auto/index.html.erb +0 -11
  331. data/generators/typus/templates/auto/resource_controller.rb.erb +0 -15
  332. data/generators/typus/templates/auto/resource_controller_test.rb.erb +0 -11
  333. data/generators/typus/templates/auto/resources_controller.rb.erb +0 -37
  334. data/generators/typus/templates/config/initializers/typus.rb +0 -34
  335. data/generators/typus/templates/config/typus/application.yml +0 -6
  336. data/generators/typus/templates/config/typus/application_roles.yml +0 -23
  337. data/generators/typus/templates/lib/tasks/typus_tasks.rake +0 -32
  338. data/generators/typus/templates/public/images/admin/fancybox/fancy_closebox.png +0 -0
  339. data/generators/typus/templates/public/images/admin/fancybox/fancy_left.png +0 -0
  340. data/generators/typus/templates/public/images/admin/fancybox/fancy_progress.png +0 -0
  341. data/generators/typus/templates/public/images/admin/fancybox/fancy_right.png +0 -0
  342. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_e.png +0 -0
  343. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_n.png +0 -0
  344. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_ne.png +0 -0
  345. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_nw.png +0 -0
  346. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_s.png +0 -0
  347. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_se.png +0 -0
  348. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_sw.png +0 -0
  349. data/generators/typus/templates/public/images/admin/fancybox/fancy_shadow_w.png +0 -0
  350. data/generators/typus/templates/public/images/admin/fancybox/fancy_title_left.png +0 -0
  351. data/generators/typus/templates/public/images/admin/fancybox/fancy_title_main.png +0 -0
  352. data/generators/typus/templates/public/javascripts/admin/application.js +0 -14
  353. data/generators/typus/templates/public/javascripts/admin/jquery-1.3.2.min.js +0 -19
  354. data/generators/typus/templates/public/javascripts/admin/jquery.fancybox-1.2.1.min.js +0 -9
  355. data/generators/typus/templates/public/stylesheets/admin/jquery.fancybox.css +0 -315
  356. data/generators/typus/templates/public/stylesheets/admin/reset.css +0 -68
  357. data/generators/typus/templates/public/stylesheets/admin/screen.css +0 -361
  358. data/generators/typus/typus_generator.rb +0 -191
  359. data/generators/typus_update_schema_to_01/templates/migration.rb +0 -11
  360. data/generators/typus_update_schema_to_01/typus_update_schema_to_01_generator.rb +0 -19
  361. data/generators/typus_update_schema_to_02/templates/migration.rb +0 -11
  362. data/generators/typus_update_schema_to_02/typus_update_schema_to_02_generator.rb +0 -11
  363. data/lib/typus/active_record.rb +0 -323
  364. data/lib/typus/extensions/routes.rb +0 -15
  365. data/lib/typus/extensions/routes_hack.rb +0 -15
  366. data/lib/typus/preferences.rb +0 -11
  367. data/lib/typus/preview.rb +0 -76
  368. data/lib/typus/quick_edit.rb +0 -40
  369. data/lib/typus/reloader.rb +0 -14
  370. data/lib/typus/string.rb +0 -27
  371. data/lib/vendor/active_record.rb +0 -15
  372. data/lib/vendor/rss_parser.rb +0 -20
  373. data/rails/init.rb +0 -3
  374. data/tasks/typus_tasks.rake +0 -32
  375. data/test/config/working/typus.yml +0 -12
  376. data/test/fixtures/app/controllers/admin/assets_controller.rb +0 -2
  377. data/test/fixtures/app/controllers/admin/categories_controller.rb +0 -2
  378. data/test/fixtures/app/controllers/admin/comments_controller.rb +0 -2
  379. data/test/fixtures/app/controllers/admin/pages_controller.rb +0 -2
  380. data/test/fixtures/app/controllers/admin/posts_controller.rb +0 -2
  381. data/test/fixtures/app/controllers/admin/status_controller.rb +0 -6
  382. data/test/fixtures/app/controllers/admin/typus_users_controller.rb +0 -2
  383. data/test/fixtures/app/controllers/admin/watch_dog_controller.rb +0 -6
  384. data/test/fixtures/app/models/page.rb +0 -5
  385. data/test/fixtures/app/views/admin/dashboard/_content.html.erb +0 -1
  386. data/test/fixtures/app/views/admin/dashboard/_sidebar.html.erb +0 -1
  387. data/test/fixtures/app/views/admin/posts/_edit.html.erb +0 -1
  388. data/test/fixtures/app/views/admin/posts/_index.html.erb +0 -1
  389. data/test/fixtures/app/views/admin/posts/_new.html.erb +0 -1
  390. data/test/fixtures/app/views/admin/posts/_show.html.erb +0 -1
  391. data/test/fixtures/app/views/admin/posts/_sidebar.html.erb +0 -1
  392. data/test/fixtures/app/views/admin/resources/_sidebar.html.erb +0 -1
  393. data/test/fixtures/app/views/admin/shared/_footer.html.erb +0 -1
  394. data/test/fixtures/app/views/admin/status/index.html.erb +0 -1
  395. data/test/fixtures/app/views/admin/templates/_datepicker.html.erb +0 -1
  396. data/test/fixtures/assets.yml +0 -11
  397. data/test/fixtures/categories.yml +0 -14
  398. data/test/fixtures/comments.yml +0 -27
  399. data/test/fixtures/pages.yml +0 -41
  400. data/test/fixtures/posts.yml +0 -37
  401. data/test/fixtures/typus_users.yml +0 -59
  402. data/test/functional/admin/master_controller_assets_relationships.rb +0 -66
  403. data/test/functional/admin/master_controller_categories_lists_test.rb +0 -64
  404. data/test/functional/admin/master_controller_posts_crud_test.rb +0 -97
  405. data/test/functional/admin/master_controller_posts_formats_test.rb +0 -53
  406. data/test/functional/admin/master_controller_posts_permissions_test.rb +0 -127
  407. data/test/functional/admin/master_controller_posts_roles.rb +0 -50
  408. data/test/functional/admin/master_controller_posts_toggle_test.rb +0 -35
  409. data/test/functional/admin/master_controller_posts_views_test.rb +0 -209
  410. data/test/functional/admin/master_controller_tableless_resource_test.rb +0 -36
  411. data/test/functional/admin/master_controller_typus_users_test.rb +0 -211
  412. data/test/functional/typus_controller_test.rb +0 -342
  413. data/test/helper.rb +0 -51
  414. data/test/helpers/admin/master_helper_test.rb +0 -70
  415. data/test/helpers/admin/public_helper_test.rb +0 -26
  416. data/test/helpers/typus_helper_test.rb +0 -96
  417. data/test/lib/active_record_test.rb +0 -377
  418. data/test/lib/configuration_test.rb +0 -95
  419. data/test/lib/hash_test.rb +0 -11
  420. data/test/lib/routes_test.rb +0 -71
  421. data/test/lib/string_test.rb +0 -55
  422. data/test/unit/typus_mailer_test.rb +0 -29
  423. data/test/unit/typus_test.rb +0 -17
  424. data/test/vendor/active_record_test.rb +0 -18
@@ -0,0 +1,307 @@
1
+ require "typus/format"
2
+
3
+ class Admin::ResourcesController < AdminController
4
+
5
+ include Typus::Format
6
+
7
+ before_filter :get_model
8
+
9
+ before_filter :get_object,
10
+ :only => [ :show,
11
+ :edit, :update, :destroy, :toggle,
12
+ :position, :relate, :unrelate,
13
+ :detach ]
14
+
15
+ before_filter :check_resource_ownership,
16
+ :only => [ :edit, :update, :destroy, :toggle,
17
+ :position, :relate, :unrelate ]
18
+
19
+ before_filter :check_if_user_can_perform_action_on_user,
20
+ :only => [ :edit, :update, :toggle, :destroy ]
21
+ before_filter :check_if_user_can_perform_action_on_resources
22
+
23
+ before_filter :set_order,
24
+ :only => [ :index ]
25
+ before_filter :set_fields,
26
+ :only => [ :index, :new, :edit, :create, :update, :show ]
27
+
28
+ ##
29
+ # This is the main index of the model. With filters, conditions
30
+ # and more.
31
+ #
32
+ # By default application can respond_to html, csv and xml, but you
33
+ # can add your formats.
34
+ #
35
+ def index
36
+ @conditions, @joins = @resource.build_conditions(params)
37
+ check_resource_ownerships if @resource.typus_options_for(:only_user_items)
38
+
39
+ respond_to do |format|
40
+ format.html { generate_html and select_template }
41
+ @resource.typus_export_formats.each { |f| format.send(f) { send("generate_#{f}") } }
42
+ end
43
+ end
44
+
45
+ def new
46
+ check_ownership_of_referal_item
47
+
48
+ item_params = params.dup
49
+ rejections = %w( controller action resource resource_id back_to selected )
50
+ item_params.delete_if { |k, v| rejections.include?(k) }
51
+
52
+ @item = @resource.new(item_params)
53
+
54
+ select_template
55
+ end
56
+
57
+ ##
58
+ # Create new items. There's an special case when we create an
59
+ # item from another item. In this case, after the item is
60
+ # created we also create the relationship between these items.
61
+ #
62
+ def create
63
+ @item = @resource.new(params[@object_name])
64
+
65
+ set_attributes_on_create
66
+
67
+ if @item.valid?
68
+ create_with_back_to and return if params[:back_to]
69
+ @item.save
70
+ redirect_on_success
71
+ else
72
+ select_template(:new)
73
+ end
74
+ end
75
+
76
+ def edit
77
+ select_template
78
+ end
79
+
80
+ def show
81
+ check_resource_ownership and return if @resource.typus_options_for(:only_user_items)
82
+ select_template
83
+ end
84
+
85
+ def update
86
+ if @item.update_attributes(params[@object_name])
87
+ set_attributes_on_update
88
+ reload_locales
89
+ redirect_on_success
90
+ else
91
+ select_template(:edit)
92
+ end
93
+ end
94
+
95
+ def destroy
96
+ @item.destroy
97
+ notice = _("%{model} successfully removed.", :model => @resource.model_name.human)
98
+ redirect_to set_path, :notice => notice
99
+ end
100
+
101
+ def toggle
102
+ @item.toggle(params[:field])
103
+ @item.save!
104
+
105
+ notice = _("%{model} %{attribute} changed.",
106
+ :model => @resource.model_name.human,
107
+ :attribute => params[:field].humanize.downcase)
108
+
109
+ redirect_to set_path, :notice => notice
110
+ end
111
+
112
+ ##
113
+ # Change item position. This only works if acts_as_list is
114
+ # installed. We can then move items:
115
+ #
116
+ # params[:go] = 'move_to_top'
117
+ #
118
+ # Available positions are move_to_top, move_higher, move_lower,
119
+ # move_to_bottom.
120
+ #
121
+ def position
122
+ @item.send(params[:go])
123
+ notice = _("Record moved %{to}.", :to => params[:go].gsub(/move_/, '').humanize.downcase)
124
+ redirect_to set_path, :notice => notice
125
+ end
126
+
127
+ ##
128
+ # Relate a model object to another, this action is used only by the
129
+ # has_and_belongs_to_many and has_many relationships.
130
+ #
131
+ def relate
132
+ resource_class = params[:related][:model].constantize
133
+ resource_tableized = params[:related][:model].tableize
134
+
135
+ if @item.send(resource_tableized) << resource_class.find(params[:related][:id])
136
+ flash[:notice] = _("%{model_a} related to %{model_b}",
137
+ :model_a => resource_class.model_name.human,
138
+ :model_b => @resource.model_name.human)
139
+ else
140
+ flash[:alert] = _("%{model_a} cannot be related to %{model_b}",
141
+ :model_a => resource_class.model_name.human,
142
+ :model_b => @resource.model_name.human)
143
+ end
144
+
145
+ redirect_to set_path
146
+ end
147
+
148
+ ##
149
+ # Remove relationship between models, this action never removes items!
150
+ #
151
+ def unrelate
152
+
153
+ resource_class = params[:resource].classify.constantize
154
+ resource_tableized = params[:resource].tableize
155
+ resource = resource_class.find(params[:resource_id])
156
+
157
+ # We consider that we are unrelating a has_many or has_and_belongs_to_many
158
+
159
+ macro = @resource.reflect_on_association(resource_class.table_name.to_sym).try(:macro)
160
+
161
+ case macro
162
+ # when :has_one
163
+ # attribute = resource_tableized.singularize
164
+ # saved_succesfully = @item.update_attribute attribute, nil
165
+ when :has_many
166
+ ##
167
+ # We have to verify we can unrelate. For example: A Category which
168
+ # has many posts and Post validates_presence_of Category should not
169
+ # be removed.
170
+ #
171
+ attribute = @resource.table_name.singularize
172
+ saved_succesfully = resource.update_attributes(attribute => nil)
173
+ when :has_and_belongs_to_many
174
+ attribute = resource_tableized
175
+ saved_succesfully = @item.send(attribute).delete(resource)
176
+ else
177
+ saved_succesfully = false
178
+ end
179
+
180
+ if saved_succesfully
181
+ flash[:notice] = _("%{model_a} unrelated from %{model_b}",
182
+ :model_a => resource_class.model_name.human,
183
+ :model_b => @resource.model_name.human)
184
+ else
185
+ flash[:alert] = _("%{model_a} cannot be unrelated from %{model_b}",
186
+ :model_a => resource_class.model_name.human,
187
+ :model_b => @resource.model_name.human)
188
+ end
189
+
190
+ redirect_to set_path
191
+
192
+ end
193
+
194
+ ##
195
+ # Remove file attachments.
196
+ #
197
+ def detach
198
+ message = if @item.update_attributes(params[:attachment] => nil)
199
+ "%{attachment} removed."
200
+ else
201
+ "%{attachment} can't be removed."
202
+ end
203
+
204
+ attachment = @resource.human_attribute_name(params[:attachment])
205
+ notice = _(message, :attachment => attachment)
206
+
207
+ redirect_to set_path, :notice => notice
208
+ end
209
+
210
+ private
211
+
212
+ def get_model
213
+ @resource = params[:controller].extract_class
214
+ @object_name = ActiveModel::Naming.singular(@resource)
215
+ end
216
+
217
+ ##
218
+ # Find model when performing an edit, update, destroy, relate,
219
+ # unrelate ...
220
+ #
221
+ def get_object
222
+ @item = @resource.find(params[:id])
223
+ end
224
+
225
+ def set_fields
226
+ mapping = case params[:action]
227
+ when "index" then :list
228
+ when "new", "edit", "create", "update" then :form
229
+ else params[:action]
230
+ end
231
+
232
+ @fields = @resource.typus_fields_for(mapping)
233
+ end
234
+
235
+ def set_order
236
+ params[:sort_order] ||= "desc"
237
+ @order = params[:order_by] ? "#{@resource.table_name}.#{params[:order_by]} #{params[:sort_order]}" : @resource.typus_order_by
238
+ end
239
+
240
+ def redirect_on_success
241
+ action = @resource.typus_options_for(:action_after_save)
242
+
243
+ case params[:action]
244
+ when "create"
245
+ path = { :action => action }
246
+ path.merge!(:id => @item.id) unless action.eql?("index")
247
+ notice = _("%{model} successfully created.", :model => @resource.model_name.human)
248
+ when "update"
249
+ path = case action
250
+ when "index"
251
+ params[:back_to] ? "#{params[:back_to]}##{@resource.to_resource}" : { :action => action }
252
+ else
253
+ { :action => action,
254
+ :id => @item.id,
255
+ :back_to => params[:back_to] }
256
+ end
257
+ notice = _("%{model} successfully updated.", :model => @resource.model_name.human)
258
+ end
259
+
260
+ redirect_to path, :notice => notice
261
+ end
262
+
263
+ ##
264
+ # When <tt>params[:back_to]</tt> is defined this action is used.
265
+ #
266
+ # - <tt>has_and_belongs_to_many</tt> relationships.
267
+ # - <tt>has_many</tt> relationships (polymorphic ones).
268
+ #
269
+ def create_with_back_to
270
+
271
+ if params[:resource] && params[:resource_id]
272
+ resource_class = params[:resource].classify.constantize
273
+ resource_id = params[:resource_id]
274
+ resource = resource_class.find(resource_id)
275
+ association = @resource.reflect_on_association(params[:resource].to_sym).macro rescue :polymorphic
276
+ else
277
+ association = :has_many
278
+ end
279
+
280
+ case association
281
+ when :belongs_to
282
+ @item.save
283
+ when :has_and_belongs_to_many
284
+ @item.save
285
+ @item.send(params[:resource]) << resource
286
+ when :has_many
287
+ @item.save
288
+ message = _("%{model} successfully created.", :model => @resource.model_name.human)
289
+ path = "#{params[:back_to]}?#{params[:selected]}=#{@item.id}"
290
+ when :polymorphic
291
+ resource.send(@item.class.to_resource).create(params[@object_name])
292
+ end
293
+
294
+ flash[:notice] = message || _("%{model_a} successfully assigned to %{model_b}.",
295
+ :model_a => @item.class.model_name.human,
296
+ :model_b => resource_class.model_name.human)
297
+
298
+ redirect_to path || params[:back_to]
299
+
300
+ end
301
+
302
+ def select_template(template = params[:action], resource = @resource.to_resource)
303
+ folder = (File.exist?("app/views/admin/#{resource}/#{template}.html.erb")) ? resource : 'resources'
304
+ render "admin/#{folder}/#{template}"
305
+ end
306
+
307
+ end
@@ -0,0 +1,38 @@
1
+ class Admin::SessionController < AdminController
2
+
3
+ skip_before_filter :reload_config_and_roles
4
+ skip_before_filter :set_preferences
5
+ skip_before_filter :authenticate
6
+
7
+ before_filter :create_an_account?, :except => [:destroy]
8
+
9
+ def new
10
+ end
11
+
12
+ def create
13
+ user = Typus.user_class.authenticate(params[:typus_user][:email], params[:typus_user][:password])
14
+
15
+ if user
16
+ session[:typus_user_id] = user.id
17
+ path = params[:back_to] || admin_dashboard_path
18
+ else
19
+ alert = _("The email and/or password you entered is invalid.")
20
+ path = new_admin_session_path(:back_to => params[:back_to])
21
+ end
22
+
23
+ redirect_to path, :alert => alert
24
+ end
25
+
26
+ def destroy
27
+ session[:typus_user_id] = nil
28
+ I18n.locale = I18n.default_locale
29
+ redirect_to :action => :new
30
+ end
31
+
32
+ private
33
+
34
+ def create_an_account?
35
+ redirect_to new_admin_account_path if Typus.user_class.count.zero?
36
+ end
37
+
38
+ end
@@ -0,0 +1,26 @@
1
+ require "typus/authentication"
2
+
3
+ class AdminController < ActionController::Base
4
+
5
+ unloadable
6
+
7
+ before_filter :reload_config_and_roles
8
+ before_filter :authenticate
9
+
10
+ def show
11
+ redirect_to admin_dashboard_path
12
+ end
13
+
14
+ protected
15
+
16
+ def reload_config_and_roles
17
+ Typus.reload! unless Rails.env.production?
18
+ end
19
+
20
+ include Typus::Authentication
21
+
22
+ def set_path
23
+ @back_to || request.referer || admin_dashboard_path
24
+ end
25
+
26
+ end
@@ -0,0 +1,38 @@
1
+ module Admin
2
+
3
+ module DashboardHelper
4
+
5
+ def applications
6
+ apps = {}
7
+
8
+ Typus.models.sort {|a,b| a.constantize.model_name.human <=> b.constantize.model_name.human}.each do |model|
9
+ # Get the application name.
10
+ app_name = model.constantize.typus_application
11
+ # Initialize the application if needed.
12
+ apps[app_name] = [] unless apps.keys.include?(app_name)
13
+ # Add model to the application only if the @current_user has permission.
14
+ apps[app_name] << model if @current_user.resources.include?(model)
15
+ end
16
+
17
+ render File.join(path, "applications"), :applications => apps.compact.sort
18
+ end
19
+
20
+ def resources
21
+ available = Typus.resources.map do |resource|
22
+ resource if @current_user.resources.include?(resource)
23
+ end.compact
24
+
25
+ return if available.empty?
26
+
27
+ render File.join(path, "resources"), :resources => available
28
+ end
29
+
30
+ private
31
+
32
+ def path
33
+ "admin/helpers/dashboard"
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -0,0 +1,81 @@
1
+ module Admin
2
+
3
+ module FiltersHelper
4
+
5
+ def build_filters(resource = @resource)
6
+
7
+ typus_filters = resource.typus_filters
8
+ return if typus_filters.empty?
9
+
10
+ current_request = request.env['QUERY_STRING'] || []
11
+
12
+ filters = typus_filters.map do |key, value|
13
+ filter, items, message = case value
14
+ when :boolean then boolean_filter(current_request, key)
15
+ when :string then string_filter(current_request, key)
16
+ when :date, :datetime then date_filter(current_request, key)
17
+ when :belongs_to then relationship_filter(current_request, key)
18
+ when :has_many, :has_and_belongs_to_many then
19
+ relationship_filter(current_request, key, true)
20
+ # when nil then
21
+ # Do nothing. This is ugly but for now it's ok.
22
+ else
23
+ string_filter(current_request, key)
24
+ end
25
+
26
+ { :filter => filter, :items => items, :message => message }
27
+
28
+ end
29
+
30
+ render "admin/helpers/filters/filters", :filters => filters
31
+ end
32
+
33
+ def relationship_filter(request, filter, habtm = false)
34
+ att_assoc = @resource.reflect_on_association(filter.to_sym)
35
+ class_name = att_assoc.options[:class_name] || ((habtm) ? filter.classify : filter.capitalize.camelize)
36
+ model = class_name.constantize
37
+ related_fk = (habtm) ? filter : att_assoc.primary_key_name
38
+
39
+ params_without_filter = params.dup
40
+ %w(controller action page).each { |p| params_without_filter.delete(p) }
41
+ params_without_filter.delete(related_fk)
42
+
43
+ values = model.all(:order => model.typus_order_by)
44
+ values_labelized = values.map { |v| v.to_label }
45
+ items = values.map(&:id).to_hash_with(values_labelized)
46
+
47
+ message = _("View all %{attribute}", :attribute => @resource.human_attribute_name(filter).downcase.pluralize)
48
+
49
+ return filter, items, message
50
+ end
51
+
52
+ def date_filter(request, filter)
53
+ values = %w(today last_few_days last_7_days last_30_days)
54
+ values_humanized = values.map { |v| _(v.humanize) }
55
+ items = values.to_hash_with(values_humanized)
56
+ message = _("Show all dates")
57
+ return filter, items, message
58
+ end
59
+
60
+ def boolean_filter(request, filter)
61
+ items = @resource.typus_boolean(filter)
62
+ message = _("Show by %{attribute}", :attribute => @resource.human_attribute_name(filter).downcase)
63
+ return filter, items, message
64
+ end
65
+
66
+ def string_filter(request, filter)
67
+ values = @resource::const_get(filter.to_s.upcase)
68
+ items = values.kind_of?(Hash) ? values : values.to_hash_with(values)
69
+ message = _("Show by %{attribute}", :attribute => @resource.human_attribute_name(filter).downcase)
70
+ return filter, items, message
71
+ end
72
+
73
+ def remove_filter_link(filter = request.env['QUERY_STRING'])
74
+ return unless filter && !filter.blank?
75
+ message = params.compact.include?(:search) ? "search" : "filter"
76
+ link_to _("Remove #{message}")
77
+ end
78
+
79
+ end
80
+
81
+ end