View on GitHub

Wills' blog

  • home | github | resume |
  • 试做rubygem-json rander

    02 Feb 2014

    最近在学习ruby。尝试做一个简单的gem上传至rubygem发布。

    在项目中的json,有需要对各种形式的json字符串做鲁棒性测试的需求。于是打算第一次做的gem是随机json式字符串的生成器:JsonRander

    github生成代码仓库

    和其他代码仓库的生成方式一样,因为用于发布,所以自动生成选择MIT格式的licence

    Gemfile

    应为采用gemspec的配置进行打包上传,随意编辑Gemfile如下并保存

    source 'https://rubygems.org'
    gemspec
    

    gemspec文件

    gemspec文件中包含了模块文件的作者,版本等等信息。这次就编辑json_rander的gemspec如下。

    # -*- encoding: utf-8 -*-
    lib = File.expand_path(File.join(File.dirname(__FILE__),'lib/'))
    $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
    
    require 'json_rander/version'
    
    Gem::Specification.new do |s|
      s.name        = 'json_rander'
      s.version     = JsonRander::VERSION
      s.date        = '2014-01-28'
      s.summary     = "generate random json string"
      s.description = "generate random json string"
      s.authors     = ["wills"]
      s.email       = 'weirenzhong@gmail.com'
      s.files       = `git ls-files`.split($/)
      s.homepage    = 'https://github.com/fdwills/json_rander'
      s.license     = 'MIT'
    end

    这里列举的只是部分的gemspec的设置。gemspec文件中还能定义模块的依赖关系,可执行的文件(一般式执行rake任务)的位置等等。具体可以参考gemspec

    lib文件

    下面开始编写lib文件,lib/模块名.rb是模块的入口文件。gem安装的时候会将gem包下的lib放入ruby的load_path中,所以在代码中包含require '模块名.rb'就能使用新添加的ruby模块

    详细略,参考源码

    打包上传

    打包

    gem build json_rander.gemspec
    

    上传(先在rubygem网站建立自己的账号,确保模块名没有被占用)

    gem push 模块名-版本.gem
    

    使用

    最后就可以在自己的项目的gemfile中加入以下来使用新模块中的类了

    gem 'json_rander'
    

    [click to comment]