Sha256: edf88cce73997e4057fbf1adf0da4219216de1415233c58c7c1292efafe8c930
Contents?: true
Size: 1.56 KB
Versions: 3
Compression:
Stored size: 1.56 KB
Contents
# $Id: pages_db.rb 18 2007-08-28 15:48:17Z tim_pease $ module Webby # # class PagesDB include Enumerable # call-seq: # PagesDB.new # def initialize @db = Hash.new {|h,k| h[k] = []} end # call-seq: # add( resource ) # def add( page ) @db[page.dir] << page self end alias :<< :add # call-seq: # clear # def clear @db.clear end # call-seq: # each {|resource| block} # def each( &b ) keys = @db.keys.sort keys.each do |k| @db[k].sort.each(&b) end end # call-seq: # find_by_name( name ) # def find_by_name( name ) self.find {|page| page.filename == name} end # call-seq: # siblings( page, opts = {} ) => array # # Options include: # :sorty_by => 'attribute' # :reverse => true # 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 # call-seq: # children( page, opts = {} ) => array # # Options include: # :sorty_by => 'attribute' # :reverse => true # 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 end # class PagesDB end # module Webby # EOF
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
webby-0.3.0 | lib/webby/pages_db.rb |
webby-0.2.0 | lib/webby/pages_db.rb |
webby-0.4.0 | lib/webby/pages_db.rb |