class WebTranslateIt::Configuration

Handles the configuration of your project, both via the the configuration file and via the API. Implementation example, assuming you have a valid .wti file:

configuration = WebTranslateIt::Configuration.new

Attributes

after_pull[RW]
after_push[RW]
api_key[RW]
before_pull[RW]
before_push[RW]
files[RW]
ignore_files[RW]
ignore_locales[RW]
logger[RW]
needed_locales[RW]
path[RW]
path_to_config_file[RW]
project_name[RW]
source_locale[RW]
target_locales[RW]

Public Class Methods

new(root_path = Rails.root, path_to_config_file = '.wti') click to toggle source

Load configuration file from the path.

# File lib/web_translate_it/configuration.rb, line 16
def initialize(root_path = Rails.root, path_to_config_file = '.wti') # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
  self.path_to_config_file = path_to_config_file
  self.path           = root_path
  self.logger         = logger
  if File.exist?(File.expand_path(path_to_config_file, path))
    self.api_key        = ENV.fetch('WTI_PROJECT_API_KEY') { configuration['api_key'] }
    self.before_pull    = configuration['before_pull']
    self.after_pull     = configuration['after_pull']
    self.before_push    = configuration['before_push']
    self.after_push     = configuration['after_push']
    self.ignore_files   = configuration['ignore_files']
    project_info = JSON.parse WebTranslateIt::Project.fetch_info(api_key)
    self.ignore_locales = locales_to_ignore(configuration)
    self.needed_locales = locales_needed(configuration)
    self.files = files_from_project(project_info['project'])
    self.source_locale = source_locale_from_project(project_info['project'])
    self.target_locales = target_locales_from_project(project_info['project'])
    self.project_name = project_info['project']['name']
  else
    puts StringUtil.failure("\nNo configuration file found in #{File.expand_path(path_to_config_file, path)}")
    exit(1)
  end
end

Public Instance Methods

api_url() click to toggle source

Convenience method which returns the endpoint for fetching a list of locales for a project.

# File lib/web_translate_it/configuration.rb, line 97
def api_url
  "/api/projects/#{api_key}"
end
configuration() click to toggle source
# File lib/web_translate_it/configuration.rb, line 110
def configuration
  @configuration ||= YAML.safe_load(parse_erb_in_configuration)
end
files_from_project(project) click to toggle source

Set the project files from the Project API. Implementation example:

configuration = WebTranslateIt::Configuration.new
files = configuration.files # returns an array of TranslationFile
# File lib/web_translate_it/configuration.rb, line 67
def files_from_project(project) # rubocop:todo Metrics/AbcSize, Metrics/MethodLength
  array_files = []
  project['project_files'].each do |project_file|
    if project_file['name'].nil? || (project_file['name'].strip == '')
      puts "File #{project_file['id']} not set up"
    elsif ignore_files&.any? { |glob| File.fnmatch(glob, project_file['name']) }
      puts "Ignoring #{project_file['name']}"
    else
      array_files.push TranslationFile.new(project_file['id'], project_file['name'], project_file['locale_code'], api_key, project_file['updated_at'], project_file['hash_file'], project_file['master_project_file_id'], project_file['fresh'])
    end
  end
  array_files
end
locales_needed(configuration) click to toggle source

Returns an array of locales to specifically pull from the configuration file, if set

# File lib/web_translate_it/configuration.rb, line 87
def locales_needed(configuration)
  Array(configuration['needed_locales']).map(&:to_s)
end
locales_to_ignore(configuration) click to toggle source

Returns an array of locales to ignore from the configuration file, if set.

# File lib/web_translate_it/configuration.rb, line 82
def locales_to_ignore(configuration)
  Array(configuration['ignore_locales']).map(&:to_s)
end
reload() click to toggle source

Reload project data

# File lib/web_translate_it/configuration.rb, line 42
def reload # rubocop:todo Metrics/AbcSize
  project_info = JSON.parse WebTranslateIt::Project.fetch_info(api_key)
  self.ignore_locales = locales_to_ignore(configuration)
  self.needed_locales = locales_needed(configuration)
  self.files = files_from_project(project_info['project'])
  self.source_locale = source_locale_from_project(project_info['project'])
  self.target_locales = target_locales_from_project(project_info['project'])
  self.project_name = project_info['project']['name']
end
source_locale_from_project(project) click to toggle source

Returns the source locale from the Project API.

# File lib/web_translate_it/configuration.rb, line 53
def source_locale_from_project(project)
  project['source_locale']['code']
end
target_locales_from_project(project) click to toggle source

Returns the target locales from the Project API.

# File lib/web_translate_it/configuration.rb, line 58
def target_locales_from_project(project)
  project['target_locales'].map { |locale| locale['code'] }
end

Private Instance Methods

parse_erb_in_configuration() click to toggle source
# File lib/web_translate_it/configuration.rb, line 116
def parse_erb_in_configuration
  ERB.new(File.read(File.expand_path(path_to_config_file, path))).result
end