`
suchj
  • 浏览: 146286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

第一步:用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上供大家使用,此例子纯粹供练手,仅供参考。


2
0
分享到:
评论
1 楼 ruby_windy 2012-02-03  
1. 完成测试.

2. gem push 发送到rubygems.org

相关推荐

    SECS-GEM规格书 SECS版本.doc

    secs -gem 规格书一份,不会写规格书的同学可以拿走

    gem依赖关系管理工具Bundler.zip

    Bundler使用Ruby语言写的,通过跟踪和安装运行Ruby项目所需要的确切的gem和版本,为Ruby项目提供了完整的可运行环境。Bundler跳出了复杂的环境依赖,并且确保下载你在development, staging, and productionBundler这...

    i915_gem_execbuffer.rar_GEM_ebbuffer的全写

    eb lookup vmas for Linux v2.13.6.

    beta:一个示例 gem 骨架,包括 rspec、guard、pry、vcr、yard、simplecov、jeweler 和 bundler

    TODO: 写一个 gem 描述安装将此行添加到应用程序的 Gemfile 中: gem 'beta' 然后执行: $ bundle或者自己安装: $ gem install beta用法TODO:在这里写使用说明贡献分叉它( ) 创建您的功能分支( git checkout -...

    writefully-old:写地 gem 可以轻松地将内容发布到您的博客站点

    写的 让热爱写作的开发者轻松发布 入门 有两种方法可以使用 Writefully、生成全新的应用程序或将其集成到现有应用程序中。 写入依赖于 PostgreSQL 并激活了 hstore 扩展,因此如果您使用现有的应用程序路由,请...

    GEM5 源码阅读:O3 处理器的访存流程与错误处理1

    1. 蓝图 2. 蓝图初步还原 3. 蓝图精细还原 4. 小关卡攻坚 5. 写存流程分析 6. GEM5 中断概览 1. 蓝图 2. 蓝图初步还原 3. src

    graphql-sugar:甜蜜的,扩展的DSL,写在graphql-ruby gem的顶部

    一个甜美的,扩展的DSL,写在 gem的顶部。 寻找这个宝石的快速概述? 转到“部分。 该宝石可让您: 轻松编写由ActiveRecord模型支持的和。 自动将字段名称转换为snake_case。 自动添加id , createdAt和updated...

    omniauth-ada:Ada 的 omniauth 客户端的 Rails Gem

    Omniauth::Ada TODO: 写一个 gem 描述安装将此行添加到应用程序的 Gemfile 中: gem 'omniauth-ada'然后执行: $ bundle或者自己安装: $ gem install omniauth-ada用法TODO:在这里写使用说明贡献分叉吧创建您的...

    dharajoshi_first_gem:我的第一颗宝石

    达拉约什第一宝石待办事项:写一个宝石描述安装将此行添加到应用程序的 Gemfile 中: gem 'dharajoshi_first_gem' 然后执行: $ bundle或者自己安装: $ gem install dharajoshi_first_gem用法TODO:在这里写使用...

    upay:PayU的Ruby gem

    Upay Upay,这是在Payu中进行交易的简单包装安装将此行添加到您的应用程序的Gemfile中: gem 'upay' 然后执行: $ bundle或将其自己安装为: $ gem install upay用法待办事项:在此处写下使用说明贡献分叉( ) 创建...

    Smartcardapi_source.zip_GEM PCSC_PCSC_smartcard PCSC

    C#写的PCSC示例代码,已经封装成了一个框架,C# 程序可以直接使用

    racecar-kafka-test:Ruby on Rails的“ racecar” gem的简单测试

    自述文件 使用racecar宝石的测试卡夫卡...要将消息写到特定主题,请执行以下操作: $ KAFKA_TOPIC=your-topic-name-goes-here bin/rails server 要回显默认的some-topic主题,请执行以下操作: $ bin/rails server

    egauge-gem:使用 Egauge 能量计的宝石

    待办事项:写一个宝石描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'egauge' 然后执行: $ bundle 或者自己安装: $ gem install egauge 用法 TODO:在这里写使用说明 贡献 分叉它( ) 创建您的功能...

    fog-powerdns:“雾” gem的模块以支持PowerDNS

    待办事项:在此处写下使用说明 发展 签出仓库后,运行bin/setup来安装依赖项。 然后,运行bin/console进行交互式提示,让您进行实验。 要将这个gem安装到本地计算机上,请运行bundle exec rake install 。 要发布新...

    pushybullet-gem:pushbullet的另一种宝石

    待办事项:在此处写下使用说明 发展 签出仓库后,运行bin/setup来安装依赖项。 然后,运行rake spec来运行测试。 您也可以运行bin/console进行交互式提示,以进行实验。 要将这个gem安装到本地计算机上,请运行...

    bolzter:支持 Bolzter API 的 ruby​​ Gem

    TODO: 写一个 gem 描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'bolzter' 然后执行: $ bundle 或者自己安装: $ gem install bolzter 用法 ###1。 设置 API 密钥 Bolzter :: Bolzter . set_...

    scalablepress:用于包装可扩展印刷机 API 的 Gem

    待办事项:写一个宝石描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'scalablepress' 然后执行: $ bundle 或者自己安装: $ gem install scalablepress 用法 TODO:在这里写使用说明 贡献 分叉它( )...

    zipcode_search:用于搜索邮政编码的 gem

    待办事项:写一个宝石描述 安装 将此行添加到应用程序的 Gemfile 中: gem 'zipcode_search' 然后执行: $ bundle 或者自己安装: $ gem install zipcode_search 用法 TODO:在这里写使用说明 贡献 分叉它( ...

    identity_linker:使用 Cru 的身份链接系统的 Gem

    身份链接器待办事项:写一个宝石描述安装将此行添加到应用程序的 Gemfile 中: gem 'identity_linker'然后执行: $ bundle或者自己安装: $ gem install identity_linker用法TODO:在这里写使用说明贡献分叉吧创建您...

    emites-rails:使用 Emites API 的 Gem

    Emites::Rails 与 EMITES 的 API 集成 ( )安装将此行添加到应用程序的 Gemfile 中: gem 'emites-rails'然后执行: $ bundle或者自己安装: $ gem install emites-rails用法TODO:在这里写使用说明贡献分叉它( ) ...

Global site tag (gtag.js) - Google Analytics