Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Categorization dashboard #114

Merged
merged 3 commits into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions app/controllers/admin/categorizations_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# frozen_string_literal: true

module Admin
class CategorizationsController < Admin::ApplicationController
# Overwrite any of the RESTful controller actions to implement custom behavior
# For example, you may want to send an email after a foo is updated.
#
# def update
# super
# send_foo_updated_email(requested_resource)
# end

# Override this method to specify custom lookup behavior.
# This will be used to set the resource for the `show`, `edit`, and `update`
# actions.
#
# def find_resource(param)
# Foo.find_by!(slug: param)
# end

# The result of this lookup will be available as `requested_resource`

# Override this if you have certain roles that require a subset
# this will be used to set the records shown on the `index` action.
#
# def scoped_resource
# if current_user.super_admin?
# resource_class
# else
# resource_class.with_less_stuff
# end
# end

# Override `resource_params` if you want to transform the submitted
# data before it's persisted. For example, the following would turn all
# empty values into nil values. It uses other APIs such as `resource_class`
# and `dashboard`:
#
# def resource_params
# params.require(resource_class.model_name.param_key).
# permit(dashboard.permitted_attributes(action_name)).
# transform_values { |value| value == "" ? nil : value }
# end

# See https://administrate-demo.herokuapp.com/customizing_controller_actions
# for more information
end
end
75 changes: 75 additions & 0 deletions app/dashboards/categorization_dashboard.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# frozen_string_literal: true

require 'administrate/base_dashboard'

class CategorizationDashboard < Administrate::BaseDashboard
# ATTRIBUTE_TYPES
# a hash that describes the type of each of the model's fields.
#
# Each different type represents an Administrate::Field object,
# which determines how the attribute is displayed
# on pages throughout the dashboard.
ATTRIBUTE_TYPES = {
id: Field::Number,
category: Field::BelongsTo,
confidence: Field::Number.with_options(decimals: 2),
detector_version: Field::String,
term: Field::BelongsTo,
created_at: Field::DateTime,
updated_at: Field::DateTime
}.freeze

# COLLECTION_ATTRIBUTES
# an array of attributes that will be displayed on the model's index page.
#
# By default, it's limited to four items to reduce clutter on index pages.
# Feel free to add, remove, or rearrange items.
COLLECTION_ATTRIBUTES = %i[
id
term
category
confidence
detector_version
].freeze
JPrevost marked this conversation as resolved.
Show resolved Hide resolved

# SHOW_PAGE_ATTRIBUTES
# an array of attributes that will be displayed on the model's show page.
SHOW_PAGE_ATTRIBUTES = %i[
id
term
category
confidence
detector_version
created_at
updated_at
].freeze

# FORM_ATTRIBUTES
# an array of attributes that will be displayed
# on the model's form (`new` and `edit`) pages.
FORM_ATTRIBUTES = %i[
category
confidence
detector_version
term
].freeze

# COLLECTION_FILTERS
# a hash that defines filters that can be used while searching via the search
# field of the dashboard.
#
# For example to add an option to search for open resources by typing "open:"
# in the search field:
#
# COLLECTION_FILTERS = {
# open: ->(resources) { resources.where(open: true) }
# }.freeze
COLLECTION_FILTERS = {}.freeze

# Overwrite this method to customize how categorizations are displayed
# across all pages of the admin dashboard.
#
# def display_resource(categorization)
# "Categorization ##{categorization.id}"
# end
end
1 change: 0 additions & 1 deletion app/dashboards/search_event_dashboard.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ class SearchEventDashboard < Administrate::BaseDashboard
COLLECTION_ATTRIBUTES = %i[
id
source
term
created_at
].freeze

Expand Down
10 changes: 6 additions & 4 deletions app/dashboards/term_dashboard.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class TermDashboard < Administrate::BaseDashboard
id: Field::Number,
phrase: Field::String,
search_events: Field::HasMany,
categorizations: Field::HasMany,
created_at: Field::DateTime,
updated_at: Field::DateTime
}.freeze
Expand All @@ -23,7 +24,7 @@ class TermDashboard < Administrate::BaseDashboard
# By default, it's limited to four items to reduce clutter on index pages.
# Feel free to add, remove, or rearrange items.
COLLECTION_ATTRIBUTES = %i[
id
categorizations
phrase
search_events
created_at
Expand All @@ -35,6 +36,7 @@ class TermDashboard < Administrate::BaseDashboard
id
phrase
search_events
categorizations
created_at
updated_at
].freeze
Expand Down Expand Up @@ -62,7 +64,7 @@ class TermDashboard < Administrate::BaseDashboard
# Overwrite this method to customize how terms are displayed
# across all pages of the admin dashboard.
#
# def display_resource(term)
# "Term ##{term.id}"
# end
def display_resource(term)
term.phrase
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch on this, makes the dashboard a lot more useful

end
end
6 changes: 6 additions & 0 deletions app/models/ability.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@ def initialize(user)
# Start of Rules for all authenticated user with no additional roles required
return if user.blank?

# Allow all authenticated users to performa all CRUD actions on Suggested Resources
can :manage, :detector__suggested_resource
can :manage, Detector::SuggestedResource

# Allow all authenticated users to view the Categorization index and show dashboards
can %w[index show], :categorization
can %i[read view], Categorization

# Allow all authenticated users to view reports
can :view, :report
# End of Rules for all authenticated user with no additional roles required

Expand Down
3 changes: 3 additions & 0 deletions app/views/layouts/_site_nav.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
<% if can? :manage, :detector__suggested_resource %>
<%= link_to('Suggested Resources', admin_detector_suggested_resources_path, class: 'nav-item') %>
<% end %>
<% if can? :view, Categorization %>
<%= link_to('Categorizations', admin_categorizations_path, class: 'nav-item') %>
<% end %>
<% if can? :view, :report %>
<%= link_to('Reports', report_path, class: 'nav-item') %>
<% end %>
Expand Down
5 changes: 3 additions & 2 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@
resources :detectors
resources :detector_categories
resources :categories
resources :categorizations, only: [:index, :show]

# Search activity models
resources :search_events
resources :terms
resources :search_events, only: [:index, :show]
resources :terms, only: [:index, :show, :destroy]

# Tacos administration
resources :users
Expand Down