DSL Example: https://github.com/ultrasaurus/pie http://www.slideshare.net/sarah.allen/the-making-of-pie
Katas: http://katas.softwarecraftsmanship.org/ http://codekata.com/kata/kata06-anagrams/ https://projecteuler.net/problem=1
- from instance all the way up to BasicObject
- The changing face of
self
- class vs instance methods
- the scope of
self
- How methods are called dynamically
- the magic of MethodMissing
- Inheritance
- structure
- method dispatch
- public, protected, private
- breaking the rules with .send
- delegation patterns in Ruby
- MethodMissing
- StdLib: Forwardable
- method call chains
- Monster Academy
- build a small menagerie of creatures that inherit from 2 or 3 base classes
Blocks, Closures, Lambdas, Procs
- Ruby's syntax and implementation
- blocks as closures
- .yield
- self.yield
- .tap
- Symbol#to_proc (
&:name
)
- re-implement Enumerable
- Object lifestyle methods
- methods_added
- methods_removed
- methods_undefined
- Decoupling code using inherited to keep track of subclasses
- Using
method_missing
to create magic methods - Applying
const_missing
in both global and localized situations - Common mistakes to avoid when metaprogramming (best practices)
- A brief introduction to the available VMs
- MRI, JRuby, Rubinius
- Migrating between VMs - advantages and pitfalls
- Primitives - Threads and Mutexes and Fibers
- Advanced models via concurrent-ruby gem
- Ruby best practices
- idioms
- Ruby and the SOLID principles of Object-Oriented Design
- When it all goes sideways
- Benchmark
- pry
- deep debugging and profiling
- code style
- Rubocop
- code metrics tools
- Flog, Flay, Turbulence, Reek, SimpleCov, etc
- Continuous Integration & Deployment
- Jenkins workflow
- Capistrano
- Rubygems, bundler, and how to avoid shifting dependencies
- How to tell if you can rely on a given Ruby gem
- Ruby-specific features and extensions for Sublime Text and Ruby Mine