Module: ReferenceBook::Library

Defined in:
lib/reference_book/library.rb

Class Method Summary collapse

Class Method Details

.[](key) ⇒ Object



24
25
26
# File 'lib/reference_book/library.rb', line 24

def [](key)
  shelf[key]
end

.array_for(attribute) ⇒ Object Also known as: pluck



46
47
48
49
50
# File 'lib/reference_book/library.rb', line 46

def array_for(attribute)
  shelf.map do |key, book|
    book[attribute] if book.respond_to?(attribute)
  end
end

.empty!Object



29
30
31
32
33
34
# File 'lib/reference_book/library.rb', line 29

def empty!
  index.each { |key| remove_accessor_for(key) }
  @index = []
  @shelf = {}
  nil
end

.hash_for(attribute) ⇒ Object Also known as: hash_pluck



54
55
56
57
58
59
60
# File 'lib/reference_book/library.rb', line 54

def hash_for(attribute)
  Hash[
    shelf.map do |key, book|
      [key, (book[attribute] if book.respond_to?(attribute))]
    end
  ]
end

.indexObject



19
20
21
# File 'lib/reference_book/library.rb', line 19

def index
  @index ||= []
end

.shelfObject



14
15
16
# File 'lib/reference_book/library.rb', line 14

def shelf
  @shelf ||= {}
end

.store(book) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/reference_book/library.rb', line 4

def store(book)
  verify_library_key!(book.library_key)

  shelf[book.library_key] = book
  index << book.library_key
  define_accessor_for(book)
  book
end

.verify_library_key!(key) ⇒ Object



37
38
39
40
41
# File 'lib/reference_book/library.rb', line 37

def verify_library_key!(key)
  if is_key_in_use?(key)
    raise ReferenceBook::BookDefinitionError, "the library key '#{key}' is already in use."
  end
end