Slide 1

Slide 1 text

Rails magic Saturday, August 11, 12

Slide 2

Slide 2 text

EPFT NBHJD FYJTU Saturday, August 11, 12

Slide 3

Slide 3 text

MFU`TBTL 4$*&/$& Saturday, August 11, 12

Slide 4

Slide 4 text

(PPHMF 3FTVMUT Saturday, August 11, 12

Slide 5

Slide 5 text

Framework Magic Total php (1994) 132000 2.527E+10 java (1995) 45900 960000000 .net (2002) 4400 250000000 django (2004) 9370 44300000 rails (2005) 7040 20300000 Saturday, August 11, 12

Slide 6

Slide 6 text

.BHJD3BUJP w1)1 w+BWB w/&5 Saturday, August 11, 12

Slide 7

Slide 7 text

.BHJD3BUJP w%KBOHP w3BJMT Saturday, August 11, 12

Slide 8

Slide 8 text

0 1 2 3 4 php (1994) java (1995) .net (2002) django (2004) rails (2005) 0.052 0.478 0.176 2.115 3.468 Magic over Time Frequency / 10000 Saturday, August 11, 12

Slide 9

Slide 9 text

0 1 2 3 4 php (1994) java (1995) .net (2002) django (2004) rails (2005) Node 0.052 0.478 0.176 2.115 3.468 2.031 A Step Back Saturday, August 11, 12

Slide 10

Slide 10 text

0 100 200 300 400 php (1994) .net (2002) rails (2005) Meteor.js 0.052 0.478 0.176 2.115 3.468 2.031 345.810 MAGIC of Meteor Saturday, August 11, 12

Slide 11

Slide 11 text

l"OZTVGpDJFOUMZ BEWBODFE UFDIOPMPHZJT JOEJTUJOHVJTIBCMF GSPNNBHJDz "SUIVS$$MBSL Saturday, August 11, 12

Slide 12

Slide 12 text

dynamic finders Saturday, August 11, 12

Slide 13

Slide 13 text

id = params[:customer_id] YourModel.find_by_customer_id id Saturday, August 11, 12

Slide 14

Slide 14 text

def method_missing(method_id, *arguments) if match = /find_(all_by|by)_([_a-zA-Z]\w*)/. match(method_id.to_s) # find... elsif match = /find_or_create_by_([_a-zA-Z] \w*)/. match(method_id.to_s) # find_or_create... else super end end Saturday, August 11, 12

Slide 15

Slide 15 text

magic columns Saturday, August 11, 12

Slide 16

Slide 16 text

created_at and updated_at counter_caches type Saturday, August 11, 12

Slide 17

Slide 17 text

def apply_it(items) items.map do |item| item.apply! if item.respond_to? (:apply!) end end Saturday, August 11, 12

Slide 18

Slide 18 text

Active Record definition Saturday, August 11, 12

Slide 19

Slide 19 text

class User < ActiveRecord::Base has_many :posts has_many :comments, through: :posts validates_presence_of :email end Saturday, August 11, 12

Slide 20

Slide 20 text

class SuperWo 20.times {|i| puts "This is the #{i}”} def wat! puts "hi" end end SuperWo.new.wat! Try it out: http://rubyfiddle.com/riddles/a63dd Saturday, August 11, 12

Slide 21

Slide 21 text

auto loading Saturday, August 11, 12

Slide 22

Slide 22 text

Dir.glob('./app/models/*').each do |file| require file end require_relative 'db/setup' require_relative 'models/page' require_relative 'models/book' Saturday, August 11, 12

Slide 23

Slide 23 text

CFDBVTF "DUJWF4VQQPSU %FQFOEFODJFT VSM IUUQSLIJN DPEFSFMPBEJOH Saturday, August 11, 12

Slide 24

Slide 24 text

# Extremely simple autoloading implementation class Module alias const_missing_without_autoloading const_missing def const_missing(const) path = “./#{name.gsub('::', '/')}/#{const}" path.gsub!(/([a-z\d])([A-Z])/,'\1_\2') require path.downcase const_defined?(const) ? const_get(const) : super rescue LoadError => error warn(error.message) super end end Saturday, August 11, 12

Slide 25

Slide 25 text

"VUP-PBEJO"DUJPO HJUIVCKXP DMPBLFEUZSJPO Saturday, August 11, 12

Slide 26

Slide 26 text

4PNVDINPSF Saturday, August 11, 12

Slide 27

Slide 27 text

class Foo @@foo ||= 42 puts @@foo # 42 end # reload... class Foo @@foo ||= 23 puts @@foo # 42 end Saturday, August 11, 12

Slide 28

Slide 28 text

# reload... Object.send(:remove_const, :Foo) class Foo @@foo ||= 23 puts @@foo # 23 end Saturday, August 11, 12

Slide 29

Slide 29 text

custom ruby Saturday, August 11, 12

Slide 30

Slide 30 text

NPOLFZQBUDIJOH Saturday, August 11, 12

Slide 31

Slide 31 text

numbers = (1..100).to_a numbers.first numbers.last numbers.forty_two Saturday, August 11, 12

Slide 32

Slide 32 text

def forty_two self[41] end "MTPLOPXOBTBDDFTTJOHUIF SFEEJU Saturday, August 11, 12

Slide 33

Slide 33 text

class Enumerable def standard_dev Math.sqrt(sample_variance) end def sample_variance mean = sum.to_f / size.to_f sum{|i| (i-mean)**2} / size end end Saturday, August 11, 12

Slide 34

Slide 34 text

review Saturday, August 11, 12

Slide 35

Slide 35 text

EZOBNJD@pOEFST NFUIPE@NJTTJOH Saturday, August 11, 12

Slide 36

Slide 36 text

NBHJD@DPMVNOT SFTQPOE@UP Saturday, August 11, 12

Slide 37

Slide 37 text

BS@EFpOJUJPOT DPNQJMF@UJNF@DPEF Saturday, August 11, 12

Slide 38

Slide 38 text

BVUP@MPBEJOH DPOTU@NJTTJOH Saturday, August 11, 12

Slide 39

Slide 39 text

NPOLFZ@QBUDIJOH PQFO@DMBTTFT Saturday, August 11, 12

Slide 40

Slide 40 text

@@jwo ruby off rails Saturday, August 11, 12