第一步:用bundle gem gem_name生成基本结构,如下:
[root@arch demo]$ bundle gem rename_url
create rename_url/Gemfile
create rename_url/Rakefile
create rename_url/.gitignore
create rename_url/rename_url.gemspec
create rename_url/lib/rename_url.rb
create rename_url/lib/rename_url/version.rb
Initializating git repo in /home/suchj/programs/demo/rename_url
注:
Gemfile # 描述依赖
Rakefile # 发布和打包的 rake tasks
GEM_NAME.gemspec # gem 的 spec
GEM_NAME/lib/GEM_NAME.rb 与 GEM_NAME/lib/GEMNAME/ # gem 里的 library
GEM_NAME/lib/GEM_NAME/version.rb # 版本记录
第二步:写Gems规范文件,rename_url.gemspec
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)
require "rename_url/version"
Gem::Specification.new do |s|
s.name = "rename_url"
s.version = RenameUrl::VERSION
s.authors = ["xx"]
s.email = ["xx@gmail.com"]
s.homepage = ""
s.summary = %q{TODO: Write a gem summary}
s.description = %q{TODO: Write a gem description}
s.rubyforge_project = "rename_url"
s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
s.require_paths = ["lib"]
# specify any dependencies here; for example:
# s.add_development_dependency "rspec"
# s.add_runtime_dependency "rest-client"
end
第三步:写实现,lib/rename_url.rb
require "rename_url/version"
module RenameUrl
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def urlize
include RenameUrl::InstanceMethods
end
end
module InstanceMethods
def to_param
"#{id}_#{title}"
end
end
end
ActiveRecord::Base.send(:include, RenameUrl) #在model中引入
第四步:打包gem
[root@arch rename_url]$ gem build rename_url.gemspec
WARNING: no homepage specified
Successfully built RubyGem
Name: rename_url
Version: 0.0.1
File: rename_url-0.0.1.gem
注:如果规范文件有信息没写全,会有警告
第五步:使用,在项目的Gemfile中加入
gem 'rename_url', :path => '~/programs/rename_url'
注:gem文件在哪就写哪个路径
post.rb
class Post < ActiveRecord::Base
urlize #相当于include RenameUrl::InstanceMethods
end
测试:
[root@arch demo]$ rails c
Loading development environment (Rails 3.0.4)
1.8.7 :001 > Post
=> Post(id: integer, name: string, title: string, content: text, created_at: datetime, updated_at: datetime)
1.8.7 :002 > Post.create(:title => "test")
=> #<Post id: 2, name: nil, title: "test", content: nil, created_at: "2012-02-03 08:38:53", updated_at: "2012-02-03 08:38:53">
1.8.7 :003 > Post.find_by_title("test").to_param
=> "2_test"
OK,一个简单的gem就完成了。
当然,一个完整的gem有完整的测试,还可能会放到git和rubygems上供大家使用,此例子纯粹供练手,仅供参考。
分享到:
相关推荐
secs -gem 规格书一份,不会写规格书的同学可以拿走
Bundler使用Ruby语言写的,通过跟踪和安装运行Ruby项目所需要的确切的gem和版本,为Ruby项目提供了完整的可运行环境。Bundler跳出了复杂的环境依赖,并且确保下载你在development, staging, and productionBundler这...
eb lookup vmas for Linux v2.13.6.
TODO: 写一个 gem 描述安装将此行添加到应用程序的 Gemfile 中: gem 'beta' 然后执行: $ bundle或者自己安装: $ gem install beta用法TODO:在这里写使用说明贡献分叉它( ) 创建您的功能分支( git checkout -...
写的 让热爱写作的开发者轻松发布 入门 有两种方法可以使用 Writefully、生成全新的应用程序或将其集成到现有应用程序中。 写入依赖于 PostgreSQL 并激活了 hstore 扩展,因此如果您使用现有的应用程序路由,请...
1. 蓝图 2. 蓝图初步还原 3. 蓝图精细还原 4. 小关卡攻坚 5. 写存流程分析 6. GEM5 中断概览 1. 蓝图 2. 蓝图初步还原 3. src
一个甜美的,扩展的DSL,写在 gem的顶部。 寻找这个宝石的快速概述? 转到“部分。 该宝石可让您: 轻松编写由ActiveRecord模型支持的和。 自动将字段名称转换为snake_case。 自动添加id , createdAt和updated...
Omniauth::Ada TODO: 写一个 gem 描述安装将此行添加到应用程序的 Gemfile 中: gem 'omniauth-ada'然后执行: $ bundle或者自己安装: $ gem install omniauth-ada用法TODO:在这里写使用说明贡献分叉吧创建您的...
达拉约什第一宝石待办事项:写一个宝石描述安装将此行添加到应用程序的 Gemfile 中: gem 'dharajoshi_first_gem' 然后执行: $ bundle或者自己安装: $ gem install dharajoshi_first_gem用法TODO:在这里写使用...
Upay Upay,这是在Payu中进行交易的简单包装安装将此行添加到您的应用程序的Gemfile中: gem 'upay' 然后执行: $ bundle或将其自己安装为: $ gem install upay用法待办事项:在此处写下使用说明贡献分叉( ) 创建...
C#写的PCSC示例代码,已经封装成了一个框架,C# 程序可以直接使用
自述文件 使用racecar宝石的测试卡夫卡...要将消息写到特定主题,请执行以下操作: $ KAFKA_TOPIC=your-topic-name-goes-here bin/rails server 要回显默认的some-topic主题,请执行以下操作: $ bin/rails server
待办事项:写一个宝石描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'egauge' 然后执行: $ bundle 或者自己安装: $ gem install egauge 用法 TODO:在这里写使用说明 贡献 分叉它( ) 创建您的功能...
待办事项:在此处写下使用说明 发展 签出仓库后,运行bin/setup来安装依赖项。 然后,运行bin/console进行交互式提示,让您进行实验。 要将这个gem安装到本地计算机上,请运行bundle exec rake install 。 要发布新...
待办事项:在此处写下使用说明 发展 签出仓库后,运行bin/setup来安装依赖项。 然后,运行rake spec来运行测试。 您也可以运行bin/console进行交互式提示,以进行实验。 要将这个gem安装到本地计算机上,请运行...
TODO: 写一个 gem 描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'bolzter' 然后执行: $ bundle 或者自己安装: $ gem install bolzter 用法 ###1。 设置 API 密钥 Bolzter :: Bolzter . set_...
待办事项:写一个宝石描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'scalablepress' 然后执行: $ bundle 或者自己安装: $ gem install scalablepress 用法 TODO:在这里写使用说明 贡献 分叉它( )...
待办事项:写一个宝石描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'zipcode_search' 然后执行: $ bundle 或者自己安装: $ gem install zipcode_search 用法 TODO:在这里写使用说明 贡献 分叉它( ...
身份链接器待办事项:写一个宝石描述安装将此行添加到应用程序的 Gemfile 中: gem 'identity_linker'然后执行: $ bundle或者自己安装: $ gem install identity_linker用法TODO:在这里写使用说明贡献分叉吧创建您...
Emites::Rails 与 EMITES 的 API 集成 ( )安装将此行添加到应用程序的 Gemfile 中: gem 'emites-rails'然后执行: $ bundle或者自己安装: $ gem install emites-rails用法TODO:在这里写使用说明贡献分叉它( ) ...