u16suzuの blog

日々学んだことのメモブログです。

Ruby

セッターを定義する

何も代入していないけれどもw class Man def age=(value) p "I am #{value}years old" end end Man.new.age = 3 # => "I am 3years old" Rubyをまたやることになりそうなのでリハビリ中。

あるクラスのインスタンスメソッドの一覧を取得する

class Human def say p "hello" end end p Man.instance_methods(false) # => [:say, :age=] 任意のクラスが include しているモジュール一覧を表示 p Array.included_modules # => [Enumerable, Kernel]

画像ファイルの名前に @2x をつけるスクリプト

# rename.rb # ex. hoge.png => hoge@2x.png require 'pathname' require 'fileutils' Dir.entries('.').each do |entry| if Pathname(entry).extname == '.png' FileUtils.mv entry , Pathname(entry).sub_ext('@2x.png') end end

Rubyの変数 Ruby variable

ローカル変数 hoge インスタンス変数 @hoge クラス変数 @@hoge グローバル変数 $hoge

macにVagrantをインストールしてみる

Vagrantは VirtualBox をCUI からつかえるようにするツール 方法 VirtualBoxをダウンロードしてインストール https://www.virtualbox.org/wiki/Downloads Vagrant をダウンロードしてインストール http://www.vagrantup.com/downloads.html インストールでき…

素のRackを使ってみる

simpleapp.rb class Hoge def call(env) [200, {"Content-Type" => "text/plain"}, ["Hello, world!"] ] end end simpleapp.ru require './simpleapp' run Hoge.new 起動すると Rails でおなじみの WEBrickが起動する. ポート番号は 9292 $ gem install rack…

Ruby でマルチスレッドプログラミングなど

Threadを1つ th = Thread.fork do p 33 end th.join Threadを複数 count = 3 count.times.map do |i| Thread.fork do p i end end.each(&:join) Process pid = fork do p 'Process fork' end exitpid, status = *Process.waitpid2(pid) Fiber Fiber とはThre…

Create json from hash with using Ruby

require 'json/pure' h = {'dog'=> 'bow', 'cat'=> 'meow'} puts JSON.pretty_generate(h)

rubyのワンライナーで連番のファイル名と画像サイズをを一括変換する.

そろそろワンライナーに手を出そうと思いましてメモです. ファイル 1.png, ....を hoge1.png, ... にリネームする. $ ruby -e '(1..5).each { |i| system "mv #{i}.png hoge#{i}.png" }' ファイル1.png, ... を 一括で 100x60 にサイズ変換する $ ruby -e '(1…

ディレクトリ内のファイル名を一括で変更する

rubyの場合 # 1.jpg => pict1.jpg に変更 Dir.foreach('.') do |f| if f =~ /.*jpg/ puts f system "mv #{f} pict#{f}" end end shellの場合 1.jpg => pict1.jpg に変換. {}にfindの値が入る. {}は -I{}で指定している. $ find * -print0 -type f | xargs -0…

配列を小さい配列に分割する

a = [1,2,3, 4,5,6, 7,8,9, 10] res = [] while a.size > 0 res << a.slice!(0, 3) end p res # => [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

gem shenzhenで ターミナルからアプリをビルドしtestflightを投げる

iphone アプリのビルドとテストフライトの配布をコマンドラインで行なってくれる shenzhen という gemがあります。 日本語情報が見当たらなかったので、記事にしてみました。ちょっとしたハマりポイントがいくつかありました。 ちなみに shenzhen という名称…

後ろから4つとって、作成日を今日から1日ずつずらす。

後ろから4つとって、作成日を今日から1日ずつずらす。 >> Post.last(4).each_with_index{|p, index| p.created_at = index.days.ago; p.save }

like search

1.9.1 :052 > Post.where('name like "%hoge%"') こっちでもよい 1.9.1 :008 > User.where('user_name like ?', "%hoge%" )

rails runner で条件分岐

rails runner (one liner) で無理やり条件分岐 spring rails runner "if true; p 'true'; else; p 'false' end;" セミコロンをつけていくだけだが、なかなか苦しい。(汗 ruby script の場合は -e が必要 ruby -e " if true; p 4; else; p 3 end;"

read_attribute and write_attribute can use both symbol and string as arguments.

In ruby on rails read_attribute and write_attribute can use both symbol and string as arguments.If you use attributes method you can use only string as argument.via: http://blog.eiel.info/blog/2012/12/17/read-attribute-activerecord/

Ruby のArrayの要素を入れたり取り出したりするメソッドについて

This is memorandum about Ruby's Array class' instance methods. Take some notes for my understand. I still haven' store them.Manipulate to tail push: add to tail pop: remove from tail Manipulate to head unshift: add to head shift: remove fr…

therubyracerとexecjsをインストールしたのに execjsがないというエラーが出る場合の解決方法

こんなエラー Could not find a JavaScript runtime . See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)node.js入れて, therubyracerと execjsをGemfileから消して bundle updateしたら治りまし…

