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

Shunsuke Sawada

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

ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# ---------------- #
# 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では非推奨となっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
$ 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

524
Shunsuke Sawada

おすすめの記事

acts-as-taggable-on タグを表示させる順番を決めたい
Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題
Railsのバリデーションエラー後にレイアウトが崩れるとき