Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

Оба метода принимают в качестве параметра объект

Command
. По определению такой объект должен иметь метод
execute
.

Работа системы состоит в том, что во время исполнения приложения она периодически делает моментальные снимки всей системы объектов. Команды сериализуются наравне с другими объектами. В настоящее время не существует способа «откатить» набор транзакций.

Трудно привести содержательный пример использования этой библиотеки. Если вы знакомы с Java-версией, рекомендую изучить API для Ruby и освоить ее таким образом. Хороших руководств нет — может быть, вы напишете первое.

10.2.8. Библиотека DBM

DBM
— платформенно-независимый механизм для хранения строк в файле, как в хэше. И ключ, и ассоциированные с ним данные должны быть строками. Интерфейс
dbm
включен в стандартный дистрибутив Ruby.

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

require 'dbm'

d = DBM.new("data")

d["123"] = "toodle-oo!"

puts d["123"] # "toodle-oo!"

d.close

puts d["123"] # RuntimeError: закрытый DBM-файл.

e = DBM.open("data")

e["123"] # "toodle-oo!"

w=e.to_hash # {"123"=>"toodle-oo!"}

e.close

e["123"] # RuntimeError: закрытый DBM-файл.

w["123"] # "toodle-oo!

Интерфейс к DBM реализован в виде одного класса, к которому подмешан модуль

Enumerable
. Два метода класса (синонимы)
new
и
open
являются синглетами, то есть в любой момент времени можно иметь только один объект DBM, связанный с данным файлом.

q=DBM.new("data.dbm") #

f=DBM.open("data.dbm") # Errno::EWOULDBLOCK:

# Try again - "data.dbm"

Всего есть 34 метода экземпляра, многие из которых являются синонимами или аналогичны методам хэша. Почти все операции с настоящим хэшем применимы и к объекту

dbm
.

Метод

to_hash
создает представление файла в виде хэша в памяти, а метод
close
закрывает связь с файлом. Остальные методы по большей части аналогичны методам хэшам, однако дополнительно есть методы
rehash
,
sort
,
default
,
default=
. Метод
to_s
возвращает строковое представление идентификатора объекта.

10.3. Библиотека KirbyBase

KirbyBase — небольшая библиотека, с которой должен освоиться каждый программист на Ruby. В настоящее время она не входит в стандартный дистрибутив, а если бы входила, то была бы еще полезнее.

KirbyBase — плод трудов Джейми Криббса (Jamey Cribbs), названный, к слову, в честь его собаки. Во многих отношениях это полноценная база данных, но есть причины, по которым мы рассматриваем ее здесь, а не вместе с MySQL и Oracle.

Во-первых, это не автономное приложение. Это библиотека для Ruby, и без Ruby ее использовать нельзя. Во-вторых, она вообще не знает, что такое язык SQL. Если вам без SQL не обойтись, то эта библиотека не для вас. В-третьих, если приложение достаточно сложное, то функциональных возможностей и быстродействия KirbyBase может не хватить.

Но несмотря на все это, есть немало причин любить KirbyBase. Это написанная целиком на Ruby библиотека, состоящая из единственного файла, которую не нужно ни устанавливать, ни конфигурировать. Она работает на всех платформах, и созданные с ее помощью файлы можно переносить с одной платформы на другую. Это «настоящая» база данных в том смысле, что данные не загружаются целиком в память.

Библиотекой легко пользоваться, а ее интерфейс выдержан в духе Ruby с легким налетом DBI. В общем, база данных соответствует каталогу, а каждая таблица — одному файлу. Формат данных в таблицах таков, что человек может их читать (и редактировать). Дополнительно таблицы можно зашифровать — но только для того, чтобы затруднить редактирование. База знает об объектах Ruby; допускается их хранение и извлечение без потери информации.

Наконец, благодаря интерфейсу dRuby библиотека может работать в распределенном режиме. К данным, хранящимся в KirbyBase, можно с одинаковым успехом обращаться как с локальной, так и с удаленной машины.

Чтобы открыть базу данных, нужно сначала указать, является ли она локальной. Следующие два параметра обычно равны

nil
, а четвертый указывает каталог, в котором будут храниться файлы с данными (по умолчанию это текущий каталог).

Чтобы создать таблицу, вызывается метод

create_table
объекта, представляющего базу данных; ему передается имя таблицы (объект
Symbol
); имя файла на диске образуется из этого имени. Затем передается последовательность пар символов, описывающих имена и типы полей.

require 'kirbybase'

db = KirbyBase.new(:local, nil, nil, "mydata")

books = db.create_table(:books, # Имя таблицы.

:title, :String, # Поле, тип, ...

:author, :String)

В текущей версии KirbyBase распознает следующие типы полей:

String
,
Integer
,
Float
,
Boolean
,
Time
,
Date
,
DateTime
,
Memo
,
Blob
и
YAML
. К тому моменту, когда вы будете читать эту главу, возможно, появятся и новые типы.

Для вставки записи в таблицу применяется метод

insert
. Ему можно передать список значений, хэш или любой объект, отвечающий на заданные имена полей.

books.insert("The Case for Mars","Robert Zubrin")

books.insert(:title => "Democracy in America",

:author => "Alexis de Tocqueville")

Book = Struct.new(:title, :author)

book = Book.new("The Ruby Way","Hal Fulton")

Поделиться:
Популярные книги

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

#НенавистьЛюбовь

Джейн Анна
Любовные романы:
современные любовные романы
6.33
рейтинг книги
#НенавистьЛюбовь

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Сирийский рубеж 3

Дорин Михаил
7. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж 3

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

Наследник

Первухин Андрей Евгеньевич
1. Наследник
Фантастика:
фэнтези
попаданцы
фантастика: прочее
4.00
рейтинг книги
Наследник

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Печать пожирателя 2

Соломенный Илья
2. Пожиратель
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Печать пожирателя 2

Второгодка. Книга 3. Ученье свет

Ромов Дмитрий
3. Второгодка
Фантастика:
городское фэнтези
сказочная фантастика
альтернативная история
5.00
рейтинг книги
Второгодка. Книга 3. Ученье свет

Главный рубильник. Расцвет и гибель информационных империй от радио до интернета

Ву Тим
Деловая литература:
о бизнесе популярно
5.00
рейтинг книги
Главный рубильник. Расцвет и гибель информационных империй от радио до интернета

Камбер – Еретик

Куртц Кэтрин Ирен
3. Легенда о Камбере Кулдском
Фантастика:
фэнтези
5.00
рейтинг книги
Камбер – Еретик

Газлайтер. Том 27

Володин Григорий Григорьевич
27. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 27

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Призыватель нулевого ранга. Том 3

Дубов Дмитрий
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3