typus 3.0.6 → 3.0.7

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 (295) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +9 -5
  4. data/Rakefile +34 -21
  5. data/app/controllers/admin/base_controller.rb +0 -4
  6. data/app/controllers/admin/resources_controller.rb +77 -213
  7. data/app/controllers/admin/session_controller.rb +1 -1
  8. data/app/helpers/admin/base_helper.rb +4 -4
  9. data/app/helpers/admin/dashboard_helper.rb +1 -3
  10. data/app/helpers/admin/display_helper.rb +49 -0
  11. data/app/helpers/admin/file_preview_helper.rb +10 -12
  12. data/app/helpers/admin/filters_helper.rb +1 -1
  13. data/app/helpers/admin/form_helper.rb +2 -13
  14. data/app/helpers/admin/list_helper.rb +14 -3
  15. data/app/helpers/admin/relationships_helper.rb +79 -62
  16. data/app/helpers/admin/resources_helper.rb +17 -16
  17. data/app/helpers/admin/search_helper.rb +1 -1
  18. data/app/helpers/admin/sidebar_helper.rb +1 -2
  19. data/app/helpers/admin/table_helper.rb +9 -4
  20. data/app/views/admin/helpers/_file_preview.html.erb +1 -1
  21. data/app/views/admin/helpers/base/_apps.html.erb +23 -0
  22. data/app/views/admin/helpers/{_flash_message.html.erb → base/_flash_message.html.erb} +0 -0
  23. data/app/views/admin/helpers/{_header.html.erb → base/_header.html.erb} +0 -0
  24. data/app/views/admin/helpers/{_login_info.html.erb → base/_login_info.html.erb} +0 -0
  25. data/app/views/admin/helpers/resources/_display_link_to_previous.html.erb +1 -1
  26. data/app/views/admin/resources/show.html.erb +4 -27
  27. data/app/views/admin/templates/_belongs_to_with_autocomplete.html.erb +11 -0
  28. data/app/views/admin/templates/_has_n.html.erb +1 -1
  29. data/app/views/admin/templates/_has_one.html.erb +3 -3
  30. data/app/views/admin/templates/_relate_form.html.erb +1 -1
  31. data/app/views/admin/templates/_relate_form_with_autocomplete.html.erb +24 -0
  32. data/app/views/layouts/admin/base.html.erb +15 -9
  33. data/app/views/layouts/admin/headless.html.erb +44 -0
  34. data/app/views/layouts/admin/session.html.erb +3 -2
  35. data/doc/hudson_setup.md +19 -0
  36. data/lib/generators/typus/assets_generator.rb +0 -4
  37. data/lib/generators/typus/config_generator.rb +107 -0
  38. data/lib/generators/typus/controller_generator.rb +0 -4
  39. data/lib/generators/typus/initializers_generator.rb +22 -0
  40. data/lib/generators/typus/migration_generator.rb +0 -4
  41. data/lib/generators/typus/typus_generator.rb +8 -101
  42. data/lib/generators/typus/views_generator.rb +0 -4
  43. data/lib/support/active_record.rb +8 -2
  44. data/lib/support/fake_user.rb +2 -0
  45. data/lib/support/hash.rb +1 -1
  46. data/lib/support/string.rb +3 -3
  47. data/lib/tasks/typus.rake +1 -1
  48. data/lib/typus.rb +15 -6
  49. data/lib/typus/controller/actions.rb +69 -0
  50. data/lib/typus/controller/associations.rb +82 -0
  51. data/lib/typus/controller/autocomplete.rb +16 -0
  52. data/lib/typus/controller/filters.rb +24 -0
  53. data/lib/typus/controller/format.rb +70 -0
  54. data/lib/typus/orm/active_record.rb +9 -240
  55. data/lib/typus/orm/active_record/class_methods.rb +227 -0
  56. data/lib/typus/orm/active_record/instance_methods.rb +13 -0
  57. data/lib/typus/orm/active_record/search.rb +17 -5
  58. data/lib/typus/orm/active_record/user.rb +157 -0
  59. data/lib/typus/regex.rb +11 -0
  60. data/lib/typus/version.rb +1 -1
  61. data/test/app/controllers/admin/account_controller_test.rb +104 -0
  62. data/test/app/controllers/admin/assets_controller_test.rb +153 -0
  63. data/test/app/controllers/admin/base_controller_test.rb +41 -0
  64. data/test/app/controllers/admin/birds_controller_test.rb +42 -0
  65. data/test/app/controllers/admin/cases_controller_test.rb +21 -0
  66. data/test/app/controllers/admin/categories_controller_test.rb +141 -0
  67. data/test/app/controllers/admin/comments_controller_test.rb +79 -0
  68. data/test/app/controllers/admin/dashboard_controller_test.rb +162 -0
  69. data/test/app/controllers/admin/image_holders_controller_test.rb +75 -0
  70. data/test/app/controllers/admin/invoices_controller_test.rb +78 -0
  71. data/test/app/controllers/admin/orders_controller_test.rb +18 -0
  72. data/test/app/controllers/admin/pages_controller_test.rb +37 -0
  73. data/test/app/controllers/admin/posts_controller_test.rb +745 -0
  74. data/test/app/controllers/admin/projects_controller_test.rb +52 -0
  75. data/test/app/controllers/admin/session_controller_test.rb +92 -0
  76. data/test/app/controllers/admin/status_controller_test.rb +54 -0
  77. data/test/app/controllers/admin/typus_users_controller_test.rb +160 -0
  78. data/test/app/controllers/admin/users_controller_test.rb +106 -0
  79. data/test/app/helpers/admin/base_helper_test.rb +83 -0
  80. data/test/app/helpers/admin/dashboard_helper_test.rb +32 -0
  81. data/test/app/helpers/admin/file_preview_helper_test.rb +82 -0
  82. data/test/app/helpers/admin/filters_helper_test.rb +161 -0
  83. data/test/app/helpers/admin/form_helper_test.rb +126 -0
  84. data/test/app/helpers/admin/list_helper_test.rb +59 -0
  85. data/test/app/helpers/admin/relationships_helper_test.rb +19 -0
  86. data/test/app/helpers/admin/resources_helper_test.rb +46 -0
  87. data/test/app/helpers/admin/search_helper_test.rb +60 -0
  88. data/test/app/helpers/admin/sidebar_helper_test.rb +34 -0
  89. data/test/app/helpers/admin/table_helper_test.rb +215 -0
  90. data/test/app/mailers/admin/mailer_test.rb +32 -0
  91. data/test/app/models/typus_user_roles_test.rb +124 -0
  92. data/test/app/models/typus_user_test.rb +194 -0
  93. data/test/config/routes_test.rb +29 -0
  94. data/test/factories.rb +111 -0
  95. data/test/fixtures/config/broken/application.yml +68 -0
  96. data/test/fixtures/config/broken/application_roles.yml +20 -0
  97. data/test/fixtures/config/broken/empty.yml +0 -0
  98. data/test/fixtures/config/broken/empty_roles.yml +0 -0
  99. data/test/fixtures/config/broken/undefined.yml +3 -0
  100. data/test/fixtures/config/broken/undefined_roles.yml +6 -0
  101. data/test/fixtures/config/default/typus.yml +13 -0
  102. data/test/fixtures/config/default/typus_roles.yml +2 -0
  103. data/test/fixtures/config/empty/empty_01.yml +0 -0
  104. data/test/fixtures/config/empty/empty_01_roles.yml +0 -0
  105. data/test/fixtures/config/empty/empty_02.yml +0 -0
  106. data/test/fixtures/config/empty/empty_02_roles.yml +0 -0
  107. data/test/fixtures/config/locales/es.yml +10 -0
  108. data/test/fixtures/config/namespaced/application.yml +5 -0
  109. data/test/fixtures/config/namespaced/application_roles.yml +2 -0
  110. data/test/fixtures/config/ordered/001_roles.yml +2 -0
  111. data/test/fixtures/config/ordered/002_roles.yml +2 -0
  112. data/test/fixtures/config/unordered/app_one_roles.yml +2 -0
  113. data/test/fixtures/config/unordered/app_two_roles.yml +2 -0
  114. data/test/fixtures/rails_app/.gitignore +4 -0
  115. data/test/fixtures/rails_app/Capfile +6 -0
  116. data/test/fixtures/rails_app/README +256 -0
  117. data/test/fixtures/rails_app/Rakefile +7 -0
  118. data/test/fixtures/rails_app/app/controllers/admin/animals_controller.rb +2 -0
  119. data/test/fixtures/rails_app/app/controllers/admin/articles_controller.rb +2 -0
  120. data/test/fixtures/rails_app/app/controllers/admin/assets_controller.rb +51 -0
  121. data/test/fixtures/rails_app/app/controllers/admin/birds_controller.rb +2 -0
  122. data/test/fixtures/rails_app/app/controllers/admin/cases_controller.rb +2 -0
  123. data/test/fixtures/rails_app/app/controllers/admin/categories_controller.rb +2 -0
  124. data/test/fixtures/rails_app/app/controllers/admin/comments_controller.rb +2 -0
  125. data/test/fixtures/rails_app/app/controllers/admin/dogs_controller.rb +2 -0
  126. data/test/fixtures/rails_app/app/controllers/admin/entries_controller.rb +2 -0
  127. data/test/fixtures/rails_app/app/controllers/admin/image_holders_controller.rb +2 -0
  128. data/test/fixtures/rails_app/app/controllers/admin/invoices_controller.rb +2 -0
  129. data/test/fixtures/rails_app/app/controllers/admin/orders_controller.rb +2 -0
  130. data/test/fixtures/rails_app/app/controllers/admin/pages_controller.rb +7 -0
  131. data/test/fixtures/rails_app/app/controllers/admin/posts_controller.rb +2 -0
  132. data/test/fixtures/rails_app/app/controllers/admin/project_collaborators_controller.rb +2 -0
  133. data/test/fixtures/rails_app/app/controllers/admin/projects_controller.rb +2 -0
  134. data/test/fixtures/rails_app/app/controllers/admin/status_controller.rb +2 -0
  135. data/test/fixtures/rails_app/app/controllers/admin/typus_users_controller.rb +2 -0
  136. data/test/fixtures/rails_app/app/controllers/admin/users_controller.rb +2 -0
  137. data/test/fixtures/rails_app/app/controllers/admin/views_controller.rb +2 -0
  138. data/test/fixtures/rails_app/app/controllers/admin/watch_dog_controller.rb +2 -0
  139. data/test/fixtures/rails_app/app/controllers/application_controller.rb +3 -0
  140. data/test/fixtures/rails_app/app/helpers/application_helper.rb +2 -0
  141. data/test/fixtures/rails_app/app/helpers/form_helper.rb +3 -0
  142. data/test/fixtures/rails_app/app/models/animal.rb +21 -0
  143. data/test/fixtures/rails_app/app/models/article.rb +10 -0
  144. data/test/fixtures/rails_app/app/models/asset.rb +39 -0
  145. data/test/fixtures/rails_app/app/models/bird.rb +2 -0
  146. data/test/fixtures/rails_app/app/models/case.rb +2 -0
  147. data/test/fixtures/rails_app/app/models/category.rb +31 -0
  148. data/test/fixtures/rails_app/app/models/comment.rb +17 -0
  149. data/test/fixtures/rails_app/app/models/delayed/task.rb +5 -0
  150. data/test/fixtures/rails_app/app/models/dog.rb +2 -0
  151. data/test/fixtures/rails_app/app/models/entry.rb +23 -0
  152. data/test/fixtures/rails_app/app/models/image_holder.rb +21 -0
  153. data/test/fixtures/rails_app/app/models/invoice.rb +10 -0
  154. data/test/fixtures/rails_app/app/models/order.rb +9 -0
  155. data/test/fixtures/rails_app/app/models/page.rb +24 -0
  156. data/test/fixtures/rails_app/app/models/post.rb +32 -0
  157. data/test/fixtures/rails_app/app/models/project.rb +17 -0
  158. data/test/fixtures/rails_app/app/models/project_collaborator.rb +16 -0
  159. data/test/fixtures/rails_app/app/models/typus_user.rb +22 -0
  160. data/test/fixtures/rails_app/app/models/user.rb +10 -0
  161. data/test/fixtures/rails_app/app/models/view.rb +17 -0
  162. data/test/fixtures/rails_app/app/views/admin/assets/_index.html.erb +3 -0
  163. data/test/fixtures/rails_app/app/views/admin/cases/_index.html.erb +3 -0
  164. data/test/fixtures/rails_app/app/views/admin/categories/_index.html.erb +3 -0
  165. data/test/fixtures/rails_app/app/views/admin/dashboard/_sidebar.html.erb +11 -0
  166. data/test/fixtures/rails_app/app/views/admin/entries/_index.html.erb +3 -0
  167. data/test/fixtures/rails_app/app/views/admin/pages/_index.html.erb +3 -0
  168. data/test/fixtures/rails_app/app/views/admin/posts/_edit.html.erb +1 -0
  169. data/test/fixtures/rails_app/app/views/admin/posts/_index.html.erb +5 -0
  170. data/test/fixtures/rails_app/app/views/admin/posts/_new.html.erb +1 -0
  171. data/test/fixtures/rails_app/app/views/admin/posts/_show.html.erb +1 -0
  172. data/test/fixtures/rails_app/app/views/admin/resources/_sidebar.html.erb +1 -0
  173. data/test/fixtures/rails_app/app/views/admin/status/index.html.erb +9 -0
  174. data/test/fixtures/rails_app/app/views/admin/templates/_datepicker.html.erb +1 -0
  175. data/test/fixtures/rails_app/app/views/admin/watch_dog/index.html.erb +9 -0
  176. data/test/fixtures/rails_app/app/views/layouts/admin/headless.html.erb +38 -0
  177. data/test/fixtures/rails_app/config.ru +4 -0
  178. data/test/fixtures/rails_app/config/application.rb +44 -0
  179. data/test/fixtures/rails_app/config/boot.rb +13 -0
  180. data/test/fixtures/rails_app/config/database.yml +34 -0
  181. data/test/fixtures/rails_app/config/deploy.rb +32 -0
  182. data/test/fixtures/rails_app/config/environment.rb +5 -0
  183. data/test/fixtures/rails_app/config/environments/development.rb +32 -0
  184. data/test/fixtures/rails_app/config/environments/production.rb +54 -0
  185. data/test/fixtures/rails_app/config/environments/test.rb +40 -0
  186. data/test/fixtures/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  187. data/test/fixtures/rails_app/config/initializers/dragonfly.rb +1 -0
  188. data/test/fixtures/rails_app/config/initializers/inflections.rb +12 -0
  189. data/test/fixtures/rails_app/config/initializers/mime_types.rb +5 -0
  190. data/test/fixtures/rails_app/config/initializers/secret_token.rb +7 -0
  191. data/test/fixtures/rails_app/config/initializers/session_store.rb +8 -0
  192. data/test/fixtures/rails_app/config/initializers/typus.rb +5 -0
  193. data/test/fixtures/rails_app/config/initializers/typus_resources.rb +27 -0
  194. data/test/fixtures/rails_app/config/locales/en.yml +5 -0
  195. data/test/fixtures/rails_app/config/routes.rb +61 -0
  196. data/test/fixtures/rails_app/config/typus/README +68 -0
  197. data/test/fixtures/rails_app/config/typus/crud_basic.yml +10 -0
  198. data/test/fixtures/rails_app/config/typus/crud_basic_roles.yml +2 -0
  199. data/test/fixtures/rails_app/config/typus/crud_extended.yml +64 -0
  200. data/test/fixtures/rails_app/config/typus/crud_extended_roles.yml +18 -0
  201. data/test/fixtures/rails_app/config/typus/has_many.yml +0 -0
  202. data/test/fixtures/rails_app/config/typus/has_many_roles.yml +0 -0
  203. data/test/fixtures/rails_app/config/typus/has_many_through.yml +23 -0
  204. data/test/fixtures/rails_app/config/typus/has_many_through_roles.yml +4 -0
  205. data/test/fixtures/rails_app/config/typus/has_one.yml +12 -0
  206. data/test/fixtures/rails_app/config/typus/has_one_roles.yml +3 -0
  207. data/test/fixtures/rails_app/config/typus/polymorphic.yml +17 -0
  208. data/test/fixtures/rails_app/config/typus/polymorphic_roles.yml +5 -0
  209. data/test/fixtures/rails_app/config/typus/resource_roles.yml +7 -0
  210. data/test/fixtures/rails_app/config/typus/sti.yml +5 -0
  211. data/test/fixtures/rails_app/config/typus/sti_roles.yml +2 -0
  212. data/test/fixtures/rails_app/config/typus/typus.yml +13 -0
  213. data/test/fixtures/rails_app/config/typus/typus_roles.yml +2 -0
  214. data/test/fixtures/rails_app/config/typus/unknown.yml +3 -0
  215. data/test/fixtures/rails_app/config/typus/unknown_roles.yml +5 -0
  216. data/test/fixtures/rails_app/db/.gitkeep +0 -0
  217. data/test/fixtures/rails_app/db/schema.rb +174 -0
  218. data/test/fixtures/rails_app/db/seeds.rb +54 -0
  219. data/test/fixtures/rails_app/db/seeds/assets/000.jpg +0 -0
  220. data/test/fixtures/rails_app/db/seeds/assets/001.jpg +0 -0
  221. data/test/fixtures/rails_app/db/seeds/assets/002.jpg +0 -0
  222. data/test/fixtures/rails_app/db/seeds/assets/003.jpg +0 -0
  223. data/test/fixtures/rails_app/db/seeds/assets/004.jpg +0 -0
  224. data/test/fixtures/rails_app/public/404.html +26 -0
  225. data/test/fixtures/rails_app/public/422.html +26 -0
  226. data/test/fixtures/rails_app/public/500.html +26 -0
  227. data/test/fixtures/rails_app/public/favicon.ico +0 -0
  228. data/test/fixtures/rails_app/public/images/rails.png +0 -0
  229. data/test/fixtures/rails_app/public/javascripts/application.js +2 -0
  230. data/test/fixtures/rails_app/public/javascripts/controls.js +965 -0
  231. data/test/fixtures/rails_app/public/javascripts/dragdrop.js +974 -0
  232. data/test/fixtures/rails_app/public/javascripts/effects.js +1123 -0
  233. data/test/fixtures/rails_app/public/javascripts/prototype.js +6001 -0
  234. data/test/fixtures/rails_app/public/javascripts/rails.js +175 -0
  235. data/test/fixtures/rails_app/public/robots.txt +5 -0
  236. data/test/fixtures/rails_app/public/stylesheets/.gitkeep +0 -0
  237. data/test/fixtures/rails_app/script/rails +6 -0
  238. data/test/lib/support/active_record_test.rb +150 -0
  239. data/test/lib/support/fake_user_test.rb +59 -0
  240. data/test/lib/support/hash_test.rb +29 -0
  241. data/test/lib/support/object_test.rb +17 -0
  242. data/test/lib/support/string_test.rb +116 -0
  243. data/test/lib/typus/configuration_test.rb +46 -0
  244. data/test/lib/typus/controller/actions_test.rb +141 -0
  245. data/test/lib/typus/controller/associations_test.rb +7 -0
  246. data/test/lib/typus/controller/autocomplete_test.rb +7 -0
  247. data/test/lib/typus/controller/filters_test.rb +73 -0
  248. data/test/lib/typus/controller/format_test.rb +7 -0
  249. data/test/lib/typus/i18n_test.rb +9 -0
  250. data/test/lib/typus/orm/active_record/class_methods_test.rb +378 -0
  251. data/test/lib/typus/orm/active_record/search_test.rb +330 -0
  252. data/test/lib/typus/regex_test.rb +53 -0
  253. data/test/lib/typus/resources_test.rb +41 -0
  254. data/test/lib/typus_test.rb +141 -0
  255. data/test/test_helper.rb +15 -0
  256. data/typus.gemspec +25 -0
  257. metadata +586 -64
  258. data/Gemfile.lock +0 -149
  259. data/app/views/admin/helpers/_apps.html.erb +0 -9
  260. data/lib/generators/templates/public/admin/javascripts/application.js +0 -2
  261. data/lib/generators/templates/public/admin/javascripts/jquery-1.4.4.min.js +0 -167
  262. data/lib/generators/templates/public/admin/javascripts/jquery.application.js +0 -16
  263. data/lib/generators/templates/public/admin/javascripts/jquery.rails.js +0 -160
  264. data/lib/generators/templates/public/admin/javascripts/jquery.searchField.js +0 -91
  265. data/lib/generators/templates/public/admin/stylesheets/application.css +0 -11
  266. data/lib/generators/templates/public/admin/stylesheets/screen.css +0 -367
  267. data/lib/generators/templates/public/admin/vendor/fancybox/blank.gif +0 -0
  268. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_close.png +0 -0
  269. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_loading.png +0 -0
  270. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_left.png +0 -0
  271. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_nav_right.png +0 -0
  272. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_e.png +0 -0
  273. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_n.png +0 -0
  274. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_ne.png +0 -0
  275. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_nw.png +0 -0
  276. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_s.png +0 -0
  277. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_se.png +0 -0
  278. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_sw.png +0 -0
  279. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_shadow_w.png +0 -0
  280. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_left.png +0 -0
  281. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_main.png +0 -0
  282. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_over.png +0 -0
  283. data/lib/generators/templates/public/admin/vendor/fancybox/fancy_title_right.png +0 -0
  284. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-x.png +0 -0
  285. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox-y.png +0 -0
  286. data/lib/generators/templates/public/admin/vendor/fancybox/fancybox.png +0 -0
  287. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.easing-1.3.pack.js +0 -72
  288. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.css +0 -359
  289. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.js +0 -1156
  290. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.fancybox-1.3.4.pack.js +0 -46
  291. data/lib/generators/templates/public/admin/vendor/fancybox/jquery.mousewheel-3.0.4.pack.js +0 -14
  292. data/lib/typus/actions.rb +0 -41
  293. data/lib/typus/filters.rb +0 -12
  294. data/lib/typus/format.rb +0 -70
  295. data/lib/typus/user.rb +0 -157
