rabbit-slide-giosakti-201710-self-testing-code-ruby 2017.10.16.2 → 2017.10.16.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: be2374201421f3324dc50abd6b6ffe86915e82ab
4
- data.tar.gz: 6369b6a58f4610eda8a5969306344fad3f6500d0
3
+ metadata.gz: 67641773ea0ae2e2df24a6e8c903bd0e8949af8c
4
+ data.tar.gz: 03bd50cc432e5d83990bb3aac2d1ddc78f7f8d4d
5
5
  SHA512:
6
- metadata.gz: 7f717b5034a0bde3489ea06836d174200b4c042f539d8e79462c9087e91ade0ac1c4e5db71b6bface646529895ac4dc089d0109178be307e14276db6666aca60
7
- data.tar.gz: cfd8b9487eed02eb132e4f21ca03033ffa6307452567807769b71449130ae09313ed90ade54f2f3d50c6def6ecf9dd7273ba2095ef40c8192bd11b082c3a32fe
6
+ metadata.gz: 174dc1f065155cc99ee04b9e2a129d8cfd9ae177c391360e59b0edbb735f74a6089b17f68aed0027a47bc5862d01e56c5154fd962a441a48ae14756715f8b89f
7
+ data.tar.gz: 58ab452b078f9f726e290d657f95164bc214f9a165cc881a5b7a9d3d77d7e80e981670c1eb4ef3bae303390c548d2d22440e0ee54a193c4bfcb734444ead5bfa
data/config.yaml CHANGED
@@ -6,7 +6,7 @@ tags:
6
6
  - ruby
7
7
  - rspec
8
8
  presentation_date: 2017-10-16
9
- version: 2017.10.16.2
9
+ version: 2017.10.16.3
10
10
  licenses:
11
11
  - MIT
12
12
  slideshare_id:
@@ -137,7 +137,7 @@ Now write just enough code to make it pass
137
137
  end
138
138
  end
139
139
 
140
- = TDD with RSpec (3)
140
+ = TDD with RSpec (3) cont'd
141
141
 
142
142
  Now write just enough code to make it pass
143
143
 
@@ -167,6 +167,173 @@ Run the example and the test shall pass
167
167
 
168
168
  (('tag:center'))Repeat with new features
169
169
 
