andrewroth_activeadmin 0.3.4

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 (338) hide show
  1. data/.document +5 -0
  2. data/.gitignore +35 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.md +301 -0
  6. data/Gemfile +40 -0
  7. data/Guardfile +8 -0
  8. data/LICENSE +25 -0
  9. data/README.rdoc +113 -0
  10. data/Rakefile +18 -0
  11. data/activeadmin.gemspec +28 -0
  12. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  17. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  18. data/app/assets/images/active_admin/loading.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  20. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  21. data/app/assets/images/active_admin/orderable.png +0 -0
  22. data/app/assets/javascripts/active_admin/base.js +12 -0
  23. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  24. data/app/assets/stylesheets/active_admin/_base.css.scss +363 -0
  25. data/app/assets/stylesheets/active_admin/_forms.css.scss +259 -0
  26. data/app/assets/stylesheets/active_admin/_header.css.scss +121 -0
  27. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  28. data/app/assets/stylesheets/active_admin/_typography.css.scss +102 -0
  29. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +43 -0
  30. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +125 -0
  31. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
  32. data/app/assets/stylesheets/active_admin/components/_tables.css.scss +68 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +10 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  40. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  41. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
  42. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  43. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  44. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  45. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  46. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  47. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  48. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  49. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  50. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  51. data/app/views/active_admin/resource/edit.html.arb +1 -0
  52. data/app/views/active_admin/resource/index.csv.erb +20 -0
  53. data/app/views/active_admin/resource/index.html.arb +1 -0
  54. data/app/views/active_admin/resource/new.html.arb +1 -0
  55. data/app/views/active_admin/resource/show.html.arb +1 -0
  56. data/app/views/layouts/active_admin.html.arb +1 -0
  57. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  58. data/cucumber.yml +2 -0
  59. data/docs/0-installation.md +50 -0
  60. data/docs/1-general-configuration.md +43 -0
  61. data/docs/2-resource-customization.md +114 -0
  62. data/docs/3-index-pages.md +55 -0
  63. data/docs/3-index-pages/index-as-block.md +16 -0
  64. data/docs/3-index-pages/index-as-blog.md +61 -0
  65. data/docs/3-index-pages/index-as-grid.md +21 -0
  66. data/docs/3-index-pages/index-as-table.md +90 -0
  67. data/docs/4-csv-format.md +14 -0
  68. data/docs/5-forms.md +39 -0
  69. data/docs/6-show-screens.md +36 -0
  70. data/docs/7-sidebars.md +35 -0
  71. data/docs/8-custom-actions.md +123 -0
  72. data/features/comments/commenting.feature +112 -0
  73. data/features/comments/viewing_index.feature +19 -0
  74. data/features/dashboard.feature +26 -0
  75. data/features/edit_page.feature +106 -0
  76. data/features/first_boot.feature +16 -0
  77. data/features/global_navigation.feature +30 -0
  78. data/features/index/filters.feature +35 -0
  79. data/features/index/format_as_csv.feature +46 -0
  80. data/features/index/formats.feature +12 -0
  81. data/features/index/index_as_block.feature +15 -0
  82. data/features/index/index_as_blog.feature +50 -0
  83. data/features/index/index_as_grid.feature +45 -0
  84. data/features/index/index_as_table.feature +81 -0
  85. data/features/index/index_blank_slate.feature +56 -0
  86. data/features/index/index_scopes.feature +52 -0
  87. data/features/index/pagination.feature +17 -0
  88. data/features/menu.feature +37 -0
  89. data/features/new_page.feature +75 -0
  90. data/features/registering_assets.feature +35 -0
  91. data/features/registering_resources.feature +33 -0
  92. data/features/show/default_content.feature +43 -0
  93. data/features/show/page_title.feature +33 -0
  94. data/features/sidebar_sections.feature +127 -0
  95. data/features/specifying_actions.feature +87 -0
  96. data/features/step_definitions/action_item_steps.rb +7 -0
  97. data/features/step_definitions/additional_web_steps.rb +77 -0
  98. data/features/step_definitions/asset_steps.rb +7 -0
  99. data/features/step_definitions/attribute_steps.rb +13 -0
  100. data/features/step_definitions/comment_steps.rb +8 -0
  101. data/features/step_definitions/configuration_steps.rb +31 -0
  102. data/features/step_definitions/dashboard_steps.rb +11 -0
  103. data/features/step_definitions/factory_steps.rb +29 -0
  104. data/features/step_definitions/flash_steps.rb +3 -0
  105. data/features/step_definitions/format_steps.rb +35 -0
  106. data/features/step_definitions/index_scope_steps.rb +20 -0
  107. data/features/step_definitions/layout_steps.rb +3 -0
  108. data/features/step_definitions/menu_steps.rb +7 -0
  109. data/features/step_definitions/pagination_steps.rb +8 -0
  110. data/features/step_definitions/sidebar_steps.rb +7 -0
  111. data/features/step_definitions/tab_steps.rb +3 -0
  112. data/features/step_definitions/user_steps.rb +26 -0
  113. data/features/step_definitions/web_steps.rb +211 -0
  114. data/features/sti_resource.feature +61 -0
  115. data/features/support/env.rb +96 -0
  116. data/features/support/paths.rb +50 -0
  117. data/features/support/selectors.rb +45 -0
  118. data/features/users/logging_in.feature +34 -0
  119. data/features/users/logging_out.feature +13 -0
  120. data/lib/active_admin.rb +82 -0
  121. data/lib/active_admin/abstract_view_factory.rb +95 -0
  122. data/lib/active_admin/application.rb +231 -0
  123. data/lib/active_admin/arbre.rb +23 -0
  124. data/lib/active_admin/arbre/builder.rb +111 -0
  125. data/lib/active_admin/arbre/context.rb +45 -0
  126. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  127. data/lib/active_admin/arbre/html/attributes.rb +20 -0
  128. data/lib/active_admin/arbre/html/class_list.rb +28 -0
  129. data/lib/active_admin/arbre/html/collection.rb +27 -0
  130. data/lib/active_admin/arbre/html/document.rb +42 -0
  131. data/lib/active_admin/arbre/html/element.rb +151 -0
  132. data/lib/active_admin/arbre/html/html5_elements.rb +47 -0
  133. data/lib/active_admin/arbre/html/tag.rb +137 -0
  134. data/lib/active_admin/arbre/html/text_node.rb +35 -0
  135. data/lib/active_admin/asset_registration.rb +34 -0
  136. data/lib/active_admin/callbacks.rb +89 -0
  137. data/lib/active_admin/comments.rb +88 -0
  138. data/lib/active_admin/comments/comment.rb +21 -0
  139. data/lib/active_admin/comments/configuration.rb +18 -0
  140. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  141. data/lib/active_admin/comments/resource_helper.rb +17 -0
  142. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  143. data/lib/active_admin/comments/views.rb +3 -0
  144. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  145. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  146. data/lib/active_admin/component.rb +22 -0
  147. data/lib/active_admin/controller_action.rb +12 -0
  148. data/lib/active_admin/csv_builder.rb +45 -0
  149. data/lib/active_admin/dashboards.rb +48 -0
  150. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  151. data/lib/active_admin/dashboards/section.rb +34 -0
  152. data/lib/active_admin/dependency_checker.rb +30 -0
  153. data/lib/active_admin/deprecation.rb +36 -0
  154. data/lib/active_admin/devise.rb +54 -0
  155. data/lib/active_admin/dsl.rb +224 -0
  156. data/lib/active_admin/engine.rb +4 -0
  157. data/lib/active_admin/event.rb +31 -0
  158. data/lib/active_admin/form_builder.rb +118 -0
  159. data/lib/active_admin/helpers/optional_display.rb +34 -0
  160. data/lib/active_admin/helpers/scope_chain.rb +23 -0
  161. data/lib/active_admin/helpers/settings.rb +70 -0
  162. data/lib/active_admin/iconic.rb +51 -0
  163. data/lib/active_admin/iconic/icons.rb +142 -0
  164. data/lib/active_admin/locales/bg.yml +40 -0
  165. data/lib/active_admin/locales/cs.yml +34 -0
  166. data/lib/active_admin/locales/da.yml +28 -0
  167. data/lib/active_admin/locales/en.yml +40 -0
  168. data/lib/active_admin/locales/es.yml +40 -0
  169. data/lib/active_admin/locales/fr.yml +40 -0
  170. data/lib/active_admin/locales/it.yml +40 -0
  171. data/lib/active_admin/locales/ja.yml +40 -0
  172. data/lib/active_admin/locales/pl.yml +34 -0
  173. data/lib/active_admin/locales/pt-BR.yml +41 -0
  174. data/lib/active_admin/locales/ru.yml +40 -0
  175. data/lib/active_admin/locales/sv-SE.yml +40 -0
  176. data/lib/active_admin/locales/zh_cn.yml +40 -0
  177. data/lib/active_admin/menu.rb +42 -0
  178. data/lib/active_admin/menu_item.rb +73 -0
  179. data/lib/active_admin/namespace.rb +206 -0
  180. data/lib/active_admin/page_config.rb +15 -0
  181. data/lib/active_admin/reloader.rb +64 -0
  182. data/lib/active_admin/renderer.rb +87 -0
  183. data/lib/active_admin/resource.rb +159 -0
  184. data/lib/active_admin/resource/action_items.rb +88 -0
  185. data/lib/active_admin/resource/belongs_to.rb +31 -0
  186. data/lib/active_admin/resource/menu.rb +45 -0
  187. data/lib/active_admin/resource/naming.rb +50 -0
  188. data/lib/active_admin/resource/scopes.rb +33 -0
  189. data/lib/active_admin/resource/sidebars.rb +36 -0
  190. data/lib/active_admin/resource_controller.rb +105 -0
  191. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  192. data/lib/active_admin/resource_controller/actions.rb +79 -0
  193. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  194. data/lib/active_admin/resource_controller/collection.rb +138 -0
  195. data/lib/active_admin/resource_controller/filters.rb +58 -0
  196. data/lib/active_admin/resource_controller/form.rb +42 -0
  197. data/lib/active_admin/resource_controller/menu.rb +29 -0
  198. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  199. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  200. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  201. data/lib/active_admin/router.rb +85 -0
  202. data/lib/active_admin/sass/active_admin.scss +3 -0
  203. data/lib/active_admin/sass/css_loader.rb +16 -0
  204. data/lib/active_admin/sass/helpers.rb +45 -0
  205. data/lib/active_admin/scope.rb +31 -0
  206. data/lib/active_admin/sidebar_section.rb +41 -0
  207. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  208. data/lib/active_admin/version.rb +3 -0
  209. data/lib/active_admin/view_factory.rb +23 -0
  210. data/lib/active_admin/view_helpers.rb +22 -0
  211. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  212. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  213. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  214. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  215. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  216. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  217. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  218. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  219. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  220. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  221. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  222. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  223. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  224. data/lib/active_admin/views.rb +8 -0
  225. data/lib/active_admin/views/action_items.rb +17 -0
  226. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  227. data/lib/active_admin/views/components/blank_slate.rb +17 -0
  228. data/lib/active_admin/views/components/columns.rb +47 -0
  229. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  230. data/lib/active_admin/views/components/panel.rb +26 -0
  231. data/lib/active_admin/views/components/scopes.rb +69 -0
  232. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  233. data/lib/active_admin/views/components/status_tag.rb +55 -0
  234. data/lib/active_admin/views/components/table_for.rb +193 -0
  235. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  236. data/lib/active_admin/views/header_renderer.rb +57 -0
  237. data/lib/active_admin/views/index_as_block.rb +29 -0
  238. data/lib/active_admin/views/index_as_blog.rb +129 -0
  239. data/lib/active_admin/views/index_as_grid.rb +70 -0
  240. data/lib/active_admin/views/index_as_table.rb +164 -0
  241. data/lib/active_admin/views/pages/base.rb +167 -0
  242. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  243. data/lib/active_admin/views/pages/edit.rb +28 -0
  244. data/lib/active_admin/views/pages/index.rb +91 -0
  245. data/lib/active_admin/views/pages/layout.rb +26 -0
  246. data/lib/active_admin/views/pages/new.rb +28 -0
  247. data/lib/active_admin/views/pages/show.rb +56 -0
  248. data/lib/active_admin/views/tabbed_navigation.rb +94 -0
  249. data/lib/activeadmin.rb +1 -0
  250. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  251. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  252. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  253. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  254. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  255. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  256. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  257. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +103 -0
  258. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  259. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  260. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  261. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  262. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  263. data/script/local +44 -0
  264. data/script/use_rails +46 -0
  265. data/spec/integration/belongs_to_spec.rb +42 -0
  266. data/spec/integration/default_namespace.rb +77 -0
  267. data/spec/integration/javascript_spec.rb +20 -0
  268. data/spec/integration/memory_spec.rb +38 -0
  269. data/spec/integration/stylesheets_spec.rb +41 -0
  270. data/spec/spec_helper.rb +167 -0
  271. data/spec/support/detect_rails_version.rb +10 -0
  272. data/spec/support/integration_example_group.rb +33 -0
  273. data/spec/support/jslint.yml +80 -0
  274. data/spec/support/rails_template.rb +32 -0
  275. data/spec/support/rails_template_with_data.rb +33 -0
  276. data/spec/support/templates/cucumber.rb +24 -0
  277. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  278. data/spec/unit/action_builder_spec.rb +88 -0
  279. data/spec/unit/active_admin_spec.rb +17 -0
  280. data/spec/unit/application_spec.rb +87 -0
  281. data/spec/unit/arbre/context_spec.rb +35 -0
  282. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  283. data/spec/unit/arbre/html/element_spec.rb +223 -0
  284. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  285. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  286. data/spec/unit/arbre/html_spec.rb +209 -0
  287. data/spec/unit/asset_registration_spec.rb +37 -0
  288. data/spec/unit/auto_link_spec.rb +39 -0
  289. data/spec/unit/belongs_to_spec.rb +45 -0
  290. data/spec/unit/breadcrumbs_spec.rb +110 -0
  291. data/spec/unit/comments_spec.rb +57 -0
  292. data/spec/unit/component_spec.rb +18 -0
  293. data/spec/unit/controller_filters_spec.rb +34 -0
  294. data/spec/unit/csv_builder_spec.rb +83 -0
  295. data/spec/unit/dashboard_controller_spec.rb +26 -0
  296. data/spec/unit/dashboard_section_spec.rb +56 -0
  297. data/spec/unit/dashboards_spec.rb +59 -0
  298. data/spec/unit/devise_spec.rb +66 -0
  299. data/spec/unit/display_name_spec.rb +29 -0
  300. data/spec/unit/event_spec.rb +41 -0
  301. data/spec/unit/filter_form_builder_spec.rb +182 -0
  302. data/spec/unit/form_builder_spec.rb +256 -0
  303. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  304. data/spec/unit/helpers/scope_chain_spec.rb +36 -0
  305. data/spec/unit/helpers/settings_spec.rb +30 -0
  306. data/spec/unit/menu_item_spec.rb +143 -0
  307. data/spec/unit/menu_spec.rb +53 -0
  308. data/spec/unit/namespace_spec.rb +214 -0
  309. data/spec/unit/pretty_format_spec.rb +35 -0
  310. data/spec/unit/rails_spec.rb +43 -0
  311. data/spec/unit/registration_spec.rb +76 -0
  312. data/spec/unit/reloader_spec.rb +80 -0
  313. data/spec/unit/renderer_spec.rb +108 -0
  314. data/spec/unit/resource/action_items_spec.rb +62 -0
  315. data/spec/unit/resource/menu_spec.rb +80 -0
  316. data/spec/unit/resource/naming_spec.rb +75 -0
  317. data/spec/unit/resource/scopes_spec.rb +30 -0
  318. data/spec/unit/resource/sidebars_spec.rb +50 -0
  319. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  320. data/spec/unit/resource_controller_spec.rb +152 -0
  321. data/spec/unit/resource_spec.rb +269 -0
  322. data/spec/unit/routing_spec.rb +88 -0
  323. data/spec/unit/sass/helpers_spec.rb +47 -0
  324. data/spec/unit/scope_spec.rb +41 -0
  325. data/spec/unit/view_factory_spec.rb +19 -0
  326. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  327. data/spec/unit/views/components/blank_slate_spec.rb +15 -0
  328. data/spec/unit/views/components/columns_spec.rb +75 -0
  329. data/spec/unit/views/components/panel_spec.rb +29 -0
  330. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  331. data/spec/unit/views/components/status_tag_spec.rb +79 -0
  332. data/spec/unit/views/components/table_for_spec.rb +131 -0
  333. data/spec/unit/views/pages/layout_spec.rb +22 -0
  334. data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
  335. data/tasks/docs.rake +39 -0
  336. data/tasks/test.rake +57 -0
  337. data/tasks/yard.rake +6 -0
  338. metadata +646 -0