layoutの中で複数の yield を使う

viewでcontent_forメソッドを使用すればよい。multi_layout.html.erb (layout) <%= yield :extend_menu %> <%= yield %> <%= yield 'extend_menu' %>multi.html.erb (view) 文字列とシンボルは区別される。 <% content_for :extend_menu do %> header <% end…

Method#source_locationで メソッドの定義場所を探す

Method#source_location が便利だと @ikm さんに教わったので使ってみた。method(:method_name).source_location とすると, メソッドを定義しているファイル名と行数を返してくれる。 #hoge.rb require './fuga' def mel; end p method(:mel).source_locatio…

ブロック引数を使う場合の haml のシンタックスエラー

ブロック引数 なのに、インデントができていないこと が原因 以下の例で発生する。 = form_for @book do |f| # ブロック引数 -# この行でインデントなし以下のエラーが全て発生する。 syntax error, unexpected ')' unterminated string meets end of filesy…

Ruby on Rails Naming Conventions (Rails の命名規則というか命名規約というか)

いわゆる Railsの基本理念の1つ CoC (Convention over Configuration, 設定より規約) の規約部分です。Railsではファイル名、クラス名などを規約通りに書かないと動きません。(そして rails vim でも Rcontroller book とかやって怒られる。ただしくは Rcont…

AbstractController::DoubleRenderError

Rails で AbstractController::DoubleRenderError が出た時の対処法。 2回render しちゃってるので、 and return をつけて、終了させる。 redirect_to(...) and returnエラーメッセージに書いてあります。親切。

rails のカラムの型一覧

string 文字列型。 text テキスト(不定長文字列)型。 integer 整数型。 float 浮動小数点数型。 decimal 固定長整数型。 datetime 日時型。 timestamp タイムスタンプ型。 time 時刻型。 date 日付型。 binary バイナリ文字列型。 boolean 真偽値型。 refe…

Procオブジェクト生成方法の3種盛り合わせ

メタプロより。 inc = Proc.new { |x| x+1} p inc.class p inc.call(33) dec = lambda { |x| x-1} p dec.class p dec.call(33) def fuga(&the_proc) the_proc end mul = fuga{|x, y| x*y} p mul.class p mul.call(4,5) 結果 Proc 34 Proc 32 Proc 203番目の…

ゆるふわなRuby の正規表現まとめ

Ruby の正規表現のゆるふわなまとめです。 ^ 行頭 $ 行末 \d 数字 \w 数字と英数字とアンダーバー \s 空白文字 \A 文字列の先頭にマッチ \z 文字列の末尾にマッチ \Z 文字列の末尾にマッチ. ただし末尾が改行ならばその前の文字にマッチ ### 後方参照 $1, $2…

Ruby map メソッドの便利な使い方

Ruby でコードを書くときに、ハッシュの値を取り出して配列に入れたい時が多々あります。 例えば、こんなふうに。 h = {:key1 => "dog", :key2 => "cat", :key3 => "rat"} a = [] h.each { |key, val| a << val } p a # => ["dog", "cat", "rat"]自前で配列…

Memo: About git merge and git show command

git merge: 指定したブランチの変更点を現在のブランチにマージする。 例. ブランチ hoge の変更点を適用 # git merge hoge (git)-[master] Updating b158f90..6a3d8c4 Fast-forward README | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) create…

Rails.vim の使い方メモ

:R controller と view の入れ替え gf カーソル位置のモデルに飛ぶ :bn 前のバッファに戻る。gfで飛んでから戻るとき使う。 以下の機能は、Rmodel で補完ができます。 model名などは単数形、複数形は区別されます。 Rmodel model名 modelに飛ぶ Rcontroller …

Yokohama.rb #14 に行って来ました

今日、Yokohama.rb 第14回に行って来ました。 この会に参加するのは今回で、5回目になります。 今回、私は、主に もくもくルームで、Rails のチュートリアルをやっていました。 デフォルトの英語から、ja.yml を書いて、日本語化とかですね。 途中、@sakairy…