【GitHub】バッジのブランチ名を動的解決する

# バッジ？

GitHubのREADME.mdに貼られているよく見るアレです。

<p>
<img src='//img.shields.io/badge/color-brightgreen-brightgreen.svg' alt='brightgreen'/>
<img src='//img.shields.io/badge/color-green-green.svg' alt='green'/>
<img src='//img.shields.io/badge/color-yellowgreen-yellowgreen.svg' alt='yellowgreen'/>
<img src='//img.shields.io/badge/color-yellow-yellow.svg' alt='yellow'/>
<img src='//img.shields.io/badge/color-orange-orange.svg' alt='orange'/>
<img src='//img.shields.io/badge/color-red-red.svg' alt='red'/>
<img src='//img.shields.io/badge/color-lightgrey-lightgrey.svg' alt='lightgrey'/>
<img src='//img.shields.io/badge/color-blue-blue.svg' alt='blue'/>
<img src='//img.shields.io/badge/color-ff69b4-ff69b4.svg' alt='ff69b4'/>
</p>
http://shields.io/

# 解決したいこと
現在参照しているブランチのバッジを表示したい。
README.mdでは、「現在のブランチ名」を解決できない。

masterブランチ以外に生存期間の長いブランチが存在する場合には、指定ブランチのステータス（バッジ、リンク）を表示したくなりませんか？

# 解決方法
README.mdに必要なブランチのバッジを全部貼っておくのも手ですが、なんかカッコ悪い、という方に。

## OwnService
'Current Branch'を解決するサービスを起こす。
元ネタ : http://stackoverflow.com/questions/18673694/referencing-current-branch-in-github-readme-md
HTTP_REFERERを参照して、'Current Branch'を解決することができるようです。

HerokuなどのPaasの力をお借りして、サクッとサービスしちゃいましょう。

### サンプルアプリコード
適当にアレンジしてください。

```app.rb
require 'sinatra'

get '/' do
  # support only GitHub
  env['HTTP_REFERER'] =~ /https:\/\/github.com\/.*\/tree\/(.*)$/
  branch = $1 || "master"
  400 unless params[:redirect_url]
  redirect_url = CGI.unescape(params[:redirect_url])
  redirect redirect_url.gsub(/REPLACE_THIS/, branch)
end
```

## README.md
埋め込みコードを修正する。
バッジURLをリダイレクトURLとして、自身のサービスへリクエストするように修正する。

### サンプルコード
とあるTravis CIバッジの埋め込みコードを変換するコードサンプル。
適当にアレンジしてください。

```rb
embeded = "[![Build Status](https://travis-ci.org/arukoh/signauth.svg?branch=master)](https://travis-ci.org/arukoh/signauth)"
# => "[![Build Status](https://travis-ci.org/arukoh/signauth.svg?branch=master)](https://travis-ci.org/arukoh/signauth)" 
embeded =~ /^\[!\[.+\]\((.+)\)\]\(.+\)/
# => 0 
replace_url = $1
# => "https://travis-ci.org/arukoh/signauth.svg?branch=master" 
redirect_url = CGI.escape(redirect_url.sub(/branch=.+/, "branch=REPLACE_THIS"))
# => "https%253A%252F%252Ftravis-ci.org%252Farukoh%252Fsignauth.svg%253Fbranch%253DREPLACE_THIS" 
embeded.sub(replace_url, "https://OWN_SERVICE_HOST/?redirect_url=#{redirect_url}")
# => "[![Build Status](https://OWN_SERVICE_HOST/?redirect_url=https%253A%252F%252Ftravis-ci.org%252Farukoh%252Fsignauth.svg%253Fbranch%253DREPLACE_THIS)](https://travis-ci.org/arukoh/signauth)"
```

# 関連
* GitHub Markdown Help
 1. https://help.github.com/articles/markdown-basics
 2. https://help.github.com/articles/github-flavored-markdown
* バッジ作成サービス : Shields IO http://shields.io/
* <iframe src="//www.slideshare.net/slideshow/embed_code/36484591" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px 1px 0; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/arukoh/git-hub-36484591" title="GitHubで「バッジ」を集めよう" target="_blank">GitHubで「バッジ」を集めよう</a> </strong> from <strong><a href="http://www.slideshare.net/arukoh" target="_blank">arukoh</a></strong> </div>