paranitips

Never stop learning! がモットーのゆるふわエンジニアブログ

「zsh: command not found pod」と言われた時の対処法

$ pod setup
zsh: command not found pod

昨日まで使えてたのにある日突然podコマンドが使えない…!!
対処法まとめておきます〜。

環境

一応Macのバージョンは以下です。

OS X 10.10.5

対処法

とりあえずcocoapodsがあるか確認

$ gem list | grep cocoapods

rbenvでバージョン管理してる場合はrehash

たいていはこれで解消するパターンが多い。

$ rbenv rehash

インストールしなおす

$ sudo gem uninstall cocoapods
$ sudo gem install cocoapods

バージョンを指定する

cocoapods (1.0.0) だと変なエラー出たのでバージョン指定してインストールしなおします。

$ pod setup
/Library/Ruby/Gems/2.0.0/gems/cocoapods-1.0.0/lib/cocoapods/sources_manager.rb:159:in `<module:SourcesManagerMissingConstant>': uninitialized constant Pod::SourcesManagerMissingConstant::Set (NameError)
...
$ sudo gem uninstall cocoapods
$ sudo gem install cocoapods -v0.39

以上です。

参考

4byte文字(絵文字や一部の漢字)が含まれているかどうかチェックする

本当はmysql側のエンコーディング変更すべきですが、アプリケーション側の応急処置として。

class Post < ActiveRecord::Base
    validate :no_4_bytes

    # 本文に4byte文字を使わないように
    def no_4_bytes
        if content.present?
            chars = content.each_char.select{|c| c.bytes.count >= 4}
            if chars.size > 0
                errors.add(:content, "に絵文字(#{chars.join('')})は使用できません。")
            end
        end
    end
end

文字列をeach_charで回して、バイト数が4以上ある文字を検出しています。
シンプルですが、文字量多い場合は大変。。

参考

テキスト中にあるURLを抽出し、リンク(aタグ)に変換する

テキスト中にあるリンクがある場合は、ちゃんとクリックできるリンクにして出力したい!
ということで、いろいろ調べてみました。

URLを抽出する

textからURLを抽出するだけであれば、URI.extractを使えばOKです。

text = 'aaaaa http://xxx.com bbbbb http://yyy.com'
URI.extract(text,['http','https'])
=> ["http://xxx.com", "http://yyy.com"]

URI.extractを利用するパターン(NGパターン)

URI.extractを利用してgsubでURLをaタグに置換します。

text = 'aaaaa http://xxx.com bbbbb http://yyy.com'
URI.extract(text,['http','https']).uniq.each do |url|
    sub_text = ""
    sub_text << "<a href=" << url << ">" << url << "</a>"
    text.gsub!(url, sub_text)
end
=> "aaaaa <a href="http://xxx.com">http://xxx.com</a> bbbbb <a href="http://yyy.com">http://yyy.com</a>"

ただ、この場合、うまくいかない場合があります。

text = 'aaaaa http://xxx.com/hoge bbbbb http://xxx.com'
URI.extract(text,['http','https']).uniq.each do |url|
    sub_text = ""
    sub_text << "<a href=" << url << ">" << url << "</a>"
    text.gsub!(url, sub_text)
end
=> "aaaaa <a href="<a href="http://xxx.com">http://xxx.com</a>/hoge"><a href="http://xxx.com">http://xxx.com</a>/hoge</a> bbbbb <a href="http://xxx.com">http://xxx.com</a>"

aタグ中のhref=http://xxx.comも置換させてしまい、変なことになっていました。

http://xxx.com/hoge  
=> <a href="http://xxx.com/hoge">http://xxx.com/hoge</a>  
=> <a href="<a href="http://xxx.com">http://xxx.com</a>/hoge"><a href="http://xxx.com">http://xxx.com</a>/hoge</a>

URI.regexpを利用するパターン(OKパターン)

URI.regexpを利用して正規表現を使ってURLを置換します。

text = 'aaaaa http://xxx.com/hoge bbbbb http://xxx.com'
uri_reg = URI.regexp(%w[http https])
text.gsub!(uri_reg) {%Q{<a href="#{$&}">#{$&}</a>}}
=> => "aaaaa <a href="http://xxx.com/hoge">http://xxx.com/hoge</a> bbbbb <a href="http://xxx.com">http://xxx.com</a>"

こちらのほうが簡単&完璧です。

以上です。

参考