austvik / wadlgen

Create WADL descriptors based on rails routes
MIT License
16 stars 6 forks source link

Retrieve responses and requests content types #5

Open louaabtj opened 10 years ago

louaabtj commented 10 years ago

I would like to create a documentation file for RESTful Ruby on Rails application. This project helped me to retrieve the HTTP paths, verbs and also the parameters. For getting the content type of responses and request, I tried with it and couldn't get any entry.

*I using Rails 4.1 My controller is as the following:

class AutosController < ApplicationController
  before_action :set_auto, only: [:show, :edit, :update, :destroy]
  # GET /autos
  # GET /autos.json
  def index
    @autos = Auto.all
  end

  # GET /autos/1
  # GET /autos/1.json
  def show
  end

  # GET /autos/new
  def new
    @auto = Auto.new
  end

  # GET /autos/1/edit
  def edit
  end

  # POST /autos
  # POST /autos.json
  def create
    @auto = Auto.new(auto_params)

    respond_to do |format|
      if @auto.save
        format.html { redirect_to @auto, notice: 'Auto was successfully created.' }
        format.json { render :show, status: :created, location: @auto }
      else
        format.html { render :new }
        format.json { render json: @auto.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /autos/1
  # PATCH/PUT /autos/1.json
  def update
    respond_to do |format|
      if @auto.update(auto_params)
        format.html { redirect_to @auto, notice: 'Auto was successfully updated.' }
        format.json { render :show, status: :ok, location: @auto }
      else
        format.html { render :edit }
        format.json { render json: @auto.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /autos/1
  # DELETE /autos/1.json
  def destroy
    @auto.destroy
    respond_to do |format|
      format.html { redirect_to autos_url, notice: 'Auto was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

 def buy
    @auto = Auto.find(params[:id])
    respond_to do |format|
      if @auto.update_attribute(:gekauft, true)
        format.html { redirect_to @auto, notice: 'Auto wurde erfolgreich gekauft.'}
        format.json { head :no_content }
      else
        format.html { redirect_to @auto, notice: 'Fehler beim Kauf.'}
        format.json { render json: @auto.errors, status: :unprocessable_entity }
      end
    end
  end

  def sell
    @auto = Auto.find(params[:id])
    respond_to do |format|
      if @auto.update_attribute(:gekauft, false)
        format.html { redirect_to @auto, notice: 'Auto wurde erfolgreich verkauft.'}
        format.json { head :no_content }
      else
        format.html { redirect_to @auto, notice: 'Fehler beim Verkauf.'}
        format.json { render json: @auto.errors, status: :unprocessable_entity }
      end
    end
  end

  private

  # Use callbacks to share common setup or constraints between actions.
  def set_auto
    @auto = Auto.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def auto_params
    params.require(:auto).permit(:farbe, :anzahl_sitze, :gekauft)
  end

 end
austvik commented 10 years ago

Hi, Melo/louaabtj!

I agree - that would be a really cool feature to have! I don't really know how to extract that information in a dynamic typed language, though. Do you have any suggestions on how it could be done?

Oh, and BTW, take a look at respond_with, which might make your controller even prettyer: http://archives.ryandaigle.com/articles/2009/8/6/what-s-new-in-edge-rails-cleaner-restful-controllers-w-respond_with

louaabtj commented 10 years ago

Hi Austvik, Thanks for the tip. Well I tried to retrieve that from the responder attribute from the Controller object, but as beginner in Rails I don't know how.