docbrown/app/services/articles/builder.rb
Anna Buianova 784afdf41e
Routine rubocop fixes (#19254)
* Rubocop fixes

* Rubocop fixes

* Fixed rubocop violation

* Fixed policies rubocop violations

* More rubocop fixes
2023-03-24 14:37:44 +03:00

103 lines
2.8 KiB
Ruby

module Articles
class Builder
LINE_BREAK = "\n".freeze
def self.call(...)
new(...).call
end
def initialize(user, tag, prefill)
@user = user
@tag = tag
@prefill = prefill
@editor_version2 = @user&.setting&.editor_version == "v2"
end
# the Builder returns a pair of [article, needs_authorization?]
# => `needs_authorization? can be either true or false
def call
return [tag_user_editor_v2, true] if tag && editor_version2
return [tag_user, true] if tag&.submission_template.present? && user
return [prefill_user_editor_v2, true] if prefill.present? && editor_version2
return [prefill_user, true] if prefill.present? && user
return [tag_article, false] if tag
return [user_editor_v2, false] if editor_version2
[user_editor_v1, false]
end
private
attr_reader :user, :tag, :prefill, :editor_version2
def tag_user_editor_v2
submission_template = tag.submission_template_customized(user.name).to_s
Article.new(
body_markdown: submission_template.split("---").last.to_s.strip,
cached_tag_list: tag.name,
processed_html: "",
user_id: user.id,
title: normalized_text(submission_template, "title:"),
)
end
def tag_user
Article.new(
body_markdown: tag.submission_template_customized(user.name),
processed_html: "",
user_id: user.id,
)
end
def prefill_user_editor_v2
Article.new(
body_markdown: prefill.split("---").last.to_s.strip,
cached_tag_list: normalized_text(prefill, "tags:"),
processed_html: "",
user_id: user.id,
title: normalized_text(prefill, "title:"),
)
end
def prefill_user
Article.new(
body_markdown: prefill,
processed_html: "",
user_id: user.id,
)
end
def tag_article
Article.new(
body_markdown: "---\ntitle: \npublished: false\ndescription: \ntags: #{tag.name}\n---\n\n",
processed_html: "",
user_id: user&.id,
)
end
def user_editor_v2
Article.new(user_id: user.id)
end
def user_editor_v1
published_at = Time.current.strftime("%Y-%m-%d %H:%M %z")
published_at_str = FeatureFlag.enabled?(:schedule_articles) ? "# published_at: #{published_at}\n" : ""
body = "---\ntitle: \npublished: false\ndescription: " \
"\ntags: \n# cover_image: https://direct_url_to_image.jpg" \
"\n# Use a ratio of 100:42 for best results.\n#{published_at_str}---\n\n"
Article.new(
body_markdown: body,
processed_html: "",
user_id: user&.id,
)
end
def normalized_text(source, split_pattern)
text = source.split(split_pattern).second.to_s
text.split(LINE_BREAK).first.to_s.strip
end
end
end