admin_assistant 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +16 -0
- data/Rakefile +34 -6
- data/VERSION +1 -0
- data/admin_assistant.gemspec +440 -0
- data/doc/img/blog_posts-index.png +0 -0
- data/install.rb +25 -4
- data/lib/admin_assistant/active_record_column.rb +133 -45
- data/lib/admin_assistant/association_target.rb +16 -3
- data/lib/admin_assistant/belongs_to_column.rb +18 -10
- data/lib/admin_assistant/builder.rb +67 -30
- data/lib/admin_assistant/column.rb +153 -71
- data/lib/admin_assistant/date_time_range_end_point_selector.rb +340 -0
- data/lib/admin_assistant/default_search_column.rb +3 -7
- data/lib/admin_assistant/form_view.rb +114 -10
- data/lib/admin_assistant/has_many_column.rb +56 -0
- data/lib/admin_assistant/index.rb +220 -83
- data/lib/admin_assistant/polymorphic_belongs_to_column.rb +1 -1
- data/lib/admin_assistant/request/base.rb +196 -67
- data/lib/admin_assistant/request/create.rb +55 -7
- data/lib/admin_assistant/request/edit.rb +1 -2
- data/lib/admin_assistant/request/index.rb +16 -9
- data/lib/admin_assistant/request/new.rb +19 -7
- data/lib/admin_assistant/request/update.rb +28 -13
- data/lib/admin_assistant/search.rb +17 -2
- data/lib/admin_assistant/virtual_column.rb +15 -7
- data/lib/admin_assistant.rb +101 -81
- data/lib/javascripts/admin_assistant.js +1 -1
- data/lib/stylesheets/activescaffold.css +6 -1
- data/lib/stylesheets/default.css +17 -0
- data/lib/views/form.html.erb +7 -3
- data/lib/views/index.html.erb +13 -8
- data/lib/views/multi_form.html.erb +71 -0
- data/lib/views/show.html.erb +4 -4
- data/test_rails_app/README +256 -0
- data/test_rails_app/Rakefile +13 -0
- data/test_rails_app/app/controllers/admin/appointments2_controller.rb +15 -0
- data/test_rails_app/app/controllers/admin/appointments_controller.rb +11 -0
- data/test_rails_app/app/controllers/admin/blog_posts2_controller.rb +138 -0
- data/test_rails_app/app/controllers/admin/blog_posts3_controller.rb +76 -0
- data/test_rails_app/app/controllers/admin/blog_posts4_controller.rb +21 -0
- data/test_rails_app/app/controllers/admin/blog_posts5_controller.rb +27 -0
- data/test_rails_app/app/controllers/admin/blog_posts6_controller.rb +10 -0
- data/test_rails_app/app/controllers/admin/blog_posts_controller.rb +8 -0
- data/test_rails_app/app/controllers/admin/blog_posts_custom_new_and_edit_controller.rb +15 -0
- data/test_rails_app/app/controllers/admin/blog_posts_read_only_controller.rb +19 -0
- data/test_rails_app/app/controllers/admin/bookmarks_controller.rb +11 -0
- data/test_rails_app/app/controllers/admin/comments2_controller.rb +14 -0
- data/test_rails_app/app/controllers/admin/comments_controller.rb +12 -0
- data/test_rails_app/app/controllers/admin/file_column_images2_controller.rb +10 -0
- data/test_rails_app/app/controllers/admin/file_column_images_controller.rb +6 -0
- data/test_rails_app/app/controllers/admin/images2_controller.rb +11 -0
- data/test_rails_app/app/controllers/admin/images_controller.rb +6 -0
- data/test_rails_app/app/controllers/admin/misconfigured1_controller.rb +7 -0
- data/test_rails_app/app/controllers/admin/not_migrated_yets_controller.rb +9 -0
- data/test_rails_app/app/controllers/admin/product_categories2_controller.rb +7 -0
- data/test_rails_app/app/controllers/admin/product_categories_controller.rb +5 -0
- data/test_rails_app/app/controllers/admin/products2_controller.rb +15 -0
- data/test_rails_app/app/controllers/admin/products_controller.rb +31 -0
- data/test_rails_app/app/controllers/admin/television_airings_controller.rb +5 -0
- data/test_rails_app/app/controllers/admin/television_time_slots_controller.rb +5 -0
- data/test_rails_app/app/controllers/admin/users2_controller.rb +10 -0
- data/test_rails_app/app/controllers/admin/users_controller.rb +63 -0
- data/test_rails_app/app/controllers/application.rb +16 -0
- data/test_rails_app/app/controllers/application_controller.rb +16 -0
- data/test_rails_app/app/controllers/blog_posts_controller.rb +5 -0
- data/test_rails_app/app/helpers/admin/appointments2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/appointments_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts2_helper.rb +27 -0
- data/test_rails_app/app/helpers/admin/blog_posts3_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts4_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts6_helper.rb +16 -0
- data/test_rails_app/app/helpers/admin/blog_posts_custom_new_and_edit_helper.rb +29 -0
- data/test_rails_app/app/helpers/admin/blog_posts_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/blog_posts_read_only_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/bookmarks_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/comments2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/comments_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/file_column_images2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/file_column_images_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/images2_helper.rb +8 -0
- data/test_rails_app/app/helpers/admin/images_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/misconfigured1_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/not_migrated_yets_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/product_categories2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/product_categories_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/products2_helper.rb +3 -0
- data/test_rails_app/app/helpers/admin/products_helper.rb +6 -0
- data/test_rails_app/app/helpers/admin/television_airings_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/television_time_slots_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/users2_helper.rb +2 -0
- data/test_rails_app/app/helpers/admin/users_helper.rb +25 -0
- data/test_rails_app/app/helpers/application_helper.rb +3 -0
- data/test_rails_app/app/helpers/blog_posts_helper.rb +2 -0
- data/test_rails_app/app/models/appointment.rb +5 -0
- data/test_rails_app/app/models/blog_post.rb +14 -0
- data/test_rails_app/app/models/blog_post_tag.rb +6 -0
- data/test_rails_app/app/models/bookmark.rb +6 -0
- data/test_rails_app/app/models/comment.rb +4 -0
- data/test_rails_app/app/models/file_column_image.rb +3 -0
- data/test_rails_app/app/models/image.rb +3 -0
- data/test_rails_app/app/models/not_migrated_yet.rb +2 -0
- data/test_rails_app/app/models/product.rb +7 -0
- data/test_rails_app/app/models/product_category.rb +9 -0
- data/test_rails_app/app/models/tag.rb +4 -0
- data/test_rails_app/app/models/television_airing.rb +3 -0
- data/test_rails_app/app/models/television_time_slot.rb +11 -0
- data/test_rails_app/app/models/user.rb +14 -0
- data/test_rails_app/app/views/admin/appointments/_subject_input.html.erb +2 -0
- data/test_rails_app/app/views/admin/appointments2/_time_input.html.erb +31 -0
- data/test_rails_app/app/views/admin/blog_posts2/_after_form.html.erb +5 -0
- data/test_rails_app/app/views/admin/blog_posts2/_after_index.html.erb +1 -0
- data/test_rails_app/app/views/admin/blog_posts2/_after_tags_input.html.erb +16 -0
- data/test_rails_app/app/views/admin/blog_posts2/_before_index.html.erb +2 -0
- data/test_rails_app/app/views/admin/blog_posts5/_after_index_header.html.erb +8 -0
- data/test_rails_app/app/views/admin/blog_posts_read_only/_body_for_show.html.erb +1 -0
- data/test_rails_app/app/views/admin/products/_name_input.html.erb +2 -0
- data/test_rails_app/app/views/admin/products/_percent_off_input.html.erb +2 -0
- data/test_rails_app/app/views/admin/products/_price_input.html.erb +10 -0
- data/test_rails_app/app/views/blog_posts/show.html.erb +13 -0
- data/test_rails_app/app/views/layouts/admin.html.erb +31 -0
- data/test_rails_app/config/boot.rb +109 -0
- data/test_rails_app/config/database.yml +28 -0
- data/test_rails_app/config/environment.rb +78 -0
- data/test_rails_app/config/environments/development.rb +17 -0
- data/test_rails_app/config/environments/production.rb +24 -0
- data/test_rails_app/config/environments/test.rb +24 -0
- data/test_rails_app/config/initializers/inflections.rb +10 -0
- data/test_rails_app/config/initializers/mime_types.rb +5 -0
- data/test_rails_app/config/initializers/new_rails_defaults.rb +17 -0
- data/test_rails_app/config/locales/en.yml +5 -0
- data/test_rails_app/config/routes.rb +43 -0
- data/test_rails_app/db/migrate/20090213215514_create_blog_posts.rb +12 -0
- data/test_rails_app/db/migrate/20090217225542_add_body_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090221220917_create_tags.rb +13 -0
- data/test_rails_app/db/migrate/20090221220947_create_blog_post_tags.rb +14 -0
- data/test_rails_app/db/migrate/20090222162204_add_textile_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090222163231_add_published_at_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090301191722_create_images.rb +16 -0
- data/test_rails_app/db/migrate/20090305165345_create_accounts.rb +14 -0
- data/test_rails_app/db/migrate/20090307225027_rename_accounts_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090307225750_add_user_id_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090309185114_change_blog_posts_textile.rb +9 -0
- data/test_rails_app/db/migrate/20090309193635_create_products.rb +14 -0
- data/test_rails_app/db/migrate/20090309203056_create_comments.rb +15 -0
- data/test_rails_app/db/migrate/20090323005947_create_file_column_images.rb +12 -0
- data/test_rails_app/db/migrate/20090326160049_add_birthday_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090326223606_add_state_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090503134004_add_file_column_image_to_products.rb +9 -0
- data/test_rails_app/db/migrate/20090617173651_create_bookmarks.rb +15 -0
- data/test_rails_app/db/migrate/20090624165355_add_tags_string_to_blog_post.rb +9 -0
- data/test_rails_app/db/migrate/20090625144313_add_avatar_fields_to_user.rb +11 -0
- data/test_rails_app/db/migrate/20090629202956_add_merged_into_to_blog_posts.rb +9 -0
- data/test_rails_app/db/migrate/20090701171857_add_force_textile_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20090704163647_add_deleted_at_to_products.rb +9 -0
- data/test_rails_app/db/migrate/20090704173800_add_sale_fields_to_products.rb +13 -0
- data/test_rails_app/db/migrate/20090714024501_create_product_categories.rb +15 -0
- data/test_rails_app/db/migrate/20090819162835_add_admin_level_to_users.rb +9 -0
- data/test_rails_app/db/migrate/20091115134559_add_first_and_last_names_to_users.rb +11 -0
- data/test_rails_app/db/migrate/20091221011256_add_position_to_product_categories.rb +9 -0
- data/test_rails_app/db/migrate/20091222160814_create_appointments.rb +14 -0
- data/test_rails_app/db/migrate/20091227224547_add_user_id_to_appointments.rb +9 -0
- data/test_rails_app/db/migrate/20100214213359_create_television_time_slots.rb +13 -0
- data/test_rails_app/db/migrate/20100214213451_create_television_airings.rb +15 -0
- data/test_rails_app/doc/README_FOR_APP +5 -0
- data/test_rails_app/lib/tasks/rspec.rake +163 -0
- data/test_rails_app/public/404.html +30 -0
- data/test_rails_app/public/422.html +30 -0
- data/test_rails_app/public/500.html +33 -0
- data/test_rails_app/public/dispatch.cgi +10 -0
- data/test_rails_app/public/dispatch.fcgi +24 -0
- data/test_rails_app/public/dispatch.rb +10 -0
- data/test_rails_app/public/favicon.ico +0 -0
- data/test_rails_app/public/images/rails.png +0 -0
- data/test_rails_app/public/index.html +274 -0
- data/test_rails_app/public/javascripts/application.js +2 -0
- data/test_rails_app/public/javascripts/controls.js +963 -0
- data/test_rails_app/public/javascripts/dragdrop.js +973 -0
- data/test_rails_app/public/javascripts/effects.js +1128 -0
- data/test_rails_app/public/javascripts/prototype.js +4320 -0
- data/test_rails_app/public/robots.txt +5 -0
- data/test_rails_app/public/stylesheets/admin.css +3 -0
- data/test_rails_app/public/stylesheets/scaffold.css +54 -0
- data/test_rails_app/script/about +4 -0
- data/test_rails_app/script/autospec +5 -0
- data/test_rails_app/script/console +3 -0
- data/test_rails_app/script/dbconsole +3 -0
- data/test_rails_app/script/destroy +3 -0
- data/test_rails_app/script/generate +3 -0
- data/test_rails_app/script/performance/benchmarker +3 -0
- data/test_rails_app/script/performance/profiler +3 -0
- data/test_rails_app/script/performance/request +3 -0
- data/test_rails_app/script/plugin +3 -0
- data/test_rails_app/script/populate_tables.rb +49 -0
- data/test_rails_app/script/process/inspector +3 -0
- data/test_rails_app/script/process/reaper +3 -0
- data/test_rails_app/script/process/spawner +3 -0
- data/test_rails_app/script/runner +3 -0
- data/test_rails_app/script/server +3 -0
- data/test_rails_app/script/spec +5 -0
- data/test_rails_app/script/spec_server +125 -0
- data/test_rails_app/spec/controllers/admin/appointments2_controller_spec.rb +88 -0
- data/test_rails_app/spec/controllers/admin/appointments_controller_spec.rb +419 -0
- data/test_rails_app/spec/controllers/admin/blog_posts2_controller_spec.rb +1021 -0
- data/test_rails_app/spec/controllers/admin/blog_posts3_controller_spec.rb +532 -0
- data/test_rails_app/spec/controllers/admin/blog_posts4_controller_spec.rb +231 -0
- data/test_rails_app/spec/controllers/admin/blog_posts5_controller_spec.rb +77 -0
- data/test_rails_app/spec/controllers/admin/blog_posts6_controller_spec.rb +49 -0
- data/test_rails_app/spec/controllers/admin/blog_posts_controller_spec.rb +987 -0
- data/test_rails_app/spec/controllers/admin/blog_posts_custom_new_and_edit_controller_spec.rb +99 -0
- data/test_rails_app/spec/controllers/admin/blog_posts_read_only_controller_spec.rb +94 -0
- data/test_rails_app/spec/controllers/admin/bookmarks_controller_spec.rb +505 -0
- data/test_rails_app/spec/controllers/admin/comments2_controller_spec.rb +70 -0
- data/test_rails_app/spec/controllers/admin/comments_controller_spec.rb +82 -0
- data/test_rails_app/spec/controllers/admin/file_column_images2_controller_spec.rb +25 -0
- data/test_rails_app/spec/controllers/admin/file_column_images_controller_spec.rb +82 -0
- data/test_rails_app/spec/controllers/admin/images2_controller_spec.rb +44 -0
- data/test_rails_app/spec/controllers/admin/images_controller_spec.rb +97 -0
- data/test_rails_app/spec/controllers/admin/misconfigured1_controller_spec.rb +21 -0
- data/test_rails_app/spec/controllers/admin/not_migrated_yets_controller_spec.rb +10 -0
- data/test_rails_app/spec/controllers/admin/product_categories2_controller_spec.rb +215 -0
- data/test_rails_app/spec/controllers/admin/product_categories_controller_spec.rb +19 -0
- data/test_rails_app/spec/controllers/admin/products2_controller_spec.rb +203 -0
- data/test_rails_app/spec/controllers/admin/products_controller_spec.rb +255 -0
- data/test_rails_app/spec/controllers/admin/television_airings_controller_spec.rb +32 -0
- data/test_rails_app/spec/controllers/admin/television_time_slots_controller_spec.rb +10 -0
- data/test_rails_app/spec/controllers/admin/users2_controller_spec.rb +65 -0
- data/test_rails_app/spec/controllers/admin/users_controller_spec.rb +344 -0
- data/test_rails_app/spec/controllers/blog_posts_controller_spec.rb +13 -0
- data/test_rails_app/spec/data/ruby_throated.jpg +0 -0
- data/test_rails_app/spec/data/tweenbot.jpg +0 -0
- data/test_rails_app/spec/fixtures/appointments.yml +9 -0
- data/test_rails_app/spec/fixtures/blog_post_tags.yml +9 -0
- data/test_rails_app/spec/fixtures/blog_posts.yml +7 -0
- data/test_rails_app/spec/fixtures/bookmarks.yml +11 -0
- data/test_rails_app/spec/fixtures/comments.yml +11 -0
- data/test_rails_app/spec/fixtures/file_column_images.yml +7 -0
- data/test_rails_app/spec/fixtures/images.yml +7 -0
- data/test_rails_app/spec/fixtures/not_migrated_yets.yml +7 -0
- data/test_rails_app/spec/fixtures/product_categories.yml +7 -0
- data/test_rails_app/spec/fixtures/products.yml +9 -0
- data/test_rails_app/spec/fixtures/tags.yml +7 -0
- data/test_rails_app/spec/fixtures/television_airings.yml +11 -0
- data/test_rails_app/spec/fixtures/television_time_slots.yml +7 -0
- data/test_rails_app/spec/fixtures/users.yml +9 -0
- data/test_rails_app/spec/helpers/admin/appointments2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/appointments_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts3_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts4_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts_custom_new_and_edit_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/blog_posts_read_only_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/bookmarks_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/comments2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/comments_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/file_column_images2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/file_column_images_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/images2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/images_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/misconfigured1_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/not_migrated_yets_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/product_categories2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/product_categories_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/products2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/products_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/television_airings_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/television_time_slots_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/users2_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/admin/users_helper_spec.rb +11 -0
- data/test_rails_app/spec/helpers/blog_posts_helper_spec.rb +11 -0
- data/test_rails_app/spec/models/appointment_spec.rb +16 -0
- data/test_rails_app/spec/models/blog_post_spec.rb +13 -0
- data/test_rails_app/spec/models/blog_post_tag_spec.rb +14 -0
- data/test_rails_app/spec/models/bookmark_spec.rb +15 -0
- data/test_rails_app/spec/models/comment_spec.rb +15 -0
- data/test_rails_app/spec/models/file_column_image_spec.rb +12 -0
- data/test_rails_app/spec/models/image_spec.rb +12 -0
- data/test_rails_app/spec/models/not_migrated_yet_spec.rb +15 -0
- data/test_rails_app/spec/models/product_category_spec.rb +15 -0
- data/test_rails_app/spec/models/product_spec.rb +14 -0
- data/test_rails_app/spec/models/tag_spec.rb +13 -0
- data/test_rails_app/spec/models/television_airing_spec.rb +15 -0
- data/test_rails_app/spec/models/television_time_slot_spec.rb +13 -0
- data/test_rails_app/spec/models/user_spec.rb +14 -0
- data/test_rails_app/spec/rcov.opts +2 -0
- data/test_rails_app/spec/spec.opts +4 -0
- data/test_rails_app/spec/spec_helper.rb +88 -0
- data/test_rails_app/spec/spec_or_test_helper.rb +49 -0
- data/test_rails_app/test/fixtures/file_column_images.yml +7 -0
- data/test_rails_app/test/integration/admin_blog_posts2_integration_test.rb +16 -0
- data/test_rails_app/test/integration/admin_blog_posts5_integration_test.rb +19 -0
- data/test_rails_app/test/integration/admin_blog_posts_integration_test.rb +25 -0
- data/test_rails_app/test/test_helper.rb +28 -0
- data/test_rails_app/vendor/plugins/file_column/CHANGELOG +69 -0
- data/test_rails_app/vendor/plugins/file_column/README +54 -0
- data/test_rails_app/vendor/plugins/file_column/Rakefile +36 -0
- data/test_rails_app/vendor/plugins/file_column/TODO +6 -0
- data/test_rails_app/vendor/plugins/file_column/init.rb +13 -0
- data/test_rails_app/vendor/plugins/file_column/lib/file_column.rb +723 -0
- data/test_rails_app/vendor/plugins/file_column/lib/file_column_helper.rb +150 -0
- data/test_rails_app/vendor/plugins/file_column/lib/file_compat.rb +28 -0
- data/test_rails_app/vendor/plugins/file_column/lib/magick_file_column.rb +260 -0
- data/test_rails_app/vendor/plugins/file_column/lib/rails_file_column.rb +19 -0
- data/test_rails_app/vendor/plugins/file_column/lib/test_case.rb +124 -0
- data/test_rails_app/vendor/plugins/file_column/lib/validations.rb +112 -0
- data/test_rails_app/vendor/plugins/file_column/test/abstract_unit.rb +63 -0
- data/test_rails_app/vendor/plugins/file_column/test/connection.rb +17 -0
- data/test_rails_app/vendor/plugins/file_column/test/file_column_helper_test.rb +97 -0
- data/test_rails_app/vendor/plugins/file_column/test/file_column_test.rb +650 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/entry.rb +32 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/invalid-image.jpg +1 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/kerb.jpg +0 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/mysql.sql +25 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/schema.rb +10 -0
- data/test_rails_app/vendor/plugins/file_column/test/fixtures/skanthak.png +0 -0
- data/test_rails_app/vendor/plugins/file_column/test/magick_test.rb +380 -0
- data/test_rails_app/vendor/plugins/file_column/test/magick_view_only_test.rb +21 -0
- data/vendor/ar_query/ar_query.gemspec +16 -0
- data/website/_layouts/api.html +39 -0
- data/website/_layouts/default.html +34 -0
- data/website/api/core.markdown +106 -0
- data/website/api/destroy.markdown +25 -0
- data/website/api/form.markdown +291 -0
- data/website/api/idx.markdown +286 -0
- data/website/api/index.markdown +147 -0
- data/website/api/search.markdown +108 -0
- data/website/api/show.markdown +22 -0
- data/website/community.markdown +27 -0
- data/website/css/lightbox.css +29 -0
- data/website/css/main.css +70 -0
- data/website/design_principles.markdown +50 -0
- data/website/getting_started.markdown +10 -0
- data/website/img/blog_posts-index.png +0 -0
- data/website/img/blog_posts-search.png +0 -0
- data/website/img/lightbox/bullet.gif +0 -0
- data/website/img/lightbox/close.gif +0 -0
- data/website/img/lightbox/closelabel.gif +0 -0
- data/website/img/lightbox/donate-button.gif +0 -0
- data/website/img/lightbox/download-icon.gif +0 -0
- data/website/img/lightbox/image-1.jpg +0 -0
- data/website/img/lightbox/loading.gif +0 -0
- data/website/img/lightbox/nextlabel.gif +0 -0
- data/website/img/lightbox/prevlabel.gif +0 -0
- data/website/img/lightbox/thumb-1.jpg +0 -0
- data/website/img/screen1-thumb.png +0 -0
- data/website/img/screen1.png +0 -0
- data/website/img/screen10-thumb.png +0 -0
- data/website/img/screen10.png +0 -0
- data/website/img/screen11-thumb.png +0 -0
- data/website/img/screen11.png +0 -0
- data/website/img/screen2-thumb.png +0 -0
- data/website/img/screen2.png +0 -0
- data/website/img/screen3-thumb.png +0 -0
- data/website/img/screen3.png +0 -0
- data/website/img/screen4-thumb.png +0 -0
- data/website/img/screen4.png +0 -0
- data/website/img/screen5-thumb.png +0 -0
- data/website/img/screen5.png +0 -0
- data/website/img/screen6-thumb.png +0 -0
- data/website/img/screen6.png +0 -0
- data/website/img/screen7-thumb.png +0 -0
- data/website/img/screen7.png +0 -0
- data/website/img/screen8-thumb.png +0 -0
- data/website/img/screen8.png +0 -0
- data/website/img/screen9-thumb.png +0 -0
- data/website/img/screen9.png +0 -0
- data/website/img/user-form.png +0 -0
- data/website/index.markdown +35 -0
- data/website/js/builder.js +136 -0
- data/website/js/effects.js +1122 -0
- data/website/js/lightbox.js +497 -0
- data/website/js/prototype.js +4221 -0
- data/website/js/scriptaculous.js +58 -0
- data/website/quick_start.markdown +44 -0
- data/website/screenshots.markdown +27 -0
- data/website/tutorial.markdown +56 -0
- metadata +391 -23
@@ -2,25 +2,21 @@ class AdminAssistant
|
|
2
2
|
class DefaultSearchColumn < Column
|
3
3
|
def initialize(model_class, opts)
|
4
4
|
@model_class = model_class
|
5
|
-
@
|
5
|
+
@fields_to_match = opts[:fields_to_match] || []
|
6
6
|
end
|
7
7
|
|
8
8
|
def add_to_query_condition(ar_query_condition, search)
|
9
9
|
unless search.params.blank?
|
10
10
|
ar_query_condition.ar_query.boolean_join = :and
|
11
11
|
ar_query_condition.boolean_join = :or
|
12
|
-
|
13
|
-
&:name
|
14
|
-
)
|
15
|
-
names_to_search.concat @fields_to_include
|
16
|
-
names_to_search.uniq.each do |field_name|
|
12
|
+
@fields_to_match.each do |field_name|
|
17
13
|
ar_query_condition.sqls << "LOWER(#{field_name}) like LOWER(?)"
|
18
14
|
ar_query_condition.bind_vars << "%#{search.params}%"
|
19
15
|
end
|
20
16
|
end
|
21
17
|
end
|
22
18
|
|
23
|
-
def attributes_for_search_object(search_params)
|
19
|
+
def attributes_for_search_object(search_params, compare_to_range)
|
24
20
|
{}
|
25
21
|
end
|
26
22
|
|
@@ -1,10 +1,5 @@
|
|
1
1
|
class AdminAssistant
|
2
|
-
|
3
|
-
def initialize(record, admin_assistant, action_view)
|
4
|
-
@record, @admin_assistant, @action_view =
|
5
|
-
record, admin_assistant, action_view
|
6
|
-
end
|
7
|
-
|
2
|
+
module FormViewMethods
|
8
3
|
def action
|
9
4
|
if %w(new create).include?(controller.action_name)
|
10
5
|
'create'
|
@@ -13,6 +8,21 @@ class AdminAssistant
|
|
13
8
|
end
|
14
9
|
end
|
15
10
|
|
11
|
+
def controller
|
12
|
+
@action_view.controller
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class FormView
|
17
|
+
include FormViewMethods
|
18
|
+
|
19
|
+
attr_reader :record
|
20
|
+
|
21
|
+
def initialize(record, admin_assistant, action_view)
|
22
|
+
@record, @admin_assistant, @action_view =
|
23
|
+
record, admin_assistant, action_view
|
24
|
+
end
|
25
|
+
|
16
26
|
def column_names
|
17
27
|
if %w(new create).include?(@action_view.action_name)
|
18
28
|
settings.columns_for_new
|
@@ -27,10 +37,6 @@ class AdminAssistant
|
|
27
37
|
}
|
28
38
|
end
|
29
39
|
|
30
|
-
def controller
|
31
|
-
@action_view.controller
|
32
|
-
end
|
33
|
-
|
34
40
|
def extra_submit_buttons
|
35
41
|
settings.submit_buttons
|
36
42
|
end
|
@@ -60,4 +66,102 @@ class AdminAssistant
|
|
60
66
|
(@record.id ? "Edit" : "New") + " #{@admin_assistant.model_class_name}"
|
61
67
|
end
|
62
68
|
end
|
69
|
+
|
70
|
+
class MultiFormView
|
71
|
+
include FormViewMethods
|
72
|
+
|
73
|
+
def initialize(records, admin_assistant, action_view)
|
74
|
+
@records, @admin_assistant, @action_view =
|
75
|
+
records, admin_assistant, action_view
|
76
|
+
@sub_form_views = @records.map { |record|
|
77
|
+
AdminAssistant::FormView.new(record, @admin_assistant, @action_view)
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
def columns
|
82
|
+
@sub_form_views.first.columns
|
83
|
+
end
|
84
|
+
|
85
|
+
def extra_submit_buttons
|
86
|
+
@sub_form_views.first.extra_submit_buttons
|
87
|
+
end
|
88
|
+
|
89
|
+
def form_for_args
|
90
|
+
[
|
91
|
+
@records.first.class.name.underscore.to_sym,
|
92
|
+
@records,
|
93
|
+
{
|
94
|
+
:url => {:action => action},
|
95
|
+
:builder => AdminAssistant::MultiFormView::Builder,
|
96
|
+
:sub_form_views => @sub_form_views
|
97
|
+
}
|
98
|
+
]
|
99
|
+
end
|
100
|
+
|
101
|
+
def submit_value
|
102
|
+
@sub_form_views.first.submit_value
|
103
|
+
end
|
104
|
+
|
105
|
+
def title
|
106
|
+
@sub_form_views.first.title
|
107
|
+
end
|
108
|
+
|
109
|
+
class Builder < ::ActionView::Helpers::FormBuilder
|
110
|
+
def initialize(object_name, object, template, options, proc)
|
111
|
+
super(object_name, object, template, options, proc)
|
112
|
+
@sub_form_views = options[:sub_form_views]
|
113
|
+
end
|
114
|
+
|
115
|
+
def each_sub_form
|
116
|
+
@object.each_with_index do |obj, i|
|
117
|
+
builder = SubFormBuilder.new(
|
118
|
+
@object_name, obj, @template, @options, @proc, i
|
119
|
+
)
|
120
|
+
yield builder, @sub_form_views[i]
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
class SubFormBuilder
|
125
|
+
attr_reader :object, :prefix
|
126
|
+
|
127
|
+
def initialize(object_name, object, template, options, proc, position)
|
128
|
+
@object_name, @object, @template, @options, @proc =
|
129
|
+
object_name, object, template, options, proc
|
130
|
+
@default_options = @options ? @options.slice(:index) : {}
|
131
|
+
@prefix = ('a'..'z').to_a[position]
|
132
|
+
end
|
133
|
+
|
134
|
+
def method_missing(meth, *args, &block)
|
135
|
+
if my_field_helpers.include?(meth.to_s)
|
136
|
+
method = args.shift
|
137
|
+
options = args.shift || {}
|
138
|
+
@template.send(
|
139
|
+
meth,
|
140
|
+
"#{@object_name}[#{@prefix}]",
|
141
|
+
method,
|
142
|
+
objectify_options(options)
|
143
|
+
)
|
144
|
+
else
|
145
|
+
super
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def my_field_helpers
|
150
|
+
::ActionView::Helpers::FormBuilder.field_helpers -
|
151
|
+
%w(label check_box radio_button fields_for) + ['datetime_select']
|
152
|
+
end
|
153
|
+
|
154
|
+
def objectify_options(options)
|
155
|
+
@default_options.merge(options.merge(:object => @object))
|
156
|
+
end
|
157
|
+
|
158
|
+
def select(method, choices, options = {}, html_options = {})
|
159
|
+
@template.select(
|
160
|
+
"#{@object_name}[#{@prefix}]", method, choices,
|
161
|
+
objectify_options(options), @default_options.merge(html_options)
|
162
|
+
)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
63
167
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class AdminAssistant
|
2
|
+
class HasManyColumn < Column
|
3
|
+
def initialize(has_many_assoc, opts)
|
4
|
+
@has_many_assoc = has_many_assoc
|
5
|
+
@match_text_fields_in_search = opts[:match_text_fields_in_search]
|
6
|
+
end
|
7
|
+
|
8
|
+
def add_to_query_condition(ar_query_condition, search)
|
9
|
+
if @match_text_fields_in_search
|
10
|
+
if (value = search.send(name)) and !value.blank?
|
11
|
+
searchable_columns = Model.new(associated_class).searchable_columns
|
12
|
+
model_class = @has_many_assoc.active_record
|
13
|
+
sanitized_match_value = ActiveRecord::Base.sanitize("%#{value}%")
|
14
|
+
searchable_column_comparisons = searchable_columns.map { |column|
|
15
|
+
"LOWER(#{associated_class.table_name}.#{column.name}) like LOWER(#{sanitized_match_value})"
|
16
|
+
}
|
17
|
+
condition_sql = <<-CONDITION_SQL
|
18
|
+
#{model_class.table_name}.#{model_class.primary_key} in (select #{@has_many_assoc.primary_key_name} from #{associated_class.table_name} where #{searchable_column_comparisons.join(' or ')})
|
19
|
+
CONDITION_SQL
|
20
|
+
ar_query_condition.sqls << condition_sql
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def associated_class
|
26
|
+
@has_many_assoc.klass
|
27
|
+
end
|
28
|
+
|
29
|
+
def attributes_for_search_object(search_params, compare_to_range)
|
30
|
+
{name.to_sym => search_params[name]}
|
31
|
+
end
|
32
|
+
|
33
|
+
def contains?(column_name)
|
34
|
+
column_name.to_s == name
|
35
|
+
end
|
36
|
+
|
37
|
+
def model_class
|
38
|
+
@has_many_assoc.active_record
|
39
|
+
end
|
40
|
+
|
41
|
+
def name
|
42
|
+
@has_many_assoc.name.to_s
|
43
|
+
end
|
44
|
+
|
45
|
+
class FormView < AdminAssistant::VirtualColumn::FormView
|
46
|
+
end
|
47
|
+
|
48
|
+
class SearchView < AdminAssistant::Column::View
|
49
|
+
include AdminAssistant::Column::SearchViewMethods
|
50
|
+
|
51
|
+
def html(form)
|
52
|
+
"<p><label>#{label}</label> <br/>#{form.text_field(name)}</p>"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -2,80 +2,48 @@ require 'ar_query'
|
|
2
2
|
|
3
3
|
class AdminAssistant
|
4
4
|
class Index
|
5
|
-
attr_reader :controller_methods
|
5
|
+
attr_reader :admin_assistant, :controller_methods, :url_params
|
6
6
|
|
7
7
|
def initialize(admin_assistant, url_params = {}, controller_methods = {})
|
8
8
|
@admin_assistant, @url_params, @controller_methods =
|
9
9
|
admin_assistant, url_params, controller_methods
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
@admin_assistant.accumulate_belongs_to_columns
|
14
|
-
c.name.to_s == sort
|
15
|
-
}
|
12
|
+
def belongs_to_columns
|
13
|
+
@admin_assistant.accumulate_belongs_to_columns column_names
|
16
14
|
end
|
17
15
|
|
18
16
|
def column_names
|
19
|
-
settings.column_names
|
17
|
+
if settings.column_names
|
18
|
+
settings.column_names
|
19
|
+
else
|
20
|
+
model_class.columns.map(&:name).reject { |n|
|
21
|
+
%w(created_at updated_at).include?(n)
|
22
|
+
}
|
23
|
+
end
|
20
24
|
end
|
21
25
|
|
22
26
|
def columns
|
23
27
|
@admin_assistant.accumulate_columns column_names
|
24
28
|
end
|
25
|
-
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
|
30
|
+
def hidden_fields_for_search_form
|
31
|
+
if @admin_assistant.search_settings.include_params_in_form
|
32
|
+
@url_params.reject do |name,value|
|
33
|
+
name=="commit" or name=="search" or name=="action" or
|
34
|
+
name=="controller"
|
35
|
+
end
|
36
|
+
else
|
37
|
+
[]
|
34
38
|
end
|
35
|
-
fi
|
36
39
|
end
|
37
40
|
|
38
41
|
def model_class
|
39
42
|
@admin_assistant.model_class
|
40
43
|
end
|
41
44
|
|
42
|
-
def order_sql
|
43
|
-
if (sc = sort_column)
|
44
|
-
first_part = if (by_assoc = belongs_to_sort_column)
|
45
|
-
by_assoc.order_sql_field
|
46
|
-
else
|
47
|
-
sc.name
|
48
|
-
end
|
49
|
-
"#{first_part} #{sort_order}"
|
50
|
-
else
|
51
|
-
settings.sort_by
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
45
|
def records
|
56
|
-
|
57
|
-
ar_query = ARQuery.new(
|
58
|
-
:order => order_sql, :include => find_include,
|
59
|
-
:per_page => 25, :page => @url_params[:page]
|
60
|
-
)
|
61
|
-
if @controller_methods[:conditions_for_index]
|
62
|
-
sql = @controller_methods[:conditions_for_index].call
|
63
|
-
ar_query.condition_sqls << sql if sql
|
64
|
-
elsif conditions_from_settings
|
65
|
-
if conditions_from_settings.respond_to?(:call)
|
66
|
-
conditions_sql = conditions_from_settings.call @url_params
|
67
|
-
else
|
68
|
-
conditions_sql = conditions_from_settings
|
69
|
-
end
|
70
|
-
ar_query.condition_sqls << conditions_sql if conditions_sql
|
71
|
-
end
|
72
|
-
search.add_to_query(ar_query)
|
73
|
-
if settings.total_entries
|
74
|
-
ar_query.total_entries = settings.total_entries.call
|
75
|
-
end
|
76
|
-
@records = model_class.paginate :all, ar_query.to_hash
|
77
|
-
end
|
78
|
-
@records
|
46
|
+
@records ||= RecordFinder.new(self).run
|
79
47
|
end
|
80
48
|
|
81
49
|
def search
|
@@ -97,16 +65,6 @@ class AdminAssistant
|
|
97
65
|
(settings.sort_by.to_s if settings.sort_by.is_a?(Symbol))
|
98
66
|
end
|
99
67
|
|
100
|
-
def sort_column
|
101
|
-
if sort
|
102
|
-
columns.detect { |c|
|
103
|
-
c.name.to_s == sort
|
104
|
-
} || belongs_to_sort_column
|
105
|
-
elsif settings.sort_by.is_a?(Symbol)
|
106
|
-
columns.detect { |c| c.name == settings.sort_by.to_s }
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
68
|
def sort_order
|
111
69
|
@url_params[:sort_order] || 'asc'
|
112
70
|
end
|
@@ -114,6 +72,116 @@ class AdminAssistant
|
|
114
72
|
def view(action_view)
|
115
73
|
@view ||= View.new(self, action_view, @admin_assistant)
|
116
74
|
end
|
75
|
+
|
76
|
+
class RecordFinder
|
77
|
+
def initialize(index)
|
78
|
+
@index = index
|
79
|
+
end
|
80
|
+
|
81
|
+
def add_base_condition_sqls
|
82
|
+
if @index.controller_methods[:conditions_for_index]
|
83
|
+
sql = @index.controller_methods[:conditions_for_index].call
|
84
|
+
@ar_query.condition_sqls << sql if sql
|
85
|
+
elsif conditions_from_settings
|
86
|
+
if conditions_from_settings.respond_to?(:call)
|
87
|
+
conditions_sql = conditions_from_settings.call @index.url_params
|
88
|
+
else
|
89
|
+
conditions_sql = conditions_from_settings
|
90
|
+
end
|
91
|
+
@ar_query.condition_sqls << conditions_sql if conditions_sql
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def belongs_to_sort_column
|
96
|
+
@index.belongs_to_columns.detect { |c| c.name.to_s == @index.sort }
|
97
|
+
end
|
98
|
+
|
99
|
+
def cache_total_entries(total_entries)
|
100
|
+
Rails.cache.write(
|
101
|
+
total_entries_cache_key, total_entries,
|
102
|
+
:expires_in => settings.cache_total_entries
|
103
|
+
)
|
104
|
+
end
|
105
|
+
|
106
|
+
def caching_total_entries?
|
107
|
+
search.params.empty? && settings.cache_total_entries
|
108
|
+
end
|
109
|
+
|
110
|
+
def conditions_from_settings
|
111
|
+
settings.conditions
|
112
|
+
end
|
113
|
+
|
114
|
+
def find_include
|
115
|
+
fi = settings.include || []
|
116
|
+
if by_assoc = belongs_to_sort_column
|
117
|
+
fi << by_assoc.name
|
118
|
+
end
|
119
|
+
fi
|
120
|
+
end
|
121
|
+
|
122
|
+
def optimized_total_entries
|
123
|
+
if settings.total_entries
|
124
|
+
settings.total_entries.call
|
125
|
+
elsif caching_total_entries?
|
126
|
+
Rails.cache.read total_entries_cache_key
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def order_sql
|
131
|
+
if (sc = sort_column)
|
132
|
+
first_part = if (by_assoc = belongs_to_sort_column)
|
133
|
+
by_assoc.order_sql_field
|
134
|
+
else
|
135
|
+
sc.name
|
136
|
+
end
|
137
|
+
"#{first_part} #{@index.sort_order}"
|
138
|
+
else
|
139
|
+
settings.sort_by
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
def run
|
144
|
+
@ar_query = ARQuery.new(
|
145
|
+
:order => order_sql, :include => find_include,
|
146
|
+
:per_page => settings.per_page, :page => @index.url_params[:page]
|
147
|
+
)
|
148
|
+
add_base_condition_sqls
|
149
|
+
search.add_to_query @ar_query
|
150
|
+
@ar_query.total_entries = optimized_total_entries
|
151
|
+
records = @index.model_class.paginate(:all, @ar_query.to_hash)
|
152
|
+
if caching_total_entries? && @ar_query.to_hash[:total_entries].nil?
|
153
|
+
cache_total_entries records.total_entries
|
154
|
+
end
|
155
|
+
records
|
156
|
+
end
|
157
|
+
|
158
|
+
def search
|
159
|
+
@index.search
|
160
|
+
end
|
161
|
+
|
162
|
+
def settings
|
163
|
+
@index.settings
|
164
|
+
end
|
165
|
+
|
166
|
+
def sort_column
|
167
|
+
if @index.sort
|
168
|
+
@index.columns.detect { |c|
|
169
|
+
c.name.to_s == @index.sort
|
170
|
+
} || belongs_to_sort_column
|
171
|
+
elsif settings.sort_by.is_a?(Symbol)
|
172
|
+
@index.columns.detect { |c| c.name == settings.sort_by.to_s }
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def total_entries_cache_key
|
177
|
+
key =
|
178
|
+
"AdminAssistant::#{@index.admin_assistant.controller_class.name}_count"
|
179
|
+
if conditions = @ar_query.to_hash[:conditions]
|
180
|
+
key << conditions.gsub(/\W/, '_')
|
181
|
+
end
|
182
|
+
key
|
183
|
+
end
|
184
|
+
end
|
117
185
|
|
118
186
|
class View
|
119
187
|
def initialize(index, action_view, admin_assistant)
|
@@ -121,6 +189,19 @@ class AdminAssistant
|
|
121
189
|
index, action_view, admin_assistant
|
122
190
|
end
|
123
191
|
|
192
|
+
def render_after_index_header
|
193
|
+
slug = "_after_index_header.html.erb"
|
194
|
+
abs_template_file = File.join( Rails.root, 'app/views', @admin_assistant.controller_class.controller_path, slug )
|
195
|
+
if File.exist?(abs_template_file)
|
196
|
+
template = if RAILS_GEM_VERSION == '2.1.0'
|
197
|
+
File.join(@admin_assistant.controller_class.controller_path, slug)
|
198
|
+
else
|
199
|
+
abs_template_file
|
200
|
+
end
|
201
|
+
@action_view.render :file => template
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
124
205
|
def ajax_toggle_allowed?
|
125
206
|
@admin_assistant.update?
|
126
207
|
end
|
@@ -134,6 +215,17 @@ class AdminAssistant
|
|
134
215
|
@columns
|
135
216
|
end
|
136
217
|
|
218
|
+
def delete_link(record)
|
219
|
+
@action_view.link_to_remote(
|
220
|
+
'Delete',
|
221
|
+
:url => {:action => 'destroy', :id => record.id},
|
222
|
+
:confirm => 'Are you sure?',
|
223
|
+
:success =>
|
224
|
+
"Effect.Fade('#{@admin_assistant.model_class.name.underscore}_#{record.id}', {duration: 0.25})",
|
225
|
+
:method => :delete
|
226
|
+
)
|
227
|
+
end
|
228
|
+
|
137
229
|
def destroy?
|
138
230
|
@destroy ||= @admin_assistant.destroy?
|
139
231
|
end
|
@@ -142,6 +234,14 @@ class AdminAssistant
|
|
142
234
|
@edit ||= @admin_assistant.edit?
|
143
235
|
end
|
144
236
|
|
237
|
+
def edit_link(record)
|
238
|
+
@action_view.link_to 'Edit', :action => 'edit', :id => record.id
|
239
|
+
end
|
240
|
+
|
241
|
+
def new?
|
242
|
+
@new ||= @admin_assistant.new?
|
243
|
+
end
|
244
|
+
|
145
245
|
def header
|
146
246
|
if block = @index.settings.header
|
147
247
|
block.call @action_view.params
|
@@ -149,9 +249,22 @@ class AdminAssistant
|
|
149
249
|
@admin_assistant.model_class_name.pluralize.capitalize
|
150
250
|
end
|
151
251
|
end
|
252
|
+
|
253
|
+
def multi_form?
|
254
|
+
@admin_assistant.form_settings.multi?
|
255
|
+
end
|
256
|
+
|
257
|
+
def new_link
|
258
|
+
new_link_name = if multi_form?
|
259
|
+
"New #{@admin_assistant.model_class_name.pluralize}"
|
260
|
+
else
|
261
|
+
"New #{@admin_assistant.model_class_name}"
|
262
|
+
end
|
263
|
+
@action_view.link_to new_link_name, @admin_assistant.url_params(:new)
|
264
|
+
end
|
152
265
|
|
153
266
|
def right_column?
|
154
|
-
edit? or destroy? or show? or !right_column_lambdas.empty?
|
267
|
+
edit? or destroy? or show? or !right_column_lambdas.empty? or @action_view.respond_to?(:extra_right_column_links_for_index)
|
155
268
|
end
|
156
269
|
|
157
270
|
def right_column_lambdas
|
@@ -160,26 +273,13 @@ class AdminAssistant
|
|
160
273
|
end
|
161
274
|
|
162
275
|
def right_column_links(record)
|
163
|
-
links =
|
164
|
-
if
|
165
|
-
|
166
|
-
|
167
|
-
) << " "
|
168
|
-
end
|
169
|
-
if destroy?
|
170
|
-
links << @action_view.link_to_remote(
|
171
|
-
'Delete',
|
172
|
-
:url => {:action => 'destroy', :id => record.id},
|
173
|
-
:confirm => 'Are you sure?',
|
174
|
-
:success =>
|
175
|
-
"Effect.Fade('#{@admin_assistant.model_class.name.underscore}_#{record.id}')",
|
176
|
-
:method => :delete
|
177
|
-
) << ' '
|
178
|
-
end
|
179
|
-
if show?
|
276
|
+
links = []
|
277
|
+
links << edit_link(record) if render_edit_link?(record)
|
278
|
+
links << delete_link(record) if render_delete_link?(record)
|
279
|
+
if render_show_link?(record)
|
180
280
|
links << @action_view.link_to(
|
181
281
|
'Show', :action => 'show', :id => record.id
|
182
|
-
)
|
282
|
+
)
|
183
283
|
end
|
184
284
|
right_column_lambdas.each do |lambda|
|
185
285
|
link_args = lambda.call record
|
@@ -188,14 +288,51 @@ class AdminAssistant
|
|
188
288
|
if @action_view.respond_to?(:extra_right_column_links_for_index)
|
189
289
|
links << @action_view.extra_right_column_links_for_index(
|
190
290
|
record
|
191
|
-
)
|
291
|
+
)
|
192
292
|
end
|
193
|
-
links
|
293
|
+
links.join(" • ")
|
294
|
+
end
|
295
|
+
|
296
|
+
def tr_css_classes(record)
|
297
|
+
css_classes = [@action_view.cycle('odd', 'even')]
|
298
|
+
if @action_view.respond_to?(:css_class_for_index_tr)
|
299
|
+
css_classes << @action_view.css_class_for_index_tr(record)
|
300
|
+
end
|
301
|
+
css_classes.join(' ')
|
302
|
+
end
|
303
|
+
|
304
|
+
def render_new_link?
|
305
|
+
return false if @action_view.respond_to?(:link_to_new_in_index?) && !@action_view.link_to_new_in_index?
|
306
|
+
new?
|
307
|
+
end
|
308
|
+
|
309
|
+
def render_search_link?
|
310
|
+
return false if @action_view.respond_to?(:link_to_search_in_index?) && !@action_view.link_to_search_in_index?
|
311
|
+
true
|
312
|
+
end
|
313
|
+
|
314
|
+
def render_edit_link?(record)
|
315
|
+
return false if @action_view.respond_to?(:link_to_edit_in_index?) && !@action_view.link_to_edit_in_index?(record)
|
316
|
+
edit?
|
317
|
+
end
|
318
|
+
|
319
|
+
def render_delete_link?(record)
|
320
|
+
return false if @action_view.respond_to?(:link_to_delete_in_index?) && !@action_view.link_to_delete_in_index?(record)
|
321
|
+
destroy?
|
322
|
+
end
|
323
|
+
|
324
|
+
def render_show_link?(record)
|
325
|
+
return false if @action_view.respond_to?(:link_to_show_in_index?) && !@action_view.link_to_show_in_index?(record)
|
326
|
+
show?
|
194
327
|
end
|
195
328
|
|
196
329
|
def show?
|
197
330
|
@show ||= @admin_assistant.show?
|
198
331
|
end
|
332
|
+
|
333
|
+
def show_link(record)
|
334
|
+
@action_view.link_to 'Show', :action => 'show', :id => record.id
|
335
|
+
end
|
199
336
|
end
|
200
337
|
end
|
201
338
|
end
|
@@ -24,7 +24,7 @@ class AdminAssistant
|
|
24
24
|
@belongs_to_assoc.association_foreign_key
|
25
25
|
end
|
26
26
|
|
27
|
-
def attributes_for_search_object(search_params)
|
27
|
+
def attributes_for_search_object(search_params, compare_to_range)
|
28
28
|
atts = {}
|
29
29
|
atts[association_foreign_key.to_sym] =
|
30
30
|
search_params[association_foreign_key]
|