Top Banner
The Even-Darker Art of Rails Engines
96

The Even Darker Art Of Rails Engines Presentation

May 16, 2015

Download

Technology

railsconf
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: The Even Darker Art Of Rails Engines Presentation

The

Even-Darker Artof

Rails Engines

Page 2: The Even Darker Art Of Rails Engines Presentation

@lazyatom

Page 3: The Even Darker Art Of Rails Engines Presentation

github.com/lazyatom/engines

Page 4: The Even Darker Art Of Rails Engines Presentation

Rails 2.3

Page 5: The Even Darker Art Of Rails Engines Presentation

history

Page 6: The Even Darker Art Of Rails Engines Presentation

November 2005

Page 7: The Even Darker Art Of Rails Engines Presentation

it’s distracting!

Page 8: The Even Darker Art Of Rails Engines Presentation

reuse is overrated!

Page 9: The Even Darker Art Of Rails Engines Presentation

Evil!Evil!

Evil!Evil!

Evil!Evil!

Evil!

Evil!Shit!

Page 10: The Even Darker Art Of Rails Engines Presentation

eek!

Page 11: The Even Darker Art Of Rails Engines Presentation

appable_plugins

Page 12: The Even Darker Art Of Rails Engines Presentation

desert

Page 13: The Even Darker Art Of Rails Engines Presentation

merb slices?

Page 14: The Even Darker Art Of Rails Engines Presentation
Page 15: The Even Darker Art Of Rails Engines Presentation

engines

Page 16: The Even Darker Art Of Rails Engines Presentation

!"#$%&!"#$'#(%&$#)&!"#$%&*$+,#-.!)

!"#$%&'()$$*%&'()$++,$-'%!.%&'()./0#'12%)/'0"0!

3$405/0"6$%1"$7-(5/06$8/)9$%0$%77:$!/1";)'1<=!"#$"05/0">$$9%6.%77.!/1";)'1<>"0!

3$?")(106$)1("$/#$)9"$"05/0"$69/76$8/)9$%$1'()/05$#/-"!"#$1'()"!>$$@/-"="A/6)>B1'()/05.#/-"C"0!

!"#$D/"8.7%)9$$@/-"=E'/0B!/1";)'1<F$G%77GF$GD/"86GC"0!

Page 17: The Even Darker Art Of Rails Engines Presentation

app/controllers/models/helpers/views/metal/

Page 18: The Even Darker Art Of Rails Engines Presentation

*$+,#-&"**&23-'!3$$(!&*$+,#-523-'!3$$(!.!)

;-%66$H-(5/0I'0)1'--"1/0/1**$#2"'#3-43-'!3$$(!$$!"#$/0!"A$$$$1"0!"1$J)"A)$,K$LM"--'F$H-(5/0NL$$"0!"0!

Page 19: The Even Darker Art Of Rails Engines Presentation

9"-7"1$J%--won’t load from your plugin

Page 20: The Even Darker Art Of Rails Engines Presentation

Ticket #1905

Page 21: The Even Darker Art Of Rails Engines Presentation

config/routes.rb

Page 22: The Even Darker Art Of Rails Engines Presentation

O;)/'0I'0)1'--"1JJ?'()/05JJ?'()"6=!1%8$!'$+2%7+

$$2%7=;'00";)$G:7%)9GF$J;'0)1'--"1$,K$L7-(5/0LF$$$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!"AL

"0!

*$+,#-&23-6#,&!3+'(%.!)

Page 23: The Even Darker Art Of Rails Engines Presentation

top precedence

Page 24: The Even Darker Art Of Rails Engines Presentation

O;)/'0I'0)1'--"1JJ?'()/05JJ?'()"6=!1%8$!'$+2%7+$$2%7=;'00";)$G:7%)9GF$J;'0)1'--"1$,K$L7-(5/0LF$$$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!"AL"0!

