Основы

RDRubyTutorial: Метапрограммный Ruby level 2

мая 9, 2012  |  Published in Ruby, Основы

Предварительно рекомендую прочесть Метапрограммный Ruby.

К моему удивлению не все Ruby программисты знают внутреннего устройства Ruby. Не в том, смысле, что Ruby’ст должен изучать исходники своего любимого языка программирования, но в том, что многие моменты не понятны. Например не понятно, чем класс отличается от объекта или что такое singleton’ы в Ruby. Эта статья призвана совершить некоторую демистификацию Ruby. В простой манере и без влезания в код самого Ruby я расскажу почему что-то работает именно так, как работает. Статья ориентирована не на новичков, а на программистов более-менее среднего уровня, то есть достаточно хорошо знакомых с Ruby.

Статья будет иметь формат повествования, она будет лишена структуры, читайте ее просто как программистскую сказку.

Классы — это объекты, но только на половину. Классы являются экземплярами одного из базовых классов Class, однако они не являются «классическими» объектами.

Read the rest of this entry »

Tags: , , , ,

Ruby on Rails 3: Создание и настройка рабочего окружения разработчика на Ruby и Ruby on Rails

апреля 21, 2012  |  Published in BDD, Development Processes, RSpec, Ruby, Ruby on Rails, Ruby on Rails 3, Базы данных, Основы, Тестирование

ruby on rails tutorialВ этой статье мы рассмотрим:

  1. Установку Git 
  2. Установку RVM - Ruby Version Manager для возможности работы с несколькими версиями Ruby, а также наборами библиотек Ruby - Gem’ами.
  3. Установку собственно Ruby: Ruby 1.8.7 и Ruby 1.9.3
  4.  Установку SQLite, MySQL, PostgreSQL
  5. Установку фреймворка Ruby on Rails 3.2 и его зависимостей
  6. Установку Node.js как среду выполнения JavaScript
  7. Создание нового проекта Rails
  8. Работу с зависимостями проекта
  9. Настройку тестового окружения и написание простых спецификаций и тестов
  10. Написание кода приложения по спецификациям
  11. Установку Nginx и Unicorn, и запуск приложения Rails на Unicorn и Nginx прокси
  12. Работу с удаленным репозиторием
  13. Работу с Continuous Integration (CI) сервером - Travis

 

Read the rest of this entry »

Tags: , , , , , , , ,

Установка Ruby и Rails в Windows используя RubyInstaller и DevKit

апреля 15, 2012  |  Published in Ruby, Ruby Gems, Ruby on Rails, Основы

rubyinstallerУстановить Ruby в Windows почти так же легко, как и в Ubuntu. Сразу хочу предупредить, что в работе Ruby под Windows имеется несколько ограничений, особенно это касается работы с файловой системой и процессами. Также не все библиотеки Ruby (gem’ы) отлично работают в Windows, например один из самых распространенных серверов для Rails — Unicorn заточен под Linux и совсем не работает под Windows.

Read the rest of this entry »

Tags: , ,

RDRubyTutorial: Случайные числа в Ruby

декабря 28, 2011  |  Published in Ruby, Основы

В этой статье из цикла RubyDev Ruby Tutorial мы рассмотрим способы генерации случайного числа в Ruby 1.8.x и Ruby 1.9.x. Генерация случайного числа — достаточно тривиальная задача, особенно для Ruby однако некоторые новички даже здесь сталкиваются с проблемами. Кроме того, не все программисты знают о нововведениях в Ruby 1.9 связанных с генерацией случайных чисел.

Самым простым способом получить случайное число в Ruby является использование метода rand.

puts rand() #0.7063893161805139
puts rand() #0.5829631459496872
puts rand() #0.7625800525759028

Получение случайных чисел с плавающей точкой редко бывает полезным, чаще всего необходимо целове число.

puts rand(3) #0
puts rand(3) #1
puts rand(3) #1
puts rand(10) #3
puts rand(10) #7
puts rand(10) #8

