Cheat

Ruby, Ruby on Rails  Tagged , , 3 Comments »

Anda harus punya gem ini di mesin anda, kalau anda penggemar cheat sheet dan seorang command line junkie dibanding bolak balik liat hasil print pdf dari cheatseet atau liat cheatseet nya lewat pdf reader

Bayangkan sebuah dunia, cheat sheet dapat diakses dari Ruby command line.

goz@orange:~/Documents/Projects/MiniCode$ sudo gem install cheat

goz@orange:~/Documents/Projects/MiniCode$ cheat shoulda
cheat shoulda
shoulda:

Installing
———-

As a Rails plugin
—————–

script/plugin install git://github.com/thoughtbot/shoulda.git

As a Rails gem
————–

In config/environment.rb:
config.gem ‘thoughtbot-shoulda’, :lib => ’shoulda/rails’, :source =>
‘http://gems.github.com’

Then run:
rake gems:install gems:unpack

As a standalone gem
——————-

Run:
sudo gem install thoughtbot-shoulda -s http://gems.github.com

In your test, or test_helper.rb:
require ’shoulda’

Assertions
———-

Assertions
———-

assert_contains <array>, <object in array, or regular expression to match>
assert_does_not_contain <array>, <object not in array, or regular expression
to not match>

assert_same_elements <array>, <array with same elements, but different
order>

assert_bad_value <class>, <attribute>, <value that should cause an
validation error on attribute>
assert_good_value <class>, <attribute>, <value that should not cause a
validation error on attribute>

assert_save <object which .save returns true>
assert_valid <object which .valid? returns true>

assert_sent_email do |email|
email.subject =~ /activated/ && email.to.include?(’bob@email.com’)
end
assert_did_not_send_email do |email|
email.subject =~ /activated/ && email.to.include?(’bob@email.com’)
end

Basics
——

class FooTest < Test::Unit::TestCase
context <context description string> do
setup do
# …
end

teardown do
end

should <description string> do
end

should_eventually <description string>
should_eventually <description string> do
# this code can be broken, but won’t break the build
end
end

should <string description> do
# …
end
end

General Macros
————–

should_change “Post.count”, :from => 0, :to => 1
should_change “@post.title”, :from => “old”, :to => “new”
should_change “@post.title”
should_change “@post.title” :from => “old”
should_change “@post.title” :to   => “new”
should_not_change “Post.count”

Macros for class under test
—————————

should_have_class_methods :find, :destroy
should_have_instance_methods :email, :name, :name=

ActiveRecord Macros
——————-

should_have_db_columns :id, :email, :name, :created_at
should_have_db_column :email, :type => “string”, :default => nil,
:precision
=> nil, :limit    => 255,
:null => true,     :primary => false, :scale
=> nil, :sql_type => ‘varchar(255)’

should_have_indices :email, :name, [:commentable_type, :commentable_id]
should_have_index :age

should_have_named_scope ‘recent(5)’, :limit => 5
should_have_named_scope ‘recent(1)’, :limit => 1

should_require_acceptance_of :eula

should_ensure_length_at_least :name, 3
should_ensure_length_is :ssn, 9
should_ensure_value_in_range :age, (0..100)

should_only_allow_numeric_values_for :age

should_have_readonly_attributes :password, :admin_flag

should_require_attributes :name, :phone_number

should_require_unique_attributes :keyword, :username
should_require_unique_attributes :name, :message => “O NOES! SOMEONE STOELED
YER NAME!”
should_require_unique_attributes :email, :scoped_to => :name
should_require_unique_attributes :address, :scoped_to => [:first_name,
:last_name]

should_protect_attributes :password, :admin_flag

should_allow_values_for :phone, “(123) 999-3049″, “201-0023″
should_not_allow_values_for :phone, “I am totally not a phone number”,
“201-0023″

should_belong_to :parent

should_have_one :god

should_have_many :friends
should_have_many :enemies, :through => :friends
should_have_many :enemies, :dependent => :destroy

should_have_and_belong_to_many :posts, :cars

ActionController Macros
———————–
should_assign_to
should_be_restful
should_belong_to
should_filter_params
should_not_assign_to
should_not_set_the_flash
should_redirect_to
should_render_a_form
should_render_template
should_respond_with
should_respond_with_xml_for
should_route
should_set_the_flash_to

