Class: Observ::PromptsController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- Observ::PromptsController
- Defined in:
- app/controllers/observ/prompts_controller.rb
Instance Method Summary collapse
-
#compare ⇒ Object
GET /observ/prompts/:id/compare?from=1&to=2.
-
#create ⇒ Object
POST /observ/prompts.
-
#destroy ⇒ Object
DELETE /observ/prompts/:id.
-
#edit ⇒ Object
GET /observ/prompts/:id/edit.
-
#index ⇒ Object
GET /observ/prompts.
-
#new ⇒ Object
GET /observ/prompts/new.
-
#show ⇒ Object
GET /observ/prompts/:id.
-
#update ⇒ Object
PATCH /observ/prompts/:id.
-
#versions ⇒ Object
GET /observ/prompts/:id/versions.
Instance Method Details
#compare ⇒ Object
GET /observ/prompts/:id/compare?from=1&to=2
150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'app/controllers/observ/prompts_controller.rb', line 150 def compare @from_version = Observ::Prompt.find_by(name: @prompt_name, version: params[:from]) @to_version = Observ::Prompt.find_by(name: @prompt_name, version: params[:to]) unless @from_version && @to_version redirect_to versions_prompt_path(@prompt_name), alert: "Both versions must be specified" return end @diff = calculate_diff(@from_version.prompt, @to_version.prompt) end |
#create ⇒ Object
POST /observ/prompts
50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/controllers/observ/prompts_controller.rb', line 50 def create @form = Observ::PromptForm.new(form_params) @form.created_by = current_user_identifier if @form.save redirect_to prompt_path(@form.persisted_prompt.name), notice: "Prompt created successfully (v#{@form.persisted_prompt.version})" else render :new, status: :unprocessable_content end end |
#destroy ⇒ Object
DELETE /observ/prompts/:id
124 125 126 127 128 129 130 131 132 133 134 |
# File 'app/controllers/observ/prompts_controller.rb', line 124 def destroy # Can only delete draft and archived prompts if @prompt.production? redirect_to prompt_path(@prompt_name), alert: "Cannot delete production prompts" return end @prompt.destroy redirect_to prompts_path, notice: "Prompt version #{@prompt.version} deleted" end |
#edit ⇒ Object
GET /observ/prompts/:id/edit
87 88 89 90 91 92 93 |
# File 'app/controllers/observ/prompts_controller.rb', line 87 def edit # Only draft prompts can be edited unless @prompt.draft? redirect_to prompt_path(@prompt_name), alert: "Only draft prompts can be edited. Clone this version to create an editable draft." end end |
#index ⇒ Object
GET /observ/prompts
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'app/controllers/observ/prompts_controller.rb', line 7 def index @prompts = Observ::Prompt.select(:name) .distinct .order(:name) # Apply search filter if params[:search].present? @prompts = @prompts.where("name LIKE ? COLLATE NOCASE", "%#{params[:search]}%") end # Apply state filter if params[:state].present? @prompts = @prompts.where(state: params[:state]) end @prompts = @prompts.page(params[:page]).per(Observ.config.pagination_per_page) # Enrich with metadata for display @prompt_data = @prompts.map do |prompt| latest = Observ::Prompt.where(name: prompt.name).order(version: :desc).first production = Observ::Prompt.where(name: prompt.name, state: :production).first { name: prompt.name, total_versions: Observ::Prompt.where(name: prompt.name).count, production_version: production&.version, latest_version: latest.version, latest_state: latest.state, last_updated: latest.updated_at, has_draft: Observ::Prompt.where(name: prompt.name, state: :draft).exists? } end end |
#new ⇒ Object
GET /observ/prompts/new
42 43 44 45 46 47 |
# File 'app/controllers/observ/prompts_controller.rb', line 42 def new @form = Observ::PromptForm.new( name: params[:name], from_version: params[:from_version] ) end |
#show ⇒ Object
GET /observ/prompts/:id
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'app/controllers/observ/prompts_controller.rb', line 63 def show # Get production version by default, or latest version if no production @prompt = Observ::Prompt.where(name: @prompt_name, state: :production).first || Observ::Prompt.where(name: @prompt_name).order(version: :desc).first unless @prompt redirect_to prompts_path, alert: "Prompt not found" return end # Load specific version if requested if params[:version].present? @prompt = Observ::Prompt.find_by(name: @prompt_name, version: params[:version]) unless @prompt redirect_to prompt_path(@prompt_name), alert: "Version not found" return end end @all_versions = Observ::Prompt.where(name: @prompt_name).order(version: :desc) @production_version = @all_versions.find(&:production?) end |
#update ⇒ Object
PATCH /observ/prompts/:id
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'app/controllers/observ/prompts_controller.rb', line 96 def update unless @prompt.draft? redirect_to prompt_path(@prompt_name), alert: "Only draft prompts can be edited" return end # Parse config JSON string before updating update_params = prompt_params.except(:name, :version, :promote_to_production) if update_params[:config].present? parsed = parse_config(update_params[:config]) if parsed.nil? # JSON parsing failed, re-render form with error render :edit, status: :unprocessable_content return end update_params[:config] = parsed end if @prompt.update(update_params) redirect_to prompt_path(@prompt_name, version: @prompt.version), notice: "Prompt updated successfully" else render :edit, status: :unprocessable_content end end |
#versions ⇒ Object
GET /observ/prompts/:id/versions
137 138 139 140 141 142 143 144 145 146 147 |
# File 'app/controllers/observ/prompts_controller.rb', line 137 def versions @versions = Observ::Prompt.where(name: @prompt_name).order(version: :desc) @production_version = @versions.find(&:production?) respond_to do |format| format.html # Render the HTML view format.json do render json: @versions.as_json(only: [:version, :state, :commit_message, :created_at]) end end end |