Блог пользователя spine

Как определить версию сервис пака под windows

Задача состоит в следующем - операционная система WindowsXP, необходимо из скрипта на Ruby определить версию установленного Service Pack.

Решил путем чтения соответствующего ключа из реестра Windows:

require 'win32/registry'

def getServicePackString
    Win32::Registry::HKEY_LOCAL_MACHINE.open('SOFTWARE\Microsoft\Windows NT\CurrentVersion') do |reg|
        reg_typ, reg_val = reg.read('CSDVersion')
        return reg_val
    end
end

puts getServicePackString #=> Service Pack 2

Черновик перевода страницы Libraries официального сайта Ruby

С недавних пор я вхожу в команду по переводу официального сайта Ruby на русский язык и мне был поручен перевод раздела Libraries. Первичный, черновой вариант приведен ниже, приветствуется здравая критика и комментарии к переводу.

Ruby FTP, копирование файла на FTP

Понадобилось из Руби скрипта положить файл на FTP Server, вот как я это оформил:

require 'net/ftp'

# Устанавливаес соединение с FTP сервером
session = Net::FTP.new( ftp_server, ftp_login, ftp_password )

# Указываем, что файлы надо воспринимать как бинарные
session.binary = true

# Переводим клиента в пассивный режим
session.passive = true

# Перемещаемся в заданный каталог на FTP сервере
files = session.chdir( 'ruby ftp example' )

# Отправляем файл на сервер
session.putbinaryfile('file_name')

# Закрываем соединение
session.close

Возможно кому-то пригодится. net/ftp это стандартный модуль, дополнительных библиотек не требуется.

А ведь Ruby мог быть назван другим именем

Забавный факт тут выяснился, оказывается когда придумывали название для Visual Basic, создателей посетила мысль назвать его Ruby, почему они передумали написано

Сохранение Hash в формате XML и наоборот

Вместо того что бы тратить время на написание своего собственного метода для конвертирования Hash в XML, воспользуйтесь готовым решением из фрейморка Ruby On Rails. ActiveSupport gem уже располагает всем необходимым функционалом.

Необходимо подключить следующие модули:

require 'rubygems'
require 'active_support'

Для записи Hash в XML:

xml = hash.to_xml

Для чтения ранее сохраненного Hash из XML:

hash = Hash.from_xml(xml_stream)

Удачи!)

Оригинальный текст

Ruby Юнит тесты и Continuous Integration

Из коробки с Ruby идет великолепный модуль для написания тестов для ваших программ:

Test::Unit - Ruby Unit Testing Framework

Вот как выглядит самый простой теcт:

require 'test/unit'

class TC_Sample < Test::Unit::TestCase
  def test_It
    assert( false )
  end
end

Результаты выполнения тестов печатаются на экран и по коду возврата можно узнать о том были ли ошибки, этого уже достаточно что бы подцепить запуск тестов к Continuous Integration серверу, например к CruiseControl, веб сайт проекта -- http://cruisecontrol.sourceforge.net/

Что можно улучшить?

Деструктор объекта в Ruby (define_finalizer)

За удаление объектов в Ruby отвечает сборщик мусора. Момент когда будет уничтожен объект не известен, но произойдет это только после того как не останется ни одной ссылки на данный объект. Исходя из этого, прямой поддержки деструктора, в типичном его проявлении, в Ruby нет.

Однако мы можем подписаться на удаление любого объекта посредством метода ObjectSpace#define_finalizer, передав объект класса Proc, который будет вызван после уничтожения объекта.

Вот как мог бы выглядеть деструктор в Ruby

Первый ...))

Теперь могу публиковать свои заметки о Ruby Rails, это здорово!