LoginSignup
3
3

More than 5 years have passed since last update.

Facebookとの通信をmockするgemを作ってみた

Last updated at Posted at 2014-07-28

概要

gem作ってGithubに配置するまで(RubyGems.orgへのpush除く)の続き。

FacebookとのやりとりをMockするfacemockというGemを作った。
作ったGemの使い方と、作るときにやったこと(First Commit以降)を紹介しておきます。

背景・目的

ユーザ・テストユーザの管理ができるFacebookのMockがほしかった。
(適当なテストユーザを作成、Access Tokenでユーザ取得すると作成したテストユーザが返ってくる、等)
fb_graph-mockや他のmockのgemを使うことも考えたが、ユーザは真面目に扱って欲しかったので、自作することにした。

要素技術

  • ruby (2.1.1, 2.1.0, 2.0.0, 1.9.3)
  • gem (versionはそれぞれ最新を使用)
    • rspec
    • simplecov
    • sqlite3
    • activerecord
    • fb_graph
  • github
    • バッジ
    • 絵文字
  • rubygems

gemの概要

もとのコードをそのまま使えばMockされるようにしたかったため、
MockをonにするとFacebookと通信するgemのネームスペースMockに差し変わる仕組みにした。
今のところFbGraphのみ対応。
ほんの一部のみ。必要になったら拡張していく。

  • Mockのon/off
  • Mock on のときの
    • テストユーザ作成/一覧取得/削除
    • ユーザ取得

(今後koalaとかもやってみたい。)

雛形の作成~First Commit

gem作ってGithubに配置するまで(RubyGems.orgへのpush除く)を参照。
こちらの記事ではgem作成メインで進めます。

使い方

README.md参照。

First Commit ~ ver 0.0.1 までにやったこと

実装は省略。githubリポジトリを参照

ハマった点はqiita記事作成済み。

ここでは以下について書く。

  • カバレッジ見える化 (simplecovの導入)
  • rakeタスクでテスト (Rakefileの設定追加)
  • ファイルの整理 (空ディレクトリ作成+.gitkeep配置, .gitignoreの設定追加)
  • 色んなバッジ付けてみる
  • RubyGems.orgにpush

simplecovの導入

ver 0.0.1をコミットするまで(ある程度使えるものになるまで)は、githubにpushしたくない。
いずれはCoveralls等でやるつもりだが、しばらくはsimplecovを使うことにした。

## simplecovのインストール
$ vi facemock.gemspec  # 次の一行を追加 : spec.add_development_dependency "simplecov"
$ bundle install

## spec_helper.rbに設定追加
$ vi spec/spec_helper.rb
$ cat spec/spec_helper.rb 
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)

require 'simplecov'
SimpleCov.start do
  add_filter '/spec/'
end

require 'facemock'

## rspec実行 & coverage確認
$ rspec 

Facemock
  should have a version number

Finished in 0.00188 seconds (files took 0.08467 seconds to load)
1 example, 0 failures
Coverage report generated for RSpec to /home/aries/personal/applications/tmp/facemock-0.0.0/coverage. 2 / 2 LOC (100.0%) covered.

$ firefox coverage/index.html  #<= ブラウザでcoverageを確認

rakeタスクでテストできるようにする

rspecの設定を書いておく。

## Rakeファイルに設定追加
$ vi Rakefile
$ cat Rakefile 
require "bundler/gem_tasks"
require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec)

task :default => :spec

## タスク一覧にspecが追加されたことを確認する
$ rake -T
rake build    # Build facemock-0.0.1.gem into the pkg directory
rake install  # Build and install facemock-0.0.1.gem into system gems
rake release  # Create tag v0.0.1 and build and push facemock-0.0.1.gem to Rubygems
rake spec     # Run RSpec code examples

## rakeタスクでテストしてみる
$ rake spec
...
/.../bin/ruby -I/.../gems/rspec-core-3.0.3/lib:/.../gems/rspec-support-3.0.3/lib -S /.../gems/rspec-core-3.0.3/exe/rspec ./spec/facemock_spec.rb

Facemock
  should have a version number

Finished in 0.00134 seconds (files took 0.06351 seconds to load)
1 example, 0 failures

ファイルの整理 (空ディレクトリ作成+.gitkeep配置, .gitignoreの設定追加)

.gitignoreにGemfile.lockを書いていたが、First Commit時に含まれていたので消す。

## Gemfile.lockを消す
$ git rm —cached Gemfile.lock
$ vi .gitignore  # 使いそうなファイル名を追加
$ cat .gitignore
*.gem
*.rbc
.bundle
.config
.yardoc
Gemfile.lock
InstalledFiles
_yardoc
coverage
doc/
lib/bundler/man
pkg
rdoc
spec/reports
test/tmp
test/version_tmp
tmp
tmp/
db/*.sqlite3
vendor/bundle/
vendor/bundler/
log/*.log

$ git add .
$ git push orign master

## Gemfile.lockが含まれないことを確認する
$ bundle install
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   .gitignore
#
no changes added to commit (use "git add" and/or "git commit -a")

dbディレクトリが必要になので作成しておく。
空だとgit addできないので.gitkeepを配置する。

$ mkdir db
$ git status
# On branch master
nothing to commit (working directory clean)
$ touch db/.gitkeep
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   db/
nothing added to commit but untracked files present (use "git add" to track)
git add .
git commit -m "Added db directory"
git push origin master

色んなバッジ付けてみる

初Githubリポジトリ作成で、色々使ってみたかった。バッジが欲しかった。のでやってみた。

付けたバッジは、

色々紹介されているサイトがあるので、ここは参考にしたサイトだけ紹介しておく。

コミットメッセージに絵文字を入れるようにする

こんな記事を見つけた。

同じルールでやってみて、自分に合えば継続、合わなければ止める。
やりかたは簡単で、コミット時に絵文字を指定するだけ。
表示についてはリポジトリを参照

git commit -m ":memo: Added badge to README.md"

備考 : 絵文字いっぱいあるんだ・・・。

RubyGemsにpush

色々試してみたので、そろそろversion 0.0.1を登録してみる。

RubyGems.orgは事前にサインアップしておく。
(メールアドレス、ハンドルネーム、パスワードだけで簡単に作成できる)

下記手順では、概要と説明が同じだよ、とか、ホームページがないよ、とか言われた。
後日(多分0.0.2に上げるとき)対応することにする。

$ mkdir pkg
$ cd pkg

$ gem build ../facemock.gemspec 
WARNING:  no homepage specified
WARNING:  description and summary are identical
  Successfully built RubyGem
  Name: facemock
  Version: 0.0.1
  File: facemock-0.0.1.gem

$ gem push
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at http://rubygems.org/sign_up
   Email:   ogawattim@gmail.com
Password:   
Pushing gem to https://rubygems.org...
Successfully registered gem: facemock (0.0.1)

参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3