data/.gemtest ADDED
File without changes
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+
6
+ # Projecte specific ignores
7
+ .bundle
8
+ all.css
9
+ all.js
10
+ db/*.sqlite3
11
+ log/*.log
12
+ test/fixtures/rails_app/public/system/*
13
+ test/fixtures/rails_app/tmp/*
14
+ tmp/**/*
15
+ vendor/
data/Gemfile CHANGED
@@ -1,7 +1,11 @@
1
- source 'http://rubygems.org'
1
+ source "http://rubygems.org"
2
2
 
3
+ # Specify your gem's dependencies in typus.gemspec
3
4
  gemspec
4
5
 
6
+ # Yes, some dependencies are in typus.gemspec, but it's a little bit difficult
7
+ # to mantain the above code there. I'll keep here for the moment ...
8
+
5
9
  gem 'acts_as_list'
6
10
  gem 'acts_as_tree'
7
11
  gem 'dragonfly', '~>0.8.1'
@@ -12,19 +16,19 @@ gem 'rails', '~> 3.0'
12
16
 
13
17
  group :test do
14
18
  gem 'shoulda'
15
- gem 'tartare', :git => 'https://github.com/fesplugas/rails-tartare.git', :require => false
16
-
17
- gem 'mocha'
19
+ gem 'mocha' # Make sure mocha is loaded at the end ...
18
20
  end