@@ -0,0 +1,223 @@
1
+ require 'spec_helper'
2
+
3
+ describe Arbre::HTML::Element do
4
+
5
+ setup_arbre_context!
6
+
7
+ let(:element){ Arbre::HTML::Element.new }
8
+
9
+ context "when initialized" do
10
+ it "should have no children" do
11
+ element.children.should be_empty
12
+ end
13
+ it "should have no parent" do
14
+ element.parent.should be_nil
15
+ end
16
+ it "should have no document" do
17
+ element.document.should be_nil
18
+ end
19
+ it "should respond to the HTML builder methods" do
20
+ element.should respond_to(:span)
21
+ end
22
+ it "should have a set of local assigns" do
23
+ element = Arbre::HTML::Element.new :hello => "World"
24
+ element.assigns[:hello].should == "World"
25
+ end
26
+ it "should have an empty hash with no local assigns" do
27
+ element.assigns.should == {}
28
+ end
29
+ end
30
+
31
+ describe "passing in a helper object" do
32
+ let(:element){ Arbre::HTML::Element.new(nil, action_view) }
33
+ it "should call methods on the helper object and return TextNode objects" do
34
+ element.content_tag(:div).should == "<div></div>"
35
+ end
36
+
37
+ it "should raise a NoMethodError if not found" do
38
+ lambda {
39
+ element.a_method_that_doesnt_exist
40
+ }.should raise_error(NoMethodError)
41
+ end
42
+ end
43
+
44
+ describe "passing in assigns" do
45
+ let(:assigns){ {:post => Post.new(:title => "Hello")} }
46
+ it "should be accessible via a method call" do
47
+ post.should be_an_instance_of(Post)
48
+ end
49
+ end
50
+
51
+ describe "adding a child" do
52
+ let(:child){ Arbre::HTML::Element.new }
53
+ before do
54
+ element.add_child child
55
+ end
56
+
57
+ it "should add the child to the parent" do
58
+ element.children.first.should == child
59
+ end
60
+
61
+ it "should set the parent of the child" do
62
+ child.parent.should == element
63
+ end
64
+
65
+ context "when the child is nil" do
66
+ let(:child){ nil }
67
+ it "should not add the child" do
68
+ element.children.should be_empty
69
+ end
70
+ end
71
+
72
+ context "when the child is a string" do
73
+ let(:child){ "Hello World" }
74
+ it "should add as a TextNode" do
75
+ element.children.first.should be_instance_of(Arbre::HTML::TextNode)
76
+ element.children.first.to_html.should == "Hello World"
77
+ end
78
+ end
79
+ end
80
+
81
+ describe "setting the content" do
82
+
83
+ context "when a string" do
84
+ before do
85
+ element.add_child "Hello World"
86
+ element.content = "Goodbye"
87
+ end
88
+ it "should clear the existing children" do
89
+ element.children.size.should == 1
90
+ end
91
+
92
+ it "should add the string as a child" do
93
+ element.children.first.to_html.should == "Goodbye"
94
+ end
95
+
96
+ it "should html escape the string" do
97
+ string = "Goodbye <br />"
98
+ element.content = string
99
+ element.content.to_html.should == "Goodbye &lt;br /&gt;"
100
+ end
101
+ end
102
+
103
+ context "when a tag" do
104
+ before do
105
+ element.content = h2("Hello")
106
+ end
107
+ it "should set the content tag" do
108
+ element.children.first.should be_an_instance_of(Arbre::HTML::H2)
109
+ end
110
+ it "should set the tags parent" do
111
+ element.children.first.parent.should == element
112
+ end
113
+ end
114
+
115
+ context "when an array of tags" do
116
+ before do
117
+ element.content = [ul,div]
118
+ end
119
+
120
+ it "should set the content tag" do
121
+ element.children.first.should be_an_instance_of(Arbre::HTML::Ul)
122
+ end
123
+ it "should set the tags parent" do
124
+ element.children.first.parent.should == element
125
+ end
126
+ end
127
+
128
+ end
129
+
130
+ describe "setting the parent" do
131
+ let(:parent) do
132
+ doc = Arbre::HTML::Document.new
133
+ parent = Arbre::HTML::Element.new
134
+ doc << parent
135
+ parent
136
+ end
137
+ before { element.parent = parent }
138
+
139
+ it "should set the parent" do
140
+ element.parent.should == parent
141
+ end
142
+ it "should set the document to the parent's document" do
143
+ element.document.should == parent.document
144
+ end
145
+ end
146
+
147
+ describe "rendering to html" do
148
+ it "should render the children collection" do
149
+ element.children.should_receive(:to_html).and_return("content")
150
+ element.to_html.should == "content"
151
+ end
152
+ end
153
+
154
+ describe "adding elements together" do
155
+
156
+ context "when both elements are tags" do
157
+ let(:collection){ h1 + h2}
158
+
159
+ it "should return an instance of Collection" do
160
+ collection.should be_an_instance_of(Arbre::HTML::Collection)
161
+ end
162
+
163
+ it "should return the elements in the collection" do
164
+ collection.size.should == 2
165
+ collection.first.should be_an_instance_of(Arbre::HTML::H1)
166
+ collection[1].should be_an_instance_of(Arbre::HTML::H2)
167
+ end
168
+ end
169
+
170
+ context "when the left is a collection and the right is a tag" do
171
+ let(:collection){ Arbre::HTML::Collection.new([h1, h2]) + h3}
172
+
173
+ it "should return an instance of Collection" do
174
+ collection.should be_an_instance_of(Arbre::HTML::Collection)
175
+ end
176
+
177
+ it "should return the elements in the collection flattened" do
178
+ collection.size.should == 3
179
+ collection[0].should be_an_instance_of(Arbre::HTML::H1)
180
+ collection[1].should be_an_instance_of(Arbre::HTML::H2)
181
+ collection[2].should be_an_instance_of(Arbre::HTML::H3)
182
+ end
183
+ end
184
+
185
+ context "when the right is a collection and the left is a tag" do
186
+ let(:collection){ h1 + Arbre::HTML::Collection.new([h2,h3]) }
187
+
188
+ it "should return an instance of Collection" do
189
+ collection.should be_an_instance_of(Arbre::HTML::Collection)
190
+ end
191
+
192
+ it "should return the elements in the collection flattened" do
193
+ collection.size.should == 3
194
+ collection[0].should be_an_instance_of(Arbre::HTML::H1)
195
+ collection[1].should be_an_instance_of(Arbre::HTML::H2)
196
+ collection[2].should be_an_instance_of(Arbre::HTML::H3)
197
+ end
198
+ end
199
+
200
+ context "when the left is a tag and the right is a string" do
201
+ let(:collection){ h1 + "Hello World"}
202
+
203
+ it "should return an instance of Collection" do
204
+ collection.should be_an_instance_of(Arbre::HTML::Collection)
205
+ end
206
+
207
+ it "should return the elements in the collection" do
208
+ collection.size.should == 2
209
+ collection[0].should be_an_instance_of(Arbre::HTML::H1)
210
+ collection[1].should be_an_instance_of(Arbre::HTML::TextNode)
211
+ end
212
+ end
213
+
214
+ context "when the left is a string and the right is a tag" do
215
+ let(:collection){ "hello World" + h1}
216
+
217
+ it "should return a string" do
218
+ collection.strip.chomp.should == "hello World<h1></h1>"
219
+ end
220
+ end
221
+ end
222
+
223
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Arbre::HTML::Tag, "Attributes" do
4
+
5
+ setup_arbre_context!
6
+
7
+ let(:tag){ Arbre::HTML::Tag.new }
8
+
9
+ describe "attributes" do
10
+ before { tag.build :id => "my_id" }
11
+
12
+ it "should have an attributes hash" do
13
+ tag.attributes.should == {:id => "my_id"}
14
+ end
15
+
16
+ it "should render the attributes to html" do
17
+ tag.to_html.should == <<-HTML
18
+ <tag id="my_id"></tag>
19
+ HTML
20
+ end
21
+
22
+ it "should get an attribute value" do
23
+ tag.attr(:id).should == "my_id"
24
+ end
25
+
26
+ describe "#has_attribute?" do
27
+ context "when the attribute exists" do
28
+ it "should return true" do
29
+ tag.has_attribute?(:id).should == true
30
+ end
31
+ end
32
+
33
+ context "when the attribute does not exist" do
34
+ it "should return false" do
35
+ tag.has_attribute?(:class).should == false
36
+ end
37
+ end
38
+ end
39
+
40
+ it "should remove an attribute" do
41
+ tag.attributes.should == {:id => "my_id"}
42
+ tag.remove_attribute(:id).should == "my_id"
43
+ tag.attributes.should == {}
44
+ end
45
+ end
46
+
47
+ describe "rendering attributes" do
48
+ it "should html safe the attribute values" do
49
+ tag.set_attribute(:class, "\">bad things!")
50
+ tag.to_html.should == <<-HTML
51
+ <tag class="&quot;&gt;bad things!"></tag>
52
+ HTML
53
+ end
54
+ it "should should escape the attribute names" do
55
+ tag.set_attribute(">bad", "things")
56
+ tag.to_html.should == <<-HTML
57
+ <tag &gt;bad="things"></tag>
58
+ HTML
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe Arbre::HTML::Tag do
4
+
5
+ setup_arbre_context!
6
+
7
+ let(:tag){ Arbre::HTML::Tag.new }
8
+
9
+ describe "building a new tag" do
10
+ before { tag.build "Hello World", :id => "my_id" }
11
+
12
+ it "should set the contents to a string" do
13
+ tag.content.should == "Hello World"
14
+ end
15
+
16
+ it "should set the hash of options to the attributes" do
17
+ tag.attributes.should == { :id => "my_id" }
18
+ end
19
+ end
20
+
21
+ describe "creating a tag 'for' an object" do
22
+ let(:model_name){ mock(:singular => "resource_class")}
23
+ let(:resource_class){ mock(:model_name => model_name) }
24
+ let(:resource){ mock(:class => resource_class, :to_key => ['5'])}
25
+
26
+ before do
27
+ tag.build :for => resource
28
+ end
29
+ it "should set the id to the type and id" do
30
+ tag.id.should == "resource_class_5"
31
+ end
32
+ it "should add a class name" do
33
+ tag.class_list.should include("resource_class")
34
+ end
35
+ end
36
+
37
+ describe "css class names" do
38
+ it "should add a class" do
39
+ tag.add_class "hello_world"
40
+ tag.class_names.should == "hello_world"
41
+ end
42
+
43
+ it "should remove_class" do
44
+ tag.add_class "hello_world"
45
+ tag.class_names.should == "hello_world"
46
+ tag.remove_class "hello_world"
47
+ tag.class_names.should == ""
48
+ end
49
+
50
+ it "should not add a class if it already exists" do
51
+ tag.add_class "hello_world"
52
+ tag.add_class "hello_world"
53
+ tag.class_names.should == "hello_world"
54
+ end
55
+
56
+ it "should seperate classes with space" do
57
+ tag.add_class "hello world"
58
+ tag.class_list.size.should == 2
59
+ end
60
+ end
61
+
62
+
63
+ end
@@ -0,0 +1,209 @@
1
+ require 'spec_helper'
2
+
3
+ describe Arbre do
4
+
5
+ setup_arbre_context!
6
+
7
+ it "should render a single element" do
8
+ content = span("Hello World")
9
+ content.to_html.should == <<-HTML
10
+ <span>Hello World</span>
11
+ HTML
12
+ end
13
+
14
+ it "should render a child element" do
15
+ content = span do
16
+ span "Hello World"
17
+ end
18
+ content.to_html.should == <<-HTML
19
+ <span>
20
+ <span>Hello World</span>
21
+ </span>
22
+ HTML
23
+ end
24
+
25
+ it "should render an unordered list" do
26
+ content = ul do
27
+ li "First"
28
+ li "Second"
29
+ li "Third"
30
+ end
31
+ content.to_html.should == <<-HTML
32
+ <ul>
33
+ <li>First</li>
34
+ <li>Second</li>
35
+ <li>Third</li>
36
+ </ul>
37
+ HTML
38
+ end
39
+
40
+ it "should return the correct object" do
41
+ list_1 = ul
42
+ list_2 = li
43
+ list_1.should be_instance_of(Arbre::HTML::Ul)
44
+ list_2.should be_instance_of(Arbre::HTML::Li)
45
+ end
46
+
47
+ it "should allow local variables inside the tags" do
48
+ first = "First"
49
+ second = "Second"
50
+ content = ul do
51
+ li first
52
+ li second
53
+ end
54
+ content.to_html.should == <<-EOS
55
+ <ul>
56
+ <li>First</li>
57
+ <li>Second</li>
58
+ </ul>
59
+ EOS
60
+ end
61
+
62
+ it "should add children and nested" do
63
+ content = div do
64
+ ul
65
+ li do
66
+ li
67
+ end
68
+ end
69
+ content.to_html.should == <<-HTML
70
+ <div>
71
+ <ul></ul>
72
+ <li>
73
+ <li></li>
74
+ </li>
75
+ </div>
76
+ HTML
77
+ end
78
+
79
+ it "should pass the element in to the block if asked for" do
80
+ content = div do |d|
81
+ d.ul do
82
+ li
83
+ end
84
+ end
85
+ content.to_html.should == <<-HTML
86
+ <div>
87
+ <ul>
88
+ <li></li>
89
+ </ul>
90
+ </div>
91
+ HTML
92
+ end
93
+
94
+ it "should move content tags between parents" do
95
+ content = div do
96
+ span(ul(li))
97
+ end
98
+ content.to_html.should == <<-HTML
99
+ <div>
100
+ <span>
101
+ <ul>
102
+ <li></li>
103
+ </ul>
104
+ </span>
105
+ </div>
106
+ HTML
107
+ end
108
+
109
+ it "should add content to the parent if the element is passed into block" do
110
+ content = div do |d|
111
+ d.id = "my-tag"
112
+ ul do
113
+ li
114
+ end
115
+ end
116
+ content.to_html.should == <<-HTML
117
+ <div id="my-tag">
118
+ <ul>
119
+ <li></li>
120
+ </ul>
121
+ </div>
122
+ HTML
123
+ end
124
+
125
+ it "should have the parent set on it" do
126
+ item = nil
127
+ list = ul do
128
+ li "Hello"
129
+ item = li "World"
130
+ end
131
+ item.parent.should == list
132
+ end
133
+
134
+ it "should set a string content return value with no children" do
135
+ li do
136
+ "Hello World"
137
+ end.to_html.should == <<-HTML
138
+ <li>Hello World</li>
139
+ HTML
140
+ end
141
+
142
+ describe "text nodes" do
143
+ it "should turn strings into text nodes" do
144
+ li do
145
+ "Hello World"
146
+ end.children.first.should be_instance_of(Arbre::HTML::TextNode)
147
+ end
148
+ end
149
+
150
+ describe "self-closing nodes" do
151
+ it "should not self-close script tags" do
152
+ tag = script :type => 'text/javascript'
153
+ tag.to_html.should == <<-HTML
154
+ <script type="text/javascript"></script>
155
+ HTML
156
+ end
157
+ it "should self-close meta tags" do
158
+ tag = meta :content => "text/html; charset=utf-8"
159
+ tag.to_html.should == <<-HTML
160
+ <meta content="text/html; charset=utf-8\"/>
161
+ HTML
162
+ end
163
+ it "should self-close link tags" do
164
+ tag = link :rel => "stylesheet"
165
+ tag.to_html.should == <<-HTML
166
+ <link rel="stylesheet"/>
167
+ HTML
168
+ end
169
+ end
170
+
171
+ describe "html safe" do
172
+ it "should escape the contents" do
173
+ span("<br />").to_html.should == <<-HTML
174
+ <span>&lt;br /&gt;</span>
175
+ HTML
176
+ end
177
+
178
+ it "should return html safe strings" do
179
+ span("<br />").to_html.should be_html_safe
180
+ end
181
+
182
+ it "should not escape html passed in" do
183
+ span(span("<br />")).to_html.should == <<-HTML
184
+ <span>
185
+ <span>&lt;br /&gt;</span>
186
+ </span>
187
+ HTML
188
+ end
189
+
190
+ it "should escape string contents when passed in block" do
191
+ span {
192
+ span {
193
+ "<br />"
194
+ }
195
+ }.to_html.should == <<-HTML
196
+ <span>
197
+ <span>&lt;br /&gt;</span>
198
+ </span>
199
+ HTML
200
+ end
201
+
202
+ it "should escape the contents of attributes" do
203
+ span(:class => "<br />").to_html.should == <<-HTML
204
+ <span class="&lt;br /&gt;"></span>
205
+ HTML
206
+ end
207
+ end
208
+
209
+ end