railsで使用するgemを作る

gem の雛形を作る

$ rails plugin new gem_name
      create
      create  README.md
      create  Rakefile
      create  gem_name.gemspec
      create  MIT-LICENSE
      create  .gitignore
      create  Gemfile
      create  lib/gem_name.rb
      create  lib/tasks/gem_name_tasks.rake
      create  lib/gem_name/version.rb
      create  bin/test
      create  test/test_helper.rb
      create  test/gem_name_test.rb
      append  Rakefile
  vendor_app  test/dummy
         run  bundle install

$ cd gem_name

gem_spec のTODOとなっている部分を正しい情報に書き換える ここで書き換えておかないと、警告文が表示されてrakeを使ってtestを流すことができない

$ vim gem_name.gemspec

----
$:.push File.expand_path("../lib", __FILE__)

# Maintain your gem's version:
require "gem_name/version"

# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
  s.name        = "gem_name"
  s.version     = GemName::VERSION
  s.authors     = ["J.Fukaya"]
  s.email       = ["fukajun.shark@gmail.com"]
  s.homepage    = "http://fukajun.org/"
  s.summary     = "Summary of GemName."
  s.description = "Description of GemName."
  s.license     = "MIT"

  s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]

  s.add_dependency "rails", "~> 5.0.0", ">= 5.0.0.1"

  s.add_development_dependency "sqlite3"
end

この時点でtestを実行できるかどうかを確認する => ダミーのテストがグリーンになるはず

$ bundle exec rake test

gemの処理を実装していく

$ vim lib/gem_name.rb

----
module GemeName
end

class ActiveRecord::Base
  def self.hoge
    'hoge'
  end
end

testを作成する

今回は、ActiveRecord::Baseを拡張する機能を書いているので test/dummy側にActiveRecord::Baseを継承した通常のrails の modelクラスを作成していく

$ cd test/dummy
$ bundle exec rails g model user name

    invoke  active_record
    create    db/migrate/20161107165840_create_users.rb
    create    app/models/user.rb
    invoke    test_unit
    create      test/models/user_test.rb
    create      test/fixtures/users.yml
$ vim db/migrate/20161107165840_create_users.rb

----

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.string name
      t.timestamps
    end
  end
end

いよいよテストコードを書いていく

$ cd ../../ # gemのrootへ戻る
$ vim test/gem_name_test.rb

require 'test_helper'

class GemName::Test < ActiveSupport::TestCase
  test "truth" do
    assert_equal 'hoge', User.hoge
  end
end

再度、テストを実行して見る、グリーンになるはず

$ bundle exec rake test
Recent Entries