Hardcore Extending Rails 3 - From RailsConf '10

Preview:

DESCRIPTION

Rick Martinez's presentation on some useless, but inspiring, ways to extend Rails 3.

Citation preview

Hardcore!Extending Rails 3

Rick Martinez

Tuesday, June 15, 2010

- Dave Thomas

Tuesday, June 15, 2010

core

Tuesday, June 15, 2010

"when I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck."

Duck Typing

Tuesday, June 15, 2010

Rails 2

Tuesday, June 15, 2010

I started exploringalternatives to Rails

Tuesday, June 15, 2010

!

Tuesday, June 15, 2010

HISS!!!jason seifer

YouTube search: rails vs. django

Tuesday, June 15, 2010

December 23rd, 2008

Tuesday, June 15, 2010

Tuesday, June 15, 2010

+ =

RAILS 3

Tuesday, June 15, 2010

What makes Rails 3 amazing?

(and why did it take so long?)

Tuesday, June 15, 2010

“THE GREAT DECOUPLING”

Tuesday, June 15, 2010

Tuesday, June 15, 2010

Core componentsare easily customizable.

Tuesday, June 15, 2010

Core componentsare easily replaceable.

OOTuesday, June 15, 2010

LET’S EXPLORESOME RAILS CORE

FOR THE SAKE OF KNOWING!

Tuesday, June 15, 2010

THE RAILS STACK

Network

Rack

ActionDispatch

ActionController

ActionView ActiveModel

Railties

Tuesday, June 15, 2010

LET’S DOUSELESS THINGS

Tuesday, June 15, 2010

Take this code witha grain of salt

Tuesday, June 15, 2010

Let’s write a useless DSL for our views.

WRITING A TEMPLATE HANDLER

Tuesday, June 15, 2010

WRITING A TEMPLATE HANDLER

Tuesday, June 15, 2010

WRITING A TEMPLATE HANDLER

Tuesday, June 15, 2010

WHAT ACTION VIEW EXPECTS

Tuesday, June 15, 2010

Tuesday, June 15, 2010

Tuesday, June 15, 2010

Tuesday, June 15, 2010

MAKING THE DSL

Tuesday, June 15, 2010

my_cool_dsl.rb

Tuesday, June 15, 2010

my_cool_handler.rb

Tuesday, June 15, 2010

views/hello/index.cool

Tuesday, June 15, 2010

http://localhost:3000/hello

Tuesday, June 15, 2010

Let’s accept uselessconnections.

WRITING A “TELNET SERVER”

Tuesday, June 15, 2010

A simple way.ACT LIKE A RACK SERVER

Tuesday, June 15, 2010

TALK LIKE A RACK SERVER

telnet_server.rb

Tuesday, June 15, 2010

my_cool_handler.rb

Tuesday, June 15, 2010

my_cool_dsl.rb

z

Tuesday, June 15, 2010

Tuesday, June 15, 2010

CONSISTENCY!

Tuesday, June 15, 2010

hello_controller.rb views/hello/index.cool

via telnet via browser

Tuesday, June 15, 2010

DRY!

Tuesday, June 15, 2010

Let’s make this uselessness

configurable.WORKING WITH RAILTIES

Tuesday, June 15, 2010

WHAT IS A RAILTIE?The interface between the

Rails framework and its components

Tuesday, June 15, 2010

WHAT CAN YOUR RAILTIE DO?

• Allow you to accept configuration from application.rb

• Set up initializers in your extension’s context

• Tell Rails about generators and rake tasks

• Build engines, plugins, and applications

Engines, plugins, and applicationsare all subclasses of Railtie inRails 3

Tuesday, June 15, 2010

Organized!

Tuesday, June 15, 2010

railtie.rb

Tuesday, June 15, 2010

lib/super_cool/view_dsl.rb

Tuesday, June 15, 2010

config/application.rb

Tuesday, June 15, 2010

Results!

Tuesday, June 15, 2010

Let’s let others be justas useless.

MAKING THIS ADISTRIBUTABLE FRAMEWORK

Tuesday, June 15, 2010

ANATOMY OF OUR GEM

Tuesday, June 15, 2010

ANATOMY OF OUR GEM

Tuesday, June 15, 2010

package it with the usual tools...

Tuesday, June 15, 2010

Tuesday, June 15, 2010

FOOD FOR THOUGHT

IRC bot framework

Modular view systemMUD game framework

Modular enterprise app

A pluggable admin panel

Tuesday, June 15, 2010

RESOURCES

http://github.com/rails/railsbundle open railsbundle open actionpackbundle open ... etc ...http://railsapi.com/

Tuesday, June 15, 2010

RAILS CODE IS GOOD CODE

Tuesday, June 15, 2010

RAILS CODE IS REUSABLE CODE

Tuesday, June 15, 2010

And the more use cases you findfor customizing Rails 3 internals,

the better they will be writtenin the future

Tuesday, June 15, 2010

Be inspired to look whereyou might’ve not looked before

and learn!

Tuesday, June 15, 2010

Thanks!

twitter @digx+

rick.martinez@gmail.com

Tuesday, June 15, 2010