ROR dan module kernel
Bila anda ingin meng-execute linux command di ruby. Anda bisa menggunakan 4 macam cara, yaitu : system, exec, %x, dan `. Tapi bila anda ingin mendapatkan hasil returnnya, kalau dari contoh dibawah saya berusaha untuk mendapatkan nilai string “wordpress.shunam.co.cc is an alias for shunam.wordpress.com.”, silahkan anda lihat sendiri :
SYSTEM>> hasil = system(‘host -t cname wordpress.shunam.co.cc’)wordpress.shunam.co.cc is an alias for shunam.wordpress.com.=> true>> hasil=> trueEXEC ( langsung keluar setelah melaksanakan script )>> hasil = exec(‘host -t cname wordpress.shunam.co.cc’)wordpress.shunam.co.cc is an alias for shunam.wordpress.com.hendrik@hendrik-laptop:/wordpress$%x atau `>> hasil = %x(host -t cname wordpress.shunam.co.cc)=> “wordpress.shunam.co.cc is an alias for shunam.wordpress.com.\n”>> hasil=> “wordpress.shunam.co.cc is an alias for shunam.wordpress.com.\n”>> hasil = `host -t cname wordpress.shunam.co.cc`=> “wordpress.shunam.co.cc is an alias for shunam.wordpress.com.\n”>> hasil=> “wordpress.shunam.co.cc is an alias for shunam.wordpress.com.\n”
Terserah anda lebih memilih menggunakan yang mana. Tapi bila anda ingin mengambil nilai return dari command linux, silahkan anda gunakan %x atau cara mudahnya gunakan symbol `.
Selamat mencoba
Check CNAME with Ruby On Rails
Bila anda ingin mengecek apakah CNAME yang diset oleh user telah menunjuk ke server kita atau belum, anda bisa menggunakan script dibawah ini.
def validate#domain_name berisi url yang diset oleh userunless domain_name.blank?reg = /server.com/checking = `host -t cname #{domain_name}`unless reg.match(checking)self.errors.add(:domain_name, “is not valid”)endendend
Tolong perhatikan script yang saya warnai merah ! itu bukan kutip 1, silahkan lihat ke http://shunam.wordpress.com/2010/05/26/ror-dan-module-kernel/
Selamat mencoba
ROR and Chargify
Kali ini saya akan membahas untuk menggunakan chargify. Apa itu chargify ? silahkan lihat langsung ke “http://chargify.com/”. Agar kita bisa menggunakannya di ROR, anda harus menginstall dulu gem “chargify_api_ares”. Kalau sudah anda setting API-nya di environment. Contoh dibawah ini bila anda ingin menuliskannya di config/environment.rb :
require ‘chargify_api_ares’Chargify.configure do |c|c.subdomain = (RAILS_ENV == ‘production’ ? ‘test.chargify.com’ : ‘test-dev.chargify.com’)c.api_key = #silahkan anda pakai API key andaend
Sesudah itu, bila anda mau mencobanya, anda bisa mengetikkan di script/console, “Chargify::Product.find(:all)”. Bila berhasil, anda akan mendapatkan array yang berisi product-product dari client anda.
Bagaimana cara membuat customer dan membuat subscriptionnya ? Mudah, anda buat saja subscription baru dengan data yang lengkap, maka chargify akan menyimpan customer baru anda dan subcriptionnya. Sangat mudah kan ? Silahkan lihat di bawah ini untuk scriptnya :
chargify = Chargify::Subscription.create(
:product_handle => ‘nama product client anda’,
:customer_attributes => {
:first_name => first_name,
:last_name => last_name,
:email => email,
rganization => organization # Sory menjadi smiley, anda bisa menebak itu huruf apa kan.
},
:credit_card_attributes => {
:full_number => card_number,
:expiration_month => card_expires_on_month,
:expiration_year => card_expires_on_year
}
)
unless chargify.errors["base"].blank? # ini untuk pengecekan, apakah ada error yang direturn oleh chargify, misalnya seperti no credit card yang tidak valid atau kartu kreditnya sudah expired.
Misalnya client anda sudah membuatkan 2 product yaitu reguler dan VIP, kemudian client anda ingin agar user bisa berpindah-pindah product. Anda bisa mengubahnya dengan mudah sekali. Silahkan lihat script di bawah :
s = Chargify::Subscription.find(subscription_id)
s.product_handle = #nama product barunya
s.save
Selamat mencoba
RCOV ubuntu 10.4
Umumnya, bila anda telah menginstall gem rcov, anda bisa langsung menggunakan fungsi rcov di console. Saya menggunakan ubuntu 10.04 64 bit, fungsi rcov tidak dikenali. Padahal di gem list sudah ada gem rcov. Saya cari tahu mengapa fungsi atau command rcov tidak dikenali. Setelah lama mencari jalan keluar di google, tidak ada yang memberikan jawaban yang pasti. Jujur saya sempat kebingungan…, tapi ketika saya selidiki lagi errornya dengan menggunakan “-t”, saya disuruh menginstall rcov melalui apt-get. Saya coba saja “sudo apt-get install rcov”, dan ternyata langsung jalan. Saya juga coba delete gem rcovnya, dan ternyata masih jalan juga. Jadi saya delete aja gemnya dan menggunakan rcov dari repositori ubuntu
Selamat mencoba
UPDATE : Lihat di comment ( ada cara alternatif ). Thanks untuk yang udah ngebantu
Sharing sessions between subdomain
Bila anda sedang menggunakan subdomain-fu dan anda ingin mengsharingkan session di antara subdomain untuk development ( artinya anda menggunakan localhost:3000 ), ada caranya.
Ubah nama domain anda jadi “local.host”. Mengapa harus dirubah ? Begini, browser tidak diijinkan sharing cookies hanya dengan “.com”, browser hanya mengijinkan sharing cookies, bila anda menggunakan nama domain yang lengkap, seperti “myweb.com”. Sama halnya dengan “localhost” dan “local.host”.
Terkadang “localhost” pun bisa berhasil, tapi terkena error AuthenticityToken, dan anda harus edit lagi ApplicationController-nya ( bad idea ).
Setelah anda rubah “localhost”, menjadi “local.host”, baru anda tambahkan line ini di ‘environments/development.rb’ :
config.action_controller.session = { :domain => '.local.host' }
Silahkan anda mencobanya dengan membuat login di “local.host:3000/login”, dan setelah selesai login, user di redirect ke “mydomain.local.host:3000/login”. Seharusnya tidak terjadi error sama sekali. kalau masih terjadi error, coba cek lagi apakah subdomainnya sudah di tambahkan ke “/etc/hosts” ?
Selamat Mencoba
rake extract_fixtures
Jika anda ingin meng-dump data dari mysql ke fixture. Biasanya anda menggunakan rake db:fixtures:dump. Saya pun biasa menggunakan itu. Kemudian saya mengganti OS saya dengan ubuntu 9.10, dan saya install ruby on rails dari awal sampai akhir. Kemudian ketika saya ingin meng-dump data dari mysql ke fixture, saya gunakan rake db:fixtures:dump. Ternyata muncul error “Don’t know how to build task ‘db:fixtures:dump’”. Waduh…. kenapa bisa error ya, saya cek rake -T, ternyata memang rake db:fixtures:dump sudah tidak ada
Bisa saja saya tulis lagi dari awal fixturesnya, tapi karena bisa memakan waktu lama. Akhirnya lebih baik saya cari mengapa tidak ada. Alhasil, saya pun baru tahu kalau rake db:fixtures:dump sudah tidak ada, dan diganti dengan rake db:extract_fixtures. Saya lihat di rake -T, ternyata rake db:extract_fixtures pun tidak ada
Tapi saya menemukan sebuah script rake yang bagus
Mirip dengan rake db:extract_fixtures. Tahap-tahapnya ( sudah dengan contoh) :
- Anda buat sebuah file ‘extract_fixtures.rake’ di folder “/lib/tasks/’
- Kemudian anda masukkan script ini :
desc ‘Create YAML test fixtures from data in an existing database.Defaults to development database. Set RAILS_ENV to override. Use argstable and limit to dump one table and limit number of records’task :extract_fixtures, :table, :limit, :needs => :environment do |t, args|args.with_defaults(:table => nil, :limit => nil)limit = args.limit.nil? ? “” : “LIMIT #{args.limit}”sql = “SELECT * FROM %s #{limit}”skip_tables = ["schema_info" ]if args.table.nil?tables = ActiveRecord::Base.connection.tables – skip_tableselsetables = [ "#{args.table}"]endActiveRecord::Base.establish_connectiontables.each do |table_name|i = “000″File.open(“#{RAILS_ROOT}/test/fixtures/#{table_name}.yml” , ‘w’ ) do |file|data = ActiveRecord::Base.connection.select_all(sql % table_name)file.write data.inject({}) { |hash, record|hash["#{table_name}_#{i.succ!}" ] = recordhash}.to_yamlendendenddesc ‘Create YAML test fixtures from data in an existing database.Defaults to development database. Set RAILS_ENV to override. Use argstable and limit to dump one table and limit number of records’task :extract_fixtures, :table, :limit, :needs => :environment do |t, args| args.with_defaults(:table => nil, :limit => nil) limit = args.limit.nil? ? “” : “LIMIT #{args.limit}” sql = “SELECT * FROM %s #{limit}” skip_tables = ["schema_info" ] if args.table.nil? tables = ActiveRecord::Base.connection.tables – skip_tables else tables = [ "#{args.table}"] end
ActiveRecord::Base.establish_connection tables.each do |table_name| i = “000″ File.open(“#{RAILS_ROOT}/test/fixtures/#{table_name}.yml” , ‘w’ ) do |file| data = ActiveRecord::Base.connection.select_all(sql % table_name) file.write data.inject({}) { |hash, record| hash["#{table_name}_#{i.succ!}" ] = record hash }.to_yaml end endend
Untuk menggunakannya silahkan anda ketik rake extract_fixtures[nama_table,limit], contoh : rake extract_fixtures[users,1].
Semoga berguna dan selamat mencoba
Testing AJAX dengan Watir
Ada banyak gem yang bisa digunakan untuk mengetest Ajax, salah satunya adalah WATIR ( Web Application Testing In Ruby ). Contoh dibawah ini sudah saya gabungkan dengan Cucumber.
- Anda install dulu gem watir ( gem install watir ), ketika anda menginstall watir. anda pun akan secara otomatis menginstall firewatir ( untuk mozilla ), chromewatir ( untuk google chrome ), dan safariwatir ( untuk safari ), dan flashwatir ( untuk component flash )
- Kemudian jangan lupa anda “require ‘watir’” di config/environment/cucumber.rb
- Kemudian anda masukkan di salah satu step untuk mengetest AJAX
When /^(?:|I )press “([^\"]*)”$/ do |button|browser = Watir::Browser.newbrowser.goto(“http://localhost:3000/my_site_with_ajax”browser.checkbox(:name, “show_form”).set #ini adalah cek box untuk menampilkan form secara ajaxbrowser.text_field(:name, “username”).set “my_name”browser.form(:action, “submit”).submitend
Selesai dan selamat mencoba ya
Generator di dalam gem buatan sendiri
Topik ini adalah lanjutan dari topik kemarin dalam membuat ruby gem sendiri. Kalau belum lihat silahkan lihat di http://shunam.wordpress.com/2010/03/01/buat-ruby-gem-sendiri/.
Baik langkah pertama yang kita lakukan adalah :
- gem install rubigen ( install dulu rubigen )
- newgem coba ( buat gem dulu )
- cd coba ( ganti direktori ke folder gem coba )
- ruby script/generate component_generator [nama] [scope] ( nama adalah nama generatornya, scope adalah scope dari generatornya. untuk scope ada 2 pilihan, yaitu rubygems dan rails. Rubygems adalah generator yang hanya bisa diakses waktu mengdevelope rubygem, kalau rails adalah generator yang hanya bisa diakses untuk aplikasi rails saja, contoh ruby script/generate component_generator generatorku rails )
- cd rails_generator ( disini anda akan lihat folder dengan nama generator anda, contoh generatorku)
- cd generatorku ( tergantung dengan nama yang kalian kasih )
- Di dalam folder ini, akan terdiri dari file USAGE, file generatorku_generator, dan folder templates. di dalam folder templates inilah dimana file-file generator kalian berada.
- buat sebuah file misalnya “fileku.txt” di folder templates
- kemudian edit file generatorku_generator
def manifestrecord do |m|m. file ’copy_dari_fileku.txt’, ‘fileku.txt”endend
- jangan lupa masukkan fileku.txt ke manifest atau biar mudah lakukan rake manifest
- jangan lupa juga edit rakefile ( baca cara buat ruby gem sendiri )
Thanks, semoga sharingnya bermanfaat
Cucumber Error Couldn’t find ‘cucumber’ generator
Cucumber digunakan untuk BDD dalam ruby on rails. Dari tutorial yang saya baca cucumber hanya memerlukan gem rspec, rspec-rails, cucumber, dan webrat. Setelah saya install dan ingin menggunakannya dengan “ruby script/generate cucumber”, terjadi error “Couldn’t find ‘cucumber’ generator”.
Waduh… kenapa bisa error, padahal saya menggunakan tutorial yang biasa saya pakai. Saya pikir, mungkin gem nya ada yang bentrok atau bagaimana, saya coba install ulang ruby dan gem nya. Ternyata masih mendapat error yang sama. Saya pun berusaha mencari di mr google. Eh ternyata cucumber yang baru ( disaya versi 0.6.3 ), memisahkan antara generator dengan cucumbernya. Jadi selain gem-gem yang pertama saya sebutkan, ada tambahan gem baru yaitu cucumber-rails.
Jadi kalau anda mendapat error ini, cobalah install dulu gem cucumber-rails. Semoga membantu
Tambahan sedikit : sepertinya untuk cucumber versi 0.6.3 untuk masalah huruf ‘a’ tidak muncul di windows, sepertinya sudah tidak ada.
Buat ruby gem sendiri
Apakah anda memiliki keinginan atau anda diberi pekerjaan untuk membuat gem sendiri ? Anda bisa menggunakan gem newgem. Newgem adalah gem untuk membuat gem sendiri. Cara pemakaiannya mudah, langkah-langkahnya yaitu :
- install dulu newgem
- sesudah anda install anda lakukan “newgem [nama_gem yang anda inginkan]“, misal “newgem myapp”. Nanti newgem akan menggenerate beberapa file untuk anda. Contohnya :
Ada beberapa parameter yang bisa digunakan, contohnya : -b untuk membuatkan “cli executeable” atau -t untuk membuat test unit, untuk lebih lengkap anda bisa lihat menggunakan parameter -h. - Kemudian anda buat file ruby untuk gem nya berada di dalam folder “lib/myapp”
- Untuk merubah version, minor bug, atau major bug, anda bisa edit di file “/lib/myapp.rb”
- Bila anda tidak ingin menggunakan semua file anda bisa ubah manifestnya yang berada di Manifest.txt. Saya berikan contoh misalnya anda menambahkan sebuah file “contoh.rb” di dalam folder “lib/myapp”. Anda tambahkan saja langsung di manifestnya “lib/myapp/contoh.rb”. Atau misalnya anda sudah membuat 100 file yang baru dan anda malas untuk memasukkan satu per satu, anda bisa gunakan rake check_manifest. Nanti akan muncul seperti ini :
Coba anda perhatikan tulisan yang saya putihkan atau ada lambang “+” ( plus ). Anda copy itu semua, dan anda ganti semua isi manifest.txt, dengan yang tadi anda copy. Jangan lupa hapus character “+”-nya. - Jangan lupa tulis perubahan apa saja di history.txt. untuk memudahkan developer lain membantu anda membuat gem anda.
- Bila gemnya sudah siap, anda bisa lakukan rake gem, untuk membuat gem-nya. Gem yang di hasilkan akan berada di dalam folder /pkg
Gemnya tinggal anda install, selamat mencoba