Module: Symphonia::BaseController

Extended by:
ActiveSupport::Concern
Included in:
BaseController, RolesController
Defined in:
lib/symphonia/base_controller.rb

Overview

General controller for CRUD operations of Entity

How to use: include Symphonia::BaseController def model

YourModel

end OR self.model = YourModel

def safe_attributes

%i[]

end

def swagger_path

false # => for disable swagger
 "/my-custom-path" # => for custom route

end

Instance Method Summary collapse

Instance Method Details

#createObject



85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/symphonia/base_controller.rb', line 85

def create
  @entity ||= instance_variable_set(:"@#{model_name}", model.new(entity_params))
  respond_to do |format|
    if @entity.save
      after_create
      format.html { redirect_back_or_default @entity, notice: t(:text_created) }
      format.json { render json: @entity, status: :created, location: @entity }
    else
      format.html { render action: 'new' }
      format.json { render status: :unprocessable_entity, json: { errors: @entity.errors } }
    end
  end
end

#destroyObject



112
113
114
115
116
117
118
119
# File 'lib/symphonia/base_controller.rb', line 112

def destroy
  @entity.destroy
  respond_to do |format|
    format.html { redirect_back_or_default(polymorphic_path(model), notice: t(:text_destroyed)) }
    format.json { head :no_content }
    format.js { render js: "Symphonia.filters.removeRow('#{view_context.dom_id(@entity)}')" }
  end
end

#editObject



82
83
# File 'lib/symphonia/base_controller.rb', line 82

def edit
end

#indexObject

This method is abstract.

model

def model

self.class.model

end by default it guess from class name of controller def model

@model ||= self.class.name.remove("Controller").classify.constantize

end



56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/symphonia/base_controller.rb', line 56

def index
  @query ||= model.query.new
  @query.from_params params
  @entities = @query.entities
  respond_to do |format|
    format.html do
      @entities = paginate(@entities)
      render layout: !request.xhr?
    end
    format.json do
      paginate(json: @entities)
    end
  end
end

#model_nameObject



121
122
123
# File 'lib/symphonia/base_controller.rb', line 121

def model_name
  model.name.demodulize.underscore.to_sym
end

#newObject



78
79
80
# File 'lib/symphonia/base_controller.rb', line 78

def new
  @entity ||= instance_variable_set(:"@#{model_name}", model.new(params.fetch(model_name, {}).permit(safe_attributes)))
end

#showObject



71
72
73
74
75
76
# File 'lib/symphonia/base_controller.rb', line 71

def show
  respond_to do |format|
    format.html { @entity = Symphonia::EntityDecorator.new(@entity, view_context) }
    format.json { render json: @entity }
  end
end

#updateObject



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/symphonia/base_controller.rb', line 99

def update
  respond_to do |format|
    if @entity.update(entity_params)
      after_update
      format.html { redirect_back_or_default @entity, notice: t(:text_updated) }
      format.json { head :no_content }
    else
      format.html { render action: 'edit' }
      format.json { render status: :unprocessable_entity, json: { errors: @entity.errors } }
    end
  end
end