gunakan perintah di bawah ini untuk melihat cheat yang tersedia

goz@orange:~/Documents/Projects/MiniCode$ cheat sheets

hasilnya :

goz@orange:~/Documents/Projects/MiniCode$ cheat sheets
All Cheat Sheets:
acts_as_authenticated
acts_as_state_machine
acts_as_taggable_on
address
administrateme
agile
alias
ambition
ansi
apache
aptitude
arts
as3_formulas
ascii
asdf
assert

Spikes ExtJS

AJAX, Ruby on Rails No Comments »

Sebelum lebaran kemarin publisher komplain kalo loading list user di TanyaSaja lambat banget. Akhirnya saya spike, ganti metodenya AJAX request setiap kali klik link paging. Setelah 6 jam ngubek - ngubek, tanya temen - temen kantor lama akhirnya ketemu sendiri juga. Ternyata caranya cuma pasang plugin will_paginate trus ganti PagingMemoryProxy-nya ExtJS dengan HttpProxy.

Controller :

format.json do
start = (params[:start] || 1).to_i
size = (params[:limit] || 100).to_i
sort_col = (params[:sort] || ‘id’)
sort_dir = (params[:dir] || ‘ASC’)
sort = sort_col + ‘ ‘ + sort_dir
page = ((start/size).to_i)+1
users = User.paginate :page => page, :order => sort, :per_page => size
return_data = Hash.new()
return_data[:Total] = users.total_entries
return_data[:users] = users.collect{|u| { :id => u.id,
:login => u.login,
:email => u.email,
:name => u.name} }
render :json => return_data, :layout => false

View :

var ds = new Ext.data.Store({
reader: new Ext.data.JsonReader({root: ‘users’, id: ‘id’, totalProperty: ‘Total’}, users),
proxy: new Ext.data.HttpProxy({url: ‘<%= formatted_list_backend_users_path(:json) %>’}),
remoteSort: true
});

dan tambahin baris ini untuk trigger dataset

ds.load({params:{start:0, limit:100}})

Lagi Males

personal 6 Comments »

Kemarin semanget RSpec-ing, hari ini kendor lagi, padahal semalem habis dipijitin sama Cak Ali. Entah karena baru pertama kali dipijit, badanku yang terlalu tipis apa Cak Ali yang terlalu keras mijitnya, besok paginya badanku malah sakit semua, berasa kayak masuk angin gitu.

Nggak semanget ngutik (minjem istilahnya Om Dio) Rails dulu, akhirnya kebanyakan ngetik dokumentasi buat setiap file .rb yang aku buat dan aku nemu ini, lumayan buat bikin ngantuk :D

Nikmatnya RSpec-ing

Programming, Ruby, Ruby on Rails, personal 1 Comment »

60 examples, 6 failures, 4 pending and still counting.. saya tertantang mereduksi satu demi satu failures yang ada hingga tinggal 6 yang memang semuanya belum perlu ditesting. Hmm.. selesai pas waktu sahur.. saatnya pulang..

Relasi model sebagian besar sudah fix, tinggal RSpec-ing model user trus ke controller deh.. sayang laptopku belum juga selesai dari sakitnya, sayang juga belum bisa online dari kost pake modem HSDPA yang harganya semakin murah, kalo udah bisa.. semakin nikmat dunia ini.. belum lagi ditambah Sennheiser *ngayal*

Gpp.. setiap penciptaan awalnya juga mimpi sang penciptanya.. *halah..*

Rails Versioning

Ruby, Ruby on Rails 1 Comment »

Untuk produk baru detik nanti saya harus membuat semacam versioning entitas, tadinya mau pake manual, setiap entitas punya tabel khusus untuk versioning. Ternyata Rails memang magic, udah ada plugin untuk itu. Thanks to Arie Sensei.

Sebelumnya saya berpikir untuk memuat semua record ke dalam satu tabel, dan versi record tersebut di sortir berdasarkan id. Jadi intinya tidak ada update, semua aksi yang berhubungan dengan create dan update akan selalu membuat record baru di tabel tersebut.

Hello Detik!

personal 3 Comments »

Sudah hampir 6 bulan ngantor di detik akhirnya baru punya blogdetik, apa kata Pak Budi.

Mudah - mudahan rajin ngetik, be agile!


WordPress Theme & Icons by N.Design Studio.
Entries RSS Comments RSS Log in