activeadmin 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (255) hide show
  1. data/CHANGELOG.rdoc +15 -1
  2. data/Gemfile +41 -11
  3. data/LICENSE +5 -0
  4. data/README.rdoc +202 -87
  5. data/Rakefile +51 -15
  6. data/activeadmin.gemspec +310 -131
  7. data/cucumber.yml +1 -0
  8. data/features/comments/commenting.feature +81 -0
  9. data/features/comments/viewing_index.feature +19 -0
  10. data/features/edit_page.feature +77 -0
  11. data/features/first_boot.feature +16 -0
  12. data/features/global_navigation.feature +30 -0
  13. data/features/index/formats.feature +10 -0
  14. data/features/index/index_as_block.feature +15 -0
  15. data/features/index/index_as_blog.feature +50 -0
  16. data/features/index/index_as_grid.feature +45 -0
  17. data/features/index/index_as_table.feature +79 -0
  18. data/features/index/index_scopes.feature +52 -0
  19. data/features/index/pagination.feature +23 -0
  20. data/features/new_page.feature +75 -0
  21. data/features/registering_assets.feature +35 -0
  22. data/features/registering_resources.feature +33 -0
  23. data/features/show/default_content.feature +43 -0
  24. data/features/show/page_title.feature +33 -0
  25. data/features/sidebar_sections.feature +128 -0
  26. data/features/specifying_actions.feature +16 -0
  27. data/features/step_definitions/action_item_steps.rb +7 -0
  28. data/features/step_definitions/additional_web_steps.rb +67 -0
  29. data/features/step_definitions/asset_steps.rb +7 -0
  30. data/features/step_definitions/attribute_steps.rb +15 -0
  31. data/features/step_definitions/comment_steps.rb +8 -0
  32. data/features/step_definitions/configuration_steps.rb +31 -0
  33. data/features/step_definitions/factory_steps.rb +28 -0
  34. data/features/step_definitions/flash_steps.rb +3 -0
  35. data/features/step_definitions/format_steps.rb +7 -0
  36. data/features/step_definitions/index_scope_steps.rb +20 -0
  37. data/features/step_definitions/pagination_steps.rb +8 -0
  38. data/features/step_definitions/sidebar_steps.rb +11 -0
  39. data/features/step_definitions/tab_steps.rb +3 -0
  40. data/features/step_definitions/user_steps.rb +20 -0
  41. data/features/step_definitions/web_steps.rb +219 -0
  42. data/features/support/env.rb +88 -0
  43. data/features/support/paths.rb +48 -0
  44. data/features/users/logging_in.feature +34 -0
  45. data/features/users/logging_out.feature +13 -0
  46. data/lib/active_admin.rb +155 -79
  47. data/lib/active_admin/abstract_view_factory.rb +95 -0
  48. data/lib/active_admin/action_items.rb +4 -15
  49. data/lib/active_admin/arbre.rb +23 -0
  50. data/lib/active_admin/arbre/attributes.rb +20 -0
  51. data/lib/active_admin/arbre/class_list.rb +28 -0
  52. data/lib/active_admin/arbre/collection.rb +27 -0
  53. data/lib/active_admin/arbre/context.rb +8 -0
  54. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  55. data/lib/active_admin/arbre/document.rb +42 -0
  56. data/lib/active_admin/arbre/element.rb +151 -0
  57. data/lib/active_admin/arbre/html.rb +84 -0
  58. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  59. data/lib/active_admin/arbre/tag.rb +129 -0
  60. data/lib/active_admin/arbre/text_node.rb +35 -0
  61. data/lib/active_admin/callbacks.rb +87 -0
  62. data/lib/active_admin/comments.rb +73 -0
  63. data/lib/active_admin/comments/comment.rb +15 -0
  64. data/lib/active_admin/comments/configuration.rb +16 -0
  65. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  66. data/lib/active_admin/comments/resource_helper.rb +17 -0
  67. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  68. data/lib/active_admin/comments/views.rb +3 -0
  69. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  70. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  71. data/lib/active_admin/component.rb +22 -0
  72. data/lib/active_admin/controller_action.rb +12 -0
  73. data/lib/active_admin/dashboards.rb +0 -2
  74. data/lib/active_admin/dashboards/dashboard_controller.rb +10 -5
  75. data/lib/active_admin/dashboards/section.rb +5 -14
  76. data/lib/active_admin/devise.rb +43 -0
  77. data/lib/active_admin/dsl.rb +202 -0
  78. data/lib/active_admin/event.rb +31 -0
  79. data/lib/active_admin/form_builder.rb +68 -50
  80. data/lib/active_admin/iconic.rb +51 -0
  81. data/lib/active_admin/iconic/icons.rb +142 -0
  82. data/lib/active_admin/namespace.rb +102 -16
  83. data/lib/active_admin/renderer.rb +18 -3
  84. data/lib/active_admin/resource.rb +110 -9
  85. data/lib/active_admin/resource/belongs_to.rb +31 -0
  86. data/lib/active_admin/resource_controller.rb +45 -260
  87. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  88. data/lib/active_admin/resource_controller/actions.rb +53 -0
  89. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  90. data/lib/active_admin/resource_controller/collection.rb +142 -0
  91. data/lib/active_admin/resource_controller/filters.rb +58 -0
  92. data/lib/active_admin/resource_controller/form.rb +42 -0
  93. data/lib/active_admin/resource_controller/menu.rb +29 -0
  94. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  95. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  96. data/lib/active_admin/resource_controller/sidebars.rb +38 -0
  97. data/lib/active_admin/scope.rb +17 -0
  98. data/lib/active_admin/sidebar.rb +8 -47
  99. data/lib/active_admin/stylesheets/active_admin.scss +418 -0
  100. data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
  101. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
  102. data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
  103. data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
  104. data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
  105. data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
  106. data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
  107. data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
  108. data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
  109. data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
  110. data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
  111. data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
  112. data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
  113. data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
  114. data/lib/active_admin/version.rb +1 -1
  115. data/lib/active_admin/view_factory.rb +21 -0
  116. data/lib/active_admin/view_helpers.rb +17 -100
  117. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  118. data/lib/active_admin/view_helpers/auto_link_helper.rb +41 -0
  119. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  120. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  121. data/lib/active_admin/view_helpers/filter_form_helper.rb +174 -0
  122. data/lib/active_admin/view_helpers/form_helper.rb +12 -0
  123. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  124. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  125. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  126. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  127. data/lib/active_admin/view_helpers/status_tag_helper.rb +13 -0
  128. data/lib/active_admin/view_helpers/table_helper.rb +12 -0
  129. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  130. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  131. data/lib/active_admin/views.rb +8 -0
  132. data/lib/active_admin/views/action_items.rb +17 -0
  133. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  134. data/lib/active_admin/views/components/columns.rb +49 -0
  135. data/lib/active_admin/views/components/paginated_collection.rb +74 -0
  136. data/lib/active_admin/views/components/panel.rb +26 -0
  137. data/lib/active_admin/views/components/scopes.rb +64 -0
  138. data/lib/active_admin/views/components/sidebar_section.rb +30 -0
  139. data/lib/active_admin/views/components/table_for.rb +174 -0
  140. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  141. data/lib/active_admin/views/header_renderer.rb +37 -0
  142. data/lib/active_admin/views/index_as_block.rb +24 -0
  143. data/lib/active_admin/views/index_as_blog.rb +89 -0
  144. data/lib/active_admin/views/index_as_grid.rb +49 -0
  145. data/lib/active_admin/views/index_as_table.rb +73 -0
  146. data/lib/active_admin/views/pages/base.rb +138 -0
  147. data/lib/active_admin/views/pages/dashboard.rb +61 -0
  148. data/lib/active_admin/views/pages/edit.rb +27 -0
  149. data/lib/active_admin/views/pages/index.rb +64 -0
  150. data/lib/active_admin/views/pages/new.rb +27 -0
  151. data/lib/active_admin/views/pages/show.rb +56 -0
  152. data/lib/active_admin/views/tabs_renderer.rb +52 -0
  153. data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  154. data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  155. data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
  156. data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
  157. data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
  158. data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
  159. data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
  160. data/lib/active_admin/views/templates/active_admin_dashboard/index.html.arb +1 -0
  161. data/lib/active_admin/views/templates/active_admin_default/edit.html.arb +1 -0
  162. data/lib/active_admin/views/{active_admin_default → templates/active_admin_default}/index.csv.erb +0 -0
  163. data/lib/active_admin/views/templates/active_admin_default/index.html.arb +1 -0
  164. data/lib/active_admin/views/templates/active_admin_default/new.html.arb +1 -0
  165. data/lib/active_admin/views/templates/active_admin_default/show.html.arb +1 -0
  166. data/lib/active_admin/views/{layouts → templates/layouts}/active_admin.html.erb +3 -4
  167. data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
  168. data/lib/generators/active_admin/devise/devise_generator.rb +45 -0
  169. data/lib/generators/active_admin/install/install_generator.rb +18 -3
  170. data/lib/generators/active_admin/install/templates/active_admin.js +41 -0
  171. data/lib/generators/active_admin/install/templates/{active_admin.rb → active_admin.rb.erb} +33 -3
  172. data/lib/generators/active_admin/install/templates/active_admin_vendor.js +1 -1
  173. data/lib/generators/active_admin/install/templates/dashboards.rb +3 -4
  174. data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
  175. data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
  176. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
  177. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
  178. data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
  179. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  180. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  181. data/spec/integration/belongs_to_spec.rb +42 -0
  182. data/spec/integration/index_as_table_spec.rb +0 -119
  183. data/spec/integration/layout_spec.rb +3 -37
  184. data/spec/spec_helper.rb +89 -50
  185. data/spec/support/integration_example_group.rb +37 -0
  186. data/spec/support/rails_template.rb +21 -9
  187. data/spec/support/rails_template_with_data.rb +32 -0
  188. data/spec/support/templates/cucumber.rb +28 -0
  189. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  190. data/spec/unit/action_builder_spec.rb +19 -7
  191. data/spec/unit/action_items_spec.rb +16 -30
  192. data/spec/unit/active_admin_spec.rb +10 -22
  193. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  194. data/spec/unit/arbre/html/element_spec.rb +224 -0
  195. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  196. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  197. data/spec/unit/arbre/html_spec.rb +185 -0
  198. data/spec/unit/auto_link_spec.rb +38 -0
  199. data/spec/unit/belongs_to_spec.rb +44 -0
  200. data/spec/unit/breadcrumbs_spec.rb +110 -0
  201. data/spec/unit/comments_spec.rb +53 -0
  202. data/spec/unit/component_spec.rb +18 -0
  203. data/spec/unit/components/attributes_table_spec.rb +100 -0
  204. data/spec/unit/components/columns_spec.rb +75 -0
  205. data/spec/unit/components/panel_spec.rb +31 -0
  206. data/spec/unit/components/sidebar_section_spec.rb +37 -0
  207. data/spec/unit/components/table_for_spec.rb +130 -0
  208. data/spec/unit/dashboard_controller_spec.rb +26 -0
  209. data/spec/unit/dashboard_section_spec.rb +10 -17
  210. data/spec/unit/display_name_spec.rb +29 -0
  211. data/spec/unit/event_spec.rb +41 -0
  212. data/spec/unit/filter_form_builder_spec.rb +99 -77
  213. data/spec/unit/form_builder_spec.rb +69 -69
  214. data/spec/unit/namespace_spec.rb +61 -3
  215. data/spec/unit/pretty_format_spec.rb +35 -0
  216. data/spec/unit/registration_spec.rb +40 -1
  217. data/spec/unit/renderer_spec.rb +8 -0
  218. data/spec/unit/resource_controller_spec.rb +105 -6
  219. data/spec/unit/resource_spec.rb +78 -11
  220. data/spec/unit/routing_spec.rb +82 -6
  221. data/spec/unit/scope_spec.rb +31 -0
  222. data/spec/unit/tabs_renderer_spec.rb +24 -2
  223. data/spec/unit/view_factory_spec.rb +16 -0
  224. metadata +268 -82
  225. data/.gitignore +0 -25
  226. data/active_admin.gemspec +0 -22
  227. data/lib/active_admin/action_builder.rb +0 -60
  228. data/lib/active_admin/breadcrumbs.rb +0 -26
  229. data/lib/active_admin/dashboards/renderer.rb +0 -45
  230. data/lib/active_admin/dashboards/section_renderer.rb +0 -28
  231. data/lib/active_admin/filters.rb +0 -189
  232. data/lib/active_admin/pages.rb +0 -11
  233. data/lib/active_admin/pages/base.rb +0 -92
  234. data/lib/active_admin/pages/edit.rb +0 -21
  235. data/lib/active_admin/pages/index.rb +0 -58
  236. data/lib/active_admin/pages/index/blog.rb +0 -65
  237. data/lib/active_admin/pages/index/table.rb +0 -48
  238. data/lib/active_admin/pages/index/thumbnails.rb +0 -40
  239. data/lib/active_admin/pages/new.rb +0 -21
  240. data/lib/active_admin/pages/show.rb +0 -54
  241. data/lib/active_admin/table_builder.rb +0 -162
  242. data/lib/active_admin/tabs_renderer.rb +0 -39
  243. data/lib/active_admin/views/active_admin_dashboard/index.html.erb +0 -1
  244. data/lib/active_admin/views/active_admin_default/edit.html.erb +0 -1
  245. data/lib/active_admin/views/active_admin_default/index.html.erb +0 -1
  246. data/lib/active_admin/views/active_admin_default/new.html.erb +0 -1
  247. data/lib/active_admin/views/active_admin_default/show.html.erb +0 -1
  248. data/lib/generators/active_admin/install/templates/active_admin.css +0 -325
  249. data/lib/generators/active_admin/install/templates/images/orderable.gif +0 -0
  250. data/spec/integration/index_as_blog_spec.rb +0 -65
  251. data/spec/integration/index_as_thumbnails_spec.rb +0 -43
  252. data/spec/integration/new_view_spec.rb +0 -52
  253. data/spec/integration/show_view_spec.rb +0 -91
  254. data/spec/unit/sidebar_spec.rb +0 -96
  255. data/spec/unit/table_builder_spec.rb +0 -162
