読者です 読者をやめる 読者になる 読者になる

gemのinstall時にビアアイコンを出そう

ruby gem

my rubygems install時に
Homebrewのようなビアアイコンを無性に出したくなりました。
(疲れているのかもしれません)  
 
こんなやつ。
homebrewでinstall後にビールアイコンが表示される件 - rochefort's blog
 

やってみた

こんな感じ

f:id:rochefort:20140525070518p:plain

対応gem
cocoapods-search
gem-search
 
 

やり方

hook系のものが無いか調べる

ググってもよくわからなかったのでrubygemsのソースを眺めていたら
それらしいものがありました。

# .rbenv/versions/2.1.1/lib/ruby/2.1.0/rubygems/specification.rb
  @@default_value = {
    :authors                   => [],
    :autorequire               => nil,
    :bindir                    => 'bin',
    :cert_chain                => [],
    :date                      => TODAY,
    :dependencies              => [],
    :description               => nil,
    :email                     => nil,
    :executables               => [],
    :extensions                => [],
    :extra_rdoc_files          => [],
    :files                     => [],
    :homepage                  => nil,
    :licenses                  => [],
    :metadata                  => {},
    :name                      => nil,
    :platform                  => Gem::Platform::RUBY,
    :post_install_message      => nil,
    :rdoc_options              => [],
    :require_paths             => ['lib'],
    :required_ruby_version     => Gem::Requirement.default,
    :required_rubygems_version => Gem::Requirement.default,
    :requirements              => [],
    :rubyforge_project         => nil,
    :rubygems_version          => Gem::VERSION,
    :signing_key               => nil,
    :specification_version     => CURRENT_SPECIFICATION_VERSION,
    :summary                   => nil,
    :test_files                => [],
    :version                   => nil,
  }

post_install_message

これですな。
Specification Reference - RubyGems Guides
公式ドキュメントにたどり着きました。
 

実装

MacOS Lion以上かどうかを判定してビアアイコンを出しています。
MacOS及びlionの判定箇所はHomebrewを参考にしました。

def install_message
  s = ''
  s << "\xf0\x9f\x8d\xba  " if or_over_mac_os_lion?
  s << "Thanks for installing!"
end

def or_over_mac_os_lion?
  return false unless RUBY_PLATFORM =~ /darwin/

  macos_full_version = `/usr/bin/sw_vers -productVersion`.chomp
  macos_version = macos_full_version[/10\.\d+/]
  return macos_version >= '10.7'  # 10.7 is lion
end

Gem::Specification.new do |gem|
  gem.post_install_message = install_message

 
 

macのバージョン取得

$ /usr/bin/sw_vers
ProductName:    Mac OS X
ProductVersion: 10.9.2
BuildVersion:   13C1021

それぞれの値はオプションで取得可能。

$ /usr/bin/sw_vers -productVersion
10.9.2

 

See Also

homebrewでinstall後にビールアイコンが表示される件 - rochefort's blog