Update(2007/7/31): 今日的投影片在這裡(xul),請用 Firefox 開啟瀏覽。
這一次依然由我來跟大家分享 Ruby/Rails testing,題目是 RSpec, a Behavior-driven development framework。
時間是晚上 8:00-10:00,地點在 opcafe 三代。
😆 👨🏻💻 ✨ 🚀 💰
玩到捨不得關機睡覺了啦!! 不過看一整天的視窗滑來滑去有點頭暈… :p軟體的話,裝了以下來用 (加 * 的是要錢軟體)
感謝 hlb,gugod 長輩的推薦跟燈哥的這篇軟體清單,讓我沒幾天就裝了這麼多套….XD
Update(2007/7/23): 已經可以開始寫程式上工了,特別感謝和多的好同事們和 #osxchat 的朋友讓我FAQ快速上手…:)
等了快一個月,今天終於去優仕把 MacBook Pro 搬回來啦。
目前正在努力習慣中… :D
Update(2009): 新的 Ruby XML parsing 王道是 nokogiri 了 (via The State of XML Parsing in Ruby (Circa 2009))。
Hpricot 是個快又好用的 Ruby HTML parser,點子來源是 JQuery。它的兩大優點是 1.速度快,因為核心用C改寫了 2.好用的介面,你可以用CSS selectors,element IDs,tag types 等。
其它的優點還有可以吃 XML,可以吃 invaild 的 HTML,甚至可以更改 document 結構。
首先是安裝
gem install hpricot
基本用法
require 'rubygems'
require 'hpricot'
document = <<END
<ul>
<li>first item</li>
<li>second item</li>
</ul>
END
doc = Hpricot.parse(document)
(doc/'li').each do |item|
puts item.inner_html
end
出來的結果就是 first item 跟 second item 囉。其中 (doc/’li’) 意同 doc.search(‘li’),就是搜出 li 這個 tag。
進階用法
可跑 nested 迴圈,而除了 inner_html,也可以抓屬性值如 attributes[‘href’] 。我拿交大某站來練習一下:
require 'rubygems'
require 'hpricot'
require 'open-uri'
url = "http://www.pac.nctu.edu.tw/news/news_msg.php"
doc = Hpricot(open(url))
doc.search('table tr td div.tbCopy font').each do |item|
(item/'a').each do |nav|
puts nav.attributes['href']
puts nav.inner_html
end
end
心得是若 HTML 有好的結構,則 hpricot 可以快速走訪到你想要的位置。例如有設定 element IDs 或 class 的話,就可以用 doc.search(‘table#myid’) 或 doc.search(‘span.myclass’) 快速到位。
不過就算是如上述的老式HTML網站,要找 CSS selector 只要搭配服用 firefox extension Web Developer 也不難解決,點選 CSS > View Style Information 就可以看到路徑了。
RubyGems 是 Ruby 的 Package 管理系統,讓你輕易安裝及管理各種 Ruby programs/libraries。
你可以去 rubygems.org/pages/download 下載回來,執行 ruby setup.rb。在 Freebsd 下則可以進 /ports/devel/ruby-gems/make install 安裝。
gem -v 告訴你 RubyGems 的版本
gem update --system 升級你的RubyGems版本
gem install gemname 安裝某個套件
gem list 列出安裝的套件
gem list -r keyword 列出 RubyGems.org 上有此關鍵字的套件(可用regular expression)
你可以跑一遍 gem list -r > remote_gem_list.txt 來拿到全部的清單
不是所有的 gems 都用 Ruby 寫的,有用 C extensions 的會需要 C/C++ compiler。因此安裝的時候,會出現 ruby/mswin32,後者直接提供 binary gem。不過win32上還有是例外,需要要下載回來裝再執行某些動作,例如 gem install RMagick-win32-x.x.x-mswin32.gem 再 ruby postinstall.rb 云云,看README吧。
gem check --alien 檢查你安裝的套件有沒有壞掉或被修改過。
gem update gemname 更新最新版本
gem update 更新所有你安裝的Gems
gem install -v x.x.x gemname 安裝特定版本
gem uninstall gemname 反安裝
程式中要使用 library 的話,用法如下:
require 'rubygems'
gem 'gemname','>=1.0.0' # 若需要指定版本的話加這行
require 'gemname'
其中 gem 在更早的版本是寫 require_gem,新的 Rubygems 為了避免與 require 混淆已改名(一個是檢查版本,一個是真正引用,兩者不一樣),這也是因為新版 Rubygems 把 autorequire 的功能拿掉了。