summaryrefslogtreecommitdiff
path: root/lib/site.rb
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2013-02-12 21:33:39 -0800
committerelijah <elijah@riseup.net>2013-02-12 21:33:39 -0800
commit71ec0edea3f87fb69222dbb6fe025c2211402ca2 (patch)
tree5490323e8686df14165ccf5f37fa2d691fc99b88 /lib/site.rb
parent00c785b728c5d97335b87e3eb7d10b9ad0c46d35 (diff)
added capacity for pulling static pages from multiple directory source trees.
Diffstat (limited to 'lib/site.rb')
-rw-r--r--lib/site.rb93
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/site.rb b/lib/site.rb
new file mode 100644
index 0000000..a3e8ac3
--- /dev/null
+++ b/lib/site.rb
@@ -0,0 +1,93 @@
+
+class Site
+ extend Forwardable
+
+ attr_accessor :pages
+ attr_accessor :page_list
+ attr_accessor :root
+ attr_accessor :menu
+
+ def_delegators :@config, :title, :pagination_size
+
+ def initialize
+ @config = SiteConfiguration.load("#{Rails.root}/site.rb")
+ end
+
+ def load_pages
+ @root = nil
+ @pages = {}
+ @page_list = StaticPageArray.new
+ @menu = Menu.new('root')
+ @config.mount_points.each do |mp|
+ add_mount_point(mp)
+ mp.reset_timestamp
+ end
+ end
+
+ def reload_pages_if_needed
+ if @pages.nil? || @config.pages_changed?
+ puts "Reloading pages ................."
+ load_pages
+ end
+ end
+
+ #def menu
+ # @menu ||= Menu.new
+ #end
+
+ def find_pages(filter)
+ StaticPage.find(self, filter)
+ end
+
+ def find_page(filter)
+ find_pages(filter)
+ end
+
+ def all_pages
+ @page_list
+ end
+
+ private
+
+ def add_mount_point(mp)
+ # create base_page
+ base_page = begin
+ if mp.path == '/'
+ @root = StaticPage.new(nil, 'root', mp.directory)
+ else
+ name = File.basename(mp.path)
+ page = StaticPage.new(find_parent(mp.path), name, File.join(mp.directory, name))
+ add_page(page)
+ page
+ end
+ end
+ base_page.mount_point = mp
+
+ # load menu and locals
+ menu.load(mp.menu_file) if mp.menu_file
+ I18n.load_path += Dir[File.join(mp.locales_dir, '/*.{rb,yml,yaml}')] if mp.locales_dir
+
+ # add the full directory tree
+ base_page.scan do |page|
+ add_page(page)
+ end
+ end
+
+ def add_page(page)
+ @pages[page.name] = page
+ @pages[page.path.join('/')] = page
+ @page_list << page
+ end
+
+ def find_parent(path)
+ so_far = []
+ path.split('/').compact.each do |path_segment|
+ so_far << path_segment
+ if page = @pages[so_far.join('/')]
+ return page
+ end
+ end
+ return @root
+ end
+
+end