19
21
 
20
22
  group :development, :test do
21
23
 
22
24
  platforms :jruby do
23
25
  gem 'activerecord-jdbc-adapter', :require => false
24
- # gem 'activerecord-jdbcpostgresql-adapter'
26
+
25
27
  gem 'jdbc-mysql'
26
28
  gem 'jdbc-postgres'
27
29
  gem 'jdbc-sqlite3'
30
+
31
+ gem 'jruby-openssl' # JRuby limited openssl loaded. http://jruby.org/openssl
28
32
  end
29
33
 
30
34
  platforms :ruby do
data/Rakefile CHANGED
@@ -1,11 +1,10 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
1
4
  require 'rubygems'
2
5
  require 'rake/testtask'
3
6
  require 'rake/rdoctask'
4
7
 
5
- $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
6
- require 'typus/version'
7
-
8
- desc 'Default: run unit tests.'
9
8
  task :default => :test
10
9
 
11
10
  desc 'Test the typus plugin.'
@@ -16,6 +15,7 @@ Rake::TestTask.new(:test) do |t|
16
15
  t.verbose = true
17
16
  end
18
17
 
18
+ =begin
19
19
  desc 'Generate plugin documentation.'
20
20
  Rake::RDocTask.new(:rdoc) do |rdoc|
