module ActionCrud::Controller

Public Instance Methods

_guess_controller_model() click to toggle source
# File lib/action_crud/controller.rb, line 66
def _guess_controller_model
  if namespace.nil?
    controller_name.classify.safe_constantize ||
    name.gsub(/controller$/i, '').classify.safe_constantize
  else
    name.gsub(/^#{namespace.to_s}|controller$/i, '').classify.safe_constantize
  end
end
create() click to toggle source

POST /model

# File lib/action_crud/controller.rb, line 115
def create
  self.record = model.new(record_params)

  respond_to do |format|
    if record.save
      format.html { redirect_to edit_record_path(record), notice: "#{model} was successfully created." }
      format.json { render json: record, status: :created }
    else
      format.html { render :new }
      format.json { render json: record.errors, status: :unprocessable_entity }
    end
  end
end
current_model()
Alias for: model
current_record()
Alias for: record
current_records()
Alias for: records
destroy() click to toggle source

DELETE /model/1

# File lib/action_crud/controller.rb, line 143
def destroy
  record.destroy

  respond_to do |format|
    format.html { redirect_to records_path, notice: "#{model} was successfully destroyed." }
    format.json { head :no_content }
  end
end
edit() click to toggle source

GET /model/1/edit

# File lib/action_crud/controller.rb, line 107
def edit
  respond_to do |format|
    format.html { render :edit }
    format.json { render json: record }
  end
end
index() click to toggle source

GET /model

# File lib/action_crud/controller.rb, line 77
def index
  self.records = model.send index_scope
  self.records =  model.send(:search, params[:search]) if should_search?
  self.records = paginate(records) if respond_to? :per_page

  respond_to do |format|
    format.html { render :index }
    format.json { render json: records }
  end
end
model() click to toggle source
# File lib/action_crud/controller.rb, line 152
def model
  record.nil? ? model_class : record.class
end
Also aliased as: current_model
new() click to toggle source

GET /model/new

# File lib/action_crud/controller.rb, line 89
def new
  self.record = model.new

  respond_to do |format|
    format.html { render :new }
    format.json { render json: record }
  end
end
permit_params(options = {}) click to toggle source
# File lib/action_crud/controller.rb, line 24
def permit_params(options = {})
  attribs = model_class.try(:attribute_names).to_a
  default = { only: attribs, except: [], also: [], array: [], hash: [] }
  options = Hash[default.merge(options).map { |k, v| [k, Array(v).map(&:to_sym)] }]
  permit  = options.except(:except).values.flatten.uniq

  permit.reject! { |a| a.blank? || a.in?(options[:except] + [:id]) }
  permit.map!    { |a| a.in?(options[:array]) ? [a => []] : a }
  permit.map!    { |a| a.in?(options[:hash])  ? [a => {}] : a }

  self.permitted_params = permit
end
record() click to toggle source
# File lib/action_crud/controller.rb, line 158
def record
  instance_variable_get "@#{instance_name}"
end
Also aliased as: current_record
records() click to toggle source
# File lib/action_crud/controller.rb, line 164
def records
  instance_variable_get "@#{collection_name}"
end
Also aliased as: current_records
set_index_scope(scope = 'all') click to toggle source
# File lib/action_crud/controller.rb, line 60
def set_index_scope(scope = 'all')
  self.index_scope = scope.to_sym
end
set_model_class(klass = nil) click to toggle source
# File lib/action_crud/controller.rb, line 55
def set_model_class(klass = nil)
  klass = klass.constantize if klass.is_a? String
  self.model_class = klass || model_name.instance_variable_get('@klass')
end
set_model_name(name = nil) click to toggle source
# File lib/action_crud/controller.rb, line 42
def set_model_name(name = nil)
  name = name || _guess_controller_model
  name = name.constantize if name.is_a? String

  unless name.nil?
    self.model_name      = name.model_name
    self.instance_name   = model_name.singular
    self.collection_name = model_name.plural

    set_model_class
  end
end
set_namespace(name = nil) click to toggle source
# File lib/action_crud/controller.rb, line 37
def set_namespace(name = nil)
  self.namespace = name
  set_model_name
end
show() click to toggle source

GET /model/1

# File lib/action_crud/controller.rb, line 99
def show
  respond_to do |format|
    format.html { render :show }
    format.json { render json: record }
  end
end
update() click to toggle source

PATCH/PUT /model/1

# File lib/action_crud/controller.rb, line 130
def update
  respond_to do |format|
    if record.update(record_params)
      format.html { redirect_to edit_record_path(record), notice: "#{model} was successfully updated." }
      format.json { render json: record, status: :ok }
    else
      format.html { render :edit }
      format.json { render json: record.errors, status: :unprocessable_entity }
    end
  end
end

Private Instance Methods

record=(value) click to toggle source
# File lib/action_crud/controller.rb, line 172
def record=(value)
  instance_variable_set "@#{instance_name}", value
end
record_params() click to toggle source
# File lib/action_crud/controller.rb, line 184
def record_params
  params.require(:"#{instance_name}").permit permitted_params
end
records=(value) click to toggle source
# File lib/action_crud/controller.rb, line 176
def records=(value)
  instance_variable_set "@#{collection_name}", value
end
set_permitted_params() click to toggle source
# File lib/action_crud/controller.rb, line 188
def set_permitted_params
  att_method = :permitted_attributes
  attributes = record.try(att_method) || model.try(att_method)

  self.permitted_params = Array(attributes)
end
set_record() click to toggle source
# File lib/action_crud/controller.rb, line 180
def set_record
  self.record = model.find(params[:id])
end
should_search?() click to toggle source
# File lib/action_crud/controller.rb, line 195
def should_search?
  params[:search].present? && model.respond_to?(:search)
end