Functional Principles for the Ruby Developer