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
@@ -4,47 +4,74 @@ module Typus
4
4
 
5
5
  protected
6
6
 
7
- # Require login checks if the user is logged on Typus, otherwise
8
- # is sent to the sign in page with a :back_to param to return where
7
+ #--
8
+ # Require login checks if the user is logged on Typus, otherwise
9
+ # is sent to the sign in page with a :back_to param to return where
9
10
  # she tried to go.
10
- def require_login
11
+ #++
12
+ def authenticate
13
+ case Typus.authentication
14
+ when :none
15
+ authenticate_via_none
16
+ when :http_basic
17
+ authenticate_via_http_basic
18
+ when :session
19
+ authenticate_via_session
20
+ end
21
+ end
22
+
23
+ def authenticate_via_none
24
+ @current_user = Admin::FakeUser.new
25
+ end
11
26
 
12
- # Uncomment the following line for demo purpouses.
13
- # session[:typus_user_id] = Typus.user_class.find(:first)
27
+ def authenticate_via_http_basic
28
+ @current_user = Admin::FakeUser.new
29
+ authenticate_or_request_with_http_basic(Typus.admin_title) do |user_name, password|
30
+ user_name == Typus.username && password == Typus.password
31
+ end
32
+ end
14
33
 
34
+ def authenticate_via_session
15
35
  if session[:typus_user_id]
16
- set_current_user
36
+ current_user
17
37
  else
18
- back_to = (request.env['REQUEST_URI'] == '/admin') ? nil : request.env['REQUEST_URI']
19
- redirect_to admin_sign_in_path(:back_to => back_to)
38
+ back_to = request.env['PATH_INFO'] unless [admin_dashboard_path, admin_path].include?(request.env['PATH_INFO'])
39
+ redirect_to new_admin_session_path(:back_to => back_to)
20
40
  end
21
-
22
41
  end
23
42
 
24
- # Return the current user. If role does not longer exist on the
43
+ #--
44
+ # Return the current user. If role does not longer exist on the
25
45
  # system @current_user will be signed out from Typus.
26
- def set_current_user
46
+ #++
47
+ def current_user
27
48
 
28
49
  @current_user = Typus.user_class.find(session[:typus_user_id])
29
50
 
30
- unless Typus::Configuration.roles.keys.include?(@current_user.role)
51
+ unless Typus::Configuration.roles.has_key?(@current_user.role)
31
52
  raise _("Role does no longer exists.")
32
53
  end
33
54
 
34
55
  unless @current_user.status
35
- back_to = (request.env['REQUEST_URI'] == '/admin') ? nil : request.env['REQUEST_URI']
56
+ back_to = (request.env['REQUEST_URI'] == admin_dashboard_path) ? nil : request.env['REQUEST_URI']
36
57
  raise _("Typus user has been disabled.")
37
58
  end
38
59
 
60
+ I18n.locale = @current_user.preferences[:locale]
61
+
39
62
  rescue Exception => error
40
63
  flash[:notice] = error.message
41
64
  session[:typus_user_id] = nil
42
- redirect_to admin_sign_in_path(:back_to => back_to)
65
+ redirect_to new_admin_session_path(:back_to => back_to)
43
66
  end
44
67
 
68
+ #--
45
69
  # Action is available on: edit, update, toggle and destroy
70
+ #++
46
71
  def check_if_user_can_perform_action_on_user
47
72
 
73
+ return unless Typus.authentication.eql?(:session)
74
+
48
75
  return unless @item.kind_of?(Typus.user_class)
49
76
 
50
77
  current_user = (@current_user == @item)
@@ -53,14 +80,14 @@ module Typus
53
80
  when 'edit'
54
81
 
55
82
  # Only admin and owner of Typus User can edit.
56
- if !@current_user.is_root? && !current_user
83
+ if @current_user.is_not_root? && !current_user
57
84
  _("As you're not the admin or the owner of this record you cannot edit it.")
58
85
  end
59
86
 
60
87
  when 'update'
61
88
 
62
89
  # current_user cannot change her role.
63
- if current_user && !(@item.role == params[:item][:role])
90
+ if current_user && !(@item.role == params[@object_name][:role])
64
91
  _("You can't change your role.")
65
92
  end
66
93
 
@@ -69,7 +96,7 @@ module Typus
69
96
  # Only admin can toggle typus user status, but not herself.
70
97
  if @current_user.is_root? && current_user
71
98
  _("You can't toggle your status.")
72
- elsif !@current_user.is_root?
99
+ elsif @current_user.is_not_root?
73
100
  _("You're not allowed to toggle status.")
74
101
  end
75
102
 
@@ -78,7 +105,7 @@ module Typus
78
105
  # Admin can remove anything except herself.
