Class: Webby::PagesDB

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/webby/pages_db.rb

Instance Method Summary collapse

Constructor Details

#initializePagesDB

call-seq:

PagesDB.new


13
14
15
# File 'lib/webby/pages_db.rb', line 13

def initialize
  @db = Hash.new {|h,k| h[k] = []}
end

Instance Method Details

#add(page) ⇒ Object Also known as: <<

call-seq:

add( resource )


20
21
22
23
# File 'lib/webby/pages_db.rb', line 20

def add( page )
  @db[page.dir] << page
  self
end

#children(page, opts = {}) ⇒ Object

call-seq:

children( page, opts = {} )    => array

Options include:

:sorty_by => 'attribute'
:reverse  => true


75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/webby/pages_db.rb', line 75

def children( page, opts = {} )
  rgxp = Regexp.new "\\A#{page.dir}/[^/]+"

  keys = @db.keys.find_all {|k| rgxp =~ k}
  ary  = keys.map {|k| @db[k]}
  ary.flatten!

  return ary unless opts.has_key? :sort_by

  m = opts[:sort_by]
  ary.sort! {|a,b| a.send(m) <=> b.send(m)}
  ary.reverse! if opts[:reverse]
  ary
end

#clearObject

call-seq:

clear


29
30
31
# File 'lib/webby/pages_db.rb', line 29

def clear
  @db.clear
end

#each(&b) ⇒ Object

call-seq:

each {|resource| block}


36
37
38
39
40
41
# File 'lib/webby/pages_db.rb', line 36

def each( &b )
  keys = @db.keys.sort
  keys.each do |k|
    @db[k].sort.each(&b)
  end
end

#find_by_name(name) ⇒ Object

call-seq:

find_by_name( name )


46
47
48
# File 'lib/webby/pages_db.rb', line 46

def find_by_name( name )
  self.find {|page| page.filename == name}
end

#siblings(page, opts = {}) ⇒ Object

call-seq:

siblings( page, opts = {} )    => array

Options include:

:sorty_by => 'attribute'
:reverse  => true


57
58
59
60
61
62
63
64
65
66
# File 'lib/webby/pages_db.rb', line 57

def siblings( page, opts = {} )
  ary = @db[page.dir].dup
  ary.delete page
  return ary unless opts.has_key? :sort_by

  m = opts[:sort_by]
  ary.sort! {|a,b| a.send(m) <=> b.send(m)}
  ary.reverse! if opts[:reverse]
  ary
end