170
+ = RSpec API
171
+
172
+ (('tag:center'))Some important RSpec APIs
173
+
174
+ == properties
175
+ : hide-title
176
+ true
177
+
178
+ = Basic Matchers
179
+ # rouge ruby
180
+
181
+ # equality
182
+ expect('x'+'y').to eq('xy') # a == b
183
+ expect('x'+'y').to eql('xy') # a.eql?(b)
184
+ expect('x'+'y').not_to be('xy') # a.equal?(b)
185
+
186
+ # strings
187
+ expect('abcd').to include('bc')
188
+ expect('abcd').to start_with 'ab'
189
+ expect('abcd').to end_with 'cd'
190
+ expect('abcd').to match /[a-z]+/
191
+
192
+ # collections
193
+ expect([1, 2, 3]).to include(1, 3)
194
+ expect([1, 2, 3]).to contain_exactly(3, 2, 1) # order not important
195
+ expect({ a: 1, b: 2 }).to include(b: 2)
196
+
197
+ = Basic Matchers cont'd
198
+
199
+ # rouge ruby
200
+
201
+ # booleans and nil
202
+ expect(true).to be true
203
+ expect(false).to be false
204
+ expect('abc').to be_truthy
205
+ expect(nil).to be_falsey
206
+ expect(nil).to be_nil
207
+
208
+ # numeric
209
+ expect(5).to be > 4
210
+ expect(5).to be >= 4
211
+ expect(5).to be < 6
212
+ expect(5).to be <= 6
213
+ expect(5).to be_between(4, 6).exclusive
214
+ expect(5).to be_between(5, 6).inclusive
215
+ expect(4.99).to be_within(0.02).of(5)
216
+
217
+ # errors (exceptions)
218
+ expect{ 5 / 0 }.to raise_error(ZeroDivisionError)
219
+ expect{ 5 / 0 }.to raise_error("divided by 0")
220
+ expect{ 5 / 0 }.to raise_error(ZeroDivisionError, "divided by 0")
221
+
222
+ = Predicate Matchers
223
+
224
+ Predicate matchers are a little DSL for calling predicate methods. Predicate methods are methods that:
225
+
226
+ * return a boolean value; and
227
+ * have a name that ends with ?
228
+
229
+ = Predicate Matchers cont'd
230
+
231
+ # rouge ruby
232
+
233
+ # array
234
+ expect([]).to be_empty # [].empty?
235
+
236
+ # hash
237
+ expect({a: 1}).to have_key(:a) # {a: 1}.has_key?(:a)
238
+ expect({a: 1}).to have_value(1) # {a: 1}.has_value?(1)
239
+
240
+ # object
241
+ expect(5).not_to be_nil # 'hi'.nil?
242
+ expect(5).to be_instance_of Fixnum # 5.instance_of?(Fixnum)
243
+ expect(5).to be_kind_of Numeric # 5.kind_of?(Numeric)
244
+
245
+ = Predicate Matchers cont'd
246
+
247
+ Predicate matchers work on all objects, including custom classes
248
+
249
+ = Exercises
250
+
251
+ (('tag:center'))Now let's do some exercises...
252
+
253
+ == properties
254
+ : hide-title
255
+ true
256
+
257
+ = TDD Exercises (1)
258
+
259
+ Create a Sentence from Words\n
260
+
261
+ Without using "Array#each" iterator, create a method that will return a sentence when given an array of words.
262
+
263
+ # rouge ruby
264
+
265
+ create_sentence(["hello", "world"])
266
+ # will return: "hello world"
267
+
268
+ = TDD Exercises (2)
269
+
270
+ Find Palindromes
271
+
272
+ Write a method that receives two positive integers "m" and "n" and returns an array of "n" palindrome numbers after "m" (including "m" itself).
273
+
274
+ # rouge ruby
275
+
276
+ find_palindrome(100, 2)
277
+ # will return [101, 111]
278
+
279
+ find_palindrome(22, 3)
280
+ # will return [22, 33, 44]
281
+
282
+ = TDD Exercises (3)
283
+
284
+ Descending Order
285
+
286
+ Create a method that receives an integer as an argument and rearrange it to generate biggest possible value.
287
+
288
+ # rouge ruby
289
+
290
+ descending(21445) # will return 54421
291
+ descending(145263) # will return 654321
292
+ descending(1254859723) # will return 9875543221
293
+
294
+ = TDD Exercises (4)
295
+
296
+ Deep Count
297
+
298
+ Create a method called deep_count that will return the number of elements in an array, including the number of elements of its sub arrays.
299
+
300
+ = TDD Exercises (4) cont'd
301
+
302
+ # rouge ruby
303
+
304
+ deep_count([]) # will return 0
305
+ deep_count([1, 2, 3]) # will return 3
306
+
307
+ deep_count(["x", "y", ["z"]])
308
+ # will return 3 elements ("x", "y", ["z"]) in main array
309
+ # plus 1 element ("z") in sub array
310
+ # total = 4 elements
311
+
312
+ deep_count([1, 2, [3, 4, [5]]])
313
+ # total = 7 elements
314
+
315
+ deep_count([[[[[[[[[]]]]]]]]])
316
+ # total = 8 elements
317
+
318
+ = TDD Exercises (5)
319
+
320
+ Letter Count
321
+
322
+ Create a method that receives a string as its argument and returns a hash that shows the number of occurrence of each letter in that string.
323
+
324
+ = TDD Exercises (5) cont'd
325
+
326
+ # rouge ruby
327
+
328
+ letter_count("gojek")
329
+ # will return {:g=>1, :o=>1, :j=>1, :e=>1, :k=>1}
330
+
331
+ letter_count("kolla")
332
+ # will return {:k=>1, :o=>1, :l=>2, :a=>1}
333
+
334
+ letter_count("scholarship")
335
+ # will return {:s=>2, :c=>1, :h=>2, :o=>1, :l=>1, :a=>1, :r=>1, :i=>1, :p=>1}
336
+
170
337
  = Thanks
171
338
 
172
339
  (('tag:center'))Thanks
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbit-slide-giosakti-201710-self-testing-code-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2017.10.16.2
4
+ version: 2017.10.16.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Giovanni Sakti