Если методу rand передать в качестве аргумента целое число, то rand будет генерировать случайные числа в диапазоне от 0 до n-1.
Read the rest of this entry »

Tags: ,

RDRubyTutorial: Метапрограммный Ruby

октября 19, 2011  |  Published in Ruby, Основы

Метапрограммный Ruby
Эта статья-учебник даст вам самые основные знания и понимания программирования на языке Ruby. В ней, в отличие от RubyDev Ruby Tutorial (RDRT) не будет рассматриваться работа с какими-нибудь конкретными объектами, например строками или целыми числами, или с массивами, или с чем-либо еще. Мы будем рассматривать синтаксис и основные концепции языка и не будем изучать методы и приемы работы с определенными объектами — все это описано в официальной документации (учите английский).

Автор (то есть я) предполагает, что вы в общих чертах знаете, что такое Ruby, читали блог RubyDev или статью о Ruby в Wikipedia, по этому я не намерен повторяться и рассказывать о происхождении языка, истории, его авторе и прочих практически бесполезных вещах.

Данный учебник будет состоять из нескольких глав, которые будут пронумерованы.

1. Объекты
Ruby — объектно-ориентированный язык, а значит все, с чем мы работаем — объекты. Объекты принадлежат определенному классу (типу), например вы, мой дорогой читатель, которого, предположим зовут Александр Сергеевич принадлежите классу людей, или группе людей, или ваш тип, как объекта — человек.

Александр Сергеевич, кто вы?  — Я — Человек!

Объект — это набор свойств и методов. Александр Сергеевич, вы например, имеете свойства: имя, фамилия, отчество, рост, вес, цвет волос и так далее, но также вы имеете методы, то есть вы можете выполнять некоторую работу (выполнять некоторые функции), например, сидеть, стоять, разговаривать и отвечать комментариями на мои статьи.

Для того, чтобы появился новый объект вашего типа, Александр Сергеевич, вам следует совокупиться с некоторой человеческой особью женского пола и через 9 месяцев будет получен новый объект класса человек. В Ruby процесс создание новых объектов более быстрый и менее ресурсоемкий. Чуть позже мы разберемся с ним, а сейчас поговорим о классах.

Read the rest of this entry »

Tags: , ,

Ruby и красивый код: Рефаторинг поиска палиндромов

августа 27, 2011  |  Published in Ruby, Основы

