-
Notifications
You must be signed in to change notification settings - Fork 0
/
active_support.slides
151 lines (113 loc) · 3.34 KB
/
active_support.slides
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
h1. Active Support
h1. Introduction
<center>
<div style="margin: 40px; color: #993333;">
Active Support is a set of libraries that is used by all Rails components. It extends several core Ruby classes in useful ways.
</div>
</center>
h1. blank? and present?
:inlinecode
puts [ ].blank? #=> true
puts { 1 => 2}.blank? #=> false
puts " cat ".blank? #=> false
puts "".blank? #=> true
puts " ".blank? #=> true
puts nil.blank? #=> true
# present? is the opposite of blank?
puts nil.present? #=> false
:endinlinecode
h1. to_xml, to_yaml, and to_json
:inlinecode
user = User.find(1)
# Those methods are also available on Struct objects
puts user.to_xml
puts user.to_yaml
puts user.to_json # Creates a JavaScript hash
Hash.from_xml(xml_string) # => a Hash object
:endinlinecode
h1. Symbol#to_proc
:inlinecode
# Usually you write a map block like this
post_ids = posts.map { |post| post.id }
# But Rails implements Symbol#to_proc to provide this shortcut:
post_ids = posts.map(&:id)
:endinlinecode
h1. Object#with_options
:inlinecode
map.connect "/shop/summary" , :controller => "store",
:action => "summary"
map.connect "/titles/buy/:id" , :controller => "store",
:action => "add_to_cart"
map.with_options(:controller => "store") do |store_map|
store_map.connect "/shop/summary", :action => "summary"
store_map.connect "/titles/buy/:id", :action => "add_to_cart"
end
:endinlinecode
h1. Enumerations
:inlinecode
groups = posts.group_by {|post| post.author_id} #=> Hash with author ids as keys
us_states = State.find(:all)
state_lookup = us_states.index_by {|state| state.short_name} #=> Hash with short name as keys
total_orders = Order.find(:all).sum {|order| order.value }
total_orders = Order.find(:all).sum(&:value)
:endinlinecode
h1. Enumerable#each_with_object
:inlinecode
%w(foo bar).inject({}) { |str, hsh| hsh[str] = str.upcase; hsh } #=> {'foo' => 'FOO', 'bar' => 'BAR'}
%w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase } #=> {'foo' => 'FOO', 'bar' => 'BAR'}
# NOTE: does not work with immutable objects such as numbers
(1..5).each_with_object(1) { |value, memo| memo *= value } # => 1
(1..5).inject(1) { |value, memo| memo *= value; memo } # => 120
:endinlinecode
h1. Strings
:inlinecode
string = "Ruby on Rails"
puts string.at(2) #=> 'b'
pust string.from(5) #=> 'on Rails'
puts string.to(3) #=> 'Ruby'
puts string.first(4) #=> 'Ruby'
puts string.last(4) #=> 'ails'
puts string.starts_with?("R") #=> true
puts string.ends_with?("Perl") #=> false
count = Hash.new(0)
string.each_char {|ch| count[ch] += 1}
"person".pluralize #=> people
"people".singularize #=> person
"first_name".humanize #=> First Name
"ruby on rails".titleize #=> Ruby On Rails
:endinlinecode
h1. Numbers
:inlinecode
20.bytes #=> 20
20.megabytes #=> 20971520
20.seconds
20.hours
20.months
20.years
20.minutes.ago
20.weeks.from_now
20.minutes.until("2007-12-01 12:00".to_time)
:endinlinecode
h1. Time and Date
:inlinecode
time = Time.parse("2007-01-01 13:00")
time.at_beginning_of_day
time.at_beginning_of_week
time.at_beginning_of_month
:endinlinecode
h1. Hashes
* reverse_merge
* deep_merge
* diff
* except
* slice
* stringify_keys
* symbolize_keys
h1. UTF8
:inlinecode
"åäö".size #=> 6
"åäö".chars.size #=> 3
"åäö".upcase #=> "åäö"
"åäö".chars.upcase.inspect #=> <ActiveSupport::Multibyte::Chars:0x33589c0 @string="ÅÄÖ">
"åäö".chars.upcase.to_s #=> "ÅÄÖ"
:endinlinecode