введение в ror олег андреев

37
Введение в Ruby on Rails Олег Андреев разработчик Railsware.com [email protected]

Upload: webcrunch

Post on 13-Jan-2015

962 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: введение в Ror   олег андреев

Введение в

Ruby on Rails

Олег Андреевразработчик Railsware.com

[email protected]

Page 2: введение в Ror   олег андреев

Цель

В конце дня —

рельсы у всех!

http://rubyonrails.org/down

Page 3: введение в Ror   олег андреев

МотивацияНовые идеи

Page 4: введение в Ror   олег андреев

МотивацияНовые идеи

Больше за меньшее время

Page 5: введение в Ror   олег андреев

МотивацияНовые идеи

Больше за меньшее время

Удовольствие,

радость,

счастье

Page 6: введение в Ror   олег андреев

Rubyязык программирования

Railsфреймворк

Page 7: введение в Ror   олег андреев

Rubyязык программирования

Railsфреймворк

средоточение светлых идей

Page 8: введение в Ror   олег андреев

<Экскурс в историю>

Ruby

Yukihiro «Matz» Matsumoto, 1993

Ruby on Rails

David Heinemeier Hansson, 2004

Page 9: введение в Ror   олег андреев

<Экскурс в историю>

Ruby

Yukihiro «Matz» Matsumoto, 1993

Ruby on Rails

David Heinemeier Hansson, 2004

</Экскурс в историю>

Page 10: введение в Ror   олег андреев

Главное

MVC Model-View-Controller

ORM Object-Relational Mapping

TDD Test-Driven Development

Page 11: введение в Ror   олег андреев

Фокус

меньше кода

меньше препятствий

ваша задача, не чьи-то паттерны

Page 12: введение в Ror   олег андреев

Соглашения

вместо конфигурации

умные умолчания

либеральные ограничения

Page 13: введение в Ror   олег андреев

class Project < ActiveRecord::Base

belongs_to :portfolio

has_one :project_manager

has_many :milestones

has_and_belongs_to_many :categories

validates_presence_of :name, :description

validates_uniqueness_of :shortcut

end

Page 14: введение в Ror   олег андреев

class Project < ActiveRecord::Base

belongs_to :portfolio

has_one :project_manager, :class_name => "Person"

has_many :milestones, :dependent => :destroy

has_and_belongs_to_many :categories, :join_table => "categorizations"

validates_presence_of :name, :description

validates_uniqueness_of :shortcut

end

Page 15: введение в Ror   олег андреев

class Project < ActiveRecord::Base

belongs_to :portfolio

has_one :project_manager, :class_name => "Person"

has_many :milestones, :dependent => :destroy

has_and_belongs_to_many :categories, :join_table => "categorizations"

validates_presence_of :name, :description

validates_uniqueness_of :shortcut

end

Page 16: введение в Ror   олег андреев

Это всё — Руби

Открытые классы

Рефлексия везде

Весь код — исполняемый

Всё — объект

Все выражения возвращают значение

Page 17: введение в Ror   олег андреев

Проблемы решаются

с помощью самого языка

Page 18: введение в Ror   олег андреев

>> "нужен utf-8?"[0..4]

=> "нуЀ"

Page 19: введение в Ror   олег андреев

class String

def [](range)

