Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ten Commandments of the Ruby Programmer

Ten Commandments of the Ruby Programmer

Avatar for Emilio Gutter

Emilio Gutter

October 09, 2014
Tweet

More Decks by Emilio Gutter

Other Decks in Programming

Transcript

  1. I AM EMILIO A RUBY PROGRAMMER Software developer +15 yrs

    10Pines founder Agiles community founding member agiles 2012 conference co-chair husband, father and homeBrewer
  2. class Speaker < ActiveRecord::Base ! devise :omniauthable, :omniauth_providers => [:facebook]

    ! def approve_session(session) # do something SessionMailer.approve(speaker: self, session: session).deliver end ! end
  3. public List selectPending(List registrations) { ! List pending = new

    ArrayList(); for (Registration registration: registrations) { if (!registration.isPaid()) { pending.add(registration); } } return pending; }
  4. class SessionsController < ApplicationController ! def create ! @session =

    Session.new(session_params) ! if @session.save redirect_to my_sessions_path, notice: 'Session created successfully' else render :new end ! end end
  5. class Program ! def find_by_author(author) ! sessions = Session.where(author: author,

    approved: true) ! if sessions.empty? # do something else # do something end end ! end
  6. class AttendeePresenter ! def phone_number ! unless self.address.nil? unless self.address.phone_number.nil?

    self.address.phone_number else 'Phone number not present' end else 'Address not present' end end ! end
  7. class Attendee def initialize(address) if address.nil? raise ArgumentError, 'Address is

    required' end @address = address end ! def address @address || UnknownAddress.new end ! def phone_number Optional.new(@address). within {|address| address.phone_number} end end
  8. class BankAccount ! def process a_transaction ! if a_transaction.type ==

    :purchase # charge transaction fee else # assume refund end end ! end
  9. class BankAccount ! def process a_transaction a_transaction.process self end !

    def process_purchase a_transaction # charge transaction fee end ! def process_refund a_transaction # refund transaction fee end ! end
  10. class Purchase < Transaction ! def process a_payment_method a_payment_method.process_purchase self

    end end ! class Refund < Transaction ! def process a_payment_method a_payment_method.process_refund self end end
  11. require 'spec_helper' ! describe Registration do ! it 'pays a

    registration' do ! attendee_id = 1 a_registration = double("Registration") an_attendee = double("Attendee", registration: a_registration) ! allow(Attendee).to receive(:find) { an_attendee } ! expect(a_registration).to receive(:paid=).with(true) expect(a_registration).to receive(:save).and_return(true) ! expect_any_instance_of(PaypalAccount).to receive(:process) ! Registration.pay(attendee_id) ! end end
  12. VI. THOU SHALT NOT TAKE THY IN VAIN VII. REMEMBER

    TO REFACTOR VII. THOU SHALT BEAR YOUR FELLOW PROGRAMMERS AND PAIR WITH THEM