Rdoba

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]]

Гомон (log) приложенія

Гомонские функціи позволяютъ для выбранного класса выполнять заданныя куски кода или выводить на терминалъ опредѣлённый текстъ въ зависимости отъ уровня гомона.

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

Методы бисера Rdoba

Rdoba.os

Методъ возвращаетъ видъ оси, на которой былъ запущенъ руби.

require 'rdoba'

Rdoba.os # » "linux"

Rdoba.gemroot

Методъ принимаетъ на входѣ параметръ имени бисера, и возвращаетъ корневую папку онаго бисера.

require 'rdoba'

Rdoba.gemroot 'rdoba' # » "/home/malo/git/rdoba"

Методы бисера Rdoba

Модуль содержитъ примѣсныя методы, которыя могутъ быть подмѣшаны въ основныя классы рубинки.

Пусто ли? (Is it empty?)

Проверяет пуста ли переменная.

require 'rdoba'
rdoba :mixin => [ :empty ]
nil.empty? # » true
false.empty? # » false
Object.new.empty? # » false

Пречинение Набора в Словарь (Array to Hash)

Преобразуетъ Набор в Словарь по определённымъ правиламъ.

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]}

Пречиненье пуздры (Change a case)

Переводъ строки въ верхнее значеніе. Функція можетъ принимать дополнительное значеніе 'FirstChar', которое принуждаетъ переводить не всю строку, а только первый знакъ. Переводъ знака въ нижнее значеніе. Функція можетъ принимать дополнительное значеніе 'FirstChar', которое принуждаетъ пе реводить не всю строку, а только первый знакъ.

require 'rdoba'
rdoba :mixin => [ :case ]
a = 'строка'
a.upcase # => "СТРОКА"
a = 'строка'
a.upcase( :first_char ) # => "Строка"
a = 'СТРОКА'
a.downcase # => "строка"
a = 'СТРОКА'
a.downcase( :first_char ) # => "сТРОКА"

Обратка (reverse)

Обращаетъ строку. Допускается проводить обращеніе съ перемѣннымъ шагомъ, а также побайтно.

a = 'строка'

# обычное обращеніе
a.reverse # => "акортс"

# побайтное обращеніе
a.reverse(String::ByteByByte) # =>"\xB0\xD0\xBA\xD0\xBE\xD0\x80\xD1\x82\xD1\x81\xD1"

# обращеніе съ шагомъ 2
a.reverse(2) # => "карост"

Сравнена съ (compare_to)

Работаетъ такъ же какъ и '<=>', но можетъ принимать дополнительное значеніе 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

# Big-endian число
'-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"

Развёртка YAML-шаблоновъ

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>

Новыя функціи sscanf, sprintf и consolize

Въ функциію sprintf добавленъ ключъ 'P', позволяющій сохранить просто данныя чего-либо (въ частности Числа) въ строку. Функціи 'scanf' и 'consolize' у Строки позволяютъ разбирать строку согласно переданнымъ въ scanf ключамъ и прощать строку, убирая лишние знаки r, соотвѣтственно.

sprintf

Форматъ ключа '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"

scanf

Позволяетъ преобразовать согласно заданной строкѣ ключей. Ключи здѣ такія же какъ в Kernel::sprintf.

s = 'значеніе = 1000'
s.scanf "%s = %i" # => [["значеніе", 1000]]

consolize

Функція упрощаетъ содержимое строки, как бы при выводѣ её на консоль.

s = "string\rval"
s.consolize # => "valing"

Преобразованіе Строки въ Правило

require 'rdoba/re'

a = 'строка.'
b = 'доп.строка.доп'
a.to_res        # => "строка\\."
a.to_re         # => /строка\./i

b.match a.to_re # => #<MatchData "строка.">

Новыя методы класса

Новыя методы экземпляра

Новыя методы для ruby 1.8

ord

Возвращаетъ числовой кодъ перваго знака строки:

a = 'ёжъ'
a.ord # => 1025 (0x401)

Упрощённый переводъ въ YAML

Позволяетъ простенько перевести экземпляры классовъ Словаря, Набора, Строки и Числа въ 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 за подробностями.

Хотите поддержать или поделиться денюжкою?