Sha256: 446e79e33462729f07135619ef91697003ff0a3eab44b193b619bdd64ae63715

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

module Seiten
  class PageCollection
    attr_accessor :navigation_id, :pages

    def initialize(options = {})
      @navigation_id = options[:navigation_id]
      @pages         = options[:pages] || []
    end

    def navigation
      Seiten::Navigation.find_by(id: navigation_id)
    end

    def build(options = {})
      Seiten::PageCollectionBuilder.call(self, options)
    end

    def all
      pages.to_a
    end

    def find(id)
      find_by(id: id)
    end

    def find_by(params)
      @find_by ||= {}
      return @find_by[params] if @find_by.key?(params)

      @find_by[params] = pages.find do |page|
        params.all? do |k, v|
          page.send(k) == v
        end
      end
    end

    def where(params)
      @where ||= {}
      return @where[params] if @where.key?(params)

      @where[params] = pages.select do |page|
        params.all? do |k, v|
          page.send(k) == v
        end
      end
    end

    def new(params = {})
      page = Seiten::Page.new(params.merge(navigation_id: navigation_id))
      pages << page
      page
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
seiten-1.0.2 lib/seiten/page_collection.rb
seiten-1.0.1 lib/seiten/page_collection.rb
seiten-1.0.0 lib/seiten/page_collection.rb