Sha256: 31568a3f5afd96efa97aaf1ed0adf5b286473e1a5c548f48ad83b48380297fea

Contents?: true

Size: 1.27 KB

Versions: 22

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

class PagePath < ApplicationRecord
  class PageNotSavedError < StandardError; end

  class NoPathError < StandardError; end

  class NoLocaleError < StandardError; end

  belongs_to :page
  validates :locale, presence: true
  validates :path, presence: true, uniqueness: { scope: :locale }

  class << self
    def build(page)
      page.locales.each do |locale|
        localized = page.localize(locale)
        localized.ensure_path_segment
        associate(localized) if !localized.deleted? && localized.full_path?
      end
      page.children.each { |p| build(p) }
    end

    def build_all
      Page.roots.each do |p|
        build(p)
      end
    end

    def get(locale, path)
      find_by(locale: locale, path: path)
    end

    def associate(page, locale: nil, path: nil)
      locale ||= page.locale
      path ||= page.full_path
      raise PageNotSavedError unless page.id?
      raise NoLocaleError unless locale
      raise NoPathError unless path

      page_path = get_or_create(locale, path, page)
      page_path.update(page: page) unless page_path.page_id == page.id
      page_path
    end

    private

    def get_or_create(locale, path, page)
      get(locale, path) || create(locale: locale, path: path, page: page)
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
pages_core-3.12.7 app/models/page_path.rb
pages_core-3.12.6 app/models/page_path.rb
pages_core-3.12.5 app/models/page_path.rb
pages_core-3.12.4 app/models/page_path.rb
pages_core-3.12.3 app/models/page_path.rb
pages_core-3.12.2 app/models/page_path.rb
pages_core-3.12.1 app/models/page_path.rb
pages_core-3.12.0 app/models/page_path.rb
pages_core-3.11.3 app/models/page_path.rb
pages_core-3.11.2 app/models/page_path.rb
pages_core-3.11.1 app/models/page_path.rb
pages_core-3.11.0 app/models/page_path.rb
pages_core-3.10.2 app/models/page_path.rb
pages_core-3.10.1 app/models/page_path.rb
pages_core-3.9.2 app/models/page_path.rb
pages_core-3.9.1 app/models/page_path.rb
pages_core-3.9.0 app/models/page_path.rb
pages_core-3.8.3 app/models/page_path.rb
pages_core-3.8.2 app/models/page_path.rb
pages_core-3.8.1 app/models/page_path.rb