class SinatraAdmin::Register::Model

Public Instance Methods

generate!(&block) click to toggle source
# File lib/sinatra-admin/register/model.rb, line 4
def generate!(&block)
  app.namespace("/#{route}", &block) if block_given?
  app.instance_exec(resource_constant, route) do |model, route|
    before "/#{route}/?*" do
      @model = model
      @route = route
    end

    #INDEX
    get "/#{route}/?" do
      @collection ||= model.all.entries
      haml :index, format: :html5
    end

    #NEW
    get "/#{route}/new/?" do
      @resource = model.new
      haml :new, format: :html5
    end

    #CREATE
    post "/#{route}/?" do
      @resource = model.new(params[:data])
      if @resource.save
        puts "Resource was created"
        redirect "/admin/#{@route}/#{@resource.id}"
      else
        puts "Validation Errors"
        haml :new, format: :html5
      end
    end

    #SHOW
    get "/#{route}/:id/?" do
      @resource = model.find(params[:id])
      haml :show, format: :html5
    end

    #EDIT
    get "/#{route}/:id/edit/?" do
      @resource = model.find(params[:id])
      haml :edit, format: :html5
    end

    #UPDATE
    put "/#{route}/:id/?" do
      @resource = model.find(params[:id])
      if @resource.update_attributes(params[:data])
        puts "Resource was updated"
        redirect "/admin/#{@route}/#{@resource.id}"
      else
        puts "Validation Errors"
        haml :edit, format: :html5
      end
    end

    #DESTROY
    delete "/#{route}/:id/?" do
      @resource = model.find(params[:id])
      if @resource.destroy
        puts "Resource was destroyed"
        redirect "/admin/#{route}/"
      else
        puts "Something wrong"
        status 400
      end
    end
  end
end