Sha256: 1a033cdfc02eb7fc543ecf59110044093308ae89bb9cd1860f2f7939c700d2b5
Contents?: true
Size: 1.33 KB
Versions: 28
Compression:
Stored size: 1.33 KB
Contents
module Locomotive class TranslationService < Struct.new(:site, :account) def all(options = {}) query = site.translations.ordered keywords = prepare_keywords_statement(options[:q]) completion = prepare_completion_statement(options[:filter_by]) # filtering query = if completion then query.and(*keywords, *completion) else query.where(keywords) end # pagination query .page(options[:page] || 1) .per(options[:per_page] || Locomotive.config.ui[:per_page]) end def update(translation, values) translation.tap do translation.values = values translation.updated_by = account if account translation.save end end protected def prepare_keywords_statement(keywords) return {} if keywords.blank? regexp = /.*#{keywords.split.map { |k| Regexp.escape(k) }.join('.*')}.*/i [{ '$or' => [ { key: regexp }, *site.locales.map { |l| { "values.#{l}" => regexp } } ] }] end def prepare_completion_statement(filter_by) case filter_by when 'done' then [{ completion: site.locales.size }] when 'partially' then [{ :completion.lt => site.locales.size }, { :completion.gt => 0 }] when 'none' then [{ completion: 0 }] else {} end end end end
Version data entries
28 entries across 28 versions & 1 rubygems