Rdoba, сирѣчь руби-добавокъ, есть библиотека, расширяющая основныя классы Ruby такія какъ: Объектъ(Object), Ядро(Kernel), Строка(String), Словарь(Hash), Наборъ(Array), Пущь(NilClass) и т.д. Включаетъ модули и такія функціи:
- common - нѣкоторыя простыя методы къ Объекту, Ядру, Пущю, Набору, Строкѣ и Словрю;
- a - чтеніе и запись значеній въ Наборъ и Словарь по индексу;
- combinations - перечисленіе значеній Набора въ различномъ порядкѣ;
- log - функціи сборки отладочныхъ свѣдѣній приложенія;
- gem - нѣкоторыя методы бисера Rdoba, въ частности определенія оси и корневой папки бисера;
- mixin - примѣси, которыя могутъ быть подмѣшаны въ основныя классы рубинки;
- dup - функціи удвоенія Словаря и Набораъ, включая ихъ вложенія;
- hashorder - перечисленіе значеній Словаря въ заданномъ порядкѣ;
- numeric - разширенный переводъ числа въ строку и строки въ число;
- require - вложенная загрузка файловъ функціею require;
- roman - переводъ римскаго числа въ строку и строки въ римское число;
- deploy - развёртка YAML-шаблоновъ;
- fe - исправленіе кодировки въ Строкахъ (будетъ удалено по исправленіи въ ruby);
- io - функціи sscanf и sprintf съ дополнительными свойствами;
- re - простое преобразованіе Строки въ Правило;
- strings - разширеніе нѣкоторыхъ функцій Строки кириллическими правилами;
- yaml - упрощённая функція перевода Словаря или Набора въ YAML-документъ.
Добавляетъ нѣкоторыя простыя методы къ Объекту, Ядру, Пущю, Набору, Строкѣ и Словарю;
require 'rdoba/common'
Функціи позволяютъ читать и писать значенія въ Наборъ и Словарь по заданному въ видѣ Набора значеній индексу.
require 'rdoba/a'
h = { "ключъ 1" => [ 'знч', 'знч2' ],
"ключъ 2" => { "ключъ 3" => "знч3" } }
h.geta( [ "ключъ 2", "ключъ 3" ] ) # => "знч3"
h.geta( [ "ключъ 1", 0 ] ) # => "знч"
h.seta( [ "ключъ 2", "ключъ 3" ], 'НОВОЕ' ) # => "НОВОЕ"
h # => {"ключъ 1"=>["знч", "знч2"], "ключъ 2"=>{"ключъ 3"=>"НОВОЕ"}}
Перечисляетъ значенія Набора въ различныхъ ихъ кучныхъ комбинаціяхъ въ количествѣ 2^(Ѯ-1), гдѣ Ѯ - длина Набора. Существуетъ возможность прямаго или обратнаго перечичленія.
require 'rdoba/combinations'
a = [ 1,2,3 ]
a.each_comby do |x|
puts x.inspect
end
# получаемъ:
# [[1], [2], [3]]
# [[1], [2, 3]]
# [[1, 2], [3]]
# [[1, 2, 3]]
a.each_comby(:backward) do |x|
puts x.inspect
end
# получаемъ:
# [[1, 2, 3]]
# [[1, 2], [3]]
# [[1], [2, 3]]
# [[1], [2], [3]]
Гомонские функціи позволяютъ для выбранного класса выполнять заданныя куски кода или выводить на терминалъ опредѣлённый текстъ въ зависимости отъ уровня гомона.
require 'rdoba'
class A
rdoba :log => { :functions => :basic }
def initialize
log > "This is the Log"
end
end
A.new # » This is the Log
Поскольку функции гомона включены по-умолчанию, отключить гомон(log) можно с помощью установки переменной окружения в значение отличное от пустого, "1" или "true":
$ export RDOBA_LOG=0
или:
$ RDOBA_LOG=0 your/app/bin
Методъ возвращаетъ видъ оси, на которой былъ запущенъ руби.
require 'rdoba'
Rdoba.os # » "linux"
Методъ принимаетъ на входѣ параметръ имени бисера, и возвращаетъ корневую папку онаго бисера.
require 'rdoba'
Rdoba.gemroot 'rdoba' # » "/home/malo/git/rdoba"
Модуль содержитъ примѣсныя методы, которыя могутъ быть подмѣшаны въ основныя классы рубинки.
Проверяет пуста ли переменная.
require 'rdoba'
rdoba :mixin => [ :empty ]
nil.empty? # » true
false.empty? # » false
Object.new.empty? # » false
Преобразуетъ Набор в Словарь по определённымъ правиламъ.
require 'rdoba'
rdoba :mixin => [ :to_h ]
[ 'aa', 0,
'bb', 1 ].to_h # » {"aa"=>nil, 0=>nil, "bb"=>nil, 1=>nil
[ [ 'aa', 0, ],
[ 'bb', 1 ] ].to_h # » {"aa"=>0, "bb"=>1}
[ [ 'aa', 0, 1, ],
[ 'bb', [ 1, 0 ] ] ].to_h # » {"aa"=>[0, 1], "bb"=>[1, 0]}
[ [ 'aa', 0, ],
[ 'aa', 1 ] ].to_h # » {"aa"=>[0, 1]}
[ [ 'aa', 0, ],
[ 'aa', 0 ] ].to_h # » {"aa"=>[0, 0]}
[ [ 'aa', 0, ],
[ 'aa', 0 ] ].to_h( :save_unique => true ) # » {"aa"=>[0]}
Переводъ строки въ верхнее значеніе. Функція можетъ принимать дополнительное значеніе 'FirstChar', которое принуждаетъ переводить не всю строку, а только первый знакъ. Переводъ знака въ нижнее значеніе. Функція можетъ принимать дополнительное значеніе 'FirstChar', которое принуждаетъ пе реводить не всю строку, а только первый знакъ.
require 'rdoba'
rdoba :mixin => [ :case ]
a = 'строка'
a.upcase # => "СТРОКА"
a = 'строка'
a.upcase( :first_char ) # => "Строка"
a = 'СТРОКА'
a.downcase # => "строка"
a = 'СТРОКА'
a.downcase( :first_char ) # => "сТРОКА"
Обращаетъ строку. Допускается проводить обращеніе съ перемѣннымъ шагомъ, а также побайтно.
a = 'строка'
# обычное обращеніе
a.reverse # => "акортс"
# побайтное обращеніе
a.reverse(String::ByteByByte) # =>"\xB0\xD0\xBA\xD0\xBE\xD0\x80\xD1\x82\xD1\x81\xD1"
# обращеніе съ шагомъ 2
a.reverse(2) # => "карост"
Работаетъ такъ же какъ и '<=>', но можетъ принимать дополнительное значеніе ignore_diacritics, которое вынуждаетъ методъ проводить сравненіе отбрасывая надстрочники:
a = 'а҆́гнецъ'
b = 'а҆гкѵ́ра'
a <=> b # => -1
a.compare_to(b) # => -1
a.compare_to(b, :ignore_diacritics) # => 1
a.compare_to(b, :ignore_diacritics => true) # => 1
Позволяетъ выполнять какъ обычное, такъ и вложенное одвоеніе Словаря или Набора.
require 'rdoba/dup'
a = [ 'aaa', 'bbb' ]
# выполняемъ обычное одвоеніе
b = a.dup
a[0].replace 'ccc'
a # => ["ccc", "bbb"]
b # => ["ccc", "bbb"]
# выполняемъ вложенное одвоеніе
c = a.dup(:recursive)
a[0].replace 'ddd'
a # => ["ddd", "bbb"]
c # => ["ccc", "bbb"]
Позволяетъ перебрать всѣ ключи и значенія Словаря по опредѣлённому порядку. Порядок сей задаётся свойствомъ Словаря :order. Если въ заданном порядкѣ не всѣ ключи опредѣлены, то сначала перебираются заданныя ключ, а затѣмъ уже остальныя въ порядкѣ какъ они заданы въ Словарѣ. Перебирать можно ключи, пары или значенія по ключамъ. 4 метода суть перебора: each, each_pair, each_key, each_value. Удаляется порядокъ методом disorder.
require 'rdoba/hashorder'
h = { "ключъ 1" => [ 'знч', 'знч2' ],
"ключъ 2" => { },
"ключъ 3" => "знч3" }
# простой переборъ паръ
h.each do |x,y|
puts x
end
# выводъ
# ключъ 1
# ключъ 2
# ключъ 3
# переборъ паръ
h.order = ['ключъ 2','ключъ 3','ключъ 1']
h.each_pair do |x,y|
puts x
end
# выводъ
# ключъ 2
# ключъ 3
# ключъ 1
# переборъ ключей
h.order = ['ключъ 2']
h.each_key do |x|
puts x
end
# выводъ
# ключъ 2
# ключъ 1
# ключъ 3
# переборъ значеній къ уже упорядоченнымъ ключамъ
h.order = ['ключъ 2','ключъ 3','ключъ 1']
h.each_value do |x|
puts x.inspect
end
# выводъ
# {}
# "знч3"
# ["знч", "знч2"]
# удаленіе порядка
h.disorder
Добавка позволяетъ преобразовывать:
-
Строку въ Число по заданному основанію, а также задавать порядокъ слѣдованія цифръ;
-
Число въ Строку, задавая основаніе, заполненіе нулями Строки до опредѣлённой ширины и обрамленіе числа въ строкѣ;
-
Число въ потокъ данныхъ въ видѣ Строки.
require 'rdoba/numeric'
'1010'.to_i(2) # => 10 '0xFE'.to_i(16) # => 254
'-123'.to_i(8, :be) # => -209 (-0321)
1020.to_s(16, { :padding => 10 }, :style_formatting) # => "0x00000003FC"
1020.to_p(16, { :padding => 5 }, :be) # => "\x00\x00\x00\x03\xFC" 1020.to_p(16, { :padding => 5 }) # => "\xFC\x03\x00\x00\x00"
Добавка позволяетъ загружать ruby-файлъ съ подпапками.
require 'rdoba/require'
# есть у васъ файловая структура:
# x.rb
# x/y.rb
# x/z.rb
# можно загрузить её разомъ такъ:
require 'x', :recursive
Добавка позволяетъ преобразовывать римскія числа въ Строку и изъ неё.
require 'rdoba/roman'
'XVI'.rom # => 16
144.to_rom # => "CXLIV"
require 'rdoba/deploy'
Исправляетъ кодировку Строки въ ruby 1.9 въ Encoding.default_internal. Если оно не задано, то въ 'UTF-8'. Часто такой финтъ нуженъ для въставленія совместимости забугорныхъ приложеній и кириллицы.
!!! будетъ удалено по исправленіи въ ruby
require 'rdoba/fe'
s = 'eee'
s.encoding # => #<Encoding:US/ASCII>
s.fe
s.encoding # => #<Encoding:UTF-8>
Въ функциію sprintf добавленъ ключъ 'P', позволяющій сохранить просто данныя чего-либо (въ частности Числа) въ строку. Функціи 'scanf' и 'consolize' у Строки позволяютъ разбирать строку согласно переданнымъ въ scanf ключамъ и прощать строку, убирая лишние знаки \r, соотвѣтственно.
Форматъ ключа 'P' функціи sprintf: %сдвигъ.заполненіе+P
-
сдвигъ есть сдвигъ новой строки от начала въ пробѣлахъ;
-
заполненіе есть дополненіе преобразованного въ Строку Числа нулями;
-
- сообщаетъ о томъ, что Число нужно выразить въ big-endian.
require 'rdoba/io'
sprintf "%5P", 1000 # => " \xE8\x03" sprintf "%.5P", 1000 # => "\xE8\x03\x00\x00\x00"
sprintf "%5.10+P", 1000 # => " \x00\x00\x00\x00\x00\x00\x00\x00\x03\xE8"
Позволяетъ преобразовать согласно заданной строкѣ ключей. Ключи здѣ такія же какъ в Kernel::sprintf.
s = 'значеніе = 1000'
s.scanf "%s = %i" # => [["значеніе", 1000]]
Функція упрощаетъ содержимое строки, как бы при выводѣ её на консоль.
s = "string\rval"
s.consolize # => "valing"
require 'rdoba/re'
a = 'строка.'
b = 'доп.строка.доп'
a.to_res # => "строка\\."
a.to_re # => /строка\./i
b.match a.to_re # => #<MatchData "строка.">
Возвращаетъ числовой кодъ перваго знака строки:
a = 'ёжъ'
a.ord # => 1025 (0x401)
Позволяетъ простенько перевести экземпляры классовъ Словаря, Набора, Строки и Числа въ YAML-документъ. Также возможно указать порядокъ выведенія ключей въ Словарѣ.
h = { "ключъ 1" => [ 'знч', 'знч2' ],
"ключъ 2" => 10 }
puts h.to_yml
---
ключъ 2: 10
ключъ 1:
- знч
- знч2
puts h.to_yml(:order => ["ключъ 1", "ключъ 2"])
---
ключъ 1:
- знч
- знч2
ключъ 2: 10
puts h.to_yml(:order => ["ключъ 2", "ключъ 1"])
---
ключъ 2: 10
ключъ 1:
- знч
- знч2
Авторскія и исключительныя права (а) 2011 Малъ Скрылевъ Зри LICENSE за подробностями.