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

Post on 13-Jan-2015

962 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Введение в

Ruby on Rails

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

oleganza@gmail.com

Цель

В конце дня —

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

http://rubyonrails.org/down

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

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

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

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

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

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

радость,

счастье

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

Railsфреймворк

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

Railsфреймворк

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

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

Ruby

Yukihiro «Matz» Matsumoto, 1993

Ruby on Rails

David Heinemeier Hansson, 2004

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

Ruby

Yukihiro «Matz» Matsumoto, 1993

Ruby on Rails

David Heinemeier Hansson, 2004

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

Главное

MVC Model-View-Controller

ORM Object-Relational Mapping

TDD Test-Driven Development

Фокус

меньше кода

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

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

Соглашения

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

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

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

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

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

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

Это всё — Руби

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

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

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

Всё — объект

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

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

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

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

=> "нуЀ"

class String

def [](range)

split(//u)[range].join

end

end

class String

def [](range)

split(//u)[range].join

end

end

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

=> "нужен"

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

~$ gem install activesupport

>> require 'active_support'

>> $KCODE = 'utf8'

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

=> 'нужен'

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

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

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

DSL — бесплатно

transaction do

oleg.withdrawal(5000)

rit2007.deposit(5000)

end

Account.transaction(oleg, rit2007) do

oleg.withdrawal(5000)

rit2007.deposit(5000)

end

def transaction(*objects, &block)

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

...

trap('TERM', h)

end

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

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') %>

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') %>

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

~/conference/app/controllers/

events_controller.rb

class EventsController < ApplicationController

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

~/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}"

http://api.rubyonrails.org

http://prototypejs.org

http://script.aculo.us

Что-то еще?

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

ЧПУ, AJAX

Миграции

REST API

Штепсели (plugins)

TestUnit

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

Штепсели!

HAML & SASS

RSpec BDD

Globalize

UJS4Rails

acts_as_tree

acts_as_taggable

acts_as_versionedetc. etc. etc.

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

Вопросы?oleganza@gmail.com

novemberain.com

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

top related