21
21
  rdoc.rdoc_dir = 'rdoc'
@@ -24,26 +24,39 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
24
24
  rdoc.rdoc_files.include('README.rdoc')
25
25
  rdoc.rdoc_files.include('lib/**/*.rb')
26
26
  end
27
+ =end
27
28
 
28
- desc 'Build the gem.'
29
- task :build do
30
- system "gem build typus.gemspec"
31
- system "gem install typus-#{Typus::VERSION}.gem"
29
+ task :deploy do
30
+ system "cd test/fixtures/rails_app && cap deploy"
32
31
  end
33
32
 
34
- desc 'Build and release the gem.'
35
- task :release => :build do
36
- system "git commit -m 'Bump version to #{Typus::VERSION}' lib/typus/version.rb"
37
- system "git tag v#{Typus::VERSION}"
38
- system "git push && git push --tags"
39
- system "gem push typus-#{Typus::VERSION}.gem"
40
- system "git clean -fd && rm -f typus-#{Typus::VERSION}.gem"
41
- system "git branch -D 3-0-stable"
42
- system "git checkout -b 3-0-stable && git push -f"
43
- system "git checkout master"
33
+ RUBIES = ["ruby-1.8.7-p330", "ruby-1.9.2-p136", "ree-1.8.7-2010.02", "jruby-1.5.6"]
34
+
35
+ namespace :setup do
36
+
37
+ desc "Setup test environment"
38
+ task :test_environment do
39
+ RUBIES.each { |ruby| system "rvm install #{ruby}" }
40
+ end
41
+
42
+ desc "Setup CI Joe"
43
+ task :cijoe do
44
+ system "git config --replace-all cijoe.runner 'rake test:all'"
45
+ end
46
+
44
47
  end
