diff --git a/lib/ad_localize/interactors/generate_ios_files.rb b/lib/ad_localize/interactors/generate_ios_files.rb index d8de820..fde85a6 100644 --- a/lib/ad_localize/interactors/generate_ios_files.rb +++ b/lib/ad_localize/interactors/generate_ios_files.rb @@ -4,8 +4,8 @@ module Interactors class GenerateIOSFiles def call(wording:, export_request:) GenerateInfoPlist.new.call(wording: wording, export_request: export_request) - GenerateLocalizableStrings.new.call(wording: wording, export_request: export_request) - GenerateLocalizableStringsDict.new.call(wording: wording, export_request: export_request) + GenerateLocalizableStrings.new(export_request: export_request).call(wording: wording, export_request: export_request) + GenerateLocalizableStringsDict.new(export_request: export_request).call(wording: wording, export_request: export_request) end end end diff --git a/lib/ad_localize/interactors/generate_localizable_strings.rb b/lib/ad_localize/interactors/generate_localizable_strings.rb index e1a3378..12b4494 100644 --- a/lib/ad_localize/interactors/generate_localizable_strings.rb +++ b/lib/ad_localize/interactors/generate_localizable_strings.rb @@ -5,8 +5,8 @@ class GenerateLocalizableStrings < BaseGenerateFiles LOCALIZABLE_STRINGS_FILENAME = "Localizable.strings".freeze LOCALE_DIRECTORY_CONVENTION = "%{locale}.lproj".freeze - def initialize - super(serializer: Serializers::LocalizableStringsSerializer.new) + def initialize(export_request:) + super(serializer: Serializers::LocalizableStringsSerializer.new(export_request: export_request)) end private diff --git a/lib/ad_localize/interactors/generate_localizable_strings_dict.rb b/lib/ad_localize/interactors/generate_localizable_strings_dict.rb index 7c70137..e39250a 100644 --- a/lib/ad_localize/interactors/generate_localizable_strings_dict.rb +++ b/lib/ad_localize/interactors/generate_localizable_strings_dict.rb @@ -5,8 +5,8 @@ class GenerateLocalizableStringsDict < BaseGenerateFiles LOCALIZABLE_STRINGSDICT_FILENAME = "Localizable.stringsdict".freeze LOCALE_DIRECTORY_CONVENTION = "%{locale}.lproj".freeze - def initialize - super(serializer: Serializers::LocalizableStringsdictSerializer.new) + def initialize(export_request:) + super(serializer: Serializers::LocalizableStringsdictSerializer.new(export_request: export_request)) end private diff --git a/lib/ad_localize/mappers/options_to_export_request.rb b/lib/ad_localize/mappers/options_to_export_request.rb index 94023f3..3cc13a6 100644 --- a/lib/ad_localize/mappers/options_to_export_request.rb +++ b/lib/ad_localize/mappers/options_to_export_request.rb @@ -6,6 +6,7 @@ def map(options:) request = Requests::ExportRequest.new request.locales = options[:locales] request.bypass_empty_values = options[:'non-empty-values'] + request.auto_escape_percent = options[:'auto-escape-percent'] request.csv_paths = options[:csv_paths] request.merge_policy = options[:'merge-policy'] request.output_path = options[:'target-dir'] diff --git a/lib/ad_localize/option_handler.rb b/lib/ad_localize/option_handler.rb index 6e6a559..45d2989 100644 --- a/lib/ad_localize/option_handler.rb +++ b/lib/ad_localize/option_handler.rb @@ -4,6 +4,7 @@ class OptionHandler DEFAULT_OPTIONS = { locales: Requests::ExportRequest::DEFAULTS[:locales], :'non-empty-values' => Requests::ExportRequest::DEFAULTS[:bypass_empty_values], + :'auto-escape-percent' => Requests::ExportRequest::DEFAULTS[:auto_escape_percent], csv_paths: Requests::ExportRequest::DEFAULTS[:csv_paths], :'merge-policy' => Requests::ExportRequest::DEFAULTS[:merge_policy], :'target-dir' => Requests::ExportRequest::DEFAULTS[:output_path], @@ -53,6 +54,7 @@ def self.parse!(options) exit end parser.on("-x", "--non-empty-values", TrueClass, 'Do not export keys with empty values (iOS only)') + parser.on("--auto-escape-percent", TrueClass, 'Add escaping for % symbol to support wording use with String formatting (iOS only)') end.parse!(options, into: args) args[:csv_paths] = options diff --git a/lib/ad_localize/requests/export_request.rb b/lib/ad_localize/requests/export_request.rb index 32c63a6..a7176b5 100644 --- a/lib/ad_localize/requests/export_request.rb +++ b/lib/ad_localize/requests/export_request.rb @@ -5,6 +5,7 @@ class ExportRequest DEFAULTS = { locales: [], bypass_empty_values: false, + auto_escape_percent: false, csv_paths: [], merge_policy: Interactors::MergeWordings::DEFAULT_POLICY, output_path: Pathname.new('exports'), @@ -21,6 +22,7 @@ class ExportRequest attr_reader( :locales, :bypass_empty_values, + :auto_escape_percent, :csv_paths, :merge_policy, :output_path, @@ -35,6 +37,7 @@ class ExportRequest def initialize @locales = DEFAULTS[:locales] @bypass_empty_values = DEFAULTS[:bypass_empty_values] + @auto_escape_percent = DEFAULTS[:auto_escape_percent] @csv_paths = DEFAULTS[:csv_paths] @merge_policy = DEFAULTS[:merge_policy] @output_path = DEFAULTS[:output_path] @@ -56,6 +59,10 @@ def bypass_empty_values=(value) @bypass_empty_values = [true, 'true'].include?(value) end + def auto_escape_percent=(value) + @auto_escape_percent = [true, 'true'].include?(value) + end + def csv_paths=(value) return unless value.is_a? Array @@ -119,6 +126,7 @@ def all_csv_paths def to_s "locales: #{locales}, " \ "bypass_empty_values: #{bypass_empty_values}, " \ + "auto_escape_percent: #{auto_escape_percent}, " \ "csv_paths: #{csv_paths}, " \ "merge_policy: #{merge_policy}, " \ "output_path: #{output_path}, " \ diff --git a/lib/ad_localize/serializers/localizable_strings_serializer.rb b/lib/ad_localize/serializers/localizable_strings_serializer.rb index e63d35b..ad30c07 100644 --- a/lib/ad_localize/serializers/localizable_strings_serializer.rb +++ b/lib/ad_localize/serializers/localizable_strings_serializer.rb @@ -4,8 +4,8 @@ module Serializers class LocalizableStringsSerializer < TemplatedSerializer LOCALIZABLE_STRINGS_FILENAME = "Localizable.strings".freeze - def initialize - super(sanitizer: Sanitizers::IOSSanitizer.new) + def initialize(export_request:) + super(sanitizer: Sanitizers::IOSSanitizer.new(auto_escape_percent: export_request.auto_escape_percent)) end private diff --git a/lib/ad_localize/serializers/localizable_stringsdict_serializer.rb b/lib/ad_localize/serializers/localizable_stringsdict_serializer.rb index 28a8508..ee57a75 100644 --- a/lib/ad_localize/serializers/localizable_stringsdict_serializer.rb +++ b/lib/ad_localize/serializers/localizable_stringsdict_serializer.rb @@ -4,8 +4,8 @@ module Serializers class LocalizableStringsdictSerializer < TemplatedSerializer LOCALIZABLE_STRINGSDICT_FILENAME = "Localizable.stringsdict".freeze - def initialize - super(sanitizer: Sanitizers::IOSSanitizer.new) + def initialize(export_request:) + super(sanitizer: Sanitizers::IOSSanitizer.new(auto_escape_percent: export_request.auto_escape_percent)) end private diff --git a/test/requests/export_request_test.rb b/test/requests/export_request_test.rb index 72836c0..1922af0 100644 --- a/test/requests/export_request_test.rb +++ b/test/requests/export_request_test.rb @@ -38,6 +38,20 @@ class ExportRequestTest < TestCase assert_not @request.bypass_empty_values end + test 'should detect if request auto escape empty values' do + @request.auto_escape_percent = true + assert @request.auto_escape_percent + + @request.auto_escape_percent = false + assert_not @request.auto_escape_percent + + @request.auto_escape_percent = nil + assert_not @request.auto_escape_percent + + @request.auto_escape_percent = '' + assert_not @request.auto_escape_percent + end + test 'should get csv paths' do @request.csv_paths = [] assert_empty @request.csv_paths