Update feature toggles work
Add templates Add template manager Updaet features generation scripts
This commit is contained in:
parent
7a91383726
commit
bd19a47a75
|
|
@ -1,37 +1,12 @@
|
|||
require 'yaml'
|
||||
require 'erb'
|
||||
|
||||
require_relative '../../managers/managers'
|
||||
require_relative '../../templates/templates'
|
||||
|
||||
# Input files paths
|
||||
build_settings_file_path = ARGV[0]
|
||||
generated_features_enum_file_path = ARGV[1]
|
||||
|
||||
features_enum_template =
|
||||
"
|
||||
//MARK: - Feature toggles
|
||||
|
||||
public enum FeatureToggle: String, Codable, RawRepresentable, CaseIterable {
|
||||
<% for @feature in @features %>
|
||||
case <%= @feature %>
|
||||
<% end %>
|
||||
}
|
||||
"
|
||||
|
||||
class FeatureUtils
|
||||
include ERB::Util
|
||||
|
||||
attr_accessor :features
|
||||
|
||||
def initialize(features)
|
||||
@features = features
|
||||
end
|
||||
|
||||
def render(template)
|
||||
ERB.new(template).result(binding)
|
||||
end
|
||||
end
|
||||
|
||||
build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"]
|
||||
|
||||
if build_settings_features_list.nil? or build_settings_features_list.empty?
|
||||
|
|
@ -39,7 +14,9 @@ if build_settings_features_list.nil? or build_settings_features_list.empty?
|
|||
end
|
||||
|
||||
# Generate enum Feature Toggles
|
||||
utils = FeatureUtils.new(build_settings_features_list)
|
||||
features_enum_template = Templates::FeatureTemplates.features_enum
|
||||
utils = Managers::TemplateManager.new(build_settings_features_list)
|
||||
|
||||
rendered_enum = utils.render(features_enum_template).strip
|
||||
|
||||
Managers::FileManager.save_data_to_file(generated_features_enum_file_path, rendered_enum)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Input paths
|
||||
readonly BUILD_SETTINGS_FILE_PATH=${1:-${PROJECT_DIR}/common/build_settings.yaml}
|
||||
readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/FeatureToggle.swift}
|
||||
readonly FEATURES_ENUM_FILE_PATH=${2:-${PROJECT_DIR}/${PRODUCT_NAME}/Resources/Features/Feature.swift}
|
||||
|
||||
# Features enunm generator script
|
||||
readonly CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ private_lane :buildConfiguration do |options|
|
|||
installDependencies(options)
|
||||
|
||||
unless options[:features].nil?
|
||||
generateFeaturesFile(options)
|
||||
generate_enabled_features_extension(options)
|
||||
end
|
||||
|
||||
if !(options[:uploadToFabric] || options[:uploadToAppStore])
|
||||
|
|
@ -402,10 +402,10 @@ def get_google_services_plist_path(app_target_folder_name, configuration_type)
|
|||
File.expand_path "../#{app_target_folder_name}/Resources/#{configuration_type.prefix}-GoogleService-Info.plist"
|
||||
end
|
||||
|
||||
def generateFeaturesFile(options)
|
||||
def generate_enabled_features_extension(options)
|
||||
app_target_folder_name = options[:appName] || $appName
|
||||
|
||||
project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Features.json"
|
||||
project_features_file_path = File.expand_path "../#{app_target_folder_name}/Resources/Features/Enabled.swift"
|
||||
build_settings_file_path = File.expand_path "../common/build_settings.yaml"
|
||||
|
||||
builder_features_list = options[:features]
|
||||
|
|
@ -413,7 +413,7 @@ def generateFeaturesFile(options)
|
|||
|
||||
build_settings_features_list = Managers::FileManager.load_from_file_YAML(build_settings_file_path)["features"]
|
||||
|
||||
features_hash = Touchlane::Features.generate_features_hash(builder_features_list, build_settings_features_list)
|
||||
enabled_features_hash = Touchlane::Features.generate_enabled_features_hash(builder_features_list, build_settings_features_list)
|
||||
|
||||
Managers::FileManager.save_data_to_file_in_json(project_features_file_path, features_hash)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,7 +1,13 @@
|
|||
require 'yaml'
|
||||
require 'erb'
|
||||
|
||||
require_relative '../../managers/managers'
|
||||
require_relative '../../templates/templates'
|
||||
|
||||
module Touchlane
|
||||
class Features
|
||||
|
||||
def self.generate_features_hash(builder_features_list, build_settings_features_list)
|
||||
def self.generate_enabled_features_hash(builder_features_list, build_settings_features_list)
|
||||
|
||||
# Check is entered features contains in configuration file
|
||||
features_diff = builder_features_list - build_settings_features_list
|
||||
|
|
@ -10,10 +16,11 @@ module Touchlane
|
|||
raise "Unexpected features: " + features_diff.join(', ')
|
||||
end
|
||||
|
||||
# Generate hash from feature names
|
||||
feature_bodies = builder_features_list.map { |feature_name| { :name => feature_name, :enabled => true } }
|
||||
features_full_body = { :features => feature_bodies }
|
||||
features_full_body.to_hash()
|
||||
# Generate FeatureToggle extension hash from feature names
|
||||
enabled_features_extension_template = Templates::FeatureTemplates.enabled_features_extension
|
||||
utils = Managers::TemplateManager.new(builder_features_list)
|
||||
|
||||
utils.render(enabled_features_extension_template).strip.to_hash()
|
||||
end
|
||||
|
||||
private_class_method :new
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
require 'erb'
|
||||
|
||||
module Managers
|
||||
class TemplateManager
|
||||
|
||||
include ERB::Util
|
||||
|
||||
attr_accessor :items
|
||||
|
||||
def initialize(items)
|
||||
@items = items
|
||||
end
|
||||
|
||||
def render(template)
|
||||
ERB.new(template).result(binding)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
module Managers
|
||||
require_relative "lib/file_manager"
|
||||
require_relative "lib/template_manager"
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
module Templates
|
||||
require_relative "templates/features_templates"
|
||||
end
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
module Templates
|
||||
module FeatureTemplates
|
||||
|
||||
def self.features_enum
|
||||
"
|
||||
//MARK: - Feature toggles
|
||||
|
||||
public enum Feature: String, Codable, RawRepresentable, CaseIterable {
|
||||
<% for @item in @items %>
|
||||
case <%= @item %>
|
||||
<% end %>
|
||||
}
|
||||
"
|
||||
end
|
||||
|
||||
def self.enabled_features_extension
|
||||
"
|
||||
// MARK: - Enabled features
|
||||
|
||||
public extension Feature {
|
||||
|
||||
static var enabled: [Feature] {
|
||||
[
|
||||
<% for @item in @items %>
|
||||
.<%= @item %>,
|
||||
<% end %>
|
||||
]
|
||||
}
|
||||
}
|
||||
"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
Loading…
Reference in New Issue