| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- module Docs
- class Doc
- INDEX_FILENAME = 'index.json'
- class << self
- attr_accessor :name, :slug, :type, :version, :abstract
- def inherited(subclass)
- subclass.type = type
- end
- def name
- @name || super.try(:demodulize)
- end
- def slug
- @slug || name.try(:downcase)
- end
- def path
- slug
- end
- def index_path
- File.join path, INDEX_FILENAME
- end
- def as_json
- { name: name,
- slug: slug,
- type: type,
- version: version,
- index_path: index_path }
- end
- def index_page(id)
- if (page = new.build_page(id)) && page[:entries].present?
- yield page[:store_path], page[:output]
- index = EntryIndex.new
- index.add page[:entries]
- index
- end
- end
- def index_pages
- index = EntryIndex.new
- new.build_pages do |page|
- next if page[:entries].blank?
- yield page[:store_path], page[:output]
- index.add page[:entries]
- end
- index.empty? ? nil : index
- end
- def store_page(store, id)
- store.open path do
- index = index_page(id, &store.method(:write))
- !!index
- end
- end
- def store_pages(store)
- store.replace path do
- index = index_pages(&store.method(:write))
- store.write INDEX_FILENAME, index.to_json if index
- !!index
- end
- end
- end
- def initialize
- raise NotImplementedError, "#{self.class} is an abstract class and cannot be instantiated." if self.class.abstract
- end
- def build_page(id, &block)
- raise NotImplementedError
- end
- def build_pages(&block)
- raise NotImplementedError
- end
- end
- end
|