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
@@ -1,35 +0,0 @@
1
- require 'test/helper'
2
-
3
- class Admin::PostsControllerTest < ActionController::TestCase
4
-
5
- def test_should_toggle_an_item
6
-
7
- @request.env['HTTP_REFERER'] = '/admin/posts'
8
-
9
- post = posts(:unpublished)
10
- get :toggle, { :id => post.id, :field => 'status' }
11
-
12
- assert_response :redirect
13
- assert_redirected_to @request.env['HTTP_REFERER']
14
- assert_equal "Post status changed.", flash[:success]
15
- assert Post.find(post.id).status
16
-
17
- end
18
-
19
- def test_should_not_toggle_an_item_when_disabled
20
-
21
- @request.env['HTTP_REFERER'] = '/admin/posts'
22
-
23
- options = Typus::Configuration.options.merge(:toggle => false)
24
- Typus::Configuration.stubs(:options).returns(options)
25
-
26
- post = posts(:unpublished)
27
- get :toggle, { :id => post.id, :field => 'status' }
28
-
29
- assert_response :redirect
30
- assert_redirected_to @request.env['HTTP_REFERER']
31
- assert_equal "Toggle is disabled.", flash[:notice]
32
-
33
- end
34
-
35
- end
@@ -1,209 +0,0 @@
1
- require 'test/helper'
2
-
3
- class Admin::PostsControllerTest < ActionController::TestCase
4
-
5
- ##
6
- # get :index
7
- ##
8
-
9
- def test_should_render_index_and_verify_presence_of_custom_partials
10
- get :index
11
- partials = %w( _index.html.erb _sidebar.html.erb )
12
- partials.each { |p| assert_match p, @response.body }
13
- end
14
-
15
- def test_should_render_index_and_verify_page_title
16
- get :index
17
- assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Posts"
18
- end
19
-
20
- def test_should_render_index_and_show_add_entry_link
21
-
22
- get :index
23
-
24
- assert_select "#sidebar ul" do
25
- assert_select "li", "Add entry"
26
- end
27
-
28
- end
29
-
30
- def test_should_render_index_and_not_show_add_entry_link
31
-
32
- typus_user = typus_users(:designer)
33
- @request.session[:typus_user_id] = typus_user.id
34
-
35
- get :index
36
- assert_response :success
37
-
38
- assert_no_match /Add entry/, @response.body
39
-
40
- end
41
-
42
- def test_should_render_index_and_show_trash_item_image
43
- get :index
44
- assert_response :success
45
- assert_select '.trash', 'Trash'
46
- end
47
-
48
- def test_should_render_index_and_not_show_trash_image
49
-
50
- typus_user = typus_users(:designer)
51
- @request.session[:typus_user_id] = typus_user.id
52
-
53
- get :index
54
- assert_response :success
55
- assert_select '.trash', false
56
-
57
- end
58
-
59
- def test_should_get_index_and_render_edit_or_show_links
60
-
61
- %w( edit show ).each do |action|
62
-
63
- options = Typus::Configuration.options.merge(:default_action_on_item => action)
64
- Typus::Configuration.stubs(:options).returns(options)
65
-
66
- get :index
67
-
68
- Post.find(:all).each do |post|
69
- assert_match "/posts/#{action}/#{post.id}", @response.body
70
- end
71
-
72
- end
73
-
74
- end
75
-
76
- def test_should_get_index_and_render_edit_or_show_links_on_owned_records
77
-
78
- typus_user = typus_users(:editor)
79
- @request.session[:typus_user_id] = typus_user.id
80
-
81
- get :index
82
-
83
- Post.find(:all).each do |post|
84
- action = post.owned_by?(typus_user) ? 'edit' : 'show'
85
- assert_match "/posts/#{action}/#{post.id}", @response.body
86
- end
87
-
88
- end
89
-
90
- def test_should_get_index_and_render_edit_or_show_on_only_user_items
91
-
92
- typus_user = typus_users(:editor)
93
- @request.session[:typus_user_id] = typus_user.id
94
-
95
- %w( edit show ).each do |action|
96
-
97
- options = Typus::Configuration.options.merge(:only_user_items => true,
98
- :default_action_on_item => action)
99
- Typus::Configuration.stubs(:options).returns(options)
100
-
101
- get :index
102
-
103
- Post.find(:all).each do |post|
104
- if post.owned_by?(typus_user)
105
- assert_match "/posts/#{action}/#{post.id}", @response.body
106
- else
107
- assert_no_match /\/posts\/#{action}\/#{post.id}/, @response.body
108
- end
109
- end
110
-
111
- end
112
-
113
- end
114
-
115
- ##
116
- # get :new
117
- ##
118
-
119
- def test_should_render_posts_partials_on_new
120
- get :new
121
- partials = %w( _new.html.erb _sidebar.html.erb )
122
- partials.each { |p| assert_match p, @response.body }
123
- end
124
-
125
- def test_should_render_new_and_verify_page_title
126
- get :new
127
- assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Posts &rsaquo; New"
128
- end
129
-
130
- ##
131
- # get :edit
132
- ##
133
-
134
- def test_should_render_edit_and_verify_presence_of_custom_partials
135
- get :edit, { :id => posts(:published).id }
136
- partials = %w( _edit.html.erb _sidebar.html.erb )
137
- partials.each { |p| assert_match p, @response.body }
138
- end
139
-
140
- def test_should_render_edit_and_verify_page_title
141
- get :edit, { :id => posts(:published).id }
142
- assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Posts &rsaquo; Edit"
143
- end
144
-
145
- ##
146
- # get :show
147
- ##
148
-
149
- def test_should_render_show_and_verify_presence_of_custom_partials
150
- get :show, { :id => posts(:published).id }
151
- partials = %w( _show.html.erb _sidebar.html.erb )
152
- partials.each { |p| assert_match p, @response.body }
153
- end
154
-
155
- def test_should_render_show_and_verify_page_title
156
- get :show, { :id => posts(:published).id }
157
- assert_select 'title', "#{Typus::Configuration.options[:app_name]} - Posts &rsaquo; Show"
158
- end
159
-
160
- def test_should_render_show_and_verify_add_relationships_links
161
-
162
- ##
163
- # Admin
164
- ##
165
-
166
- [ posts(:owned_by_admin), posts(:owned_by_editor) ].each do |post|
167
-
168
- get :show, { :id => post.id }
169
-
170
- %w( assets categories comments views ).each do |model|
171
- assert_select "div##{model} h2", "#{model.capitalize}\n Add new"
172
- end
173
-
174
- end
175
-
176
- ##
177
- # Editor
178
- ##
179
-
180
- typus_user = typus_users(:editor)
181
- @request.session[:typus_user_id] = typus_user.id
182
-
183
- get :show, { :id => posts(:owned_by_admin).id }
184
-
185
- # This is a has_many relationship, and record is owned by admin, so the
186
- # editor can only list. Assets it's not shown because the editor doesn't
187
- # have access to this resource.
188
- assert_select 'div#assets h2', false
189
- assert_select 'div#categories h2', "Categories"
190
- assert_select 'div#comments h2', "Comments"
191
- assert_select 'div#views h2', "Views"
192
-
193
- get :show, { :id => posts(:owned_by_editor).id }
194
-
195
- # This is a has_many (polimorphic) relationship, but editor can't add new items.
196
- assert_select 'div#assets h2', false
197
- # This is a has_and_belongs_to_many relationship and editor can add new items.
198
- assert_select 'div#categories h2', "Categories\n Add new"
199
- # This is a has_many relationship, but editor can't add items.
200
- assert_select 'div#comments h2', "Comments"
201
- # This is a has_many relationship and editor can add items.
202
- assert_select 'div#views h2', "Views\n Add new"
203
-
204
- expected = "/admin/views/new?back_to=%2Fadmin%2Fposts%2Fshow%2F4%23views&amp;post_id=4&amp;resource=post&amp;resource_id=4"
205
- assert_match expected, @response.body
206
-
207
- end
208
-
209
- end
@@ -1,36 +0,0 @@
1
- require 'test/helper'
2
-
3
- class Admin::StatusControllerTest < ActionController::TestCase
4
-
5
- def setup
6
- @request.session[:typus_user_id] = typus_users(:admin).id
7
- end
8
-
9
- def test_should_verify_admin_can_go_to_index
10
- get :index
11
- assert_response :success
12
- assert_template 'index'
13
- end
14
-
15
- def test_should_verify_status_is_not_available_if_user_not_logged
16
- @request.session[:typus_user_id] = nil
17
- get :index
18
- assert_response :redirect
19
- assert_redirected_to admin_sign_in_path(:back_to => '/admin/status')
20
- end
21
-
22
- def test_should_verify_admin_cannot_go_to_show
23
- get :show
24
- assert_response :redirect
25
- assert_redirected_to admin_dashboard_path
26
- assert_equal "Admin can't go to show on status.", flash[:notice]
27
- end
28
-
29
- def test_should_verify_editor_can_not_go_to_index
30
- @request.session[:typus_user_id] = typus_users(:editor).id
31
- get :index
32
- assert_response :redirect
33
- assert_equal "Editor can't go to index on status.", flash[:notice]
34
- end
35
-
36
- end
@@ -1,211 +0,0 @@
1
- require 'test/helper'
2
-
3
- class Admin::TypusUsersControllerTest < ActionController::TestCase
4
-
5
- def setup
6
- Typus::Configuration.options[:root] = 'admin'
7
- @typus_user = typus_users(:admin)
8
- @request.session[:typus_user_id] = @typus_user.id
9
- @request.env['HTTP_REFERER'] = '/admin/typus_users'
10
- end
11
-
12
- def test_should_allow_admin_to_create_typus_users
13
- get :new
14
- assert_response :success
15
- end
16
-
17
- def test_should_not_allow_admin_to_toggle_her_status
18
-
19
- get :toggle, { :id => @typus_user.id, :field => 'status' }
20
-
21
- assert_response :redirect
22
- assert_redirected_to @request.env['HTTP_REFERER']
23
- assert_equal "You can't toggle your status.", flash[:notice]
24
-
25
- end
26
-
27
- def test_should_allow_admin_to_toggle_other_users_status
28
-
29
- get :toggle, { :id => typus_users(:editor).id, :field => 'status' }
30
-
31
- assert_response :redirect
32
- assert_redirected_to @request.env['HTTP_REFERER']
33
- assert_equal "Typus user status changed.", flash[:success]
34
-
35
- end
36
-
37
- def test_should_not_allow_non_root_typus_user_to_toggle_status
38
-
39
- typus_user = typus_users(:editor)
40
- @request.session[:typus_user_id] = typus_user.id
41
- get :toggle, { :id => typus_user.id, :field => 'status' }
42
-
43
- assert_response :redirect
44
- assert_redirected_to @request.env['HTTP_REFERER']
45
- assert_equal "You're not allowed to toggle status.", flash[:notice]
46
-
47
- end
48
-
49
- def test_should_verify_admin_cannot_destroy_herself
50
-
51
- assert_difference('TypusUser.count', 0) do
52
- delete :destroy, :id => @typus_user.id
53
- end
54
-
55
- assert_response :redirect
56
- assert_redirected_to @request.env['HTTP_REFERER']
57
- assert_equal "You can't remove yourself.", flash[:notice]
58
-
59
- end
60
-
61
- def test_should_verify_admin_can_destroy_others
62
-
63
- assert_difference('TypusUser.count', -1) do
64
- delete :destroy, :id => typus_users(:editor).id
65
- end
66
-
67
- assert_response :redirect
68
- assert_redirected_to @request.env['HTTP_REFERER']
69
- assert_equal "Typus user successfully removed.", flash[:success]
70
-
71
- end
72
-
73
- def test_should_not_allow_editor_to_create_typus_users
74
-
75
- typus_user = typus_users(:editor)
76
- @request.session[:typus_user_id] = typus_user.id
77
- get :new
78
-
79
- assert_response :redirect
80
- assert_redirected_to @request.env['HTTP_REFERER']
81
- assert_equal "Editor can't perform action. (new)", flash[:notice].to_s
82
-
83
- end
84
-
85
- def test_should_allow_editor_to_update_himself
86
-
87
- options = Typus::Configuration.options.merge(:index_after_save => false)
88
- Typus::Configuration.stubs(:options).returns(options)
89
-
90
- typus_user = typus_users(:editor)
91
- @request.session[:typus_user_id] = typus_user.id
92
- @request.env['HTTP_REFERER'] = "/admin/typus_users/edit/#{typus_user.id}"
93
- get :edit, { :id => typus_user.id }
94
-
95
- assert_response :success
96
- assert_equal 'editor', typus_user.role
97
-
98
- post :update, { :id => typus_user.id,
99
- :item => { :first_name => 'Richard',
100
- :last_name => 'Ashcroft',
101
- :role => 'editor' } }
102
-
103
- assert_response :redirect
104
- assert_redirected_to @request.env['HTTP_REFERER']
105
- assert_equal "Typus user successfully updated.", flash[:success]
106
-
107
- end
108
-
109
- def test_should_not_allow_editor_to_update_himself_to_become_admin
110
-
111
- typus_user = typus_users(:editor)
112
- @request.session[:typus_user_id] = typus_user.id
113
- @request.env['HTTP_REFERER'] = "/admin/typus_users/#{typus_user.id}/edit"
114
-
115
- assert_equal 'editor', typus_user.role
116
-
117
- post :update, { :id => typus_user.id,
118
- :item => { :role => 'admin' } }
119
-
120
- assert_response :redirect
121
- assert_redirected_to @request.env['HTTP_REFERER']
122
- assert_equal "You can't change your role.", flash[:notice]
123
-
124
- end
125
-
126
- def test_should_not_allow_editor_to_edit_other_users_profiles
127
-
128
- typus_user = typus_users(:editor)
129
- @request.session[:typus_user_id] = typus_user.id
130
- get :edit, { :id => typus_user.id }
131
-
132
- assert_response :success
133
- assert_template 'edit'
134
-
135
- get :edit, { :id => typus_users(:admin).id }
136
-
137
- assert_response :redirect
138
- assert_redirected_to @request.env['HTTP_REFERER']
139
- assert_equal "As you're not the admin or the owner of this record you cannot edit it.", flash[:notice]
140
-
141
- end
142
-
143
- def test_should_not_allow_editor_to_destroy_users
144
-
145
- typus_user = typus_users(:editor)
146
- @request.session[:typus_user_id] = typus_user.id
147
- delete :destroy, :id => typus_users(:admin).id
148
-
149
- assert_response :redirect
150
- assert_redirected_to @request.env['HTTP_REFERER']
151
- assert_equal "You're not allowed to remove Typus Users.", flash[:notice]
152
-
153
- end
154
-
155
- def test_should_not_allow_editor_to_destroy_herself
156
-
157
- typus_user = typus_users(:editor)
158
- @request.session[:typus_user_id] = typus_user.id
159
- delete :destroy, :id => typus_user.id
160
-
161
- assert_response :redirect
162
- assert_redirected_to @request.env['HTTP_REFERER']
163
- assert_equal "You're not allowed to remove Typus Users.", flash[:notice]
164
-
165
- end
166
-
167
- def test_should_redirect_to_admin_dashboard_if_user_does_not_have_privileges
168
-
169
- @request.env['HTTP_REFERER'] = '/admin'
170
- typus_user = typus_users(:designer)
171
- @request.session[:typus_user_id] = typus_user.id
172
- get :index
173
-
174
- assert_response :redirect
175
- assert_redirected_to @request.env['HTTP_REFERER']
176
- assert_equal "Designer can't display items.", flash[:notice]
177
-
178
- end
179
-
180
- def test_should_change_root_to_editor_so_editor_can_edit_others_content
181
-
182
- typus_user = typus_users(:editor)
183
- @request.session[:typus_user_id] = typus_user.id
184
-
185
- assert_equal 'editor', typus_user.role
186
-
187
- get :edit, { :id => typus_user.id }
188
- assert_response :success
189
-
190
- get :edit, { :id => typus_users(:admin).id }
191
- assert_response :redirect
192
- assert_redirected_to @request.env['HTTP_REFERER']
193
- assert_equal "As you're not the admin or the owner of this record you cannot edit it.", flash[:notice]
194
-
195
- ##
196
- # Here we change the behavior, editor has become root, so he
197
- # has access to all TypusUser records.
198
- #
199
-
200
- options = Typus::Configuration.options.merge(:root => 'editor')
201
- Typus::Configuration.stubs(:options).returns(options)
202
-
203
- get :edit, { :id => typus_user.id }
204
- assert_response :success
205
-
206
- get :edit, { :id => typus_users(:admin).id }
207
- assert_response :success
208
-
209
- end
210
-
211
- end