module Flavours
Constants
- VERSION
Public Class Methods
assets_file_path(directory, m, flavour_name)
click to toggle source
# File lib/flavours/assets.rb, line 8 def self.assets_file_path directory, m, flavour_name return "#{directory}/#{m}/src/#{flavour_name.gsub(/[^0-9a-z ]/i, '')}/res" end
base_json_file_string()
click to toggle source
# File lib/flavours/json.rb, line 51 def self.base_json_file_string return '{ "flavours": [ { "flavourName": "YourFlavor", "packageName": "somePackageName", "buildConfig": { "API_KEY": "someApiKey" }, "iconUrl": "https://someurl.com/image.png", "colorsXML": { "primaryColor": "#E51919" }, "stringsXML": { "someString": "someValue" } }, { "flavourName": "YourFlavor2", "packageName": "somePackageName2", "buildConfig": { "API_KEY": "someApiKey" }, "iconUrl": "https://someurl.com/image.png", "colorsXML": { "primaryColor": "#E51919" }, "stringsXML": { "someString": "someValue" } } ] }' end
blue(text)
click to toggle source
# File lib/flavours/colors.rb, line 16 def self.blue(text) colorize(text, 36) end
build_config_string_for_flavour(flavour)
click to toggle source
# File lib/flavours/gradle.rb, line 44 def self.build_config_string_for_flavour flavour if flavour['buildConfig'] @buildconfig = '' flavour['buildConfig'].each_pair do |k, v| @buildconfig += " buildConfigField \"String\" , \"#{k}\" , \"\\\"#{v}\\\"\"\n" end return @buildconfig end return '' end
check_for_newer_version()
click to toggle source
# File lib/flavours/version.rb, line 4 def self.check_for_newer_version unless Gem.latest_version_for('flavours').to_s == VERSION Flavours::purple "\n A newer version of flavours is available. Run '[sudo] gem update flavours'." end end
colorize(text, color_code)
click to toggle source
Main Colorize Functions
# File lib/flavours/colors.rb, line 3 def self.colorize(text, color_code) puts "\e[#{color_code}m#{text}\e[0m" end
create(flavours, directory, m)
click to toggle source
# File lib/flavours/gradle.rb, line 9 def self.create flavours, directory, m @flavour_string = '' flavours.each do |f| @flavour_string += gradle_string_for_flavour f Flavours::green " #{f['flavourName'].gsub(/[^0-9a-z ]/i, '')}" unless $nolog Flavours::create_images directory, m, f Flavours::create_xml_resources directory, m, f puts end set_and_save_flavours_text @flavour_string, directory, m end
create_images(directory, m, flavour_hash)
click to toggle source
Images
# File lib/flavours/images.rb, line 12 def self.create_images directory, m, flavour_hash # Bad Params if !directory || !flavour_hash || !m return false end # Resize Icons resize_icons directory, m, flavour_hash # Move Drawables move_drawables directory, m, flavour_hash if flavour_hash['drawables'] end
create_xml_for_hash(directory, m, xml_hash, res_folder_name, res_file_name, res_key_name, flavour_name)
click to toggle source
Main Method
# File lib/flavours/xmlres.rb, line 25 def self.create_xml_for_hash directory, m, xml_hash, res_folder_name, res_file_name, res_key_name, flavour_name # Create Directory Flavours::make_asset_directory directory, m, flavour_name, res_folder_name # Set Up res_path = Flavours::file_path_with_folder_name(directory, res_folder_name, m, flavour_name) + "/#{res_file_name}.xml" xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n <resources>\n" # Create Strings if xml_hash.kind_of?(Array) xml_hash.each do |hash| xmlString += res_string res_key_name, hash['name'], hash['value'], hash['type'] end else xml_hash.each_pair do |k, v| xmlString += res_string res_key_name, k, v, nil end end # Finish Her Off xmlString += ' </resources>' File.open(res_path, 'w') do |f| f.write(xmlString) end end
create_xml_resources(directory, m, flavour_hash)
click to toggle source
Create XML
# File lib/flavours/xmlres.rb, line 8 def self.create_xml_resources directory, m, flavour_hash flavour_name = flavour_hash['flavourName'] flavour_hash.each_pair do |k, v| if k == 'colorsXML' create_xml_for_hash directory, m, v, 'values', 'colors', 'color', flavour_name puts " - Created colors.xml for #{flavour_name}" elsif k == 'stringsXML' create_xml_for_hash directory, m, v, 'values', 'strings', 'string', flavour_name puts " - Created strings.xml for #{flavour_name}" elsif k == 'settingsXML' create_xml_for_hash directory, m, v, 'values', 'settings', 'item', flavour_name puts " - Created settings.xml for #{flavour_name}" end end end
file_path_with_folder_name(directory, folder, m, flavour_name)
click to toggle source
# File lib/flavours/assets.rb, line 12 def self.file_path_with_folder_name directory, folder, m, flavour_name return "#{assets_file_path directory, m, flavour_name}/#{folder}" end
gradle_directory(directory, m)
click to toggle source
# File lib/flavours/gradle.rb, line 22 def self.gradle_directory directory, m return directory + '/' + m + '/build.gradle' end
gradle_string_for_flavour(flavour)
click to toggle source
# File lib/flavours/gradle.rb, line 37 def self.gradle_string_for_flavour flavour package = flavour['packageName'] ? " packageName \"#{flavour['packageName']}\"\n" : '' buildConfig = flavour['buildConfig'] ? build_config_string_for_flavour(flavour) : '' return " #{flavour['flavourName'].gsub(/[^0-9a-z ]/i, '')} {\n#{package}#{buildConfig} }\n" end
gradle_text(directory, m)
click to toggle source
# File lib/flavours/gradle.rb, line 27 def self.gradle_text directory, m path = gradle_directory directory, m if File.exists?(path) return File.open(path).read end return nil end
green(text)
click to toggle source
# File lib/flavours/colors.rb, line 12 def self.green(text) colorize(text, 32) end
json_object_from_directory(directory)
click to toggle source
# File lib/flavours/json.rb, line 8 def self.json_object_from_directory directory return nil unless directory # Check for longbow.json @json_path = directory + '/flavours.json' unless File.exists?(@json_path) Flavours::red "\n Couldn't find flavours.json at #{@json_path}\n" puts " Run this command to install the correct files:\n longbow install\n" return nil end # Create hash from longbow.json json_contents = File.open(@json_path).read return json_object_from_string json_contents end
json_object_from_string(contents)
click to toggle source
# File lib/flavours/json.rb, line 33 def self.json_object_from_string contents begin !!JSON.parse(contents) rescue return nil end return JSON.parse(contents) end
json_object_from_url(url)
click to toggle source
# File lib/flavours/json.rb, line 25 def self.json_object_from_url url return nil unless url contents = '' open(url) {|io| contents = io.read} return json_object_from_string contents end
lint_json_object(obj)
click to toggle source
# File lib/flavours/json.rb, line 44 def self.lint_json_object obj return false unless obj return false unless obj['flavours'] return true end
make_asset_directory(directory, m, flavour_name, folder_name)
click to toggle source
# File lib/flavours/assets.rb, line 4 def self.make_asset_directory directory, m, flavour_name, folder_name FileUtils::mkdir_p file_path_with_folder_name directory, folder_name, m, flavour_name end
move_drawable(directory, m, flavour_hash, i)
click to toggle source
Move Drawable
# File lib/flavours/images.rb, line 103 def self.move_drawable directory, m, flavour_hash, i # Set Up f_name = flavour_hash['flavourName'] # Make Path Flavours::make_asset_directory directory, m, f_name, 'drawable' # Find Image image = Image.read("#{directory}/#{i['path']}").first if image image.write "#{Flavours::file_path_with_folder_name(directory, 'drawable', m, f_name)}/#{i['name']}" end end
move_drawables(directory, m, flavour_hash)
click to toggle source
Move Drawables
# File lib/flavours/images.rb, line 92 def self.move_drawables directory, m, flavour_hash imgs = flavour_hash['drawables'] if imgs && imgs.kind_of?(Array) imgs.each do |i| move_drawable directory, m, flavour_hash, i end end end
path_for_downloaded_image_from_url(directory, filename, url, folder)
click to toggle source
Download Image from URL
# File lib/flavours/images.rb, line 79 def self.path_for_downloaded_image_from_url directory, filename, url, folder img_path = directory + '/resources/'+ folder + '/' img_file_name = filename + '.png' FileUtils::mkdir_p img_path File.open(img_path + img_file_name, 'wb') do |f| f.write open(url).read end return img_path + img_file_name end
purple(text)
click to toggle source
# File lib/flavours/colors.rb, line 20 def self.purple(text) colorize(text, 35) end
red(text)
click to toggle source
Specific Colors
# File lib/flavours/colors.rb, line 8 def self.red(text) colorize(text, 31) end
res_string(res, name, value, type)
click to toggle source
Resource String
# File lib/flavours/xmlres.rb, line 49 def self.res_string res, name, value, type type_string = type ? " type=\"#{type}\"" : '' return " <#{res} name=\"#{name}\"#{type_string}>#{value.gsub("'", %q(\\\'))}</#{res}>\n" end
resize_icons(directory, m, flavour_hash)
click to toggle source
Create & Resize Icons
# File lib/flavours/images.rb, line 27 def self.resize_icons directory, m, flavour_hash # Set Up name = flavour_hash['flavourName'] # Get Image Information img_path = '' if flavour_hash['iconUrl'] img_path = self.path_for_downloaded_image_from_url directory, name, flavour_hash['iconUrl'], 'icons' elsif flavour_hash['iconPath'] img_path = "#{directory}/#{flavour_hash['iconPath']}" else return end # Create Play Store Version (512x512) play_store_path = "#{directory}/resources/icons" img = Image.read(img_path).first resize_image_to_directory play_store_path, img, '512x512', "#{name}-512" # Make Assets Directory drawables = ['drawable-xxxhdpi','drawable-xxhdpi','drawable-xhdpi','drawable-hdpi','drawable-mdpi'] drawables.each do |d| Flavours::make_asset_directory directory, m, name, d end # Resize image_sizes = ['192x192', '144x144', '96x96', '72x72', '48x48'] image_sizes.each_index do |i| size = image_sizes[i] drawable = drawables[i] img_dir = file_path_with_folder_name directory, drawable, m, name image = Image.read(img_path).first next unless image resize_image_to_directory img_dir, image, size, 'ic_launcher' end puts ' - Created Icon images for ' + name unless $nolog return true end
resize_image_to_directory(directory, image, size, tag)
click to toggle source
Resize Image to Directory
# File lib/flavours/images.rb, line 69 def self.resize_image_to_directory directory, image, size, tag sizes = size.split('x') new_w = Integer(sizes[0]) new_h = Integer(sizes[1]) image.resize_to_fill! new_w, new_h image.write directory + '/' + tag + '.png' end
set_and_save_flavours_text(flavours_text, directory, m)
click to toggle source
# File lib/flavours/gradle.rb, line 57 def self.set_and_save_flavours_text flavours_text, directory, m @gradle = gradle_text directory, m matches = @gradle.match /productFlavors \{(?>[^()]|(\g<0>))*\}\n\n/ new_flavour_text = " productFlavors {\n#{flavours_text} }\n\n" if matches @gradle = @gradle.sub(matches[0], new_flavour_text) else @gradle = @gradle.sub('android {',"android {\n#{new_flavour_text}") end File.open(gradle_directory(directory, m), 'w') do |f| f.write(@gradle) end end