The Rich Get Richer: RAILS 3

The Rich Get Richer: RAILS 3

HASHROCKET EXPERTLY CRAFTED WEB The Rich Get Richer: RAILS 3 PRESENTED BY OBIE FERNANDEZ Sunday, December 5, 2010 About 20k USD Sunday, December 5, 2010 About 45k USD Sunday, December 5, 2010 About 200k USD Sunday, December 5, 2010 “a few million dollars” Sunday, December 5, 2010 Sunday, December 5, 2010 HASHROCKET EXPERTLY CRAFTED WEB OMG RAILS 3 ROCKS SO MUCH MORE THAN RAILS 2!!! PRESENTED BY OBIE FERNANDEZ Sunday, December 5, 2010 How is Rails 3 Richer? mainstream adoption maturity performance open-source mindshare CAUTION: JUST A METAPHOR Sunday, December 5, 2010 Sunday, December 5, 2010 The Rich Get Richer: RAILS 3 OBIE FERNANDEZ Presentation Overview • History and Context • What’s new • ActiveRecord Performance • Impact on Application Development Sunday, December 5, 2010 Sunday, December 5, 2010 Ezra Zygmuntovich Sunday, December 5, 2010 merb [...] clocks in at 17,291 [loc]. Rails clocks in at 47,195. As you can see, it’s a tie. Sunday, December 5, 2010 Yehuda Katz Sunday, December 5, 2010 December 23, 2008 Sunday, December 5, 2010 David Heinemeir Hansson Sunday, December 5, 2010 Tom Mornini Photo Credit: Sebastian Delmont Sunday, December 5, 2010 Tom Mornini Photo Credit: Sebastian Delmont Sunday, December 5, 2010 Sunday, December 5, 2010 Sunday, December 5, 2010 Q: How do you prevent bloating? Ryan Sanchez's "Violet Beauregarde" ("Charlie and the Chocolate Factory") Photo by Tera Heater/ MTV News Sunday, December 5, 2010 A: Decoupling http://yestheykeepmebusy.blogspot.com/2009/11/willy-wonka- halloween.html Sunday, December 5, 2010 A: Modularity http://superpunch.blogspot.com/2009/10/lego-violet-beauregarde-and- more.html Sunday, December 5, 2010 require 'active_support/concern' require 'active_support/ordered_options' require 'active_support/core_ext/kernel/singleton_class' require 'active_support/core_ext/module/delegation' module ActiveSupport # Configurable provides a <tt>config</tt> method to store and retrieve # configuration options as an <tt>OrderedHash</tt>. module Configurable extend ActiveSupport::Concern class Configuration < ActiveSupport::InheritableOptions def compile_methods! self.class.compile_methods!(keys.reject {|key| respond_to?(key)}) end # compiles reader methods so we don't have to go through method_missing def self.compile_methods!(keys) keys.each do |key| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{key}; _get(#{key.inspect}); end RUBY end end end ... Sunday, December 5, 2010 Sunday, December 5, 2010 Rails 3.0 August 29, 2010 Sunday, December 5, 2010 SAVE YOURSELF, I’LL HOLD THEM BACK RIGHT NOW, I HOPE YOU’RE READY FOR A FIREFIGHT | ’CAUSE THE DEVIL’S GOT YOUR NUMBER TONIGHT | THEY SAY! | WE’RE NEVER LEAVING THIS PLACE ALIVE | BUT IF YOU SING THESE WORDS WE’LL NEVER DIE | GET OFF THE LEDGE AND DROP THE KNIFE | NOT A VICTIM OF A VICTIM’S LIFE | BECAUSE! | THIS AIN’T A ROOM FULL OF SUICIDES | WE’RE BELIEVERS. I BELIEVE TONIGHT | WE CAN LEAVE THIS WORLD LEAVE IT ALL BEHIND | WE CAN STEAL THIS CAR IF YOUR FOLKS DON’T MIND | WE CAN LIVE FOREVER IF YOU’VE GOT THE TIME | IF YOU SAVE YOURSELF TONIGHT | IF YOU SAVE YOURSELF TONIGHT | I’LL TELL YOU ALL HOW THE STORY ENDS | WHERE THE GOOD GUYS DIE AND THE BAD GUYS WIN | WHO CARES! | IT AIN’T ABOUT ALL THE FRIENDS YOU MADE | BUT THE GRAFFITI THEY WRITE ON YOUR GRAVE | FOR ALL OF US WHO’VE SEEN THE LIGHT | SALUTE THE DEAD AND LEAD THE FIGHT | HAIL HAIL! | WHO GIVES A DAMN IF WE LOSE THE WAR? | LET THE WALLS COME DOWN | LET THE ENGINES ROAR! | WE CAN LEAVE THIS WORLD LEAVE IT ALL BEHIND | WE CAN STEAL THIS CAR IF YOUR FOLKS DON’T MIND | WE CAN LIVE FOREVER IF YOU’VE GOT THE TIME | I’M THE ONLY FRIEND THAT MAKES YOU CRY | YOU’RE A HEART ATTACK IN BLACK HAIR DYE | SO JUST SAVE YOURSELF AND I’LL HOLD THEM BACK TONIGHT | BREAKDOWN | IF YOU SAVE YOURSELF TONIGHT | CAN YOU SAVE YOURSELF TONIGHT | RIGHT NOW! | ’CAUSE I’LL HOLD THEM BACK | WE CAN LEAVE THIS WORLD LEAVE IT ALL BEHIND | WE CAN STEAL THIS CAR IF YOUR FOLKS DON’T MIND | WE CAN LIVE FOREVER IF YOU’VE GOT THE TIME | YOU MOTHERFUCKER | YOU’RE THE BROKEN GLASS IN THE MORNING LIGHT | BE A BURNING STAR IF IT TAKES ALL NIGHT | SO JUST SAVE YOURSELF AND I’LL HOLD THEM BACK TONIGHT | IF YOU SAVE YOURSELF TONIGHT | CAN YOU SAVE YOURSELF TONIGHT? S/C/A/R/E/C/R/O/W MOVE YOUR BODY WHEN THE SUNLIGHT DIES | EVERYBODY HIDE YOUR BODY FROM THE SCARECROW | EVERYBODY HIDE | MAKE A WISH WHEN YOUR CHILDHOOD DIES | HERE THE KNOCK KNOCK KNOCK WHEN SHE CRIES | WE’RE ALL ALONE TONIGHT | HOLD YOUR BREATH WHEN THE BLACKBIRD FLIES | COUNT TO 17 AND CLOSE YOUR EYES | I’LL KEEP YOU SAFE INSIDE | HE BURNS | MY SKIN | NEVER MIND ABOUT THE SHAPE I’M IN—I’LL KEEP YOU SAFE TONIGHT | MOVE YOUR BODY WHEN THE SUNLIGHT DIES | EVERYBODY HIDE YOUR BODY FROM THE SCARECROW | EVERYBODY HIDE | MOVE YOUR BODY WHEN THE SUNLIGHT DIES | EVERYBODY HIDE YOUR BODY FROM THE SCARECROW | EVERYBODY HIDE | BLOW A KISS AT THE METHANE SKIES | SEE THE RUST THROUGH YOUR PLAYGROUND EYES | WE’RE ALL IN LOVE TONIGHT | LEAVE A DREAM WHERE THE FALLOUT LIES | WATCH IT GROW WHERE THE TEARSTAIN DRIES | TO KEEP YOU SAFE TONIGHT | HE BURNS | MY SKIN | NEVER MIND ABOUT THE SHAPE I’M IN—I’LL KEEP YOU SAFE TONIGHT | MOVE YOUR BODY WHEN THE SUNLIGHT DIES | EVERYBODY HIDE YOUR BODY FROM THE SCARECROW | EVERYBODY HIDE | MOVE YOUR BODY WHEN THE SUNLIGHT DIES | EVERYBODY HIDE YOUR BODY FROM THE SCARECROW | EVERYBODY HIDE | LOVE, LOVE, LOVE WON’T STOP THIS | BOMB, BOMB, LOVE WON’T STOP THIS | BOMB, BOMB, LOVE WON’T STOP THIS BOMB | RUN, RUN, BUNNY, RUN | RUN, RUN, BUNNY, RUN | MOVE YOUR BODY WHEN THE SUNLIGHT DIES | EVERYBODY HIDE YOUR BODY FROM THE SCARECROW | EVERYBODY HIDE The Rich Get Richer: RAILS 3 OBIE FERNANDEZ Notable Plugin Changes • Formtastic 1.1 (made compatible) • InheritedResources 1.1 (rewritten) • Devise (significant upgrades) • RSpec 2 (rewritten) • EmailSpec 1.0 (rewritten) • MetaSearch (instead of Searchlogic) Sunday, December 5, 2010 Sunday, December 5, 2010 Sunday, December 5, 2010 What’s new in Rails 3? Sunday, December 5, 2010 Sunday, December 5, 2010 Sunday, December 5, 2010 config/routes.rb Sunday, December 5, 2010 # This file is used by Rack-based servers to start the application. require ::File.expand_path('../config/environment', __FILE__) run Example::Application config.ru Sunday, December 5, 2010 Rack::Cache ActionDispatch::Static Rack::Lock Rack::Runtime Rails::Rack::Logger ActionDispatch::ShowExceptions ActionDispatch::RemoteIp Rack::Sendfile ActionDispatch::Callbacks ActionDispatch::Cookies ActionDispatch::Flash ActionDispatch::ParamsParser Rack::MethodOverride ActionDispatch::Head Rack::ConditionalGet Rack::ETag ActionDispatch::BestStandardsSupport Rails 3 Middleware “Stack” Sunday, December 5, 2010 Sunday, December 5, 2010 Sunday, December 5, 2010 Sunday, December 5, 2010 gem "rails", "3.0.1" gem 'jquery-rails' gem "mysql" gem "haml", "3.0.18" gem "decent_exposure", "1.0.0.rc1" gem "devise", "1.1.3" gem "chronic", "0.2.3" gem "seed-fu", "1.2.3", :git => "git://github.com/supaspoida/seed-fu.git" gem "block_helpers", "0.3.3" gem "will_paginate", "3.0.pre2" gem "geokit", "1.5.0" group :test do gem "capybara", "0.3.9" gem 'database_cleaner', '0.5.0' gem 'launchy', '0.3.7' gem "rspec-rails", "2.0.1" gem "mocha", "0.9.9" gem "shoulda", "2.11.3" gem "selenium-webdriver" gem "timecop", "0.3.5" gem "watchr" gem "specjour", "0.3.1" gem "email_spec", "1.0.0" end Gemfile Sunday, December 5, 2010 $ bundle Fetching source index for http://rubygems.org Using rake (0.8.7) Using abstract (1.0.0) Using activesupport (3.0.1) Using builder (2.1.2) Using i18n (0.4.2) Using activemodel (3.0.1) ... Your bundle is complete! It was installed into /Users/obie/.rvm/gems/ruby-1.9.2- p0@example-application Sunday, December 5, 2010 Sunday, December 5, 2010 Arel by Nick Kallen Sunday, December 5, 2010 Sunday, December 5, 2010 “closure under composition” Sunday, December 5, 2010 User.find :conditions => { :name => "obie" } # in Rails 3 becomes User.where(:name => "obie") Sunday, December 5, 2010 >> u = User.where(first_name: "Pascale"); u.to_sql => "SELECT `users`.* FROM `users` WHERE (`users`.`first_name` = 'Pascale') >> u.where(age: 21).to_sql => "SELECT `users`.* FROM `users` WHERE (`users`.`first_name` = 'Pascale') AND (`users`.`age` = 21)" >> u.order(:name).limit(20).to_sql => "SELECT `users`.* FROM `users` WHERE (`users`.`first_name` = 'Pascale') ORDER BY name LIMIT 20" Sunday, December 5, 2010 class Invitation < ActiveRecord::Base default_scope order("created_at DESC") scope :accepted, where("accepted_at is NOT NULL") scope :pending, where(accepted_at: nil) ... end Scopes Sunday, December 5, 2010 All of my open-sourced projects share two attributes. First, the source code is extremely stylized and meant to be /read/ more than /used/. They are literary arguments in code much more than a useful piece of infrastructure. If you read the source-code to Arel you will see a highly afected "combinator" and "interpreter" style of coding. Nick Kallen Sunday, December 5, 2010 “Holy shit, Rails 3 is slow!” Sunday, December 5, 2010 #5098 Sunday, December 5, 2010 joins = [{:dim_locations=>[:dim_zip, {:dim_city=> {:dim_state=>:dim_country}}]}, :dim_ages, :dim_car_makes, :dim_educations, :dim_employments, :dim_foods, :dim_genders, :dim_get_aways, :dim_home_ownerships, :dim_incomes, :dim_marital_statuses, :dim_teams] conditions = ["(dim_zips.zip_code = ? OR dim_zips.zip_code IS NULL) AND (dim_cities.city = ? OR dim_cities.city IS NULL) AND (dim_states.state_code = ? OR dim_states.state_code IS NULL) AND (dim_states.state = ? OR dim_states.state IS NULL) AND (dim_countries.country_code

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    70 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us