Class: ArticleTechnical::PromoteAttachment
- Inherits:
-
Object
- Object
- ArticleTechnical::PromoteAttachment
- Includes:
- Service
- Defined in:
- app/services/article_technical/promote_attachment.rb
Overview
Moves a reusable Technical Article document into the existing Publication
library, links the resulting source through ContentLink, and only then removes
the old attachment relationship. The Upload row and stored bytes are reused;
nothing is copied or deleted.
Defined Under Namespace
Constant Summary collapse
- DEFAULT_CATEGORY_PATH =
Default internal Publication category for promoted support documents.
'goods.publications.technical_support'
Instance Attribute Summary collapse
-
#article_id ⇒ Integer?
Technical Article whose attachment is normalized.
-
#category_path ⇒ String
Target Publication category ltree path.
-
#context ⇒ String?
Editorial explanation stored on the content link.
-
#created_by_type ⇒ String
ContentLink provenance type.
-
#locales ⇒ Array<String>
Publication language codes.
-
#publication_id ⇒ Integer?
Optional existing canonical Publication.
-
#sku ⇒ String?
Publication SKU for a newly promoted document.
-
#title ⇒ String?
Publication title override.
-
#upload_id ⇒ Integer?
Attached Upload promoted or linked as a Publication.
Instance Method Summary collapse
-
#call ⇒ Result
Promote or relink one attached source document.
-
#preflight ⇒ Result
Validate one promotion without changing the article, Upload, Publication, or ContentLink records.
Methods included from Service
#attributes_used, #build_result, call, #logger
Methods included from Service::Initializer
Instance Attribute Details
#article_id ⇒ Integer?
Returns Technical Article whose attachment is normalized.
Validations:
18 |
# File 'app/services/article_technical/promote_attachment.rb', line 18 attribute :article_id, :integer |
#category_path ⇒ String
Returns target Publication category ltree path.
33 |
# File 'app/services/article_technical/promote_attachment.rb', line 33 attribute :category_path, :string, default: DEFAULT_CATEGORY_PATH |
#context ⇒ String?
Returns editorial explanation stored on the content link.
39 |
# File 'app/services/article_technical/promote_attachment.rb', line 39 attribute :context, :string |
#created_by_type ⇒ String
Returns ContentLink provenance type.
Validations:
- Inclusion ({ in: ContentLink::CREATED_BY_TYPES })
42 |
# File 'app/services/article_technical/promote_attachment.rb', line 42 attribute :created_by_type, :string, default: 'manual' |
#locales ⇒ Array<String>
Returns Publication language codes.
36 |
# File 'app/services/article_technical/promote_attachment.rb', line 36 attribute :locales, default: -> { ['en'] } |
#publication_id ⇒ Integer?
Returns optional existing canonical Publication.
24 |
# File 'app/services/article_technical/promote_attachment.rb', line 24 attribute :publication_id, :integer |
#sku ⇒ String?
Returns Publication SKU for a newly promoted document.
30 |
# File 'app/services/article_technical/promote_attachment.rb', line 30 attribute :sku, :string |
#title ⇒ String?
Returns Publication title override.
27 |
# File 'app/services/article_technical/promote_attachment.rb', line 27 attribute :title, :string |
#upload_id ⇒ Integer?
Returns attached Upload promoted or linked as a Publication.
Validations:
21 |
# File 'app/services/article_technical/promote_attachment.rb', line 21 attribute :upload_id, :integer |
Instance Method Details
#call ⇒ Result
Promote or relink one attached source document.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'app/services/article_technical/promote_attachment.rb', line 103 def call return failure(errors.) unless valid? publication_created = false = false content_link = nil ActiveRecord::Base.transaction do load_locked_records! ensure_no_open_revision! publication = resolve_publication @publication = publication ensure_attached_or_already_normalized!(publication) unless publication publication = create_publication! publication_created = true end content_link = link_publication!(publication) = @publication = publication end Result.new( success: true, publication: @publication, content_link: content_link, publication_created: publication_created, attachment_detached: ) rescue Failed, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotFound => e failure((e)) end |
#preflight ⇒ Result
Validate one promotion without changing the article, Upload, Publication,
or ContentLink records.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'app/services/article_technical/promote_attachment.rb', line 85 def preflight return failure(errors.) unless valid? load_records! ensure_no_open_revision! publication = resolve_publication @publication = publication ensure_attached_or_already_normalized!(publication) validate_new_publication! unless publication Result.new(success: true, publication: publication) rescue Failed, ActiveRecord::RecordInvalid, ActiveRecord::RecordNotFound => e failure((e)) end |