首先需要注明一点,本文是原创的并不是从其它地方转载。所有的数据是我从 GitHub 和 RubyGems 上码下来的,数据的截取时间就是本文的发布日期。
RubyGems 的下载量可以看到在用这个 gem 的人数,所以数值很大(这里收藏的下载量至少会大于10万级)。而在 GitHub 上的则代表关注这个gem的源码的人数(本文收藏的至少是过 1k以上 Star 的 repository)
Nokogiri
gem 'nokogiri'
采集数据是我们需要解析复杂的 HTML 结构,从中获得需要的数据,Nokogiri 可以帮助我们完美的处理不同网页上面不同的 HTML 结构,并且有很好的编码处理能力,用它你不用担心页面是 GB2312 还是 GBK 还是 UTF-8,它都很很好的处理,解析结构可以用类似 jQuery 的 CSS Selector 的方式查找,很是方便。曾经用过 Ruby 的好几个类似插件,最终发现 Nokogiri 才是最好的。
Faraday
gem 'faraday', '~> 0.9.1'
Faraday 是一个HTTP的客户端,可以提供一般化的接口和多种的适配器 (例如 Net::HTTP)。
做一些网络服务API集成它是一个很好用的助手。
conn = Faraday.new(:url => 'http://sushi.com') do |faraday|
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
## GET ##
response = conn.get '/nigiri/sake.json' # GET http://sushi.com/nigiri/sake.json
response.body
conn.get '/nigiri', { :name => 'Maguro' } # GET http://sushi.com/nigiri?name=Maguro
conn.get do |req| # GET http://sushi.com/search?page=2&limit=100
req.url '/search', :page => 2
req.params['limit'] = 100
end
## POST ##
conn.post '/nigiri', { :name => 'Maguro' } # POST "name=maguro" to http://sushi.com/nigiri
# post payload as JSON instead of "www-form-urlencoded" encoding:
conn.post do |req|
req.url '/nigiri'
req.headers['Content-Type'] = 'application/json'
req.body = '{ "name": "Unagi" }'
end
## Per-request options ##
conn.get do |req|
req.url '/search'
req.options.timeout = 5 # open/read timeout in seconds
req.options.open_timeout = 2 # connection open timeout in seconds
end
RSPEC-RAILS
gem 'rspec-rails', '~> 3.4'
如果没有用过 RSpec 都不能算是懂 Ruby 吧,respec_rails 顾名思义是将 rspec 集成至 rails 中的测试框架了:
require "spec_helper"
describe User do
it "orders by last name" do
lindeman = User.create!(first_name: "Andy", last_name: "Lindeman")
chelimsky = User.create!(first_name: "David", last_name: "Chelimsky")
expect(User.ordered_by_last_name).to eq([chelimsky, lindeman])
end
end
Devise
gem 'devise', '~> 3.5', '>= 3.5.2'
Devise 是一个用于快速构建基本用户功能,如:注册,登陆,找回密码。 同时它还集成了第三方的登入支持,代码也相当简单:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches: 20
end
Devise 是一个大集成包,单看看它集成了什么就能知道到大至上的功能了:
- Database Authenticatable: 支持加密的身份验证并能将验证信息存储于数据内。
- Omniauthable: 集成 OmniAuth 实现三方平台(如: Twitter, Facebook, 新浪微博, 腾讯 QQ)账号登陆的支持。
- Confirmable: 发送邮件以验证注册用户的身份。
- Recoverable: 支持密码重置。
- Registerable:支持注册新用户。
- Rememberable: 支持自动登录
- Trackable: 可跟踪用户的登入次数,时间戳和 IP
- Timeoutable: 支持自动用户会话的过期
- Validatable: 可验证用户的邮件的与密码的正确性,且可定制化。
- Lockable: 可以锁定多次尝试登录失败的用户账号。
如果没有它,光想想要我们自己来码上面的这些功能都够浪费时间的。重点是每个项目都得用啊。
FACTORY_GIRL_RAILS
gem 'factory_girl_rails'
Factory Girl可能是ROR测试中最常用到的数据工厂,没有它也只能手工写Fixture了。不解释了,它太常用了。
# spec/factories/user.rb
FactoryGirl.define do
factory :user do
first