45
48
 
46
- desc 'Deploy'
47
- task :deploy do
48
- system "cd test/fixtures/rails_app && cap deploy"
49
+ namespace :test do
50
+
51
+ task :all do
52
+ RUBIES.each do |ruby|
53
+ system "rvm use #{ruby}"
54
+ system "rm -f Gemfile.lock"
55
+ system "bundle install"
56
+ system "rake"
57
+ # system "rake DB=postgresql"
58
+ # system "rake DB=mysql"
59
+ end
60
+ end
61
+
49
62
  end
@@ -24,10 +24,6 @@ class Admin::BaseController < ActionController::Base
24
24
  Typus.reload! unless Rails.env.production?
25
25
  end
26
26
 
27
- def set_path
28
- @back_to || request.referer || admin_dashboard_path
29
- end
30
-
31
27
  def set_locale
32
28
  I18n.locale = admin_user.locale
33
29
  end
@@ -1,18 +1,18 @@
1
1
  class Admin::ResourcesController < Admin::BaseController
2
2
 
3
- include Typus::Actions
4
- include Typus::Filters
5
- include Typus::Format
3
+ include Typus::Controller::Actions
4
+ include Typus::Controller::Associations
5
+ include Typus::Controller::Autocomplete
6
+ include Typus::Controller::Filters
7
+ include Typus::Controller::Format
6
8
 
