Sha256: 2113c3fd9d6e4e1c3f2323204b5fdb9f39e996f9aa5f455a294984df9729c7da

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

module Ro
  class Root < Path
    def identifier
      self
    end

    def collections(&block)
      accum = Collection::List.for(self) 

      subdirectories do |subdirectory|
        collection = collection_for(subdirectory)
        block ? block.call(collection) : accum.push(collection)
      end

      block ? self : accum
    end

    def collection_for(subdirectory)
      Collection.new(subdirectory)
    end

    def paths_for(name)
      [
        subdirectory_for(name),
        subdirectory_for(Slug.for(name, :join => '-')),
        subdirectory_for(Slug.for(name, :join => '_')),
      ]
    end

    def get(name)
      name = name.to_s

      if name.index('/')
        collection_name, node_name = name.split('/', 2)
        collection = get(collection_name)

        if collection
          node = collection.get(node_name)
          return node
        else
          return nil
        end
      end

      paths_for(name).each do |path|
        next unless path.directory?
        return collection_for(path)
      end

      nil
    end

    def [](name)
      get(name)
    end

    def nodes(&block)
      accum = []
      
      collections.each do |collection|
        collection.nodes do |node|
          block ? block.call(node) : accum.push(node)
        end
      end

      block ? self : accum
    end

    def method_missing(name, *args, **kws, &block)
      get(name) || super
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ro-4.2.0 lib/ro/root.rb