Class: Deliver::AppScreenshotValidator
- Inherits:
-
Object
- Object
- Deliver::AppScreenshotValidator
- Defined in:
- deliver/lib/deliver/app_screenshot_validator.rb
Defined Under Namespace
Classes: ValidationError
Constant Summary collapse
- ALLOWED_SCREENSHOT_FILE_EXTENSION =
Access each array by symbol returned from FastImage.type
{ png: ['png', 'PNG'], jpeg: ['jpg', 'JPG', 'jpeg', 'JPEG'] }.freeze
- APP_SCREENSHOT_SPEC_URL =
'https://help.apple.com/app-store-connect/#/devd274dd925'.freeze
Class Method Summary collapse
- .get_formatted_size(screenshot) ⇒ Object
-
.validate(screenshot, errors) ⇒ Boolean
Validate a screenshot and inform an error message via ‘errors` parameter.
-
.validate_device_type(screenshot, errors_found) ⇒ Object
Checking if the device type exists in spaceship Ex: iPhone 6.1 inch isn’t supported in App Store Connect but need to have it in there for frameit support.
- .validate_file_extension_and_format(screenshot, errors_found) ⇒ Object
- .validate_screen_size(screenshot, errors_found) ⇒ Object
Class Method Details
.get_formatted_size(screenshot) ⇒ Object
102 103 104 105 106 |
# File 'deliver/lib/deliver/app_screenshot_validator.rb', line 102 def self.get_formatted_size(screenshot) size = FastImage.size(screenshot.path) return size.join('x') if size nil end |
.validate(screenshot, errors) ⇒ Boolean
Validate a screenshot and inform an error message via ‘errors` parameter. `errors` is mutated to append the messages and each message should contain the corresponding path to let users know which file is throwing the error.
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'deliver/lib/deliver/app_screenshot_validator.rb', line 44 def self.validate(screenshot, errors) # Given screenshot will be diagnosed and errors found are accumulated errors_found = [] validate_screen_size(screenshot, errors_found) validate_device_type(screenshot, errors_found) validate_file_extension_and_format(screenshot, errors_found) # Merge errors found into given errors array errors_found.each { |error| errors.push(error) } errors_found.empty? end |
.validate_device_type(screenshot, errors_found) ⇒ Object
Checking if the device type exists in spaceship Ex: iPhone 6.1 inch isn’t supported in App Store Connect but need to have it in there for frameit support
68 69 70 71 72 73 74 75 |
# File 'deliver/lib/deliver/app_screenshot_validator.rb', line 68 def self.validate_device_type(screenshot, errors_found) if !screenshot.screen_size.nil? && screenshot.device_type.nil? errors_found << ValidationError.new(type: ValidationError::UNACCEPTABLE_DEVICE, path: screenshot.path, debug_info: "Screen size #{screenshot.screen_size} is not accepted. See the specifications to fix #{APP_SCREENSHOT_SPEC_URL}", to_skip: true) end end |
.validate_file_extension_and_format(screenshot, errors_found) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'deliver/lib/deliver/app_screenshot_validator.rb', line 77 def self.validate_file_extension_and_format(screenshot, errors_found) extension = File.extname(screenshot.path).delete('.') valid_file_extensions = ALLOWED_SCREENSHOT_FILE_EXTENSION.values.flatten is_valid_extension = valid_file_extensions.include?(extension) unless is_valid_extension errors_found << ValidationError.new(type: ValidationError::INVALID_FILE_EXTENSION, path: screenshot.path, debug_info: "Only #{valid_file_extensions.join(', ')} are allowed") end format = FastImage.type(screenshot.path) is_extension_matched = ALLOWED_SCREENSHOT_FILE_EXTENSION[format] && ALLOWED_SCREENSHOT_FILE_EXTENSION[format].include?(extension) # This error only appears when file extension is valid if is_valid_extension && !is_extension_matched expected_extension = ALLOWED_SCREENSHOT_FILE_EXTENSION[format].first expected_filename = File.basename(screenshot.path, File.extname(screenshot.path)) + ".#{expected_extension}" errors_found << ValidationError.new(type: ValidationError::FILE_EXTENSION_MISMATCH, path: screenshot.path, debug_info: %(Actual format is "#{format}". Rename the filename to "#{expected_filename}".)) end end |
.validate_screen_size(screenshot, errors_found) ⇒ Object
57 58 59 60 61 62 63 |
# File 'deliver/lib/deliver/app_screenshot_validator.rb', line 57 def self.validate_screen_size(screenshot, errors_found) if screenshot.screen_size.nil? errors_found << ValidationError.new(type: ValidationError::INVALID_SCREEN_SIZE, path: screenshot.path, debug_info: "Actual size is #{get_formatted_size(screenshot)}. See the specifications to fix #{APP_SCREENSHOT_SPEC_URL}") end end |