Ruby

imap ruby

imapサーバに接続してメールを読むサンプルコード動かすも既読フラグをつけれなくてつけれなくてうーーーーんとなっていたらサンプルコードが間違っていた(´・_・`) (docecotのdebug.logにreadonlyなのにstoreしてんぞタコって出るの期待していたけど出ません…

命名めんどくない?

https://github.com/zdennis/activerecord-import/blob/master/lib/activerecord-import/import.rb https://github.com/zdennis/activerecord-import/blob/master/lib/activerecord-import/active_record/adapters/mysql2_adapter.rb./lib/activerecord-impo…

aliasesを更新するgem

aliasesの更新しんどい。一行が長い時に折り返しでどの行に属しているのかの確認がしんどい。 しんどいのでコマンドラインで更新できるgemを作ってみた。 https://github.com/jiikko/sugoi-aliases-updator/etc/aliasesなファイルを読み込んで追加削除した結…

mecab

全文検索機能をlike検索で動かしていたんだけどパフォーマンス悪くなる一方なので、単語テーブルを作ってなんちゃって全文検索をしようとした。(Twitterで見た)okura を使うつもりだったんだけど、自分で追加した単語の品詞が全部BOS/EOSになるので泣く泣くm…

paperclip使ってzipとかdmgとか画像以外のファイルをアップロードする

paperclip (4.2.1) class Post < ActiveRecord::Base has_attached_file :attachment, styles: { thumb: "100x100>" } do_not_validate_attachment_file_type :attachment before_post_process :skip_not_image def image? /\Aimage\/.*\Z/ =~ attachment_co…

localのgemをinstallする

bundlerを使っているならGemfileに gem ''foo", github: "hoge/fuga" という感じで書けばrubygemsになくても使えるんだけど、 テストで頻繁に更新したい時とかローカルのgemをインストールしたい時あるはず。 $ cd $GEM_ROOT $ gem build gem_name.gemspec (…

blockからblock

def hoo puts "0" nice do puts "2" yield end end def nice puts "1" yield end hoo { puts "3" } $ ruby hoge.rb 0 1 2 3読みにくい感じある。慣れ?

ブロック変数の数と食パンの数

ブロック変数の個数によって、ブロック変数に入ってくる値が変わってくることを知りませんでした。 [27] pry(main)> { a: 1, b: 2 }.map { |x| x } => [[:a, 1], [:b, 2]] [32] pry(main)> { a: 1, b: 2 }.map { |k, v| [k, v] } => [[:a, 1], [:b, 2]] 個数…

すごいWEBページキャプチャ

rubyからseleniumu経由でスクリーンショットをとるジェム作りました。 safariのドライバに切り替えるようにもしたかったんだけどドライバのインストールがめんどくさすぎっぽいしcapybaraのREADMEになしだったので切り捨て。 https://github.com/jiikko/sugo…

最後に必ず実行するメソッドを実行し忘れ防止

CSV#open みたいにclose処理を内包しているような書き方。 class Mover def initialize(from: , to: , &blick) @from = from @to = to yield(self) save end def playeds @from = @from + "適当" end def favorites @from = @from + "j" end def save puts "…

nokogiri インストールできないときにやること

yosemiteでfilevaultがWIP状態から抜けることができん(電源アダプタに接続してくださいから変わらない)くなったので仕方なくOSのクリーンインストールしました。 $ sudo port install libxml2$ xcode-select --install$ bundle config build.nokogiri --use-…

yosemite で ruby が オカシー

別のマシンでテスト実行できるのに、新調したてのマシンではテスト実行できなくてソース追ってた。 $ be rake spec /Users/koji/.rvm/rubies/ruby-2.2.0/bin/ruby -I/Users/koji/sites/momiji/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.1.7/lib:/Users/ko…

ruby require more than once

写経している時にコードはエディタで書いて、irbで実行してソースを弄るみたいなケースよくありそう。 requreだと一度しか読み込まれなくてirbを再起動しかないと思うんだけどそういう時はloadを使えとのこと。 2.1.0 :005 > require "~/work/crawler/app.rb…

httpsなURLへHTTPリクエストを投げる時けっこうめんどう

ruby2.0rubyからhttpsなURLへHTTPリクエストを投げる時けっこうめんどう。 タイムアウトになったりサイトによっては下記ようなExceptionが投げられる。 SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A SSL_connect returned=1 …

gemでよくある設定内容を上書きする書き方

[14] pry(main)> RUBY_VERSION => "2.1.0" module Rspec def self.configure(&block) yield(config) end def self.config @config ||= Config.new end class Config attr_accessor :verstion, :unko def initialize @verstion = '2' @unko = 'yamada' end en…

すごくつらい思いをした

[27] pry(main)> params => {:foo_text=>"", :hoge_text=>"hoge"} [28] pry(main)> (params[:foo_text] || params[:hoge_text]).present? => false キーfoo_textとキーhoge_textのどちらかに値があればtrueを返すコードを書いていたんだけど、falseしか返え…

StringとArrayでgrep検索した時の速度

ruby-2.1.0テキストファイルから読んだ文字列郡に指定の文字が含まれているかを確認したかった。 その時に配列と文字列で検索したときにどっちが早いのか。 Rubyスクリプト なんとなく文字列が含まれている時と含まれていない時も計った。 Fileにはreadメソ…

LokkaでArgumentError: invalid byte sequence in US-ASCII

さくらVPSに入れてるDebianでLokkaが動かないみたいなことに遭遇した。 https://github.com/lokka/lokka 環境 nginx(1.4.1) Ruby(2.1) Passenger(4.0.33) SMP Debian 3.2.46-1 x86_64 GNU/Linux エラー内容 nginxには次のログを吐いてた。 2014/01/13 11:36:…

extendとincludeの違いについて

ruby2.0moduleを取り込むのにinculudeとextendがあって あ・れ・はなんなんじゃ なんじゃ なんじゃにん(ry となったので調べてみた。違いは継承ツリーのどこに差し込まれるかという話っぽい。 includeは(includeした)元のクラスの上に差し込まれる。 extend…

class << Hoge; endのシンタックスについて

ruby 2.0.0p247クラスメソッドを定義するやつ。 class << String def hello :hello end end こういうものだと思ってたけどなんとなくわかった。前提の知識として、クラスメソッドというのはClassオブジェクトの特異メソッドである。(class式で定義している定…

現在ディレクトリのファイル名を一括リネーム

ruby-2.0.0-p247 $ pry [1] pry(main)> Dir.glob("**").each_with_index do |name, i| File.rename(name, "#{i}.jpg"); end 全部jpgになっちゃうけど

Rubyのクラスオブジェクトについて 1

環境 ruby-2.0.0-p247パーフェクトRubyのクラスオブジェクトのところをかいつまんで読んでみたまとめ的な感じ。 クラスを定義する class式を使うのとClass#newで定義できる。 class Hoge end a = Class.new Class#newを使う場合は無名クラスというものになる…

ロードパス

同じディレクトリにある自作rbファイルをrequireしようとしたとき LoadError: cannot load such file -- testとなって読み込めにないことがあった。 requireメソッドはロードパスというグローバル変数に格納しているパスを探索し、探索した結果そのファイル…

Nokogiriのインストールできない

$ gem install nokogiri -v '1.5.9' Fetching: nokogiri-1.5.9.gem (100%) Building native extensions. This could take a while... ERROR: Error installing nokogiri: ERROR: Failed to build gem native extension. /home/deployer/.rvm/rubies/ruby-2.0…

文字数で文字の切り捨て

文字の切り捨てする時にRailsだとtruncateというヘルパーがあるのでそれでできるけどパターンによってはすごくいまいち。 helper.truncate("123456789", :length => 8) # => "12345..." helper.truncate("12345678", :length => 8) # => "12345678" truncate…

クラス拡張ミックスイン

メタプグラミングRubyの221ページにクラス拡張ミックスインというイディオムについての解説があったので写経してみた。 この『クラス拡張ミックスイン』は、モジュールをincludeした時にインスタンスメソッドとクラスメソッドを両方取り込みたい時に使うもの…

1人で考えてたら行き着いたRspecの書き方とか その1

rspec-core (2.13.1) ruby2.0Rspecってすごく個性でると思うので複数人で開発する時は規約を設けないとだめかも。 letメソッド使う let(:word) { FactoryGirl.create(:word) } メモ化っていうらしい。 letの引数に書いているシンボル名を試験内で呼ぶとロー…

Kernel.#openの例外処理

ruby2.0特に理由がないのでmechanizeは使わずopenを使ってスクレイピングしてます。歌丸です。 コード これは記事一覧ページの存在を確認をするためのメソッド。 private def not_found_index_page?(_error_count = 0) is_error_under_5 = ->{ _error_count …

ソーシャルサービス連携ボタンに表示されている数字を取得する

ruby2.0 require 'json' require 'open-uri' p JSON.parse(open("http://urls.api.twitter.com/1/urls/count.json?url=http://d.hatena.ne.jp/jiikko").read)["count"] p open("http://api.b.st-hatena.com/entry.count?url=http://d.hatena.ne.jp/jiikko").…

こういうgem作ろうと思ってる

仕事でWEBサイトをリニューアルしました。 WordpressのサイトをRailsに移植したんですが、URLが8割変わっていて SEOツールから見るとエラーになっているURLがあるとのこと。そういうURLはリダイレクトが必要らしい。リダイレクトが必要なURLを聞いてみると量…