Class: Smriti::Admin::MatViewDefinitionsController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- Smriti::Admin::MatViewDefinitionsController
- Includes:
- DatatableHelper
- Defined in:
- app/controllers/smriti/admin/mat_view_definitions_controller.rb
Overview
Smriti::Admin::MatViewDefinitionsController
Admin CRUD controller for MatViewDefinition records.
Responsibilities:
- Full CRUD lifecycle: index, show, new, create, edit, update, destroy.
- Admin-only actions to trigger materialised view operations:
- #create_now → enqueues CreateViewJob
- #refresh → enqueues RefreshViewJob
- #delete_now → enqueues DeleteViewJob
- Integrates with Turbo Frames (uses frame-aware redirects/responses).
- Normalizes array fields (
unique_index_columns,dependencies) from comma-separated params into arrays.
Filters:
before_action :set_definitionfor member actions.before_action :normalize_array_fieldsfor create/update.before_action :ensure_frameto enforce frame context.
Instance Method Summary collapse
-
#create ⇒ void
POST /:lang/admin/definitions.
-
#create_now ⇒ void
POST /:lang/admin/definitions/:id/create_now.
-
#delete_now ⇒ void
POST /:lang/admin/definitions/:id/delete_now.
-
#destroy ⇒ void
DELETE /:lang/admin/definitions/:id.
-
#edit ⇒ void
GET /:lang/admin/definitions/:id/edit.
-
#index ⇒ void
GET /:lang/admin/definitions.
-
#new ⇒ void
GET /:lang/admin/definitions/new.
-
#refresh ⇒ void
POST /:lang/admin/definitions/:id/refresh.
-
#show ⇒ void
GET /:lang/admin/definitions/:id.
-
#update ⇒ void
PATCH/PUT /:lang/admin/definitions/:id.
Methods included from AuthBridge
Instance Method Details
#create ⇒ void
This method returns an undefined value.
POST /:lang/admin/definitions
Creates a new definition from params.
85 86 87 88 89 90 91 92 93 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 85 def create (:create, :smriti_definition) @definition = Smriti::MatViewDefinition.new(definition_params) if @definition.save handle_frame_response(status: 298) else render 'form', formats: :html, layout: 'smriti/turbo_frame', status: :unprocessable_content end end |
#create_now ⇒ void
This method returns an undefined value.
POST /:lang/admin/definitions/:id/create_now
Immediately enqueues a background job to create the materialised view.
139 140 141 142 143 144 145 146 147 148 149 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 139 def create_now (:create, :smriti_definition_view, @definition) force = params[:force].to_s.downcase == 'true' Smriti::Jobs::Adapter.enqueue( Smriti::CreateViewJob, queue: Smriti.configuration.job_queue, args: [@definition.id, force, row_count_strategy] ) handle_frame_response end |
#delete_now ⇒ void
This method returns an undefined value.
POST /:lang/admin/definitions/:id/delete_now
Immediately enqueues a background job to delete the materialised view.
171 172 173 174 175 176 177 178 179 180 181 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 171 def delete_now (:destroy, :smriti_definition_view, @definition) cascade = params[:cascade].to_s.downcase == 'true' Smriti::Jobs::Adapter.enqueue( Smriti::DeleteViewJob, queue: Smriti.configuration.job_queue, args: [@definition.id, cascade, row_count_strategy] ) handle_frame_response end |
#destroy ⇒ void
This method returns an undefined value.
DELETE /:lang/admin/definitions/:id
Destroys the definition. Frame-specific redirect/empty response.
124 125 126 127 128 129 130 131 132 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 124 def destroy (:destroy, :smriti_definition, @definition) @definition.destroy! if @frame_id == 'dash-definitions' redirect_to admin_mat_view_definitions_path(frame_id: @frame_id), status: :see_other else render 'empty', formats: :html, layout: 'smriti/turbo_frame', status: 298 end end |
#edit ⇒ void
This method returns an undefined value.
GET /:lang/admin/definitions/:id/edit
Renders the edit form for an existing definition.
100 101 102 103 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 100 def edit (:update, :smriti_definition, @definition) render 'form', formats: :html, layout: 'smriti/turbo_frame' end |
#index ⇒ void
This method returns an undefined value.
GET /:lang/admin/definitions
Two part rendering:
- Full page load when no
streamparam: renders index with datatable frame. This is essentially shell of the datatable for initial load. - When shell is loaded, it requests the
streamversion which renders just the datatable rows and pagination controls. This allows for dynamic updates via Turbo Streams.
45 46 47 48 49 50 51 52 53 54 55 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 45 def index (:read, :smriti_definitions) assign_index_state if params[:stream].present? render_dt_turbo_streams return end render 'index', formats: :html, layout: 'smriti/turbo_frame', locals: { row_meta: @row_meta } end |
#new ⇒ void
This method returns an undefined value.
GET /:lang/admin/definitions/new
Renders the new definition form.
74 75 76 77 78 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 74 def new (:create, :smriti_definition) @definition = Smriti::MatViewDefinition.new render 'form', formats: :html, layout: 'smriti/turbo_frame' end |
#refresh ⇒ void
This method returns an undefined value.
POST /:lang/admin/definitions/:id/refresh
Immediately enqueues a background job to refresh the materialised view.
156 157 158 159 160 161 162 163 164 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 156 def refresh (:update, :smriti_definition_view, @definition) Smriti::Jobs::Adapter.enqueue( Smriti::RefreshViewJob, queue: Smriti.configuration.job_queue, args: [@definition.id, row_count_strategy] ) handle_frame_response end |
#show ⇒ void
This method returns an undefined value.
GET /:lang/admin/definitions/:id
Shows a single definition, including run history.
62 63 64 65 66 67 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 62 def show (:read, :smriti_definition, @definition) @mv_exists = Smriti::Services::CheckMatviewExists.new(@definition).call.response[:exists] @runs = @definition.mat_view_runs.order(created_at: :desc).to_a render 'show', formats: :html, layout: 'smriti/turbo_frame' end |
#update ⇒ void
This method returns an undefined value.
PATCH/PUT /:lang/admin/definitions/:id
Updates an existing definition.
110 111 112 113 114 115 116 117 |
# File 'app/controllers/smriti/admin/mat_view_definitions_controller.rb', line 110 def update (:update, :smriti_definition, @definition) if @definition.update(definition_params) handle_frame_response(status: 298) else render 'form', formats: :html, layout: 'smriti/turbo_frame', status: :unprocessable_content end end |