Sha256: ff415db5b0c2c975ba3935eaf487c76c41a1e89359058d90f52e6d874dfd924e

Contents?: true

Size: 1.5 KB

Versions: 6

Compression:

Stored size: 1.5 KB

Contents

# encoding: UTF-8

class Spontaneous::Site
  module Selectors
    extend Spontaneous::Concern

    def home
      model.root
    end

    # roots returns the list of top-level pages
    # Only one of these is publicly visible and this is mapped to the
    # configured site domain.
    #
    # The rest are "hidden" roots.
    def roots(user = nil)
      domain = config.site_domain
      roots  = pages_dataset.where(depth: 0).all
      pub, hidden = roots.partition { |p| p.root? }
      map = {}
      map[domain] = pub.first.id unless pub.empty?
      hidden.each { |p| map[p.path] = p.id }
      { "public" => domain, "roots" => map }
    end

    def pages
      pages_dataset.all
    end

    def pages_dataset
      model::Page.order(:depth)
    end

    ID_SELECTOR   = /\A\d+\z/o
    PATH_SELECTOR = /\A[\/#]/o
    UID_SELECTOR  = /\A\$/o

    def [](selector)
      fetch(selector)
    end

    def fetch(selector)
      case selector
      when Symbol
        by_uid(selector.to_s)
      when Fixnum
        by_id(selector)
      when ID_SELECTOR
        by_id(selector)
      when PATH_SELECTOR
        by_path(selector)
      when UID_SELECTOR
        by_uid(selector[1..-1])
      else
        by_uid(selector)
      end
    end

    def by_id(id)
      model.id(id)
    end

    def by_path(path)
      model.path(path)
    end

    def by_uid(uid)
      model.uid(uid)
    end

    def method_missing(method, *args)
      if (page = fetch(method))
        page
      else
        super
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
spontaneous-0.2.0.beta10 lib/spontaneous/site/selectors.rb
spontaneous-0.2.0.beta9 lib/spontaneous/site/selectors.rb
spontaneous-0.2.0.beta8 lib/spontaneous/site/selectors.rb
spontaneous-0.2.0.beta7 lib/spontaneous/site/selectors.rb
spontaneous-0.2.0.beta6 lib/spontaneous/site/selectors.rb
spontaneous-0.2.0.beta5 lib/spontaneous/site/selectors.rb