class Redbreast::Serializer::SwiftUI

Used to save swift files

Public Instance Methods

create_swift_test_cases(names:, declaration:, app_name:) click to toggle source
# File lib/redbreast/serializers/swiftui_serializer.rb, line 59
def create_swift_test_cases(names:, declaration:, app_name:)
  text = ''
  app_name_text = app_name.nil? || app_name.empty? ? '' : app_name + '.'

  names.each do |name|
    temp_array = name.split('/')
    variable = temp_array.pop
    additional_text = temp_array.count.zero? ? '' : '.'
    text += "\t\t" + declaration + app_name_text + temp_array.join('.') + additional_text + clean_variable_name(variable)
    text += name == names.last ? '' : "\n"
  end

  text
end
generate_extension(extended_class, app_name) click to toggle source
# File lib/redbreast/serializers/swiftui_serializer.rb, line 51
def generate_extension(extended_class, app_name)
  text = 'extension ' + extended_class + " {\n"

  return text if app_name.nil? || app_name.empty?

  text + "\tenum " + app_name + " {}\n}\n\nextension " + extended_class + '.' + app_name + " {"
end
generate_file_swift(names:, spacing: "\t", indentation: '', variable:, bundle:) click to toggle source
# File lib/redbreast/serializers/swiftui_serializer.rb, line 17
def generate_file_swift(names:, spacing: "\t", indentation: '', variable:, bundle:)
  return if names.empty?

  text = ''
  arr = []

  vars, arr = generate_variables(names: names, spacing: spacing, indentation: indentation, variable: variable, bundle: bundle, text: text, array: arr)

  arr = arr.uniq

  arr.each do |enum_name|
    names_new = []
    names_new_enum = []
    new_enum_name = enum_name

    text += "\n" + spacing + 'enum ' + upper_camel_case(enum_name) + ' {'
    names_new, names_new_enum = separate_variables_from_folders(names: names, enum_name: enum_name, new_enum_name: new_enum_name, names_new_enum: names_new_enum, names_new: names_new)

    if !names_new_enum.empty? && new_enum_name == enum_name
      indentation += indentation.empty? || indentation[-1] == '/' ? '' : '/'
      text += "\n" + generate_file_swift(names: names_new_enum, spacing: spacing + "\t", indentation: indentation + enum_name, variable: variable, bundle: bundle)
    end

    unless names_new.empty?

      indentation += indentation.empty? || indentation[-1] == '/' ? '' : '/'
      text += generate_file_swift(names: names_new, spacing: spacing + "\t", indentation: indentation + enum_name, variable: variable, bundle: bundle)
    end

    text += "\n" + spacing + '}' + "\n"
  end
  text + vars
end
generate_variables(names:, spacing:, indentation:, bundle:, variable:, text:, array:) click to toggle source
# File lib/redbreast/serializers/swiftui_serializer.rb, line 74
def generate_variables(names:, spacing:, indentation:, bundle:, variable:, text:, array:)
  names.each do |name|
    temp_arr = name.split('/')

    if temp_arr.length != 1
      array.push(temp_arr.first)
    else
      name_prefix = indentation.empty? ? '' : '/'
      text += "\n" + spacing + variable % [clean_variable_name(name), indentation + name_prefix + name, bundle[:reference]]
    end
  end

  [text, array]
end
save(output_source_path:, template_generator:, generate_colors:) click to toggle source
# File lib/redbreast/serializers/swiftui_serializer.rb, line 9
def save(output_source_path:, template_generator:, generate_colors:)
  directory = File.dirname(output_source_path)
  FileUtils.mkdir_p directory unless File.exist? directory

  file = ERB.new(template_generator.template, nil, '-').result(binding)
  File.write(output_source_path, file)
end
separate_variables_from_folders(names:, enum_name:, new_enum_name:, names_new_enum:, names_new:) click to toggle source
# File lib/redbreast/serializers/swiftui_serializer.rb, line 89
def separate_variables_from_folders(names:, enum_name:, new_enum_name:, names_new_enum:, names_new:)
  names.each do |name|
    temp_arr = name.split('/')

    next if temp_arr.length == 1

    if temp_arr.length > 2
      names_new_enum.push(temp_arr.drop(1).join('/')) if temp_arr.first == new_enum_name
      next
    end

    names_new.push(temp_arr.drop(1).join('/')) if temp_arr[0] == enum_name
  end

  [names_new, names_new_enum]
end