class XCHtmlGenerator

Attributes

screenshots_path[RW]

Public Class Methods

new(params = {}) click to toggle source
# File lib/xc_html_generator.rb, line 12
def initialize(params = {})
  @screenshots_path = params.fetch(:screenshots_path, path)
end

Public Instance Methods

available_devices() click to toggle source
# File lib/xc_html_generator.rb, line 123
def available_devices
    return xcode_9_and_above_device_name_mappings
end
generate() click to toggle source

Tweet @return [String]

# File lib/xc_html_generator.rb, line 29
def generate

    screens_path = screenshots_path

    @data_by_language = {}
    @data_by_screen = {}
    Dir[File.join(screens_path, "*")].sort.each do |device_name_folders|
      device_name = File.basename(device_name_folders) 
      Dir[File.join(device_name_folders, "*")].sort.each do |language_folder|
        language = File.basename(language_folder)
        Dir[File.join(language_folder, '*.png')].sort.each do |screenshot|
          file_name = File.basename(screenshot)
          available_devices.each do |key_name, output_name|
            next unless device_name.include?(key_name)
            # This screenshot is from this device

            @data_by_language[language] ||= {}
            @data_by_language[language][output_name] ||= []

            screen_name = file_name.sub(key_name + '-', '').sub('.png', '')
            @data_by_screen[screen_name] ||= {}
            @data_by_screen[screen_name][output_name] ||= {}

            resulting_path = device_name + '/' + language + '/' + file_name
            @data_by_language[language][output_name] << resulting_path
            @data_by_screen[screen_name][output_name][language] = resulting_path
            break # to not include iPhone 6 and 6 Plus (name is contained in the other name)
          end
        end
      end
    end
    html = ERB.new(File.read(html_path)).result(binding) # https://web.archive.org/web/20160430190141/www.rrn.dk/rubys-erb-templating-system

    export_path = "#{screens_path}/screenshots.html"

    File.write(export_path, html)

    export_path = File.expand_path(export_path)
    p "Successfully created HTML file with an overview of all the screenshots: '#{export_path}'"
    #system("open '#{export_path}'") unless Snapshot.config[:skip_open_summary]
end
html_path() click to toggle source
# File lib/xc_html_generator.rb, line 20
def html_path 
  File.join(root, "lib", "html", "page.html.erb")
end
path() click to toggle source
# File lib/xc_html_generator.rb, line 16
def path
  Dir.pwd
end
result_path() click to toggle source
# File lib/xc_html_generator.rb, line 24
def result_path 
  path
end
root() click to toggle source
# File lib/xc_html_generator.rb, line 8
def root
  File.dirname __dir__
end
xcode_9_and_above_device_name_mappings() click to toggle source
# File lib/xc_html_generator.rb, line 71
def xcode_9_and_above_device_name_mappings
  {
    # snapshot in Xcode 9 saves screenshots with the SIMULATOR_DEVICE_NAME
    # which includes spaces
    'iPhone 12 Pro Max' => "iPhone 12 Pro Max",
    'iPhone 12 Pro' => "iPhone 12 Pro",
    'iPhone 12 mini' => "iPhone 12 mini",
    'iPhone 12' => "iPhone 12",
    'iPhone 11 Pro Max' => "iPhone 11 Pro Max",
    'iPhone 11 Pro' => "iPhone 11 Pro",
    'iPhone 11' => "iPhone 11",
    'iPhone XS Max' => "iPhone XS Max",
    'iPhone XS' => "iPhone XS",
    'iPhone XR' => "iPhone XR",
    'iPhone 8 Plus' => "iPhone 8 Plus",
    'iPhone 8' => "iPhone 8",
    'iPhone X' => "iPhone X",
    'iPhone 7 Plus' => "iPhone 7 Plus (5.5-Inch)",
    'iPhone 7' => "iPhone 7 (4.7-Inch)",
    'iPhone 6s Plus' => "iPhone 6s Plus (5.5-Inch)",
    'iPhone 6 Plus' => "iPhone 6 Plus (5.5-Inch)",
    'iPhone 6s' => "iPhone 6s (4.7-Inch)",
    'iPhone 6' => "iPhone 6 (4.7-Inch)",
    'iPhone 5s' => "iPhone 5s (4-Inch)",
    'iPhone 5' => "iPhone 5 (4-Inch)",
    'iPhone SE' => "iPhone SE",
    'iPhone 4s' => "iPhone 4s (3.5-Inch)",
    'iPad 2' => 'iPad 2',
    'iPad Air (3rd generation)' => 'iPad Air (3rd generation)',
    'iPad Air 2' => 'iPad Air 2',
    'iPad Air' => 'iPad Air',
    'iPad (5th generation)' => 'iPad (5th generation)',
    'iPad (7th generation)' => 'iPad (7th generation)',
    'iPad Pro (9.7-inch)' => 'iPad Pro (9.7-inch)',
    'iPad Pro (9.7 inch)' => 'iPad Pro (9.7-inch)', # iOS 10.3.1 simulator
    'iPad Pro (10.5-inch)' => 'iPad Pro (10.5-inch)',
    'iPad Pro (11-inch) (2nd generation)' => 'iPad Pro (11-inch) (2nd generation)',
    'iPad Pro (11-inch)' => 'iPad Pro (11-inch)',
    'iPad Pro (12.9-inch) (4th generation)' => 'iPad Pro (12.9-inch) (4th generation)',
    'iPad Pro (12.9-inch) (3rd generation)' => 'iPad Pro (12.9-inch) (3rd generation)',
    'iPad Pro (12.9-inch) (2nd generation)' => 'iPad Pro (12.9-inch) (2nd generation)',
    'iPad Pro (12.9-inch)' => 'iPad Pro (12.9-inch)',
    'iPad Pro (12.9 inch)' => 'iPad Pro (12.9-inch)', # iOS 10.3.1 simulator
    'iPad Pro' => 'iPad Pro (12.9-inch)', # iOS 9.3 simulator
    'Apple TV 1080p' => 'Apple TV',
    'Apple TV 4K (at 1080p)' => 'Apple TV 4K (at 1080p)',
    'Apple TV 4K' => 'Apple TV 4K',
    'Apple TV' => 'Apple TV',
    'Mac' => 'Mac'
  }
end