data/.gitignore DELETED
@@ -1,25 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
22
- .bundle
23
- spec/rails
24
- *.sqlite3-journal
25
- Gemfile.lock
@@ -1,22 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib/', __FILE__)
3
- $:.unshift lib unless $:.include?(lib)
4
-
5
- require 'active_admin/version'
6
-
7
- Gem::Specification.new do |s|
8
- s.name = "active_admin"
9
- s.version = ActiveAdmin::VERSION
10
- s.platform = Gem::Platform::RUBY
11
- s.authors = ["Greg Bell"]
12
- s.email = ["gregdbell@gmail.com"]
13
- s.homepage = "http://github.com/gregbell/active_admin"
14
- s.summary = "The missing administration framework for Ruby on Rails"
15
- s.description = "ActiveAdmin DRY's your administration UI so that you can concentrate on what's actually important"
16
-
17
- s.add_dependency 'inherited_views', '>= 0.0.1'
18
- s.add_dependency 'meta_search'
19
-
20
- s.files = Dir.glob("lib/**/*") + %w(LICENSE README.rdoc)
21
- s.require_path = 'lib'
22
- end
@@ -1,60 +0,0 @@
1
- module ActiveAdmin
2
-
3
- # Member Actions give you the functionality of defining both the
4
- # action and the route directly from your ActiveAdmin registration
5
- # block.
6
- #
7
- # For example:
8
- #
9
- # ActiveAdmin.register Post do
10
- # member_action :comments do
11
- # @post = Post.find(params[:id]
12
- # @comments = @post.comments
13
- # end
14
- # end
15
- #
16
- # Will create a new controller action comments and will hook it up to
17
- # the named route (comments_admin_post_path) /admin/posts/:id/comments
18
- #
19
- # You can treat everything within the block as a standard Rails controller
20
- # action.
21
- #
22
- module ActionBuilder
23
-
24
- def self.included(base)
25
- base.extend ClassMethods
26
- end
27
-
28
- module ClassMethods
29
- def member_action(name, options = {}, &block)
30
- active_admin_config.member_actions << ControllerAction.new(name, options)
31
- define_method(name, &block || Proc.new{})
32
- end
33
-
34
- def clear_member_actions!
35
- active_admin_config.clear_member_actions!
36
- end
37
-
38
-
39
- def collection_action(name, options = {}, &block)
40
- active_admin_config.collection_actions << ControllerAction.new(name, options)
41
- define_method(name, &block || Proc.new{})
42
- end
43
-
44
- def clear_collection_actions!
45
- active_admin_config.clear_collection_actions!
46
- end
47
- end
48
-
49
- class ControllerAction
50
- attr_reader :name
51
- def initialize(name, options = {})
52
- @name, @options = name, options
53
- end
54
-
55
- def http_verb
56
- @options[:method] ||= :get
57
- end
58
- end
59
- end
60
- end
@@ -1,26 +0,0 @@
1
- module ActiveAdmin
2
- module Breadcrumbs
3
-
4
- def self.included(base)
5
- base.send :extend, ClassMethods
6
- end
7
-
8
- protected
9
-
10
- def add_breadcrumb(name, url = '')
11
- @breadcrumbs ||= []
12
- url = send(url) if url.is_a?(Symbol)
13
- @breadcrumbs << [name, url]
14
- end
15
-
16
- module ClassMethods
17
-
18
- def add_breadcrumb(name, url, options = {})
19
- before_filter options do |controller|
20
- controller.send(:add_breadcrumb, name, url)
21
- end
22
- end
23
-
24
- end
25
- end
26
- end
@@ -1,45 +0,0 @@
1
- module ActiveAdmin
2
- module Dashboards
3
- class Renderer < ::ActiveAdmin::Pages::Base
4
-
5
- def main_content
6
- if @dashboard_sections && @dashboard_sections.any?
7
- render_sections(@dashboard_sections)
8
- else
9
- default_welcome_section
10
- end
11
- end
12
-
13
- protected
14
-
15
- def title
16
- "Dashboard"
17
- end
18
-
19
- def render_sections(sections)
20
- content_tag :table, :class => "dashboard" do
21
- sections.in_groups_of(3, false).collect do |row|
22
- content_tag :tr do
23
- row.collect do |section|
24
- content_tag :td, render_section(section)
25
- end.join
26
- end
27
- end.join
28
- end
29
- end
30
-
31
- # Renders each section using their renderer
32
- def render_section(section)
33
- renderer = section.renderer.new(self)
34
- renderer.to_html(section)
35
- end
36
-
37
- def default_welcome_section
38
- content_tag :p, :id => "dashboard_default_message" do
39
- "Welcome to Active Admin. This is the default dashboard page. To add dashboard sections, checkout 'app/admin/dashboards.rb'"
40
- end
41
- end
42
-
43
- end
44
- end
45
- end
@@ -1,28 +0,0 @@
1
- module ActiveAdmin
2
- module Dashboards
3
- class SectionRenderer < ::ActiveAdmin::Renderer
4
-
5
- def to_html(section)
6
- @section = section
7
- content_tag :div, title_wrapped + content_wrapped, :class => 'dashboard_section', :id => "#{section.name.to_s.downcase.gsub(' ', '_')}_dashboard_section"
8
- end
9
-
10
- def title_wrapped
11
- content_tag :h3, title
12
- end
13
-
14
- def title
15
- @section.name.to_s.titleize
16
- end
17
-
18
- def content_wrapped
19
- content_tag :div, content, :class => 'dashboard_section_content'
20
- end
21
-
22
- def content
23
- instance_eval(&@section.block)
24
- end
25
-
26
- end
27
- end
28
- end
@@ -1,189 +0,0 @@
1
- module ActiveAdmin
2
- module Filters
3
-
4
- def self.included(base)
5
- base.extend ClassMethods
6
- base.send :helper_method, :filters_config
7
- end
8
-
9
- module ClassMethods
10
- def filter(attribute, options = {})
11
- return false if attribute.nil?
12
- @filters ||= []
13
- @filters << options.merge(:attribute => attribute)
14
- end
15
-
16
- def filters_config
17
- @filters && @filters.any? ? @filters : default_filters_config
18
- end
19
-
20
- def reset_filters!
21
- @filters = []
22
- end
23
-
24
- # Returns a sane set of filters by default for the object
25
- def default_filters_config
26
- default_association_filters + default_content_filters
27
- end
28
-
29
- # Returns a default set of filters for the associations
30
- def default_association_filters
31
- if resource_class.respond_to?(:reflections)
32
- resource_class.reflections.collect{|name, r| { :attribute => name }}
33
- else
34
- []
35
- end
36
- end
37
-
38
- # Returns a default set of filters for the content columns
39
- def default_content_filters
40
- if resource_class.respond_to?(:content_columns)
41
- resource_class.content_columns.collect{|c| { :attribute => c.name.to_sym } }
42
- else
43
- []
44
- end
45
- end
46
- end
47
-
48
-
49
- def filters_config
50
- self.class.filters_config
51
- end
52
-
53
-
54
- class FormBuilder < FormBuilder
55
-
56
- def filter(method, options = {})
57
- return "" if method.nil? || method == ""
58
- options[:as] ||= default_filter_type(method)
59
- return "" unless options[:as]
60
- content = skip_form_buffers do
61
- send("filter_#{options.delete(:as)}_input", method, options)
62
- end
63
- @form_buffers.last << template.content_tag(:div, content, :class => "filter-form-field")
64
- end
65
-
66
- protected
67
-
68
- def filter_string_input(method, options = {})
69
- field_name = "#{method}_contains"
70
-
71
- [ label(field_name, "Search #{method.to_s.titlecase}"),
72
- text_field(field_name)
73
- ].join("\n").html_safe
74
- end
75
-
76
- def filter_date_range_input(method, options = {})
77
- gt_field_name = "#{method}_gte"
78
- lt_field_name = "#{method}_lte"
79
-
80
- [ label(gt_field_name, method.to_s.titlecase),
81
- filter_date_text_field(gt_field_name),
82
- " - ",
83
- filter_date_text_field(lt_field_name)
84
- ].join("\n").html_safe
85
- end
86
-
87
- def filter_date_text_field(method)
88
- current_value = @object.send(method)
89
- text_field(method, :size => 12, :class => "datepicker", :max => 10, :value => current_value.respond_to?(:strftime) ? current_value.strftime("%Y-%m-%d") : "")
90
- end
91
-
92
- def filter_numeric_input(method, options = {})
93
- filters = numeric_filters_for_method(method, options.delete(:filters) || default_numeric_filters)
94
- current_filter = current_numeric_scope(filters)
95
- filter_select = @template.select_tag '', @template.options_for_select(filters, current_filter),
96
- :onchange => "document.getElementById('#{method}_numeric').name = 'q[' + this.value + ']';"
97
- filter_input = text_field current_filter, :size => 10, :id => "#{method}_numeric"
98
-
99
- [ label(method),
100
- filter_select,
101
- " ",
102
- filter_input
103
- ].join("\n").html_safe
104
- end
105
-
106
- def numeric_filters_for_method(method, filters)
107
- filters.collect{|scope| [scope[0], [method,scope[1]].join("_") ] }
108
- end
109
-
110
- # Returns the scope for which we are currently searching. If no search is available
111
- # it returns the first scope
112
- def current_numeric_scope(filters)
113
- filters[1..-1].inject(filters.first){|a,b| object.send(b[1].to_sym) ? b : a }[1]
114
- end
115
-
116
- def default_numeric_filters
117
- [['Equal To', 'eq'], ['Greater Than', 'gt'], ['Less Than', 'lt']]
118
- end
119
-
120
- def filter_select_input(method, options = {})
121
- association_name = method.to_s.gsub(/_id$/, '').to_sym
122
- input_name = (generate_association_input_name(method).to_s + "_eq").to_sym
123
- collection = find_collection_for_column(association_name, options)
124
-
125
- [ label(input_name, method.to_s.titlecase),
126
- select(input_name, collection, options.merge(:include_blank => 'Any'))
127
- ].join("\n").html_safe
128
- end
129
-
130
- def filter_check_boxes_input(method, options = {})
131
- input_name = (generate_association_input_name(method).to_s + "_in").to_sym
132
- collection = find_collection_for_column(method, options)
133
- selected_values = @object.send(input_name) || []
134
- checkboxes = collection.map do |c|
135
- label = c.is_a?(Array) ? c.first : c
136
- value = c.is_a?(Array) ? c.last : c
137
- "<label><input type=\"checkbox\" name=\"q[#{input_name}][]\" value=\"#{value}\" #{selected_values.include?(value) ? "checked" : ""}/> #{label}</label>"
138
- end.join("\n").html_safe
139
-
140
- [ label(input_name, method.to_s.titlecase),
141
- checkboxes
142
- ].join("\n").html_safe
143
- end
144
-
145
- # Override the standard finder to accept a proc
146
- def find_collection_for_column(method, options = {})
147
- options = options.dup
148
- case options[:collection]
149
- when Proc
150
- options[:collection] = options[:collection].call
151
- end
152
- super(method, options)
153
- end
154
-
155
- # Returns the default filter type for a given attribute
156
- def default_filter_type(method)
157
- if column = column_for(method)
158
- case column.type
159
- when :date, :datetime
160
- return :date_range
161
- when :string, :text
162
- return :string
163
- when :integer
164
- return :select if method.to_s =~ /_id$/
165
- return :numeric
166
- when :float, :decimal
167
- return :numeric
168
- end
169
- end
170
-
171
- if reflection = reflection_for(method)
172
- return :select if reflection.macro == :belongs_to
173
- end
174
- end
175
-
176
- # Returns the column for an attribute on the object being searched
177
- # if it exists. Otherwise returns nil
178
- def column_for(method)
179
- @object.base.columns_hash[method.to_s] if @object.base.respond_to?(:columns_hash)
180
- end
181
-
182
- # Returns the association reflection for the method if it exists
183
- def reflection_for(method)
184
- @object.base.reflect_on_association(method) if @object.base.respond_to?(:reflect_on_association)
185
- end
186
-
187
- end
188
- end
189
- end
@@ -1,11 +0,0 @@
1
- module ActiveAdmin
2
- module Pages
3
-
4
- autoload :Base, 'active_admin/pages/base'
5
- autoload :Index, 'active_admin/pages/index'
6
- autoload :New, 'active_admin/pages/new'
7
- autoload :Show, 'active_admin/pages/show'
8
- autoload :Edit, 'active_admin/pages/edit'
9
-
10
- end
11
- end
@@ -1,92 +0,0 @@
1
- module ActiveAdmin
2
- module Pages
3
- class Base < ::ActiveAdmin::Renderer
4
-
5
- def breadcrumb(separator = "/")
6
- content_tag :span, :class => "breadcrumb" do
7
- @breadcrumbs.map { |txt, path| link_to_unless((path.blank? || current_page?(path)), h(txt), path) }.join(" #{content_tag(:span, separator, :class => "breadcrumb_sep")} ")
8
- end
9
- end
10
-
11
- def main_content
12
- "Please implement #{self.class.name}#main_content to display content.".html_safe
13
- end
14
-
15
- def title_bar
16
- content_for :title_bar do
17
- [breadcrumb, title_tag, action_items].join.html_safe
18
- end
19
- end
20
-
21
- def title_tag
22
- content_tag :h2, title, :id => 'page_title'
23
- end
24
-
25
- def title
26
- self.class.name
27
- end
28
-
29
- # Set's the page title for the layout to render
30
- def set_page_title
31
- set_ivar_on_view "@page_title", title
32
- end
33
-
34
- def action_items_renderer
35
- ActiveAdmin::ActionItems::Renderer
36
- end
37
-
38
- def action_items
39
- items = controller.class.action_items_for(params[:action])
40
- action_items_renderer.new(self).to_html(items)
41
- end
42
-
43
- # Returns the renderer class to use to render the sidebar
44
- #
45
- # You could override this method and return your own custom
46
- # sidebar renderer
47
- def sidebar_renderer
48
- ActiveAdmin::Sidebar::Renderer
49
- end
50
-
51
- # Returns the sidebar sections to render for the current action
52
- def sidebar_sections
53
- controller.class.sidebar_sections_for(params[:action])
54
- end
55
-
56
- # Renders the sidebar
57
- def sidebar
58
- content_for :sidebar do
59
- sidebar_renderer.new(self).to_html(sidebar_sections)
60
- end
61
- end
62
-
63
- # Renders the content for the footer
64
- def footer
65
- content_for :footer do
66
- content_tag :p, "Powered by #{link_to("Active Admin", "http://www.activeadmin.info")} #{ActiveAdmin::VERSION}".html_safe
67
- end
68
- end
69
-
70
- def flash_messages
71
- content_for :flash_messages do
72
- if flash.keys.any?
73
- content_tag :div, :class => 'flashes' do
74
- flash.collect do |type, message|
75
- content_tag :div, message, :class => "flash flash_#{type}"
76
- end.join
77
- end
78
- end
79
- end
80
- end
81
-
82
- def to_html
83
- set_page_title
84
- title_bar
85
- flash_messages
86
- footer
87
- sidebar
88
- main_content
89
- end
90
- end
91
- end
92
- end