split(//u)[range].join

end

end

Page 20: введение в Ror   олег андреев

class String

def [](range)

split(//u)[range].join

end

end

>> "нужен utf-8?"[0..4]

=> "нужен"

Page 21: введение в Ror   олег андреев

class String

alias :old_brackets :[]

def [](*args)

case args.first

when Range, Fixnum:

split(//u)[*args].join

when Regexp, String:

old_brackets(args.first)

else:

raise ArgumentError,

"Didn’t expect #{args.first.class}"

end

end

end

Page 22: введение в Ror   олег андреев

~$ gem install activesupport

>> require 'active_support'

>> $KCODE = 'utf8'

>> 'нужен utf-8?'.chars[0..4]

=> 'нужен'

Page 23: введение в Ror   олег андреев

Полный комплект

От Аякса до базы данных

Один язык на все случаи жизни

DSL — бесплатно

Page 24: введение в Ror   олег андреев

transaction do

oleg.withdrawal(5000)

rit2007.deposit(5000)

end

Page 25: введение в Ror   олег андреев

Account.transaction(oleg, rit2007) do

oleg.withdrawal(5000)

rit2007.deposit(5000)

end

Page 26: введение в Ror   олег андреев

def transaction(*objects, &block)

h = trap('TERM') { raise TransactionError, "Transaction aborted" }

...

trap('TERM', h)

end

Page 27: введение в Ror   олег андреев

ActionController::Routing::Routes.draw do |map|

map.start '', :controller => 'pages', :action => 'start'

map.signup 'signup', :controller => 'account', :action => 'new'

map.event 'events/:id', :controller => 'events', :action => 'show'

map.feed 'feed.:format', :controller => 'events', :action => 'feed'

end

Page 28: введение в Ror   олег андреев

ActionController::Routing::Routes.draw do |map|

map.start '', :controller => 'pages', :action => 'start'

map.signup 'signup', :controller => 'account', :action => 'new'

map.event 'events/:id', :controller => 'events', :action => 'show'

map.feed 'feed.:format', :controller => 'events', :action => 'feed'

end

<h2>Подписка</h2>

<%= link_to 'Новости (RSS)', feed_url(:format => 'rss') %>

<%= link_to 'Новости (Atom)', feed_url(:format => 'atom') %>

Page 29: введение в Ror   олег андреев

ActionController::Routing::Routes.draw do |map|

map.start '', :controller => 'pages', :action => 'start'

map.signup 'signup', :controller => 'account', :action => 'new'

map.event 'events/:id', :controller => 'events', :action => 'show'

map.feed 'feed.:format', :controller => 'events', :action => 'feed'

end

<h2>Подписка</h2>

<%= link_to 'Новости (RSS)', feed_url(:format => 'rss') %>

<%= link_to 'Новости (Atom)', feed_url(:format => 'atom') %>

Page 30: введение в Ror   олег андреев

xml.instruct!

xml.rss("version" => "2.0", "xmlns:dc" => "http://...") do

xml.channel do

xml.title "РИТ-2007"

xml.link "http://rit2007.ru"

xml.description "«Российские интернет-технологии 2007»"

xml.ttl 40

for event in @events

xml.item do

xml.title(event.headline)

xml.description(event.description)

xml.pubDate(event.taken_on.to_s(:rfc822))

xml.link(event_url(:id => event))

end

end

end

end

Page 31: введение в Ror   олег андреев

~/conference/app/controllers/

events_controller.rb

class EventsController < ApplicationController

before_filter :authorize, :only => [:edit, :update, :destroy]

Page 32: введение в Ror   олег андреев

~/conference/app/views/events/list.rhtml

<h1>Мероприятия</h1>

<%= render :partial => 'event', :collection => @events %>

~/conference/app/views/events/_event.rhtml

<div id="event_<%= event.id %>">

<h2><%= event.headline %></h2>

<p><%= event.description %></p>

<p>

<%= link_to_remote 'Удалить', :url => destroy_event_url %>

</p>

</div>

~/conference/app/views/events/destroy.rjs

page.visual_effect :fade, "event_#{@event.id}"

Page 33: введение в Ror   олег андреев

http://api.rubyonrails.org

http://prototypejs.org

http://script.aculo.us

Page 34: введение в Ror   олег андреев

Что-то еще?

Page 35: введение в Ror   олег андреев

В коробкеMVC, ActiveRecord,

ЧПУ, AJAX

Миграции

REST API

Штепсели (plugins)

TestUnit

Консоль, сервер, бенчмарки еще великое множество идей…

Page 36: введение в Ror   олег андреев

Штепсели!

HAML & SASS

RSpec BDD

Globalize

UJS4Rails

acts_as_tree

acts_as_taggable

acts_as_versionedetc. etc. etc.

Page 37: введение в Ror   олег андреев

Спасибо!rubyonrails.org/down

Вопросы[email protected]

novemberain.com

Эти слайды вы найдете здесь: http://oleg.subway.net.ru/rit2007