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

Version Path
locomotivecms-3.4.1 app/services/locomotive/translation_service.rb
locomotivecms-4.0.0.alpha2 app/services/locomotive/translation_service.rb
locomotivecms-4.0.0.alpha1 app/services/locomotive/translation_service.rb
locomotivecms-3.4.0 app/services/locomotive/translation_service.rb
locomotivecms-3.3.0 app/services/locomotive/translation_service.rb
locomotivecms-3.3.0.rc3 app/services/locomotive/translation_service.rb
locomotivecms-3.3.0.rc2 app/services/locomotive/translation_service.rb
locomotivecms-3.1.2 app/services/locomotive/translation_service.rb
locomotivecms-3.2.1 app/services/locomotive/translation_service.rb
locomotivecms-3.3.0.rc1 app/services/locomotive/translation_service.rb
locomotivecms-3.2.0 app/services/locomotive/translation_service.rb
locomotivecms-3.2.0.rc2 app/services/locomotive/translation_service.rb
locomotivecms-3.2.0.rc1 app/services/locomotive/translation_service.rb
locomotivecms-3.1.1 app/services/locomotive/translation_service.rb
locomotivecms-3.1.0 app/services/locomotive/translation_service.rb
locomotivecms-3.1.0.rc3 app/services/locomotive/translation_service.rb
locomotivecms-3.1.0.rc2 app/services/locomotive/translation_service.rb
locomotivecms-3.1.0.rc1 app/services/locomotive/translation_service.rb
locomotivecms-3.0.1 app/services/locomotive/translation_service.rb
locomotivecms-3.0.0 app/services/locomotive/translation_service.rb