Sha256: 6c3dbed2a99be1eb8a586b7b76e17a3fd590fae69682f73ee7bf0328d2f57431
Contents?: true
Size: 1.73 KB
Versions: 28
Compression:
Stored size: 1.73 KB
Contents
require_dependency "renalware/snippets" module Renalware module Snippets class DuplicateSnippetTitleGenerator MAX_ATTEMPTS = 100 attr_reader :snippet, :title_suffix delegate :valid?, to: :snippet def initialize(snippet, title_suffix: "[CLONED]") @snippet = snippet @title_suffix = title_suffix end def call create_unique_title_for_cloned_snippet end private # The snippet may have been cloned before so the title e.g. "Some title [CLONED]" may have # been taken. In this case keep adding numbers on to the end e.g. "Some title [CLONED] (1)" # until we find a unique title. def create_unique_title_for_cloned_snippet original_title = snippet.title.dup while_conserving_original_title do (0..MAX_ATTEMPTS).each do |attempt| snippet.title = build_snippet_title(original_title, attempt) break if valid? end report_error unless valid? end end def while_conserving_original_title original_title = snippet.title yield new_title = snippet.title snippet.title = original_title new_title end def build_snippet_title(original_title, current_attempt_number = 0) title = "#{original_title} #{title_suffix}" title += " (#{current_attempt_number})" if current_attempt_number > 0 title end class InvalidSnippetTitleError < ::StandardError end def report_error raise InvalidSnippetTitleError, "Tried #{MAX_ATTEMPTS} times to construct a new snippet title. Got to "\ "'#{snippet.title}' but the title is still not unique." end end end end
Version data entries
28 entries across 28 versions & 1 rubygems