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

Ten Commandments of the Ruby Programmer

Ten Commandments of the Ruby Programmer

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