How's that again?

Ruby on Rails

Heroku - позволяет Деплоить приложение одной строкой в консоли

В моделях RoR можно указывать атрибуты has_many и depends_on и потом в консоли (rails console) использовать что-то вроде ORM.

rspec - библиотека для тестирования Capybara - DSL для тестирования

Генерация контроллера: rails generate controller StaticPages home help

Генерация теста: rails generate integration_test static_pages

ERB = Embedded Ruby

Дефолтный шаблон (Master Page) хранится в view/layouts/application.html.erb. Он содержит команду <%=yield%>, которая вставляет содержимое дочерней страницы. Команда csrfmetatags предотвращает подделку межсайтовых запросов.

'' отличается от "" тем, что внутри '' не нужно экранировать спецсимволы

Интерполяция:

name = "bar"
puts "foo #{name}"
#foo bar

name.empty? - вопросительный знак в конце это просто соглашение для булевых методов

Есть метод nil?

unless = "Если-не"

Все объекты кроме nil равны true, nil == false.

return использовать необязательно, при его отсутствии будет возвращен результат выполнения последнего оператора

a = [42,8,17]
puts a.sort #[8,17,42]
puts a #[42,8,17]
a.sort! # бэнг-метод изменяет исходный массив
puts a #[8,17,42]

Добавлять в массив можно методом push или оператором <<

a.push 6
a << 7

Помимо массивов есть диапазоны. Пример диапазона: (0..9)

Преобразование диапазона в массив:

(0..9).to_a

Можно использовать диапазоны для доступа к массиву:

a = %w[foo bar baz quux]
=> ['foo','bar','baz', 'quux']
a[0..2]
=> ['foo','bar','baz']

a[2..-1] - От второго и до конца

Блоки - это лямбды.

(1..5).each{|x| puts 2*x}
=> 2 4 6 8 10

Способ без фигурных скобок:

(1..5).each do |x|
  puts 2 * x
end

Хэши (словари)

d = {}
d["name"] = "Ivan"
a = { "name" => "Yury", "surname" => "Timofeev" }
a["email"]
=> nil

Знак => называется hashrocket

Символы

:title - символ

О символах можно думать как о строках без дополнительного багажа

Начиная с Ruby 1.9 введен новый синтаксис для хэшей с символами:

h1 = { :name => "Ivan", :last_name => "Petrov" }
h2 = { name: "Ivan", last_name: "Petrov" }
h1 == h2 
=> true

Метод inspect() возвращает буквальное представление объекта Есть даже специальная функция p, где p :name == puts :name.inspect

Когда хэш - последний аргумент в вызове функции, фигурные скобки вокруг его обьявления необязательны.

base64 так называется, потому что его алфавит имеет длину 64: a-z, A-Z, 0-9, -, длинное тире

В Ruby есть оператор ||=, он по аналогии оператору += аналогичен записи x = x || y