複数のアプリから参照するライブラリを書きたくなったので、勉強がてらgemを作ってみることにしました。gemテンプレートを生成して、処理を記述して、rspecでテストを書くところまでを書いています。

■ テンプレートの生成とgemspecの記述

以下でテンプレートの生成ができます。

bundle gem hello-akasata


hello-akasata.gemspecの内容です。TODOと書いてあるところを書き換えましょう。

# -*- encoding: utf-8 -*-
require File.expand_path('../lib/hello-akasata/version', __FILE__)

Gem::Specification.new do |gem|
  gem.authors       = ["akasata"]
  gem.email         = ["*@*.*"]
  gem.description   = %q{Test Gem.}
  gem.summary       = %q{Hello World!}
  gem.homepage      = ""

  gem.files         = `git ls-files`.split($\)
  gem.executables   = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
  gem.test_files    = gem.files.grep(%r{^(test|spec|features)/})
  gem.name          = "hello-akasata"
  gem.require_paths = ["lib"]
  gem.version       = Hello::Akasata::VERSION
  
  # 依存するgemがある場合
  # gem.add_dependency('log4r', '>= 1.0.5')
  gem.add_development_dependency('rspec')
end


lib/hello-akasata/version.rbの内容は以下の通りです。内容を変更したらここを変更しましょう。

module Hello
  module Akasata
    VERSION = "0.0.1"
  end
end


■ 処理の記述

lib/hello-akasata.rbの内容を書き換えてください。とりあえず、hello worldです。

require "hello-akasata/version"

module Hello
  module Akasata
    def self.hello
      "Hello akasata World!"
    end
  end
end


■ ビルド

rakeでビルドを行うことができます。

rake build # ビルドします
rake install # ビルドしてシステムにインストールします
rake release # これでRubyGems.orgに公開されます。今回はやってませんw


■ rspec

spec/spec_helper.rb

require 'rubygems'
require 'bundler/setup'
require 'hello-akasata'

RSpec.configure do |config|
  config.mock_framework = :rspec
end


spec/hello-akasata_spec.rb

require 'spec_helper'

describe Hello::Akasata, "::hello" do
  it "should return 'Hello akasata World!'" do
    Hello::Akasata.hello.should eq("Hello akasata World!")
  end
end


以下、rspecの実行です。

rspec


■ 参考文献

ASCIIcasts - “Episode 245 - Bundlerでgemを作る”
testing - Setup RSpec to test a gem (not Rails) - Stack Overflow

Posted by あかさた
最近のエントリ
最近の読書メモ