the even darker art of rails engines presentation
TRANSCRIPT
![Page 1: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/1.jpg)
The
Even-Darker Artof
Rails Engines
![Page 2: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/2.jpg)
@lazyatom
![Page 3: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/3.jpg)
github.com/lazyatom/engines
![Page 4: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/4.jpg)
Rails 2.3
![Page 5: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/5.jpg)
history
![Page 6: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/6.jpg)
November 2005
![Page 7: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/7.jpg)
it’s distracting!
![Page 8: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/8.jpg)
reuse is overrated!
![Page 9: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/9.jpg)
Evil!Evil!
Evil!Evil!
Evil!Evil!
Evil!
Evil!Shit!
![Page 10: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/10.jpg)
eek!
![Page 11: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/11.jpg)
appable_plugins
![Page 12: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/12.jpg)
desert
![Page 13: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/13.jpg)
merb slices?
![Page 14: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/14.jpg)
![Page 15: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/15.jpg)
engines
![Page 16: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/16.jpg)
!"#$%&!"#$'#(%&$#)&!"#$%&*$+,#-.!)
!"#$%&'()$$*%&'()$++,$-'%!.%&'()./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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/17.jpg)
app/controllers/models/helpers/views/metal/
![Page 18: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/18.jpg)
*$+,#-&"**&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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/19.jpg)
9"-7"1$J%--won’t load from your plugin
![Page 20: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/20.jpg)
Ticket #1905
![Page 21: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/21.jpg)
config/routes.rb
![Page 22: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/23.jpg)
top precedence
![Page 24: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/26.jpg)
Ticket #2592(also Ticket #329)
![Page 27: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/28.jpg)
what’s missing?
![Page 29: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/29.jpg)
public assets
![Page 30: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/30.jpg)
copy
![Page 31: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/31.jpg)
file clash
![Page 32: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/34.jpg)
migrations
![Page 35: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/35.jpg)
simple DSL
![Page 36: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/36.jpg)
rollback
![Page 37: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/37.jpg)
!&: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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/39.jpg)
it gets worse
![Page 40: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/40.jpg)
!&:2/51%)":$$WWY.%-79%=1&
version
001
002
WWV.&")%=1&
7-(5/0:!&:2/51%)":$$WWY.5%22%=1&
![Page 41: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/41.jpg)
http://www.flickr.com/photos/bk2204/475332962/
![Page 42: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/42.jpg)
single timeline
![Page 43: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/47.jpg)
Ticket #2058interblah.net/plugin-migrations
![Page 48: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/48.jpg)
my recommendation?(for the moment, at least)
![Page 49: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/50.jpg)
techniques
![Page 51: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/51.jpg)
overriding functionality
![Page 52: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/52.jpg)
views just work
![Page 53: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/53.jpg)
controllers
![Page 54: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/54.jpg)
straight override
![Page 55: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/55.jpg)
![Page 56: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/56.jpg)
![Page 57: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/57.jpg)
module
![Page 58: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/58.jpg)
![Page 59: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/59.jpg)
![Page 60: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/60.jpg)
![Page 61: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/61.jpg)
namespaced
![Page 62: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/62.jpg)
![Page 63: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/63.jpg)
![Page 64: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/64.jpg)
![Page 65: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/65.jpg)
playing nice with the class cache
![Page 66: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/66.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/67.jpg)
O;)/D"_(77'1)JJe"7"0!"0;/"6=-'%!.'0;".7%)96
![Page 68: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/68.jpg)
ApplicationController
AppController PluginController
![Page 69: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/69.jpg)
ApplicationController
PluginController
![Page 70: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/70.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/71.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/72.jpg)
init.rb woes
![Page 73: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/73.jpg)
;'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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/74.jpg)
testing
![Page 75: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/75.jpg)
ApplicationController
PluginControllerAppController
![Page 76: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/76.jpg)
ApplicationController
PluginController
Their Code
Your Code
![Page 77: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/77.jpg)
![Page 78: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/78.jpg)
!"
#$
![Page 79: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/79.jpg)
![Page 80: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/80.jpg)
unit test?
![Page 81: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/81.jpg)
test in your own rails environment?
![Page 82: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/82.jpg)
plugin_test_helper
![Page 83: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/83.jpg)
I care about testing my chunk
![Page 84: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/84.jpg)
You care about testing your whole app
![Page 85: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/85.jpg)
empower the developer
![Page 86: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/86.jpg)
avoiding fail
![Page 87: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/87.jpg)
;%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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/88.jpg)
consume wisely
![Page 89: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/89.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/90.jpg)
you will not be able to write some engines.
![Page 91: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/91.jpg)
you will not be able to use some engines.
![Page 92: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/92.jpg)
extractspecific functionality
![Page 93: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/93.jpg)
establish someclear integration points
![Page 94: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/94.jpg)
you are customer #1
![Page 95: The Even Darker Art Of Rails Engines Presentation](https://reader034.vdocuments.net/reader034/viewer/2022052523/5556716bd8b42abc5a8b4d41/html5/thumbnails/95.jpg)
READ the CODE