der, vendor: 'twitter'
format :json
prefix :api
helpers do
def current_user
@current_user ||= User.authorize!(env)
end
def authenticate!
error!('401 Unauthorized', 401) unless current_user
end
end
resource :statuses do
desc 'Return a public timeline.'
get :public_timeline do
Status.limit(20)
end
desc 'Return a personal timeline.'
get :home_timeline do
authenticate!
current_user.statuses.limit(20)
end
desc 'Return a status.'
params do
requires :id, type: Integer, desc: 'Status id.'
end
route_param :id do
get do
Status.find(params[:id])
end
end
desc 'Create a status.'
params do
requires :status, type: String, desc: 'Your status.'
end
post do
authenticate!
Status.create!({
user: current_user,
text: params[:status]
})
end
desc 'Update a status.'
params do
requires :id, type: String, desc: 'Status ID.'
requires :status, type: String, desc: 'Your status.'
end
put ':id' do
authenticate!
current_user.statuses.find(params[:id]).update({
user: current_user,
text: params[:status]
})
end
desc 'Delete a status.'
params do
requires :id, type: String, desc: 'Status ID.'
end
delete ':id' do
authenticate!
current_user.statuses.find(params[:id]).destroy
end
end
end
end
CANCANCAN
gem 'cancancan', '~> 1.10'
它是 CanCan 项目的代替品,它其实就是为我们的应用加入操作权限控制,而且比较好的地方是可以将所有的操作权限放在至到一个独立的文件之中。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
而它的另一个比较新后来者就可以数 pundit 了, 由于在RubyGems上的下载量才7万多,所以就不独列出数了。但值得注意的是它在GitHub上的start是6K多,已超越CanCanCan的Repository。
如果有做过操作权限控制的朋友可能都会发现,操作极权限控制是很耗费性能的,而 pundit 则号称在性能上会超越 CanCanCan,
Pundit 更为模块化,对于体量较大的程序我觉得更为之合适,至少不会写出一个几百行的大文件出来,不利于维护。
ActiveAdmin
gem 'activeadmin', github: 'activeadmin'
这是一个相当不错的管理界面应用gem, 基本不需要做什么需求就能上项目了。从RubyGems的百万级下载量也可以得知其受欢迎的程度了。感觉上是有点仿 Wordpress 的 Dashboard。
我个人是很喜欢 ActivateAdmin 的DSL定义的,因为既简单又快速:
ActiveAdmin.register Product do
scope :all, default: true
scope :available
scope :drafts
filter :title
filter :author, as: :select, collection: ->{ Product.authors }
filter :price
filter :create_at
index do
column :title
column "Price", sortable: :price do |product|
number_to_currency product.price
end
defualt_actions
end
end
这样的代码几乎就是秒懂,不解释了。这家伙谁用谁说好 ^_^
他们的官网也做得挺好的,这里是一些关于 ActivateAdmin 的资源链接:
相关 gem
rails_admin
$ rails g rails_admin:install
与 ActiveAdmin 相比 rails_admin 就逊色的多了,但在 GitHub 上却表现不俗。在代码质量上其实两者相去不远,只是 ActiveAdmin 更好看一些,而 rails_admin 的界面就做得有点渣,要上项目的话必须得作出很多的修改。
以下是 rails_admin 的特色:
- 对任何数据都可支持 CRUD
- 自定义操作
- 自动化表单验证
- 支持查找与过滤
- 可以将数据导出为 CSV/JSON/XML 格式
- 支持 Devise 的身份验证
- 支持 CanCanCan 或 Pundit 的权限判定
- 通过 PaperTrail 支持用户操作历史
- 支持多种ORM
Sunspot
gem 'sunspot_rails'
gem 'sunspot_solr' # optional pre-packaged Solr distribution for use in development
Sunspot 是一个 Solr 搜索引擎的 Ruby 库。它基于 RSolr 库构建,提供低级别的 Solr 集成接口。它的定义很简单,使用也相当容易,用DSL就可索引对象和启用搜索了。
它的主要特点:
|