Sha256: 2b591d64b4a4c64f122a268f1168e010a2e80b50687474c001904f7dd05ce99c

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

# encoding: utf-8

# # 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: locale, parent: 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 = {}, &block)
    page = Page.create(
      { name: name }.merge(default_options).merge(options)
    )
    if block_given?
      self.class
          .new(user, locale: locale, parent: page)
          .run(&block)
    end
    page
  end

  def run(&block)
    instance_eval(&block)
  end

  private

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pages_core-3.5.1 app/models/page_builder.rb