79
106
  if @current_user.is_root? && current_user
80
107
  _("You can't remove yourself.")
81
- elsif !@current_user.is_root?
108
+ elsif @current_user.is_not_root?
82
109
  _("You're not allowed to remove Typus Users.")
83
110
  end
84
111
 
@@ -86,50 +113,129 @@ module Typus
86
113
 
87
114
  if message
88
115
  flash[:notice] = message
89
- redirect_to request.referer || admin_dashboard_path
116
+ redirect_to set_path
90
117
  end
91
118
 
92
119
  end
93
120
 
121
+ #--
94
122
  # This method checks if the user can perform the requested action.
95
123
  # It works on models, so its available on the admin_controller.
96
- def check_if_user_can_perform_action_on_resource
124
+ #++
125
+ def check_if_user_can_perform_action_on_resources
126
+
127
+ return unless Typus.authentication.eql?(:session)
97
128
 
98
129
  message = case params[:action]
99
130
  when 'index', 'show'
100
- _("{{current_user_role}} can't display items.",
101
- :current_user_role => @current_user.role.capitalize)
131
+ "%{current_user_role} can't display items."
102
132
  when 'destroy'
103
- _("{{current_user_role}} can't delete this item.",
104
- :current_user_role => @current_user.role.capitalize)
133
+ "%{current_user_role} can't delete this item."
105
134
  else
106
- _("{{current_user_role}} can't perform action. ({{action}})",
107
- :current_user_role => @current_user.role.capitalize,
108
- :action => params[:action])
135
+ "%{current_user_role} can't perform action. (%{action})"
109
136
  end
110
137
 
111
- unless @current_user.can_perform?(@resource[:class], params[:action])
138
+ message = _(message,
139
+ :current_user_role => @current_user.role.capitalize,
140
+ :action => params[:action])
141
+
142
+ unless @current_user.can?(params[:action], @resource)
112
143
  flash[:notice] = message
113
- redirect_to request.referer || admin_dashboard_path
144
+ redirect_to set_path
114
145
  end
115
146
 
116
147
  end
117
148
 
149
+ #--
118
150
  # This method checks if the user can perform the requested action.
119
- # It works on resources, which are not models, so its available on
120
- # the typus_controller.
121
- def check_if_user_can_perform_action_on_resource_without_model
122
- controller = params[:controller].split('/').last
151
+ # It works on a resource: git, memcached, syslog ...
152
+ #++
153
+ def check_if_user_can_perform_action_on_resource
154
+ return unless Typus.authentication.eql?(:session)
155
+
156
+ controller = params[:controller].extract_resource
123
157
  action = params[:action]
124
- unless @current_user.can_perform?(controller.camelize, action, { :special => true })
125
- flash[:notice] = _("{{current_user_role}} can't go to {{action}} on {{controller}}.",
126
- :current_user_role => @current_user.role.capitalize,
127
- :action => action,
128
- :controller => controller.humanize.downcase)
129
- redirect_to request.referer || admin_dashboard_path
158
+ unless @current_user.can?(action, controller.camelize, { :special => true })
159
+ render :text => "Not allowed!", :status => :unprocessable_entity
160
+ end
161
+ end
162
+
163
+ #--
164
+ # If item is owned by another user, we only can perform a
165
+ # show action on the item. Updated item is also blocked.
166
+ #
167
+ # before_filter :check_resource_ownership, :only => [ :edit, :update, :destroy,
168
+ # :toggle, :position,
169
+ # :relate, :unrelate ]
170
+ #++
171
+ def check_resource_ownership
172
+
173
+ return unless Typus.authentication.eql?(:session)
174
+
175
+ # By-pass if current_user is root.
176
+ return if @current_user.is_root?
177
+
178
+ condition_typus_users = @item.respond_to?(Typus.relationship) && !@item.send(Typus.relationship).include?(@current_user)
179
+ condition_typus_user_id = @item.respond_to?(Typus.user_fk) && !@item.owned_by?(@current_user)
180
+
181
+ if condition_typus_users || condition_typus_user_id
182
+ alert = _("You don't have permission to access this item.")
183
+ redirect_to set_path, :alert => alert
184
+ end
185
+
186
+ end
187
+
188
+ def check_resource_ownerships
189
+
190
+ return unless Typus.authentication.eql?(:session)
191
+
192
+ # By-pass if current_user is root.
193
+ return if @current_user.is_root?
194
+
195
+ # Show only related items it @resource has a foreign_key (Typus.user_fk)
196
+ # related to the logged user.
197
+ if @resource.typus_user_id?
198
+ condition = { Typus.user_fk => @current_user }
199
+ @conditions = @resource.merge_conditions(@conditions, condition)
200
+ end
201
+
202
+ end
203
+
204
+ def check_ownership_of_referal_item
205
+ return unless Typus.authentication.eql?(:session)
206
+
207
+ return unless params[:resource] && params[:resource_id]
208
+ klass = params[:resource].classify.constantize
209
+ return if !klass.typus_user_id?
210
+ item = klass.find(params[:resource_id])
211
+ raise "You're not owner of this record." unless item.owned_by?(@current_user) || @current_user.is_root?
212
+ end
213
+
214
+ def set_attributes_on_create
215
+ return unless Typus.authentication.eql?(:session)
216
+ if @resource.typus_user_id?
217
+ @item.attributes = { Typus.user_fk => @current_user.id }
218
+ end
219
+ end
220
+
221
+ def set_attributes_on_update
222
+ return unless Typus.authentication.eql?(:session)
223
+ if @resource.typus_user_id? && @current_user.is_not_root?
224
+ @item.update_attributes(Typus.user_fk => @current_user.id)
225
+ end
226
+ end
227
+
228
+ #--
229
+ # Reload @current_user when updating to see flash message in the
230
+ # correct locale.
231
+ #++
232
+ def reload_locales
233
+ return unless Typus.authentication.eql?(:session)
234
+ if @resource.eql?(Typus.user_class)
235
+ I18n.locale = @current_user.reload.preferences[:locale]
130
236
  end