7
9
  before_filter :get_model
8
10
  before_filter :set_scope
9
- before_filter :get_object, :only => [:show, :edit, :update, :destroy, :toggle, :position, :relate, :unrelate, :detach]
11
+ before_filter :get_object, :only => [:show, :edit, :update, :destroy, :toggle, :position, :relate, :unrelate]
10
12
  before_filter :check_resource_ownership, :only => [:edit, :update, :destroy, :toggle, :position, :relate, :unrelate ]
11
13
  before_filter :check_if_user_can_perform_action_on_resources
12
14
  before_filter :set_order, :only => [:index]
13
- before_filter :set_fields, :only => [:index, :new, :edit, :create, :update, :show, :detach]
14
-
15
- before_filter :check_if_we_can_add_a_new_item, :only => [:new, :create]
15
+ before_filter :set_fields, :only => [:index, :new, :edit, :create, :update, :show]
16
16
 
17
17
  ##
18
18
  # This is the main index of the model. With filters, conditions and more.
@@ -21,13 +21,15 @@ class Admin::ResourcesController < Admin::BaseController
21
21
  # your formats.
22
22
  #
23
23
  def index
24
- add_resource_action(default_action.titleize, {:action => default_action}, {})
25
- add_resource_action("Trash", {:action => "destroy"}, {:confirm => "#{Typus::I18n.t("Trash")}?", :method => 'delete'})
26
-
27
24
  get_objects
28
25
 
29
26
  respond_to do |format|
30
- format.html { generate_html }
27
+ format.html do
28
+ prepend_predefined_filter("All", "index", "unscoped")
29
+ add_resource_action(default_action.titleize, {:action => default_action}, {})
30
+ add_resource_action("Trash", {:action => "destroy"}, {:confirm => "#{Typus::I18n.t("Trash")}?", :method => 'delete'})
31
+ generate_html
32
+ end
31
33
  @resource.typus_export_formats.each { |f| format.send(f) { send("generate_#{f}") } }
32
34
  end
33
35
  end
@@ -36,6 +38,11 @@ class Admin::ResourcesController < Admin::BaseController
36
38
  item_params = params.dup
37
39
  item_params.delete_if { |k, v| !@resource.columns.map(&:name).include?(k) }
38
40
  @item = @resource.new(item_params)
41
+
42
+ respond_to do |format|
43
+ format.html # new.html.erb
44
+ format.json { render :json => @item }
45
+ end
39
46
  end
40
47
 
41
48
  ##
@@ -48,63 +55,76 @@ class Admin::ResourcesController < Admin::BaseController
48
55
 
49
56
  set_attributes_on_create
50
57
 
51
- if @item.save
52
- params[:back_to] ? create_with_back_to : redirect_on_success
53
- else
54
- render :new
58
+ respond_to do |format|
59
+ if @item.save
60
+ format.html do
61
+ params[:resource] ? create_with_back_to : redirect_on_success
62
+ end
63
+ format.json { render :json => @item, :status => :created, :location => @item }
64
+ else
65
+ format.html { render :action => "new" }
66
+ format.json { render :json => @item.errors, :status => :unprocessable_entity }
67
+ end
55
68
  end
56
69
  end
57
70
 
58
71
  def edit
59
- add_resource_action(default_action.titleize, {:action => default_action}, {})
60
- add_resource_action("Unrelate", {:action => "unrelate", :resource => @resource.model_name, :resource_id => @item.id}, {:confirm => "#{Typus::I18n.t("Unrelate")}?"})
61
72
  end
62
73
 
63
74
  def show
64
75
  check_resource_ownership if @resource.typus_options_for(:only_user_items)
76
+
77
+ =begin
78
+ # FIXME
79
+ respond_to do |format|
80
+ format.html # show.html.erb
81
+ format.json { render :json => @item }
82
+ end
83
+ =end
65
84
  end
66
85
 
67
86
  def update
87
+ attributes = params[:attribute] ? { params[:attribute] => nil } : params[@object_name]
88
+
68
89
  respond_to do |format|
69
- if @item.update_attributes(params[@object_name])
90
+ if @item.update_attributes(attributes)
70
91
  set_attributes_on_update
71
92
  reload_locales
72
93
  format.html { redirect_on_success }
73
94
  format.json { render :json => @item }
74
95
  else
75
96
  format.html { render :edit }
76
- format.json { render :json => @item.errors.full_messages }
97
+ format.json { render :json => @item.errors, :status => :unprocessable_entity }
77
98
  end
78
99
  end
79
100
  end
80
101
 
81
- def detach
82
- if @item.update_attributes(params[:attribute] => nil)
83
- notice = Typus::I18n.t("%{model} successfully updated.", :model => @resource.model_name.human)
84
- redirect_to :back, :notice => notice
85
- else
86
- render :edit
87
- end
88
- end
89
-
90
102
  def destroy
91
103
  if @item.destroy
92
104
  notice = Typus::I18n.t("%{model} successfully removed.", :model => @resource.model_name.human)
93
105
  else
