Minggu, 07 Juni 2015

Memperkenalkan Melodiest, Generator Boilerplate Aplikasi Sinatra

Saat ini saya memiliki beberapa project untuk keperluan pribadi yang boleh dibilang ukurannya sangat kecil. Menggunakan Ruby on Rails menurut saya terlalu besar atau bahkan menggunakan Padrino masih cukup besar bagi project saya. Oleh sebab itu saya memutuskan untuk menggunakan Sinatra.

Oleh karena itulah saya membuat generator boilerplate aplikasi Sinatra bernama Melodiest yang bisa saya gunakan di project - project saya. Tujuan dari Melodiest adalah membuat boilerplate aplikasi Sinatra dengan kode dan konfigurasi seminimal mungkin.

Instalasi

gem install melodiest

generate app di direktori saat ini tanpa database
melodiest -n my_app

generate app dalam target direktori tanpa database
melodiest -n my_app -t target/dir

generate app di direktori saat ini dengan database. -d option akan melakukan generate aplikasi dengan ORM Sequel dan PostgreSQL adapter.
melodiest -n my_app -d

Konfigurasi Default

Konfigurasi Default untuik Melodiest versi saat ini (versi 0.3.0):
  • Sinatra::Reloader (in development environment only)
  • Thin as web server
  • Rack::Session::EncryptedCookie
  • Rack::Csrf
  • Sequel ORM (with database only)
  • sequel_pg as PostgreSQL adapter (with database only)

Contoh Penggunaan

Dalam contoh ini, project yang akan dibuat adalah todo list dengan nama todo_melodiest dan dengan asumsi PostgreSQL telah diinstall.
  1. Buat database dengan perintah yang disediakan oleh PostgreSQL:
    createdb todo_melodiest
    
  2. Lalu generate aplikasi dengan menjalankan perintah berikut:
    melodiest -n todo_melodiest -d
    
  3. Pindah ke direktori todo_melodiest dan jalankan bundle install:
    cd todo_melodiest
    bundle install
    
  4. buat config/database.yml dan tulis konfigurasi database sesuai dengan username dan password, example:
    development:
      adapter: postgres
      host: localhost
      database: todo_melodiest
      user: my_example_user
      password: my_example_password
    
  5. Buat file db/migrations/001_create_tasks.rb dan tulis kode berikut:
    Sequel.migration do
      up do
        create_table :tasks do
          primary_key :id
          String :name, :null=>false
        end
      end
    
      down do
        drop_table :tasks
      end
    end
    
  6. Migrate database ke versi terakhir:
    rake db:migrate
    

    Atau bisa juga dengan perintah berikut jika ingin migrate ke versi tertentu:
    rake db:migrate[001]
    
  7. Buat file app/models/Task.rb dan tulis kode berikut:
    class Task < Sequel::Model
    end
    
  8. Buat file app/routes/tasks.rb dan tulis kode berikut:
    class TodoMelodiest
      get '/' do
        "hello world!"
      end
    
      get '/tasks' do
        @tasks = Task.all
        erb :'tasks/index'
      end
    
      post '/tasks' do
        @task = Task.new
        @task.name = params[:name]
        @task.save
    
        redirect '/tasks'
      end
    
      get '/tasks/edit/:id' do
        @task = Task[params[:id]]
    
        erb :'tasks/edit'
      end
    
      put '/tasks' do
        @task = Task[params[:id]]
        @task.name = params[:name]
        @task.save
    
        redirect '/tasks'
      end
    
      delete '/tasks' do
        @task = Task[params[:id]]
        @task.destroy
    
        redirect '/tasks'
      end
    end
    
  9. Buat file app/views/tasks/index.erb dan tulis kode berikut:
    <h1>Tasks</h1>
    <ul>
      <% @tasks.each do |task| %>
        <li>
          <%= task.name %> | <a href="/tasks/edit/<%= task.id %>">Edit</a>
          <form action="/tasks" method="post">
            <%= Rack::Csrf.tag(env) %>
            <input name="_method" type="hidden" value="delete" />
            <input name="id" type="hidden" value=<%= task.id %> />
            <button>Delete</button>
          </form>
        </li>
      <% end %>
    </ul>
    
    <form action="/tasks" method="post">
      <%= Rack::Csrf.tag(env) %>
      <input type="text" name="name" />
      <button>Submit</button>
    </form>
    
  10. Buat file app/views/tasks/edit.erb dan tulis kode berikut:
    <h1>Edit Task <%= @task.name %></h1>
    <form action="/tasks" method="post">
      <%= Rack::Csrf.tag(env) %>
      <input name="_method" type="hidden" value="put" />
      <input name="id" type="hidden" value=<%= @task.id %> />
      Name: <input type="text" name="name" />
      <button>Submit</button>
    </form>
    
  11. Jalankan server:
    bundle exec thin start
    
  12. Buka browser dan ketikkan url localhost:3000/tasks. Selesai! :)
Github repo: https://github.com/kuntoaji/todo_melodiest

Tidak ada komentar:

Posting Komentar

Related Posts Plugin for WordPress, Blogger...