В уютном бложеке одного из комментаторов нашел один пост-решение задачи, который меня заинтересовал (http://avastor.pp.ua/Ruby/ruby-polindrom/).

Задача состоит вот в чем:
Необходимо найти числа-палиндромы (которые при чтении слева и справа выглядят одинаково). Автор (к сожалению имени не знаю) предлагает следующее решение:

#Создаем массив чисел
numbers = []
(100).step(999,1) do |first|
  (100).step(999,1) do |second|
    numbers.push first * second
  end
end

#находим палиндром
polinoms = []
numbers.map do |subnumber|
  polinoms << subnumber if subnumber.to_s == subnumber.to_s.reverse
end

#максимальный палиндром
puts polinoms.max

Совет: Оборачивайте код в методы.
Read the rest of this entry »

Tags: ,

RDRubyTutorial > Рубиновые модули

июля 12, 2011  |  Published in Ruby, Основы

ruby modulesОбещал, что RubyDev Ruby tutorial будет закрыт, но не тут то было!
Вы уже должно быть прочитали главу посвященную классам и узнали о наследовании классов. Часто необходимо одмин классом наследоваться от нескольких классов, что называется множественным наследованием, однако Ruby по ряду причин не располагает возможностью множественного наследования. Отсутствие множественного наследования в Ruby несколько не препятствие и не показатель бедности и недостаточной функциональности языка, напротив, отсутствие множественного наследование избавляет программиста от различных проблем связанных с конфликтом имен, в то же время Ruby предоставляет свой альтернативу множественному наследованию — примеси (mixins).

Модули как раз таки и служат для реализации этого самого подмешивания, а также для логического объединения и инкапсуляции(отделения от внешнего мира) кода.

Представим, что ваше приложение на Ruby состоит из нескольких классов, тогда, поскольку приложение является чем-то монолитным, его следует объединить в модуль. Для особо крупных приложений используется сразу несколько модулей, один основной (корневой), который содержит приложение целиком, и несколько которые объединяют части кода приложения по определенному признаку, например в Rails имеетсямодуль ActiveRecord, который хранит весь код реализующий паттерн ActiveRecord для работы с базой данных, модуль ActiveSupport, который включает в себя другие модули, например ActionController, который хранит в себе весь код реализующий контроллеры, сам ActiveSupport отвечает за реализацию VC от паттерна MVC (Model-Viev-Controller, если забыли).

Что такое модуль? — Модуль это просто еще одно пространство имен, коробка, в которую вы укладываете ваш код, для того, чтобы он не путался с другими составляющими программы. Можете представлять модуль как примитивный класс, который лишен некоторых функций. Модули, что подмешиваются в классы называются примесями (mixin), все, что они делают — это просто дают классу в который были подмешаны доступ ко всему своему содержимому.

Read the rest of this entry »

Tags: ,

Работа с файловой системой в Ruby ч. 3: Стандартная библиотека Ruby: FileUtils и Pathname

июля 4, 2011  |  Published in Ruby, Основы

ruby File APIПродолжая серию статей о File IO в Ruby, мы, в этой статье покопаемся в двух компонентах стандартной библиотеки языка Ruby, которые расширяют ядро Ruby IO API: модуль FileUtils и класс Pathname.

Модуль FileUtils

Модуль FileUtils предоставляет интересный подход к манипуляции файлами путем эмуляции множества команд Unix для работы с файлами и большинства их опций (флагов). То, что вы можете сделать командами типа rm -rf и ln -s может быть выполнено соответственно методами FileUtils.rb_rf и FileUtils.ln_s.

Так как они придерживаются синтаксиса знакомого большинству Ruby-программистов они являются очень простыми для понимания, делая список вызовов методов FileUtils очень похожим на сеанс bash. Пример, что приведен ниже демонстрирует эту схожесть:

require "fileutils"

FileUtils.touch(["some_file.rb", "another_file.rb"])
FileUtils.mkdir("code")
FileUtils.mv(["another_file.rb", "../other_file.rb"], "code")

Dir["code/*"]
#>> ["code/some_file.rb", "code/another_file.rb"]

FileUtils.cp_r("code", "bkp")
FileUtils.rm_r("code")

Dir["code/*"]
#>> []
Dir["bkp/*"]
#>> ["bkp/some_file.rb", "bkp/another_file.rb"]

Read the rest of this entry »

Tags: , ,

Работа с файловой системой в Ruby ч. 2: Класс Dir

июня 30, 2011  |  Published in Ruby, Основы

ruby File APIПродолжая серию о File IO API в Ruby, сегодня мы рассмотрим класс Dir.

Класс Dir

Основная направленность класса Dir — предоставить пользователю возможность запрашивания, обхода и фильтрации по директориям файловой системы. Данный клас предоставляет несколько базовых методов для создания и удаления директорий. Давайте рассмотрим этот его функционал в первую очередь.

Read the rest of this entry »

Tags: , ,

Работа с файловой системой в Ruby ч. 1: Класс File

июня 29, 2011  |  Published in Ruby, Основы

ruby File APIRuby обладет очень мощным API для работы с файловой системой, которое позволяет производить очень сложные операции с использованием минимального количества кода, однако множество методов и классов с похожими именами может несколько запутать новичка.

Класс File

Класс File является встроенным в язык классом (поэтому вам не нужно подключать его в файл с вашим кодом), предоставляет методы для самых популярных манипуляций с файлами. Как и многие другие IO-штуки в Ruby, File является подклассом (дочерним классом) IO, в который подмешивается модуль Enumerable. Давайте пробежимся по основам!

Read the rest of this entry »

Tags: ,