94
106
  alert = @item.errors.full_messages
95
107
  end
96
- redirect_to set_path, :notice => notice, :alert => alert
108
+ redirect_to :back, :notice => notice, :alert => alert
97
109
  end
98
110
 
99
111
  def toggle
100
112
  @item.toggle(params[:field])
101
- @item.save!
102
-
103
- notice = Typus::I18n.t("%{model} successfully updated.", :model => @resource.model_name.human)
104
113
 
105
114
  respond_to do |format|
106
- format.html { redirect_to set_path, :notice => notice }
107
- format.json { render :json => @item }
115
+ if @item.save
116
+ format.html do
117
+ notice = Typus::I18n.t("%{model} successfully updated.", :model => @resource.model_name.human)
118
+ redirect_to :back, :notice => notice
119
+ end
120
+ format.json { render :json => @item }
121
+ else
122
+ format.html do
123
+ set_fields
124
+ render :edit
125
+ end
126
+ format.json { render :json => @item.errors, :status => :unprocessable_entity }
127
+ end
108
128
  end
109
129
  end
110
130
 
@@ -120,7 +140,7 @@ class Admin::ResourcesController < Admin::BaseController
120
140
  def position
121
141
  @item.send(params[:go])
122
142
  notice = Typus::I18n.t("%{model} successfully updated.", :model => @resource.model_name.human)
123
- redirect_to set_path, :notice => notice
143
+ redirect_to :back, :notice => notice
124
144
  end
125
145
 
126
146
  ##
@@ -151,10 +171,10 @@ class Admin::ResourcesController < Admin::BaseController
151
171
  association_name = params[:related][:association_name].tableize
152
172
 
153
173
  if @item.send(association_name) << resource_class.find(params[:related][:id])
154
- flash[:notice] = Typus::I18n.t("%{model} successfully updated.", :model => @resource.model_name.human)
174
+ notice = Typus::I18n.t("%{model} successfully updated.", :model => @resource.model_name.human)
155
175
  end
156
176
 
157
- redirect_to set_path
177
+ redirect_to :back, :notice => notice
158
178
  end
159
179
 
160
180
  ##
@@ -165,44 +185,25 @@ class Admin::ResourcesController < Admin::BaseController
165
185
  # - has_one
166
186
  #
167
187
  def unrelate
168
-
169
- ##
170
- # Find the remote object which is named item!
171
- #
172
-
173
188
  item_class = params[:resource].typus_constantize
174
189
  item = item_class.find(params[:resource_id])
175
190
 
176
- ##
177
- # Detect which kind of relationship there's between both models.
178
- #
179
- # item respect @item
180
- #
181
-
182
- # This is not nil in case of a has_many :through association.
183
- association_name = params[:association_name].to_sym unless params[:association_name].blank?
184
-
185
191
  case item_class.relationship_with(@resource)
186
192
  when :has_one
187
193
  association_name = @resource.model_name.underscore.to_sym
188
194
  worked = item.send(association_name).delete
189
195
  else
190
- association_name ||= @resource.model_name.tableize.to_sym
196
+ association_name = params[:association_name] ? params[:association_name].to_sym : @resource.model_name.tableize.to_sym
191
197
  worked = item.send(association_name).delete(@item)
192
198
  end
193
199
 
194
- ##
195
- # Finally delete the associated object. Depending on your models setup
196
- # associated models will be removed or foreign_key will be set to nil.
197
- #
198
-
199
200
  if worked
200
201
  notice = Typus::I18n.t("%{model} successfully updated.", :model => item_class.model_name.human)
201
202
  else
202
203
  alert = item.error.full_messages
203
204
  end
204
205
 
205
- redirect_to set_path, :notice => notice, :alert => alert
206
+ redirect_to :back, :notice => notice, :alert => alert
206
207
  end
207
208
 
208
209
  private
@@ -235,7 +236,7 @@ class Admin::ResourcesController < Admin::BaseController
235
236
  check_resources_ownership
236
237
  end
237
238
 
238
- @items = @resource.order(set_order).includes(eager_loading)
239
+ @resource = @resource.order(set_order).includes(eager_loading)
239
240
  end
240
241
 
241
242
  def set_fields
@@ -248,178 +249,41 @@ class Admin::ResourcesController < Admin::BaseController
248
249
  end
249
250
 
250
251
  def redirect_on_success
251
- action = @resource.typus_options_for(:action_after_save)
252
252
  path = params.dup.cleanup
253
- path.merge!(:action => action)
254
-
255
- case params[:action]
256
- when "create"
257
- path.merge!(:id => @item.id) unless action.eql?("index")
258
- notice = Typus::I18n.t("%{model} successfully created.", :model => @resource.model_name.human)
259
- when "update", "detach"
260
- case action
261
- when "index"
262
- if params[:back_to]
263
- path = "#{params[:back_to]}##{@resource.to_resource}"
264
- else
265
- path.delete_if { |k, v| %w(action id).include?(k) }
266
- end
267
- else
268
- path.merge!(:action => action) #, :id => @item.id)
269
- end
270
- notice = Typus::I18n.t("%{model} successfully updated.", :model => @resource.model_name.human)
253
+
254
+ if action_after_save.eql?('index')
255
+ path.delete_if { |k, v| %w(action id).include?(k) }
256
+ else
257
+ path.merge!(:action => action_after_save, :id => @item.id)
271
258
  end
272
259
 
260
+ message = (params[:action] == 'create') ? "%{model} successfully created." : "%{model} successfully updated."
261
+ notice = Typus::I18n.t(message, :model => @resource.model_name.human)
262
+
273
263
  redirect_to path, :notice => notice
