Rubyのチートシート / アクティブサポート

Railsで使いまくりActive Supportなので、そんなにまとめがいが無いし、沢山あるのでまとめられないけれど、代表的なモノをとりあえずまとめておく。
blank?やpresent?やtryなんかは省略する。
 


# ---------------- #
# Active Support
# ---------------- #

require 'active_support/all'

fruits = ["apple", "banana", "pear", "orange"]


puts "\n----配列----\n\n"

puts fruits.from(1).inspect
    # indexからの配列を返す
    #-> ["banana", "pear", "orange"]

puts fruits.to(2).inspect
    # indexまでの配列を返す
    #-> ["apple", "banana", "pear"]

puts fruits.in_groups_of(3).inspect
    # n個ずつに分ける / 足りない分はnilで埋める
    #-> [["apple", "banana", "pear"], ["orange", nil, nil]]

puts fruits.split("banana").inspect
    # "banana"で分割する / "banana"は消える
    #-> [["apple"], ["pear", "orange"]]



puts "\n----時間/日付----\n\n"

puts day = DateTime.new(2012, 12, 21, 11, 34, 45)
    #-> 2012-12-21T11:34:45+00:00
puts day.at_beginning_of_day
    #-> 2012-12-21T00:00:00+00:00
puts day.at_end_of_month
    #-> 2012-12-31T23:59:59+00:00
puts day.at_beginning_of_year
    #-> 2012-01-01T00:00:00+00:00


puts "\n----時間を前後----\n\n"

now = Time.now
puts now.advance(years: 20)
puts now.advance(years: -14) #マイナスだと過去
puts now.advance(yaers: 4, months: 2, weeks: 3, days: 1)
puts now.tomorrow
puts now.yesterday


puts "\n----ハッシュ----\n\n"

# ハッシュの差を求める
#-> { gender: "male" } (*diffはRailsでは非推奨)
options =       { user: "sawada", lang: "ja" }
new_options =   { user: "sawada", lang: "ja", gender: "male" }
puts options.diff(new_options)


# ハッシュのキーを文字列にする
#-> {"user"=>"sawada", "lang"=>"ja"}
puts options.stringify_keys


# キーが重複していなければ、そのハッシュだけ統合する
#-> {:lang=>"ja", :user=>"sawada", :gender=>"male"}
options  = { lang: "ja", user: "sawada" }
defaults = { lang: "en", user: "john", gender: "male" }
puts options.reverse_merge(defaults).inspect


# ハッシュから要素を取り除く
#-> {:user=>"sawada"}
puts options.except(:lang).inspect


# ハッシュのキーが引数(:user, :age)に一致しなかったらエラー
begin
    options.assert_valid_keys(:user, :age)
rescue => error
    puts "Error! #{error.message}"
end



puts "\n----地味に便利な関数----\n\n"

# 偶数/奇数
index = [0, 1, 2, 3, 4]
index.each do |i|
    puts "偶数" if i.even?
    puts "奇数" if i.odd?
end

# Inflector
puts "#{1.ordinalize} prize!"       #-> 1st
puts "#{2.ordinalize} prize!"       #-> 2nd
puts "#{22.ordinalize} prize!"  #-> 23rd

puts "user".pluralize + "(複数形に)"
puts "women".singularize + "(単数系に)" 

puts "work abroad".titleize         #-> Work Abroad
puts "blog_title".humanize          #-> Blog title


 
上のコードを実行すると結果がこうなるはずです。
diffはRailsでは非推奨となっています。


$ ruby active_support.rb 

----配列----

["banana", "pear", "orange"]
["apple", "banana", "pear"]
[["apple", "banana", "pear"], ["orange", nil, nil]]
[["apple"], ["pear", "orange"]]

----時間/日付----

2012-12-21T11:34:45+00:00
2012-12-21T00:00:00+00:00
2012-12-31T23:59:59+00:00
2012-01-01T00:00:00+00:00

----時間を前後----

2034-02-10 16:46:56 +0000
2000-02-10 16:46:56 +0000
2014-05-02 16:46:56 +0000
2014-02-11 16:46:56 +0000
2014-02-09 16:46:56 +0000

----ハッシュ----

{:gender=>"male"}
{"user"=>"sawada", "lang"=>"ja"}
{:lang=>"ja", :user=>"sawada", :gender=>"male"}
{:user=>"sawada"}
Error! Unknown key: lang

----地味に便利な関数----

偶数
奇数
偶数
奇数
偶数
1st prize!
2nd prize!
22nd prize!
users(複数形に)
woman(単数系に)
Work Abroad
Blog title

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた