class Umbrellify::SwiftSourceFile

Public Class Methods

new(file_path) click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 3
def initialize(file_path)
  @file_path = file_path
end

Public Instance Methods

substitute_imports_if_needed(configuration) click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 50
def substitute_imports_if_needed(configuration)
  umbrella_name = configuration.umbrella_name
  file_text = get_file_text()
  imports = imports_list(strip_comments(file_text))
  managed_imports = configuration.managed_imports

  if needs_to_substitute_imports?(imports, managed_imports, configuration)
    managed_imports_copy = managed_imports + [umbrella_name]
    umbrella_import = "import #{umbrella_name}"

    imports_list = imports.select { |value| managed_imports.include?(value) }
    
    imports_list.each_with_index do |value, index|
      regexp = /^import\s{1,}\b#{value}\b[^\n]*\n/ 
      substitution = index == imports_list.count - 1 ? "#{umbrella_import}\n" : ""

      file_text = file_text.gsub regexp, substitution
    end
  end

  return file_text
end
substitute_imports_if_needed!(configuration) click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 73
def substitute_imports_if_needed!(configuration)
  override_file! substitute_imports_if_needed(configuration)
end

Private Instance Methods

get_file_text() click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 7
def get_file_text
  File.readlines(@file_path).join
end
imports_list(file_text) click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 28
def imports_list(file_text)
  import_search_regexp = /^import\s*(\w*).*$/
  file_text.scan(import_search_regexp).flatten
end
needs_to_substitute_imports?(imports, managed_imports, configuration) click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 35
def needs_to_substitute_imports?(imports, managed_imports, configuration)
  return true unless configuration.substitute_managed_imports_only
  return true if imports.include? configuration.umbrella_name

  (managed_imports - imports).empty?
end
override_file!(file_text) click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 44
def override_file!(file_text)
  File.write(@file_path, file_text)
end
strip_comments(file_text) click to toggle source
# File lib/umbrellify/models/swift_source_file.rb, line 13
def strip_comments(file_text)
  comment_types = [
    /\/\/.*$/,    # one-line
    /\/\*.*\*\//m, # multiline
  ]

  result = file_text
  comment_types.each do |regexp|
    result = result.gsub regexp, ""
  end
  result
end