131
237
  end
132
238
 
133
239
  end
134
240
 
135
- end
241
+ end
@@ -2,73 +2,39 @@ module Typus
2
2
 
3
3
  module Configuration
4
4
 
5
- # Default options which can be overwritten from the initializer.
6
- typus_options = { :app_name => 'Typus',
7
- :config_folder => 'config/typus',
8
- :default_locale => :en,
9
- :email => 'admin@example.com',
10
- :file_preview => :typus_preview,
11
- :file_thumbnail => :typus_thumbnail,
12
- :recover_password => false,
13
- :relationship => 'typus_users',
14
- :root => 'admin',
15
- :ssl => false,
16
- :user_class_name => 'TypusUser',
17
- :user_fk => 'typus_user_id' }
18
-
19
- # Default options which can be overwritten from the initializer.
20
- model_options = { :default_action_on_item => 'edit',
21
- :end_year => nil,
22
- :form_rows => 15,
23
- :index_after_save => false,
24
- :minute_step => 5,
25
- :nil => 'nil',
26
- :on_header => false,
27
- :only_user_items => false,
28
- :per_page => 15,
29
- :sidebar_selector => 5,
30
- :start_year => nil,
31
- :tiny_mce => { :theme => 'advanced',
32
- :theme_advanced_toolbar_location => 'top',
33
- :theme_advanced_toolbar_align => 'left' },
34
- :toggle => true }
35
-
36
- @@options = typus_options.merge(model_options)
37
-
38
- mattr_accessor :options
39
-
40
- # Read Typus Configuration files placed on <tt>config/typus/**/*.yml</tt>.
5
+ # Read configuration from <tt>config/typus/**/*.yml</tt>.
41
6
  def self.config!
42
-
43
- files = Dir["#{Rails.root}/#{options[:config_folder]}/**/*.yml"].sort
44
- files = files.delete_if { |x| x.include?('_roles.yml') }
7
+ application = Dir[File.join(Typus.config_folder, "**", "*.yml").to_s]
8
+ plugins = Dir[File.join("vendor", "plugins", "*", "config", "typus", "*.yml").to_s]
9
+ files = (application + plugins).reject { |f| f.include?("_roles.yml") }
45
10
 
46
11
  @@config = {}
47
12
  files.each do |file|
48
- data = YAML.load_file(file)
49
- @@config = @@config.merge(data) if data
13
+ if data = YAML::load_file(file)
14
+ @@config.merge!(data)
15
+ end
50
16
  end
51
17
 
52
18
  return @@config
53
-
54
19
  end
55
20
 
56
21
  mattr_accessor :config
57
22
 
58
- # Read Typus Roles from configuration files placed on <tt>config/typus/**/*_roles.yml</tt>.
23
+ # Read roles from files <tt>config/typus/**/*_roles.yml</tt>.
59
24
  def self.roles!
25
+ application = Dir[File.join(Typus.config_folder, "**", "*_roles.yml").to_s]
26
+ plugins = Dir[File.join("vendor", "plugins", "*", "config", "typus", "*_roles.yml").to_s]
27
+ files = (application + plugins).sort
60
28
 
61
- files = Dir["#{Rails.root}/#{options[:config_folder]}/**/*_roles.yml"].sort
62
-
63
- @@roles = { options[:root] => {} }
29
+ @@roles = { Typus.master_role => {} }
64
30
 
