From 616a747112a26fdf0a442106ee6ba04aca5a20d6 Mon Sep 17 00:00:00 2001 From: Christoph Marzell Date: Sun, 7 Dec 2025 09:36:15 +0100 Subject: [PATCH] add controllers --- .../admin/mileage_rates_controller.rb | 46 ++++++++++ .../admin/training_watch_hits_controller.rb | 46 ++++++++++ .../training_watch_sources_controller.rb | 46 ++++++++++ app/dashboards/mileage_rate_dashboard.rb | 66 ++++++++++++++ .../training_watch_hit_dashboard.rb | 78 +++++++++++++++++ .../training_watch_source_dashboard.rb | 87 +++++++++++++++++++ app/services/training_watch/checker.rb | 2 +- config/routes.rb | 4 +- 8 files changed, 373 insertions(+), 2 deletions(-) create mode 100644 app/controllers/admin/mileage_rates_controller.rb create mode 100644 app/controllers/admin/training_watch_hits_controller.rb create mode 100644 app/controllers/admin/training_watch_sources_controller.rb create mode 100644 app/dashboards/mileage_rate_dashboard.rb create mode 100644 app/dashboards/training_watch_hit_dashboard.rb create mode 100644 app/dashboards/training_watch_source_dashboard.rb diff --git a/app/controllers/admin/mileage_rates_controller.rb b/app/controllers/admin/mileage_rates_controller.rb new file mode 100644 index 0000000..27dbc9f --- /dev/null +++ b/app/controllers/admin/mileage_rates_controller.rb @@ -0,0 +1,46 @@ +module Admin + class MileageRatesController < 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 diff --git a/app/controllers/admin/training_watch_hits_controller.rb b/app/controllers/admin/training_watch_hits_controller.rb new file mode 100644 index 0000000..1d60d38 --- /dev/null +++ b/app/controllers/admin/training_watch_hits_controller.rb @@ -0,0 +1,46 @@ +module Admin + class TrainingWatchHitsController < 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 diff --git a/app/controllers/admin/training_watch_sources_controller.rb b/app/controllers/admin/training_watch_sources_controller.rb new file mode 100644 index 0000000..aa84371 --- /dev/null +++ b/app/controllers/admin/training_watch_sources_controller.rb @@ -0,0 +1,46 @@ +module Admin + class TrainingWatchSourcesController < 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 diff --git a/app/dashboards/mileage_rate_dashboard.rb b/app/dashboards/mileage_rate_dashboard.rb new file mode 100644 index 0000000..30594cf --- /dev/null +++ b/app/dashboards/mileage_rate_dashboard.rb @@ -0,0 +1,66 @@ +require "administrate/base_dashboard" + +class MileageRateDashboard < 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, + rate_per_km: Field::String.with_options(searchable: false), + year: Field::Number, + 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 + rate_per_km + year + created_at + ].freeze + + # SHOW_PAGE_ATTRIBUTES + # an array of attributes that will be displayed on the model's show page. + SHOW_PAGE_ATTRIBUTES = %i[ + id + rate_per_km + year + 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[ + rate_per_km + year + ].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 mileage rates are displayed + # across all pages of the admin dashboard. + # + # def display_resource(mileage_rate) + # "MileageRate ##{mileage_rate.id}" + # end +end diff --git a/app/dashboards/training_watch_hit_dashboard.rb b/app/dashboards/training_watch_hit_dashboard.rb new file mode 100644 index 0000000..c034e7a --- /dev/null +++ b/app/dashboards/training_watch_hit_dashboard.rb @@ -0,0 +1,78 @@ +require "administrate/base_dashboard" + +class TrainingWatchHitDashboard < 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, + fingerprint: Field::String, + hit_url: Field::String, + published_at: Field::DateTime, + snippet: Field::Text, + title: Field::String, + training_watch_source: 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 + fingerprint + hit_url + published_at + ].freeze + + # SHOW_PAGE_ATTRIBUTES + # an array of attributes that will be displayed on the model's show page. + SHOW_PAGE_ATTRIBUTES = %i[ + id + fingerprint + hit_url + published_at + snippet + title + training_watch_source + 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[ + fingerprint + hit_url + published_at + snippet + title + training_watch_source + ].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 training watch hits are displayed + # across all pages of the admin dashboard. + # + # def display_resource(training_watch_hit) + # "TrainingWatchHit ##{training_watch_hit.id}" + # end +end diff --git a/app/dashboards/training_watch_source_dashboard.rb b/app/dashboards/training_watch_source_dashboard.rb new file mode 100644 index 0000000..5d82570 --- /dev/null +++ b/app/dashboards/training_watch_source_dashboard.rb @@ -0,0 +1,87 @@ +require "administrate/base_dashboard" + +class TrainingWatchSourceDashboard < 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, + enabled: Field::Boolean, + kind: Field::String, + last_checked_at: Field::DateTime, + last_etag: Field::String, + last_modified: Field::String, + match_regex: Field::String, + name: Field::String, + training_watch_hits: Field::HasMany, + url: Field::String, + 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 + enabled + kind + last_checked_at + ].freeze + + # SHOW_PAGE_ATTRIBUTES + # an array of attributes that will be displayed on the model's show page. + SHOW_PAGE_ATTRIBUTES = %i[ + id + enabled + kind + last_checked_at + last_etag + last_modified + match_regex + name + training_watch_hits + url + 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[ + enabled + kind + last_checked_at + last_etag + last_modified + match_regex + name + training_watch_hits + url + ].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 training watch sources are displayed + # across all pages of the admin dashboard. + # + # def display_resource(training_watch_source) + # "TrainingWatchSource ##{training_watch_source.id}" + # end +end diff --git a/app/services/training_watch/checker.rb b/app/services/training_watch/checker.rb index 67a353f..31984e1 100644 --- a/app/services/training_watch/checker.rb +++ b/app/services/training_watch/checker.rb @@ -11,7 +11,7 @@ module TrainingWatch (start|beginn|lehrgang|curriculum|gruppe|kurs|aufnahme|bewerb|anmeld|termin) /imx - USER_AGENT = "RailsTrainingWatch/1.0 (+https://your-app.example)" + USER_AGENT = "RailsTrainingWatch/1.0" Result = Struct.new(:source, :new_hits, keyword_init: true) diff --git a/config/routes.rb b/config/routes.rb index 8f7267f..88f21fd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,9 @@ Rails.application.routes.draw do namespace :admin do resources :entries resources :users - + resources :mileage_rates + resources :training_watch_hits + resources :training_watch_sources root to: "entries#index"