O;)/'0I'0)1'--"1JJ?'()/05JJ?'()"6=!1%8$!'$+2%7+$$3$===$')9"1$1'()"6$===$$2%7=;'00";)$G:7%)9GF$J;'0)1'--"1$,K$L%77LF$$$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!"AL$$3$===$')9"1$1'()"6$==="0!

in your plugin:

in your app:

Page 25: The Even Darker Art Of Rails Engines Presentation

O;)/'0I'0)1'--"1JJ?'()/05JJ?'()"6=!1%8$!'$+2%7+$$2%7=;'00";)$G:7%)9GF$J;'0)1'--"1$,K$L7-(5/0LF$$$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!"AL"0!

O;)/'0I'0)1'--"1JJ?'()/05JJ?'()"6=!1%8$!'$+2%7+$$3$===$')9"1$1'()"6$===$$2%7=;'00";)$G:7%)9GF$J;'0)1'--"1$,K$L%77LF$$$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!"AL$$3$===$')9"1$1'()"6$==="0!

in your plugin:

in your app:

Page 26: The Even Darker Art Of Rails Engines Presentation

Ticket #2592(also Ticket #329)

Page 27: The Even Darker Art Of Rails Engines Presentation

785*$+,#-&$#)&785*$+,#-.!)

2'!(-"$P<H-(5/0$$!"#$6"-#=%!!.1'()"6B7"*C$$$$2%7=;'00";)$L:6)(##LF$J;'0)1'--"1$,K$L)9/056L$$"0!"0!

O;)/'0I'0)1'--"1JJ?'()/05JJ?'()"6=!1%8$!'$+2%7+$$3$<'(1$%77$1'()"6===

$$P<H-(5/0=%!!.1'()"6B2%7C

$$3$");==="0!

Page 28: The Even Darker Art Of Rails Engines Presentation

what’s missing?

Page 29: The Even Darker Art Of Rails Engines Presentation

public assets

Page 30: The Even Darker Art Of Rails Engines Presentation

copy

Page 31: The Even Darker Art Of Rails Engines Presentation

file clash

Page 32: The Even Darker Art Of Rails Engines Presentation

83+!5*$+,#-&#-%'"$$.!)

2<./2%5"6$,$H%)90%2"=0"8B@/-"=!/10%2"[email protected]$S$$$$$$$$$$$$$$$L%66")6:/2%5"6L)%15")$,$?%/-6=1'')$S$L7(&-/;:/2%5"6:2<.7-(5/0L

@/-"T)/-6=2U!/1.7B)%15")C

2<./2%5"6=;9/-!1"0="%;9$!'$+"+$$$$$@/-"T)/-6=;7.1B"F$)%15")$S$"=&%6"0%2"C$"0!

Page 33: The Even Darker Art Of Rails Engines Presentation

83+!5*$+,#-&#-%'"$$.!)

2<./2%5"6$,$H%)90%2"=0"8B@/-"=!/10%2"[email protected]$S$$$$$$$$$$$$$$$L%66")6:/2%5"6L)%15")$,$?%/-6=1'')$S$L7(&-/;:/2%5"6:2<.7-(5/0L

)%15")=2%U".6<2-/0UB2<./2%5"6C$(0-"66$)%15")="A/6)>

Page 34: The Even Darker Art Of Rails Engines Presentation

migrations

Page 35: The Even Darker Art Of Rails Engines Presentation

simple DSL

Page 36: The Even Darker Art Of Rails Engines Presentation

rollback

Page 37: The Even Darker Art Of Rails Engines Presentation

!&:2/51%)":$$VWWXWYWYYVYVZ[.%-79%=1&

version

20090101121234

20090102142345

2008123123456

VWWXWYWVY[VZ[\.&")%=1&

7-(5/0:!&:2/51%)":$$VWW]YVZYZ[\^.5%22%=1&

Page 38: The Even Darker Art Of Rails Engines Presentation

version

20090101121234

20090102142345

2008123123456

1%U"$!&J1'--&%;U

P/51%)'1=1'--&%;U

P/51%)'13;(11"0).D"16/'0

