複数のアプリから参照するライブラリを書きたくなったので、勉強がてら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