Class: Alchemy::Page::Publisher
- Inherits:
-
Object
- Object
- Alchemy::Page::Publisher
- Defined in:
- app/models/alchemy/page/publisher.rb
Overview
Handles publishing of pages
Instance Method Summary collapse
-
#initialize(page) ⇒ Publisher
constructor
A new instance of Publisher.
-
#publish!(public_on:) ⇒ Object
Copies all currently visible elements to the public version of page.
Constructor Details
#initialize(page) ⇒ Publisher
Returns a new instance of Publisher.
9 10 11 |
# File 'app/models/alchemy/page/publisher.rb', line 9 def initialize(page) @page = page end |
Instance Method Details
#publish!(public_on:) ⇒ Object
Copies all currently visible elements to the public version of page
Creates a new published version if none exists yet and updates the ‘published_at` timestamp of the page. `published_at` is used as a cache key.
Sends a publish notification to all registered publish targets
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'app/models/alchemy/page/publisher.rb', line 21 def publish!(public_on:) Page.transaction do version = public_version(public_on) DeleteElements.new(version.elements).call repository = page.draft_version.element_repository ActiveRecord::Base.no_touching do Element.acts_as_list_no_update do repository.visible.not_nested.each.with_index(1) do |element, position| Alchemy::DuplicateElement.new(element, repository: repository).call( page_version_id: version.id, position: position ) end end end page.update(published_at: public_on) end Alchemy.publish_targets.each { |p| p.perform_later(page) } end |