P/51%)'132/51%)"!=-%6)

P/51%)'1=5").%--.D"16/'06

BL_4R4I`$D"16/'0$@?aP$$$$$6;9"2%.2/51%)/'06LC=2%7BbJ)'./C=6'1)

Page 39: The Even Darker Art Of Rails Engines Presentation

it gets worse

Page 40: The Even Darker Art Of Rails Engines Presentation

!&:2/51%)":$$WWY.%-79%=1&

version

001

002

WWV.&")%=1&

7-(5/0:!&:2/51%)":$$WWY.5%22%=1&

Page 42: The Even Darker Art Of Rails Engines Presentation

single timeline

Page 43: The Even Darker Art Of Rails Engines Presentation

app migration 1

app migration 2

plugin migration 1

app migration 3

plugin migration 2

install

upgrade

You

Me

Page 44: The Even Darker Art Of Rails Engines Presentation

app migration 1

app migration 2

plugin migration 1

app migration 3

plugin migration 2

You

Page 45: The Even Darker Art Of Rails Engines Presentation

WW[.!"-)%=1&

!&:2/51%)":$$WWY.%-79%=1&

WWV.&")%=1&

7-(5/0:!&:2/51%)":$$WWY.5%22%=1&

WWZ.7-(5/0.)'.WWY=1&

Page 46: The Even Darker Art Of Rails Engines Presentation

WW[.!"-)%=1&

!&:2/51%)":$$WWY.%-79%=1&

WWV.&")%=1&

7-(5/0:!&:2/51%)":$$WWY.5%22%=1&

WWZ.7-(5/0.)'.WWY=1&

Copy & Retimestamp?

Reference?

Symlink?

Page 47: The Even Darker Art Of Rails Engines Presentation

Ticket #2058interblah.net/plugin-migrations

Page 48: The Even Darker Art Of Rails Engines Presentation

my recommendation?(for the moment, at least)

Page 49: The Even Darker Art Of Rails Engines Presentation

write a generator

c$6;1/7):5"0"1%)"$%;)6.%6.#(.2/51%)/'06$$$$$$$"A/6)6$$!&:2/51%)"$$$;1"%)"$$!&:2/51%)":VWWXW\W\YYYZZd.&-%9=1&

c$===

(within your plugin)

Page 50: The Even Darker Art Of Rails Engines Presentation

techniques

Page 51: The Even Darker Art Of Rails Engines Presentation

overriding functionality

Page 52: The Even Darker Art Of Rails Engines Presentation

views just work

Page 53: The Even Darker Art Of Rails Engines Presentation

controllers

Page 54: The Even Darker Art Of Rails Engines Presentation

straight override

Page 55: The Even Darker Art Of Rails Engines Presentation
Page 56: The Even Darker Art Of Rails Engines Presentation
Page 57: The Even Darker Art Of Rails Engines Presentation

module

Page 58: The Even Darker Art Of Rails Engines Presentation
Page 59: The Even Darker Art Of Rails Engines Presentation
Page 60: The Even Darker Art Of Rails Engines Presentation
Page 61: The Even Darker Art Of Rails Engines Presentation

namespaced

Page 62: The Even Darker Art Of Rails Engines Presentation
Page 63: The Even Darker Art Of Rails Engines Presentation
Page 64: The Even Darker Art Of Rails Engines Presentation
Page 65: The Even Darker Art Of Rails Engines Presentation

playing nice with the class cache

Page 66: The Even Darker Art Of Rails Engines Presentation

1/23*8/36/1**$#2"'#3-43-'!3$$(!/

9"%/)((-/!(73:(;/6!37/'9(/73;+$(/

'!((/)+'/#%/%'#$$/"2'#:(<<<<<<<<!

Page 67: The Even Darker Art Of Rails Engines Presentation

O;)/D"_(77'1)JJe"7"0!"0;/"6=-'%!.'0;".7%)96

Page 68: The Even Darker Art Of Rails Engines Presentation

ApplicationController

AppController PluginController

Page 69: The Even Darker Art Of Rails Engines Presentation

ApplicationController

PluginController

Page 70: The Even Darker Art Of Rails Engines Presentation

23-6#,&(-:#!3-7(-'.!)

?%/-6JJQ0/)/%-/f"1=1(0$!'$+;'0#/5+$$3$");===

$$;'0#/5=1"-'%!.7-(5/06$,$)1("$$"0!

Page 71: The Even Darker Art Of Rails Engines Presentation

83+!5*$+,#-&"**&23-'!3$$(!%&,33;523-'!3$$(!.!)

;-%66$g''!I'0)1'--"1$h$===$$(0-'%!%&-"$$$$3$");$===

"0!

Page 72: The Even Darker Art Of Rails Engines Presentation

init.rb woes

Page 73: The Even Darker Art Of Rails Engines Presentation

;'0#/5=)'.71"7%1"$!'

$$"0!

785*$+,#-&#-#'.!)

$$_'2"O77I-%66="A)"0!BP<i"9%D/'(1C

Page 74: The Even Darker Art Of Rails Engines Presentation

testing

Page 75: The Even Darker Art Of Rails Engines Presentation

ApplicationController

PluginControllerAppController

Page 76: The Even Darker Art Of Rails Engines Presentation

ApplicationController

PluginController

Their Code

Your Code

Page 77: The Even Darker Art Of Rails Engines Presentation
Page 78: The Even Darker Art Of Rails Engines Presentation

!"

#$

Page 79: The Even Darker Art Of Rails Engines Presentation
Page 80: The Even Darker Art Of Rails Engines Presentation

unit test?

Page 81: The Even Darker Art Of Rails Engines Presentation

test in your own rails environment?

Page 82: The Even Darker Art Of Rails Engines Presentation

plugin_test_helper

Page 83: The Even Darker Art Of Rails Engines Presentation

I care about testing my chunk

Page 84: The Even Darker Art Of Rails Engines Presentation

You care about testing your whole app

Page 85: The Even Darker Art Of Rails Engines Presentation

empower the developer

Page 86: The Even Darker Art Of Rails Engines Presentation

avoiding fail

Page 87: The Even Darker Art Of Rails Engines Presentation

;%6"$;'!"=;'06(2"1

$$89"0$;'!"=%()9'1$$$$1"(6"=2'6)-<$,j$:"##";)/D":

$$89"0$1%0!B!"D"-'7"1C$$$$1"(6"=)1/;U/"1.&().7'66/&-"B)1("C

$$"-6"$$$$1"(6"='D"11%)"!N

"0!

Page 88: The Even Darker Art Of Rails Engines Presentation

consume wisely

Page 89: The Even Darker Art Of Rails Engines Presentation

Serving Size 14 klocNutrition Facts

Amount Per Serving 1 bad engine

Calories 10,666

Long Methods 1578g 34%

God Objects 326g 7%

Stress 320mg 119%

Total Fat 2674g 98%

Hairloss 45g 45.8%

% Daily Value*

Technical Debt 13g 87%

Untested Code 1578mg 34%

Hidden Bugs 326mg 7%

Benefit 1mg 0.1%

Page 90: The Even Darker Art Of Rails Engines Presentation

you will not be able to write some engines.

Page 91: The Even Darker Art Of Rails Engines Presentation

you will not be able to use some engines.

Page 92: The Even Darker Art Of Rails Engines Presentation

extractspecific functionality

Page 93: The Even Darker Art Of Rails Engines Presentation

establish someclear integration points

Page 94: The Even Darker Art Of Rails Engines Presentation

you are customer #1

Page 95: The Even Darker Art Of Rails Engines Presentation

READ the CODE