Sha256: 3f126ad459d3a3502ec317f06cbb8225e733271f66d1d38d73eea8e66894ee31

Contents?: true

Size: 1.06 KB

Versions: 6

Compression:

Stored size: 1.06 KB

Contents

# frozen_string_literal: true

# # PageBuilder
#
# PageBuilder is a simple DSL for building pages, for use in ie. seeds.rb
#
# Example:
#
#   PageBuilder.build(User.first) do
#     page "Home", template: "home"
#     page "Products" do
#       page "Product 1"
#       page "Product 2"
#     end
#     page "Contact", unique_name: "contact"
#   end
class PageBuilder
  attr_reader :user, :locale, :parent

  class << self
    def build(user, locale: nil, parent: nil, &block)
      new(user, locale:, parent:)
        .run(&block)
    end
  end

  def initialize(user, locale: nil, parent: nil)
    @user = user
    @locale = locale || I18n.default_locale
    @parent = parent
  end

  def page(name, options = {}, &)
    page = Page.create(
      { name: }.merge(default_options).merge(options)
    )
    if block_given?
      self.class
          .new(user, locale:, parent: page)
          .run(&)
    end
    page
  end

  def run(&)
    instance_eval(&)
  end

  private

  def default_options
    {
      author: user,
      parent:,
      status: 2,
      locale:
    }
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
pages_core-3.15.4 app/models/page_builder.rb
pages_core-3.15.3 app/models/page_builder.rb
pages_core-3.15.2 app/models/page_builder.rb
pages_core-3.15.1 app/models/page_builder.rb
pages_core-3.14.0 app/models/page_builder.rb
pages_core-3.13.0 app/models/page_builder.rb