class TranslationIO::Client::SyncOperation

Public Instance Methods

display_unused_segments(parsed_response, show_purgeable, purge) click to toggle source
# File lib/translation_io/client/sync_operation.rb, line 74
def display_unused_segments(parsed_response, show_purgeable, purge)
  unused_segments         = parsed_response['unused_segments'] || []
  yaml_unused_segments    = unused_segments.select { |unused_segment| unused_segment['kind'] == 'yaml' }
  gettext_unused_segments = unused_segments.select { |unused_segment| unused_segment['kind'] == 'gettext' }

  yaml_size    = yaml_unused_segments.size
  gettext_size = gettext_unused_segments.size
  total_size   = yaml_size + gettext_size

  # Quick unused segments summary for simple "sync"
  if !show_purgeable && !purge
    if total_size > 0
      puts
      puts "----------"
      puts "#{yaml_size + gettext_size} keys/strings are in Translation.io but not in your current branch."
      puts 'Execute "rake translation:sync_and_show_purgeable" to list these keys/strings.'
    end
  # Complete summary for sync_and_show_purgeable or sync_and_purge
  else
    if purge
      text = "were removed from Translation.io to match your current branch:"
    elsif show_purgeable
      text = "are in Translation.io but not in your current branch:"
    end

    if yaml_size > 0
      puts
      puts "----------"
      puts "#{yaml_size} YAML #{yaml_size == 1 ? 'key' : 'keys'} #{text}"
      puts

      yaml_unused_segments.each do |yaml_unused_segment|
        puts "[#{yaml_unused_segment['languages']}] [#{yaml_unused_segment['msgctxt']}] \"#{yaml_unused_segment['msgid']}\""
      end
    end

    if gettext_size > 0
      puts
      puts "----------"
      puts "#{gettext_size} GetText #{gettext_size == 1 ? 'string' : 'strings'} #{text}"
      puts

      gettext_unused_segments.each do |gettext_unused_segment|
        puts "[#{gettext_unused_segment['languages']}] \"#{gettext_unused_segment['msgid']}\""
      end
    end

    # Special message for when nothing need to be purged
    if total_size == 0
      puts
      puts "----------"
      puts "Nothing to purge: all the keys/strings in Translation.io are also in your current branch."
    end

    # Special message when sync_and_show_purgeable and unused segments
    if show_purgeable && total_size > 0
      puts
      puts "----------"
      puts "If you know what you are doing, you can remove them using \"rake translation:sync_and_purge\"."
    end
  end
end
info_project_url(parsed_response) click to toggle source
# File lib/translation_io/client/sync_operation.rb, line 137
def info_project_url(parsed_response)
  puts
  puts "----------"
  puts "Use this URL to translate: #{parsed_response['project_url']}"
  puts "----------"
end
run(options = {}) click to toggle source
# File lib/translation_io/client/sync_operation.rb, line 7
def run(options = {})
  purge          = options.fetch(:purge,          false)
  show_purgeable = options.fetch(:show_purgeable, false)
  readonly       = options.fetch(:readonly,       false)

  config = TranslationIO.config

  source_files      = config.source_files
  erb_source_files  = config.erb_source_files
  haml_source_files = config.haml_source_files
  slim_source_files = config.slim_source_files
  pot_path          = config.pot_path
  source_locale     = config.source_locale
  target_locales    = config.target_locales
  locales_path      = config.locales_path
  yaml_locales_path = config.yaml_locales_path
  yaml_file_paths   = config.yaml_file_paths

  warn_wrong_locales(source_locale, target_locales)

  if !config.disable_yaml
    ApplyYamlSourceEditsStep.new(yaml_file_paths, source_locale).run(params)
  end

  if !config.disable_gettext
    BaseOperation::DumpMarkupGettextKeysStep.new(haml_source_files, :haml).run
    BaseOperation::DumpMarkupGettextKeysStep.new(slim_source_files, :slim).run
  end

  UpdatePotFileStep.new(pot_path, source_files + erb_source_files).run(params)

  if !config.disable_yaml
    CreateYamlPotFileStep.new(source_locale, yaml_file_paths).run(params)
  end

  if purge
    params['purge'] = 'true'
  end

  if readonly
    params['readonly'] = 'true'
  end

  TranslationIO.info "Sending data to server (it may take some time, please be patient)."

  uri             = URI("#{client.endpoint}/projects/#{client.api_key}/sync")
  parsed_response = BaseOperation.perform_request(uri, params)

  if !parsed_response.nil?
    if !config.disable_gettext
      BaseOperation::SaveNewPoFilesStep.new(target_locales, locales_path, parsed_response).run
      BaseOperation::CreateNewMoFilesStep.new(locales_path).run
    end

    if !config.disable_yaml
      BaseOperation::SaveNewYamlFilesStep.new(target_locales, yaml_locales_path, parsed_response).run
      BaseOperation::SaveSpecialYamlFilesStep.new(source_locale, target_locales, yaml_locales_path, yaml_file_paths).run
    end

    display_unused_segments(parsed_response, show_purgeable, purge)

    info_project_url(parsed_response)
  end

  cleanup
end