Last active
September 14, 2015 16:34
-
-
Save OSemenovBoyarka/0b84606fa1439ebfe802 to your computer and use it in GitHub Desktop.
Deliverfile script parses app metadata from android-like strings.xml and sets up values for deliver tool from Fastlane
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
###### Simple script parses app metadata from android-like strings.xml and sets up values for deliver | |
###### You can always last version of this script at https://gist.github.com/SemenovAlexander/0b84606fa1439ebfe802 | |
baseLanguage = "en-US" | |
# Selecting all subfolder names of metadata directory as available locales | |
supportedLanguages = Dir.entries('metadata').select {|entry| File.directory? File.join('metadata',entry) and !(entry =='.' || entry == '..') } | |
# Creating variables for fields in each language, with dummy stub for base language | |
titleHash = { | |
baseLanguage => "" | |
} | |
descriptionHash = { | |
baseLanguage => "" | |
} | |
keywordsHash = { | |
baseLanguage => [""] | |
} | |
supportUrlHash = {} | |
marketingUrlHash = {} | |
privacyUrlHash = {} | |
verstionWhatsNewHash = {} | |
#it's not the best solution, but will work for now. We need to loop though base language firstly, to be able spread default values to all languages | |
supportedLanguages.unshift(baseLanguage) | |
supportedLanguages.each do |lang| | |
strings = {} | |
#reading xml contents | |
f = File.open("metadata/"+lang+"/store_metadata.xml") | |
doc = Nokogiri::XML(f) | |
f.close | |
# parsing android-style resources | |
# taking each 'string' node under 'resources' , and building hash from it's 'name' attribute as key and content as value | |
doc.xpath('//resources/string').each do |node| | |
strings[node.attribute("name").value] = node.content | |
end | |
#copyright is the same for each language | |
if lang == baseLanguage | |
#checking if all needed keys are in default locale | |
['title','description','keywords','copyright'].each do |key| | |
raise "Default #{baseLanguage} xml file does'n contain mandatory value #{key}" unless strings.has_key?(key) | |
end | |
# setting common values to all categories | |
copyright strings['copyright'] | |
if strings.has_key?('primary_category') | |
primary_category strings['primary_category'] | |
end | |
if strings.has_key?('secondary_category') | |
primary_category strings['secondary_category'] | |
end | |
if strings.has_key?('primary_subcategories') | |
primary_category strings['primary_subcategories'].split(',') | |
end | |
if strings.has_key?('secondary_subcategories') | |
primary_category strings['secondary_subcategories'].split(',') | |
end | |
end | |
titleHash[lang] = strings.has_key?('title') ? strings['title'] : titleHash[baseLanguage] | |
descriptionHash[lang] = strings.has_key?('description') ? strings['description'] : descriptionHash[baseLanguage] | |
supportUrl = strings.has_key?('support_url') ? strings['support_url'] : supportUrlHash[baseLanguage] | |
supportUrlHash[lang] = supportUrl unless !supportUrl | |
marketingUrl = strings.has_key?('marketing_url') ? strings['marketing_url'] : marketingUrlHash[baseLanguage] | |
marketingUrlHash[lang] = marketingUrl unless !marketingUrl | |
privacyUrl = strings.has_key?('privacy_url') ? strings['privacy_url'] : privacyUrlHash[baseLanguage] | |
privacyUrlHash[lang] = privacyUrl unless !privacyUrl | |
verstionWhatsNew = strings.has_key?('changelog') ? strings['changelog'] : verstionWhatsNewHash[baseLanguage] | |
verstionWhatsNewHash[lang] = verstionWhatsNew unless !verstionWhatsNew | |
#keywords should be an array | |
keywordsArray = strings.has_key?('keywords') ? strings['keywords'].split(',') : keywordsHash[baseLanguage] | |
keywordsHash[lang] = keywordsArray.collect(&:strip) | |
end | |
title(titleHash) | |
description(descriptionHash) | |
keywords(keywordsHash) | |
support_url(supportUrlHash) unless supportUrlHash.empty? | |
marketing_url(marketingUrlHash) unless marketingUrlHash.empty? | |
privacy_url(privacyUrlHash) unless privacyUrlHash.empty? | |
changelog(verstionWhatsNewHash) unless verstionWhatsNewHash.empty? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment