Created by: Alex Slinko, Senior Ruby on Rails Developer.
Summary:
In a nutshell about one of the most object-oriented programming languages
An alternative viewpoint on development process, testing and deployment
About Ruby in the Web in whole and Rails in particular
Other Ruby interpreters
4. Динамический со строгой типизацией
● Тип задается при присваивании
● Типы не приводятся автоматически к одному типу
["test"] + "test"
TypeError: can't convert String into Array
6. Пример
● a = [1, 2, 3]
● max = nil
● If a.respond_to?(:max)
● max = a.max
● elsif a.respond_to?(:each)
● a.each{|a| max ||= a; max = a if max < a }
● end
8. Классы
● Всего лишь специальный объект
● Объект, который создает экземпляры с
предопределенными методами и полями при помощи
специального метода.
● У каждого объекта есть свойство #class который
содержит ссылку на класс.
18. Про всякую фигню
● return
● ;
● ()
● public/private/protected
● else if
● комментарии
19. Ruby-style
● Писать как можно больше кода
● и как можно меньше всякой фигни
● Идти по пути наименьшего удивления
● Наименования должны выражать сущность объекта
25. Ruby-style
● Писать как можно больше кода
● и как можно меньше всякой фигни
● Идти по пути наименьшего удивления
● Наименования должны выражать сущность объекта
● Всё должно быть протестировано
26. Тесты
require ’spec_helper’
describe Balance do
before do
Deposit.create(amount: 120)
Time.stub(:now).and_return('2010-04-02’.to_time)
Deposit.create(amount: 110)
end
its(:balance) { should == 230.0 }
it "calculates balance for selected date" do
subject.date_balance('2010-04-02’).should == 110.0
end
end
28. Еще пример
● Feature: Tracking and logging external agent jobs
● We need Pantry to be able to track jobs and keep a record of
each job's log output.
● Background:
● Given an agent job has been triggered
● And the agent is about to start the job
● Scenario: An agent registers a new job
● When an agent has posts all the required job details
● Then a response with the uri to the job should be received
29. Ruby-style
● Писать как можно больше кода
● и как можно меньше всякой фигни
● Идти по пути наименьшего удивления
● Наименования должны выражать сущность объекта
● Всё должно быть протестировано
● Код пишется для людей
30. Deploy
capistrano
set :scm, :git
set :scm_verbose, true
namespace :deploy do
desc "Restart Apache"
task :restart, roles: :app, except: { no_release: true } do
run "touch #{File.join(current_path,'tmp','restart.txt')}"
end
end
42. Ruby on Rails
● Простой язык
● Одинаковая структура для всех приложений
● Простое ORM
● Легко писать тесты
● Легко обновлять
● Очень быстро можно начать работать
● Много плюшек
● Convention over configuration
43. Ruby on Rails
● “Rails is omakase” DHH
● Можно многое поменять