`
suchj
  • 浏览: 147447 次
  • 性别: 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

相关推荐

    CPU 2006在Gem5中1

    CPU 2006 在 Gem5 中的应用 CPU 2006 是一款广泛使用的测试工具,旨在评估计算机系统的性能。Gem5 是一个开源的全系统架构模拟器,能够模拟各种计算机系统架构。将 CPU 2006 集成到 Gem5 中,可以对计算机系统的...

    redis-gem.zip

    3. **主从复制**:Redis默认支持主从复制,主节点负责写操作,从节点负责读操作,提高了系统的并发性能。 接下来,我们关注Redis集群的关键特性: 1. **数据分片**:Redis Cluster将数据分散在多个节点上,每个节点...

    i915_gem_execbuffer.rar_GEM_ebbuffer的全写

    在Linux内核驱动程序中,`i915_gem_execbuffer`是Intel图形硬件(例如Intel集成显卡)管理GPU内存和执行图形命令的核心部分。这个压缩包中的`i915_gem_execbuffer.c`文件是C语言源代码,包含了实现`GEM (Graphics ...

    redis-3.2.1.gem

    - **读写分离**:读操作可以被路由到任何节点,写操作则必须在主节点执行。 总结来说,`redis-3.2.1.gem` 是为 Ruby 开发者提供的一键式安装 Redis 集群的工具,它简化了在开发环境中设置和管理 Redis 集群的过程。...

    GEM,SECS1,SECS2,HSMS 协议实现源代码 C++版本

    SECS ( Semiconductor Equipment Communication Standard ) 和 GEM (Generic Equipment Model) 是半导体制造设备与主机系统之间通信的标准协议,主要用于晶圆厂自动化生产环境。而SECS1、SECS2和HSMS (High Speed ...

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

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

    redis-3.0.0.tar和redis-3.0.0.gem.rar

    在这个场景中,我们关注的是Redis的集群搭建,涉及到的文件是"redis-3.0.0.tar"和"redis-3.0.0.gem"。这两个文件分别对应Redis服务本身和通过Ruby来创建Redis集群的工具。 首先,`redis-3.0.0.tar`是一个源代码...

    三星 KLM8G1GEME-B041 datasheet

    三星KLM8G1GEME-B041的数据手册提供了关于eMMC5.1+1ynm技术规格的详细信息。eMMC(嵌入式多媒体卡)是一种集成电路存储设备,用于提供非易失性存储,它将NAND闪存和闪存控制器集成到一个小型的封装中。这种集成的...

    redis-3.3.5.gem

    `redis-3.3.5.gem` 是一个针对 Ruby 语言的 Redis 客户端库,它允许 Ruby 开发者方便地与 Redis 服务器进行交互。在本篇中,我们将深入探讨 Redis 的基本概念、集群配置以及 `redis-3.3.5.gem` 的安装与使用。 首先...

    redis-3.2.1.gem.zip

    RDB 是在特定时间点生成数据库的全量备份,而 AOF 记录所有的写操作日志,当 Redis 重启时,可以通过回放这些日志来恢复数据。开发者可以根据应用场景选择合适的持久化策略。 Redis 的主从复制功能可以提高系统的...

    redis-3.0.0.gem

    RDB 在特定时间点创建数据库的全量备份,而 AOF 记录所有写操作的日志,确保数据安全。 4. **主从复制**:Redis 支持主从复制,可以实现数据备份和负载均衡,主服务器的数据会自动同步到从服务器,提高系统的可用性...

    redis-4.0.1.gem

    RDB会在指定时间间隔生成数据快照,而AOF则记录所有写操作日志,确保即使在服务器重启后也能恢复数据。 3. **事务**:Redis支持事务,用户可以将多个操作打包成一个事务,保证这些操作要么全部执行,要么全部不执行...

    redis-3.3.5.gem.zip

    3. 主从复制(Replication):主节点负责写操作,从节点复制主节点的数据,提供读服务,保证数据冗余和容错。 4. 故障转移(Failover):当主节点故障时,从节点自动接管,确保服务不中断。 5. CLUSTER CONFIG GET ...

    redis-3.3.0.gem

    这里的"redis-3.3.0.gem"是一个Ruby编程语言的Gem包,用于在Ruby环境中安装和管理Redis客户端库。这个版本是Redis的3.3.0稳定版,发布于2017年,提供了许多关键功能和性能改进。 首先,让我们了解一下Redis的基本...

    qxl_gem.rar_GEM

    在IT行业中,GEM通常指的是Graphics Environment Manager,它是一个图形用户界面系统,为操作系统提供图形化服务。在本文中,我们将深入探讨与“qxl_gem.rar_GEM”相关的知识点,尤其是与“drop reference”和...

    Gem-源码.rar

    《深入理解Gem:源码解析》 Ruby社区中的Gem是其强大的包管理器,它使得开发者可以方便地分发、安装和管理代码库。Gem不仅仅是一个简单的库,它构建了一个完整的生态系统,支持版本控制、依赖管理和命令行工具。在...

    redis-3.2.11.tar.gz 以及redis-3.3.5.gem

    在Redis集群搭建过程中,`redis-3.3.5.gem`是Ruby的一个软件包,它包含了一个名为`redis`的Ruby gem,这是一个客户端库,用于与Redis服务器通信。Ruby Gem是Ruby语言的包管理器,它使得安装和管理Ruby库变得简单。要...

    redis-3.0.0&redis;-3.0.0.gem.zip

    这个压缩包“redis-3.0.0&redis-3.0.0.gem.zip”包含了Redis服务器的源码包(redis-3.0.0.tar.gz)以及一个与Ruby相关的库(redis-3.0.0.gem),后者是用于在Ruby环境中构建Redis集群所必需的。 1. Redis 3.0.0 ...

    KLM8G1GEME-B041 emmc5.1 datasheet

    1. eMMC 5.1标准兼容性:文件提到KLM8G1GEME-B041是与eMMC 5.1规范兼容的存储芯片。eMMC(嵌入式多媒体卡)是一种标准的闪存存储设备,它将NAND闪存与闪存控制器集成到单个封装中。eMMC 5.1版本是在2015年制定的标准...

Global site tag (gtag.js) - Google Analytics