неділя, 25 листопада 2007 р.

До Нового Року ще можна пристрелитись



Зацініть який я файнєцький кавалок коду написав. Сам не можу натішитись :)

$KCODE = "u"

# Перетворює число секунд у зручний формат -- [секунди, хвилини, години, дні]
#
def human_timer(total_sec)
(day ,hour = (tmp, min = (tmp, sec = (total_sec.to_i).divmod(60))[0].divmod(60))[0].divmod(24))
return sec, min, hour, day
end

# Вибирає відмінок в залежності від числа
#
def choose_plural(amount, *variants)
variant = ( (amount % 10 == 1 && amount % 100 != 11) ? 1 : (amount % 10 >= 2 && amount % 10 <= 4 && (amount % 100 < 10 || amount % 100 >= 20) ) ? 2 : 3 )
return variants[variant - 1]
end

# Формує стрічку скільки часу залишилось до Нового Року )))
#
def glue_string
new_year_date = Time.mktime(2008)
total_sec = new_year_date - Time.now
if total_sec > 0
sec, min, hour, day = human_timer(total_sec)
a_string ="До Нового Року залишилось"
a_string << " #{day} #{choose_plural(day, 'день', 'дні', 'днів')}" if !day.zero?
a_string << " #{hour} #{choose_plural(hour, 'година', 'години', 'годин')}" if !hour.zero?
a_string << " #{min} #{choose_plural(min, 'хвилина', 'хвилини', 'хвилин')}" if !min.zero?
a_string << " #{sec} #{choose_plural(sec, 'секунда', 'секунди', 'секунд')}" #if !sec.zero?
else
a_string = "З Новим Роком!"
end
end

puts glue_string


Тільки не кажіть що так писати не можна :). Я ж так старався... Думаю як ще можна спотворити цей витвір...

Ось декілька прикладів виконання:
$ ruby happy_new_year.rb
До Нового 2008 Року залишилось 36 днів 10 годин 36 хвилин 28 секунд
$ ruby happy_new_year.rb
До Нового 2008 Року залишилось 36 днів 10 годин 36 хвилин 24 секунди
$ ruby happy_new_year.rb
До Нового 2008 Року залишилось 36 днів 10 годин 36 хвилин 21 секунда

пʼятниця, 23 листопада 2007 р.

Автодоповнення в irb

irb - це інтерактивна консоль Ruby, яка розповсюджується в офіційному пакеті інтерпритатора. Запускається з консолі за допомогою комади $ irb . Незамінна річ для вивчення мови "методом тику". Пишеш строку коду ruby, irb тобі відразу відповідає. Вводиш будь-яку команду і отримуєш результат або помилку. Наприклад: "2+2" а він: "4", або "abcdefg".upcase => "ABCDEFG".
Крім того irb володіє функцією автодоповнення (code completion), що дуже зручно якщо ви точно не пам'ятаєте команди або ж хочете переглянути всі доступні методи для змінної. Наприклад, набравши "ruby". і натиснувши клавішу "TAB" , ви отримаєте щось схоже:
Display all 130 possibilities? (y or n)
.map
.__id__ .match
.__send__ .max
.all? .member?
.any? .method
.between? .methods
.capitalize .min
.capitalize! .next
.casecmp .next!
.center .nil?
.chomp .object_id
.chomp! .oct
.chop .partition


Дуже зручно, чи не так?
Для того щоб підключити автодоповнення необхідно відредагувати конфігураційний файл irb (у Linux це ~/.irbrc):
require "irb/completion"

Після перезапуску irb автодоповнення стане доступним.