274
264
  end
275
265
 
276
266
  ##
277
267
  # Here what we basically do is to associate objects after they have been
278
- # created. It's similar to calling `relate`.
279
- #
280
- # We have two objects:
268
+ # created. It's similar to calling `relate` but which the difference that
269
+ # we are creating a new record.
281
270
  #
282
- # - @item: Which is the create object.
283
- # - item: Which is the object which be associated to.
284
- #
285
- # http://0.0.0.0:3000/admin/entries/new?back_to=%2Fadmin%2Fcategories%2Fedit%2F3&resource=categories&resource_id=3
271
+ # We have two objects, detect the relationship_between them and then
272
+ # call the related method.
286
273
  #
287
274
  def create_with_back_to
288
-
289
- #
290
- # Find the remote object which is named item!
291
- #
292
-
293
275
  item_class = params[:resource].typus_constantize
294
- item = item_class.find(params[:resource_id]) if params[:resource_id]
295
-
296
- ##
297
- # Detect which kind of relationship there's between both models.
298
- #
299
-
300
- ##
301
- # Here we have something like:
302
- #
303
- # Eg 1.
304
- #
305
- # - We are editing an Order and want to add a new Invoice.
306
- # - Click on "Add New" and we are redirected to the form.
307
- # - We want to know which kind of relationship there's between both
308
- # objects.
309
- #
310
- # >> Order.relationship_with(Invoice)
311
- # => :has_one
312
- #
313
- # Eg 2.
314
- #
315
- # - We are editing a Entry and want to add a new Attachment.
316
- # - Click on "Add New" and we are redirected to the form.
317
- # - We want to know which kind of relationship there's between both
318
- # objects.
319
- #
320
- # >> Entry.relationship_with(Attachment)
321
- # => :has_and_belongs_to_many
322
- #
323
- # Eg 3.
324
- #
325
- # - We are editing a Entry and want to add a new Comment.
326
- # - Click on "Add New" and we are redirected to the form.
327
- # - We want to know which kind of relationship there's between both
328
- # objects.
329
- #
330
- # >> Entry.relationship_with(Comment)
331
- # => :has_many
332
- #
333
- # Eg 4.
334
- #
335
- # - We are editing a Post (Entry) and want to add a new Attachment.
336
- # - Click on "Add New" and we are redirected to the form.
337
- # - We want to know which kind of relationship there's between both
338
- # objects.
339
- #
340
- # >> Post.relationship_with(Attachment)
341
- # => :has_and_belongs_to_many
342
- #
343
-
344
- case item_class.relationship_with(@resource)
345
- when :has_one
346
- # Order#invoice = @item
347
- association_name = @resource.model_name.underscore.to_sym
348
- item.send("#{association_name}=", @item)
349
- worked = true
350
- when :has_and_belongs_to_many
351
- # Attachment#entries.push(item)
352
- association_name = @resource.model_name.tableize.to_sym
353
- worked = item.send(association_name).push(@item)
354
- when :belongs_to
355
- # Entry#comments.push(item)
356
- association_name = item_class.model_name.tableize.to_sym
357
- if item
358
- worked = @item.send(association_name).push(item)
359
- end
360
- when :has_many
361
- # Dog#image_holders
362
- association_name = @resource.model_name.tableize.to_sym
363
- worked = item.send(association_name).push(@item)
364
- end
365
-
366
- association = @resource.reflect_on_association(association_name)
367
-
368
- ##
369
- # Set @back_to
370
- #
371
-
372
- @back_to = if item
373
- params[:back_to]
374
- else
375
- "#{params[:back_to]}?#{association.primary_key_name}=#{@item.id}"
376
- end
377
-
378
- ##
379
- # Finally delete the associated object. Depending on your models setup
380
- # associated models will be removed or foreign_key will be set to nil.
381
- #
382
-
383
- if item
384
- if worked
385
- notice = Typus::I18n.t("%{model} successfully updated.", :model => item_class.model_name.human)
386
- else
387
- alert = @item.errors.full_messages
388
- end
389
- end
390
-
391
- redirect_to set_path, :notice => notice, :alert => alert
276
+ options = { :controller => item_class.to_resource }
277
+ assoc = item_class.relationship_with(@resource).to_s
278
+ send("set_#{assoc}_association", item_class, options)
392
279
  end
393
280
 
394
281
  def default_action
395
282
  @resource.typus_options_for(:default_action_on_item)
396
283
  end
397
284
 
398
- ##
399
- # If we are trying to create a new Invoice which belongs_to Order, we should
400
- # verify before the the Order doesn't have an Invoice, otherwise we would
401
- # have and Order with many Invoices which is something not desired.
402
- #
403
- # Eg:
404
- #
405
- # @resource (Invoice)
406
- # params[:resource] = "Order"
407
- # params[:resource_id] = "1"
408
- #
409
- # Does this Order already has an Invoice. If true, redirect to back.
410
- #
411
- def check_if_we_can_add_a_new_item
412
- if params[:resource] && params[:resource_id]
413
- item_class = params[:resource].typus_constantize
414
- item = item_class.find(params[:resource_id]) if params[:resource_id]
415
-
416
- if item_class.relationship_with(@resource) == :has_one
417
- association_name = @resource.model_name.underscore.to_sym
418
- if item.send(association_name)
419
- render :text => "Not allowed!", :status => :unprocessable_entity
420
- end
421
- end
422
- end
285
+ def action_after_save
286
+ @resource.typus_options_for(:action_after_save)
423
287
  end
424
288
 
425
289
  end