65
31
  files.each do |file|
66
- data = YAML.load_file(file)
32
+ data = YAML::load_file(file)
67
33
  next unless data
68
34
  data.each do |key, value|
69
35
  next unless value
70
36
  begin
71
- @@roles[key] = @@roles[key].merge(value)
37
+ @@roles[key].merge!(value)
72
38
  rescue
73
39
  @@roles[key] = value
74
40
  end
@@ -76,7 +42,6 @@ module Typus
76
42
  end
77
43
 
78
44
  return @@roles.compact
79
-
80
45
  end
81
46
 
82
47
  mattr_accessor :roles
@@ -0,0 +1,6 @@
1
+ module Typus
2
+
3
+ class Engine < Rails::Engine
4
+ end
5
+
6
+ end
data/lib/typus/format.rb CHANGED
@@ -6,8 +6,8 @@ module Typus
6
6
 
7
7
  def generate_html
8
8
 
9
- items_count = @resource[:class].count(:joins => @joins, :conditions => @conditions)
10
- items_per_page = @resource[:class].typus_options_for(:per_page).to_i
9
+ items_count = @resource.count(:joins => @joins, :conditions => @conditions)
10
+ items_per_page = @resource.typus_options_for(:per_page)
11
11
 
12
12
  @pager = ::Paginator.new(items_count, items_per_page) do |offset, per_page|
13
13
  data(:limit => per_page, :offset => offset)
@@ -15,13 +15,16 @@ module Typus
15
15
 
16
16
  @items = @pager.page(params[:page])
17
17
 
18
- select_template :index
19
-
20
18
  end
21
19
 
20
+ #--
21
+ # TODO: Find in batches only works properly if it's used on
22
+ # models, not controllers, so in this action does nothing.
23
+ # We should find a way to be able to process data.
24
+ #++
22
25
  def generate_csv
23
26
 
24
- fields = @resource[:class].typus_fields_for(:csv).collect { |i| i.first }
27
+ fields = @resource.typus_fields_for(:csv)
25
28
 
26
29
  require 'csv'
27
30
  if CSV.const_defined?(:Reader)
@@ -36,30 +39,50 @@ module Typus
36
39
  csv = CSV
37
40
  end
38
41
 
39
- csv_string = csv.generate do |c|
40
- c << fields.map { |f| _(f.humanize) }
41
- data.each { |i| c << fields.map { |f| i.send(f) } }
42
+ filename = Rails.root.join("tmp", "export-#{@resource.to_resource}-#{Time.now.utc.to_s(:number)}.csv")
43
+
44
+ options = { :conditions => @conditions, :batch_size => 1000 }
45
+
46
+ csv.open(filename, 'w', :col_sep => ';') do |csv|
47
+ csv << fields.keys
48
+ @resource.find_in_batches(options) do |records|
49
+ records.each do |record|
50
+ csv << fields.map do |key, value|
51
+ case value
52
+ when :transversal
53
+ a, b = key.split(".")
54
+ record.send(a).send(b)
55
+ when :belongs_to
56
+ record.send(key).to_label
57
+ else
58
+ record.send(key)
59
+ end
60
+ end
61
+ end
62
+ end
42
63
  end
43
64
 
44
- filename = "#{Time.now.strftime("%Y%m%d%H%M%S")}_#{@resource[:self]}.csv"
45
- send_data(csv_string,
46
- :type => 'text/csv; charset=utf-8; header=present',
47
- :filename => filename)
65
+ send_file filename
48
66
 
49
67
  end
50
68
 
51
- def generate_xml
52
- fields = @resource[:class].typus_fields_for(:xml).collect { |i| i.first }
53
- render :xml => data.to_xml(:only => fields)
69
+ def generate_json; export(:json); end
70
+ def generate_xml; export(:xml); end
71
+
72
+ def export(format)
73
+ fields = @resource.typus_fields_for(format).collect { |i| i.first }
74
+ methods = fields - @resource.column_names
75
+ except = @resource.column_names - fields
76
+ render format => data.send("to_#{format}", :methods => methods, :except => except)
54
77
  end
55
78
 
56
79
  def data(*args)
57
- eager_loading = @resource[:class].reflect_on_all_associations(:belongs_to).map { |i| i.name }
80
+ eager_loading = @resource.reflect_on_all_associations(:belongs_to).map { |i| i.name }
58
81
  options = { :joins => @joins, :conditions => @conditions, :order => @order, :include => eager_loading }
59
82
  options.merge!(args.extract_options!)
60
- @resource[:class].find(:all, options)
83
+ @resource.all(options)
61
84
  end
62
85
 
63
86
  end
64
87
 
65
- end
88
+ end