Ruby

Thor – божественный фреймворк для создания задач

июня 28, 2012  |  Published in Ruby, Ruby Gems, Ruby on Rails, Ruby on Rails 3

– это альтернатива для всем известного Rake. Автором Thor является небезызвестный , хотя если посмотреть на коммиты в репозитории Thor, то Катц находится только на 4 месте, но сейчас не об этом. Thor – создавался как более изящная альтернатива фреймворку Rake и это вполне удалось его авторам. Я надеюсь, что по прочтению данной статьи вы не только научитесь работать с Thor, но и замените им Rake.

Для установки thor воспользуйтесь командой:

$ gem install thor

Если вы программируете с использованием фреймворка Ruby on Rails, то Thor уже уже установлен так как находится в зависимостях у Rails и используется внутри Rails для создания генераторов.
Установив Thor у вас появится возможность использовать в консоли команду thor:

$ thor -v
Thor 0.15.3

$ thor
Tasks:
thor help [TASK] # Describe available tasks or one specific task
thor install NAME # Install an optionally named Thor file into your syst…
thor installed # List the installed Thor modules and tasks
thor list [SEARCH] # List the available thor tasks (—substring means .*S…
thor uninstall NAME # Uninstall a named Thor module
thor update NAME # Update a Thor file from its original location
thor version # Show Thor version

Прежде чем создать первую задачу Thor вы должны быть знакомы с некоторыми соглашениями:

  1. Задачи Thor имеют расширение .thor
  2. Имена файлов в которых имеются задачи должны соответствовать именам классов.
  3. Классы используются в для создания пространств имен.
  4. Каждая задача – это просто метод.

Теперь мы можем приступить к созданию первой задачи. В файл first_task.thor поместим следующий код на Ruby:

Read the rest of this entry »

Tags: , , , ,

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: ,

Query-Chain Object Pattern в Ruby

ноября 25, 2011  |  Published in Ruby

Предупреждение: На самом деле я не знаю, как в действительности называюется этот паттерн, но название Query-Chain Object Pattern мне кажется очень подходящим.

Я был очень рад увидеть в ActiveRecord 3.0 такое значительное изменение, как добавление класса ActiveRecord::Relation. Этот класс, точнее его объекты, занимаются тем, что «накапливают» запросы в виде вызова методов и на их основе генерируют SQL-запрос к БД.

Post.where(:id => 3).class
#=> ActiveRecord::Relation

Post.where(:id => 3).order('id desc').class
#=> ActiveRecord::Relation

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

Эта статья не о работе с ActiveRecord, но о паттерне Query Chain.

Описание Query Chain:

При определенных запросах к некоторому объекту A объект A возвращает не запрашиваемые результаты, а query-chain объект B в котором записываются запросы, которые позже выполняются вместе и изменяют состояние объекта A, или который изменяет состояние объекта A сразу при каждом запросе (здесь запрос — просто вызов метода).

Самый простой пример реализации Query Chain паттерна:
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: , ,

Интервью с Иваном Шихалевым об RDot и не только

октября 8, 2011  |  Published in Ruby, Ruby Gems, Интервью

Иван, добрый день! Представься пожалуйста читателям RubyDev и расскажи кратко о себе: где работаешь, чем увлекаешься?

Ну, кратенько: Иван Шихалев, временно безработный, живу в поселке Арти Свердловской области. Интересы у меня разнообразные, иногда кажется, что будь их поменьше, было бы проще жить. Отмечу, пожалуй, следующее: я являюсь одним из редакторов FreePascal.ru (и вообще, имею непосредственное отношение к формированию русскоязычного сообщества Free Pascal), а еще играю в . Веду блог — .

Расскажи пожалуйста о своем проекте RDot, его преимуществами перед аналогами и о том, почему была выбрана именно библиотека Graphitz?

— это такой визуализатор структуры классов Ruby — именно такой, какой был нужен лично мне — с указанием не только наследования, но и подмешивания модулей посредством как include, так и extend, и с перечислением методов и констант. Его основное, пожалуй, отличие от аналогов — он не анализирует текст Ruby-библиотеки, а загружает ее и работает с реально сформированной структурой, т.е. отображает классы, модули и их методы, созданные динамически в процессе загрузки. Собственно, именно такая задача у меня изначально и возникла — увидеть динамическую структуру классов, которую не показывают стандартные средства документирования (под которыми я подразумеваю RDoc и YARD). Задача несколько экзотическая, согласен, но вполне реальная.
Read the rest of this entry »

Tags: ,

Паттерн программирования Singleton

октября 3, 2011  |  Published in Ruby, STDLIB

Singleton (одиночка) — паттерн программирования позволяющий создавать такие классы, которые могут иметь только один экземпляр. Можно подумать, что это глупый паттерн, ибо если вам нужен один экземпляр (копия) класса, то вы просто создаете его и не создаете больше экземляров. Я тоже так думал и даже пытался найти обоснование тому, почему этот паттерн существует. Я понимал, что все эти паттерны были придуманы людьми куда-более умными, образованными и опытными чем я, и кажащаяся бесполезность pattern Singleton — это всего-лишь мое невегласие. Вот к чему я пришел:

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

Честно признаться в Ruby можно хорошо обходиться без использования Singleton, однако, вам может быть полезно и интересно знать о нем, просто для общего развития или для применения в других языках программирований.
Read the rest of this entry »

Tags: , , ,

HAML в Rails

октября 2, 2011  |  Published in ClientSide, Ruby Gems, Ruby on Rails, Ruby on Rails 3, View

haml logoHAML — очень удобный язык разметки который призван заменить HTML. HAML это также шаблонизатор, который компилирует код на HAML + Ruby  в HTML, который представляется пользователю.

Мне надоел стандартный ERB, надоели закрывающие теги, надоело, что порой бывает сложно понять что во что вложено, и я решил полностью перебраться на HAML. Если вы еще не слышали о HAML, то это не означает, что HAML — это что-то экзотическое, напротив, HAML использует большинство Rails разработчиков, так активно используют, что даже удивились, почему Rails Core Team невключили HAML в Raila 3.1. как шаблонизатор по умолчанию.

Начать работу с HAML совсем просто!

Read the rest of this entry »

Tags: , , ,