class Renamespace::RenamespaceFileContent
Attributes
paths[R]
Public Class Methods
new(paths:, no_superclass_prefixing:)
click to toggle source
# File lib/renamespace/renamespace_file_content.rb, line 5 def initialize(paths:, no_superclass_prefixing:) @paths = paths @no_superclass_prefixing = no_superclass_prefixing end
Public Instance Methods
call(content)
click to toggle source
# File lib/renamespace/renamespace_file_content.rb, line 10 def call(content) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity content = content.dup source, dest = source_and_dest_namespace_elements_without_common_prefix namespace_element_replacements = dest.reverse.zip(source.reverse) namespace_element_replacements.each_with_index do |(namespace_element_new, namespace_element_old), i| old_parent_namespace = namespace_element_replacements.last(i + 1).map(&:last).reverse.join('::') old_parent_namespace += '::' unless old_parent_namespace.empty? if namespace_element_old # Replacing existing namespace content.sub!(/(class|module) #{namespace_element_old}\b( < (\S+))?/) do klass_line = "#{Regexp.last_match(1)} RENAMESPACED_#{namespace_element_new}" Regexp.last_match(3)&.tap do |superclass_orig| klass_line += ' < ' klass_line += old_parent_namespace unless superclass_orig.start_with?('::') || no_superclass_prefixing? klass_line += superclass_orig end klass_line end else # Adding new namespace previous_new_namespace_element = namespace_element_replacements[i - 1].first content.sub!( /((class|module) RENAMESPACED_#{previous_new_namespace_element})/, "module RENAMESPACED_#{namespace_element_new}; \\1", ) content.sub!(/^(end)/, "\\1\nend") end end content.gsub!('RENAMESPACED_', '') content end
Private Instance Methods
no_superclass_prefixing?()
click to toggle source
# File lib/renamespace/renamespace_file_content.rb, line 58 def no_superclass_prefixing? @no_superclass_prefixing end
source_and_dest_namespace_elements_without_common_prefix()
click to toggle source
# File lib/renamespace/renamespace_file_content.rb, line 46 def source_and_dest_namespace_elements_without_common_prefix source = paths.source_namespace_elements dest = paths.destination_namespace_elements source.each do break if source.first != dest.first source.shift dest.shift end [source, dest] end