введение в ror олег андреев
DESCRIPTION
TRANSCRIPT
![Page 2: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/2.jpg)
Цель
В конце дня —
рельсы у всех!
http://rubyonrails.org/down
![Page 3: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/3.jpg)
МотивацияНовые идеи
![Page 4: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/4.jpg)
МотивацияНовые идеи
Больше за меньшее время
![Page 5: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/5.jpg)
МотивацияНовые идеи
Больше за меньшее время
Удовольствие,
радость,
счастье
![Page 6: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/6.jpg)
Rubyязык программирования
Railsфреймворк
![Page 7: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/7.jpg)
Rubyязык программирования
Railsфреймворк
средоточение светлых идей
![Page 8: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/8.jpg)
<Экскурс в историю>
Ruby
Yukihiro «Matz» Matsumoto, 1993
Ruby on Rails
David Heinemeier Hansson, 2004
![Page 9: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/9.jpg)
<Экскурс в историю>
Ruby
Yukihiro «Matz» Matsumoto, 1993
Ruby on Rails
David Heinemeier Hansson, 2004
</Экскурс в историю>
![Page 10: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/10.jpg)
Главное
MVC Model-View-Controller
ORM Object-Relational Mapping
TDD Test-Driven Development
![Page 11: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/11.jpg)
Фокус
меньше кода
меньше препятствий
ваша задача, не чьи-то паттерны
![Page 12: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/12.jpg)
Соглашения
вместо конфигурации
умные умолчания
либеральные ограничения
![Page 13: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/13.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/14.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/15.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/16.jpg)
Это всё — Руби
Открытые классы
Рефлексия везде
Весь код — исполняемый
Всё — объект
Все выражения возвращают значение
![Page 17: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/17.jpg)
Проблемы решаются
с помощью самого языка
![Page 18: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/18.jpg)
>> "нужен utf-8?"[0..4]
=> "нуЀ"
![Page 19: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/19.jpg)
class String
def [](range)
split(//u)[range].join
end
end
![Page 20: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/20.jpg)
class String
def [](range)
split(//u)[range].join
end
end
>> "нужен utf-8?"[0..4]
=> "нужен"
![Page 21: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/21.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/22.jpg)
~$ gem install activesupport
>> require 'active_support'
>> $KCODE = 'utf8'
>> 'нужен utf-8?'.chars[0..4]
=> 'нужен'
![Page 23: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/23.jpg)
Полный комплект
От Аякса до базы данных
Один язык на все случаи жизни
DSL — бесплатно
![Page 24: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/24.jpg)
transaction do
oleg.withdrawal(5000)
rit2007.deposit(5000)
end
![Page 25: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/25.jpg)
Account.transaction(oleg, rit2007) do
oleg.withdrawal(5000)
rit2007.deposit(5000)
end
![Page 26: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/26.jpg)
def transaction(*objects, &block)
h = trap('TERM') { raise TransactionError, "Transaction aborted" }
...
trap('TERM', h)
end
![Page 27: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/27.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/28.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/29.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/30.jpg)
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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/31.jpg)
~/conference/app/controllers/
events_controller.rb
class EventsController < ApplicationController
before_filter :authorize, :only => [:edit, :update, :destroy]
![Page 32: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/32.jpg)
~/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 олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/33.jpg)
http://api.rubyonrails.org
http://prototypejs.org
http://script.aculo.us
![Page 34: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/34.jpg)
Что-то еще?
![Page 35: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/35.jpg)
В коробкеMVC, ActiveRecord,
ЧПУ, AJAX
Миграции
REST API
Штепсели (plugins)
TestUnit
Консоль, сервер, бенчмарки еще великое множество идей…
![Page 36: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/36.jpg)
Штепсели!
HAML & SASS
RSpec BDD
Globalize
UJS4Rails
acts_as_tree
acts_as_taggable
acts_as_versionedetc. etc. etc.
![Page 37: введение в Ror олег андреев](https://reader033.vdocuments.site/reader033/viewer/2022051110/54b54b804a7959a77c8b4595/html5/thumbnails/37.jpg)
Спасибо!rubyonrails.org/down
Вопросы[email protected]
novemberain.com
Эти слайды вы найдете здесь: http://oleg.subway.net.ru/rit2007