The Little Engines That Could
RailsConf 2022
Three ways to understanding
π
Slide 4
Slide 4 text
@minar528
RailsConf 2022 @minar528
π
Slide 5
Slide 5 text
@minar528
RailsConf 2022
π€¨
Slide 6
Slide 6 text
@minar528
RailsConf 2022
π π
Slide 7
Slide 7 text
@minar528
RailsConf 2022
π
π
Slide 8
Slide 8 text
@minar528
RailsConf 2022
π
Slide 9
Slide 9 text
@minar528
RailsConf 2022
π
Slide 10
Slide 10 text
RailsConf 2022 @minar528
Slide 11
Slide 11 text
RailsConf 2022 @minar528
π€Ή
Slide 12
Slide 12 text
RailsConf 2022 @minar528
π€Ή
Slide 13
Slide 13 text
RailsConf 2022 @minar528
π€Ή
Slide 14
Slide 14 text
π€Ή
RailsConf 2022 @minar528
What is an engine?
What are its bene
f
its?
Slide 15
Slide 15 text
π€Ή
RailsConf 2022 @minar528
What is an engine?
What are its bene
f
its?
What makes it unique?
Types of engines?
Slide 16
Slide 16 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test?
What is an engine?
What are its bene
f
its?
What makes it unique?
Types of engines?
Slide 17
Slide 17 text
@minar528
RailsConf 2022 @minar528
@minar528
Level One
Non-Technical
Slide 18
Slide 18 text
RailsConf 2022 @minar528
π΅
Slide 19
Slide 19 text
RailsConf 2022 @minar528
π
π΅
Slide 20
Slide 20 text
RailsConf 2022 @minar528
π΅ π
β
Slide 21
Slide 21 text
@minar528
RailsConf 2022
Slide 22
Slide 22 text
RailsConf 2022 @minar528
Slide 23
Slide 23 text
RailsConf 2022 @minar528
Slide 24
Slide 24 text
@minar528
RailsConf 2022
Cannot operate alone
Both need hosts
Slide 25
Slide 25 text
@minar528
RailsConf 2022
Provides "superpowers"
Both enhance their hosts
Slide 26
Slide 26 text
@minar528
RailsConf 2022
Multiple Hosts
Both can integrate with and adapt to di
ff
erent hosts
Slide 27
Slide 27 text
RailsConf 2022 @minar528
Groot Rocket Drax
Slide 28
Slide 28 text
RailsConf 2022 @minar528
π΅
β
Slide 29
Slide 29 text
@minar528
RailsConf 2022
Reusable
Client wants to share the engine
Slide 30
Slide 30 text
@minar528
RailsConf 2022
Reduce scope
Client wants to split up the system
Slide 31
Slide 31 text
@minar528
RailsConf 2022
Shorten test time
Client wants to cut their test execution time
Slide 32
Slide 32 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test?
What is an engine?
What are its bene
f
its?
What makes it unique?
Types of engines?
Slide 33
Slide 33 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test?
What is an engine? β
What are its bene
f
its?
What makes it unique?
Types of engines?
Slide 34
Slide 34 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test?
What is an engine? β
What are its bene
f
its? β
What makes it unique?
Types of engines?
Slide 35
Slide 35 text
@minar528
RailsConf 2022 @minar528
@minar528
Level Two
Early-Career Devs
Slide 36
Slide 36 text
RailsConf 2022 @minar528
Slide 37
Slide 37 text
RailsConf 2022 @minar528
β
Slide 38
Slide 38 text
RailsConf 2022 @minar528
π π
vs.
Slide 39
Slide 39 text
RailsConf 2022 @minar528
Rails::Application
Rails::Engine
π π
vs.
π π
vs.
Slide 40
Slide 40 text
RailsConf 2022 @minar528
Rails::Application < Rails::Engine
Rails::Engine
π π
vs.
π π
vs.
Slide 41
Slide 41 text
RailsConf 2022 @minar528
Rails::Application < Rails::Engine
Also MVC
Rails::Engine
MVC
π π
vs.
π π
vs.
Slide 42
Slide 42 text
RailsConf 2022 @minar528
Rails::Application < Rails::Engine
Also MVC
Runs independently
Rails::Engine
MVC
π π
vs.
π π
vs.
Slide 43
Slide 43 text
RailsConf 2022 @minar528
Rails::Application < Rails::Engine
Also MVC
Runs independently
Rails::Engine
MVC
Nope.
π π
vs.
π π
vs.
Slide 44
Slide 44 text
RailsConf 2022 @minar528
Rails::Application < Rails::Engine
Also MVC
Runs independently
Gem
f
ile
Rails::Engine
MVC
Nope.
gemspec
π π
vs.
π π
vs.
Slide 45
Slide 45 text
RailsConf 2022 @minar528
π π
vs.
Slide 46
Slide 46 text
RailsConf 2022 @minar528
π
Packaged and published
π vs.
π vs.
Slide 47
Slide 47 text
RailsConf 2022 @minar528
π
Packaged and published
CAN be packaged and published
π vs.
π vs.
Slide 48
Slide 48 text
RailsConf 2022 @minar528
π
Packaged and published
CAN be packaged and published
Rails only
π vs.
π vs.
Slide 49
Slide 49 text
RailsConf 2022 @minar528
π
Packaged and published
Any Ruby project
CAN be packaged and published
Rails only
π vs.
π vs.
Slide 50
Slide 50 text
RailsConf 2022 @minar528
π π
vs.
Slide 51
Slide 51 text
RailsConf 2022 @minar528
π
Subset of π
π vs.
Includes π
Slide 52
Slide 52 text
RailsConf 2022 @minar528
π
Subset of π
Use with Rails
π vs.
Includes π
Use with Rails
Slide 53
Slide 53 text
RailsConf 2022 @minar528
Rails Guides
βAn engine CAN be a plugin,
and a plugin CAN be an engine.β
Slide 54
Slide 54 text
@minar528
RailsConf 2022
β
Slide 55
Slide 55 text
RailsConf 2022 @minar528
My PR to Rails documentation
βAll engines are plugins,
but not all plugins are engines.β
Slide 56
Slide 56 text
RailsConf 2022 @minar528
π
Subset of π
Use with Rails
MVC
π vs.
Includes π
Use with Rails
Slide 57
Slide 57 text
RailsConf 2022 @minar528
π
Subset of π
Use with Rails
MVC
π vs.
Includes π
Use with Rails
Model-level modi
f
ications
Slide 58
Slide 58 text
RailsConf 2022 @minar528
π
Subset of π
Use with Rails
MVC
π vs.
Includes π
Use with Rails
Model-level modi
f
ications
Slide 59
Slide 59 text
RailsConf 2022 @minar528
Slide 60
Slide 60 text
RailsConf 2022 @minar528
Slide 61
Slide 61 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test?
What makes it unique?
Types of engines?
What is an engine? β
What are its bene
f
its? β
Slide 62
Slide 62 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test?
What makes it unique? β
Types of engines?
What is an engine? β
What are its bene
f
its? β
Slide 63
Slide 63 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test?
What makes it unique? β
Types of engines? β
What is an engine? β
What are its bene
f
its? β
Slide 64
Slide 64 text
@minar528
RailsConf 2022 @minar528
@minar528
Level Three
Rails Devs New To Engines
Slide 65
Slide 65 text
RailsConf 2022 @minar528
Slide 66
Slide 66 text
RailsConf 2022 @minar528
Slide 67
Slide 67 text
RailsConf 2022 @minar528
Slide 68
Slide 68 text
RailsConf 2022 @minar528
Slide 69
Slide 69 text
RailsConf 2022 @minar528
Slide 70
Slide 70 text
RailsConf 2022 @minar528
Slide 71
Slide 71 text
RailsConf 2022 @minar528
Slide 72
Slide 72 text
RailsConf 2022 @minar528
Slide 73
Slide 73 text
RailsConf 2022 @minar528
Slide 74
Slide 74 text
RailsConf 2022 @minar528
Slide 75
Slide 75 text
RailsConf 2022 @minar528
Slide 76
Slide 76 text
RailsConf 2022 @minar528
Slide 77
Slide 77 text
RailsConf 2022 @minar528
Slide 78
Slide 78 text
RailsConf 2022 @minar528
Slide 79
Slide 79 text
RailsConf 2022 @minar528
Slide 80
Slide 80 text
RailsConf 2022 @minar528
Slide 81
Slide 81 text
RailsConf 2022 @minar528
Slide 82
Slide 82 text
RailsConf 2022 @minar528
Slide 83
Slide 83 text
@minar528
RailsConf 2022
π
Slide 84
Slide 84 text
RailsConf 2022 @minar528
Slide 85
Slide 85 text
RailsConf 2022 @minar528
Slide 86
Slide 86 text
π€Ή
RailsConf 2022 @minar528
How to implement?
How to test & mount?
What makes it unique? β
Types of engines? β
What is an engine? β
What are its bene
f
its? β
Slide 87
Slide 87 text
π€Ή
RailsConf 2022 @minar528
How to implement? β
How to test & mount?
What makes it unique? β
Types of engines? β
What is an engine? β
What are its bene
f
its? β
Slide 88
Slide 88 text
π€Ή
RailsConf 2022 @minar528
What makes it unique? β
Types of engines? β
What is an engine? β
What are its bene
f
its? β
How to implement? β
How to test & mount? β
Slide 89
Slide 89 text
@minar528
RailsConf 2022
π π
Slide 90
Slide 90 text
@minar528
RailsConf 2022
RailsConf 2023?
Slide 91
Slide 91 text
RailsConf 2022 @minar528
π π§°
π€
Slide 92
Slide 92 text
RailsConf 2022 @minar528
π
π§°
π€
Slide 93
Slide 93 text
RailsConf 2022 @minar528
THANK YOU! π₯°
π http://minaslater.blog
π βYour TDD Treasure Mapβ - Aji Slater
π βCome On In! Making Yourself At Home In A New Codebaseβ -
Mercedes Bernard