Class: Releaf::I18nDatabase::TranslationsUtilities

Inherits:
Object
  • Object
show all
Defined in:
app/lib/releaf/i18n_database/translations_utilities.rb

Class Method Summary collapse

Class Method Details

.column_searches(lookup_string) ⇒ Object



24
25
26
27
28
29
30
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 24

def self.column_searches(lookup_string)
  search_columns.map do |column|
    lookup_string.split(' ').map do |part|
      column.matches("%#{escape_search_string(part)}%")
    end.inject(&:and).to_sql
  end
end

.escape_search_string(string) ⇒ Object



36
37
38
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 36

def self.escape_search_string(string)
  string.gsub(/([%|_])/){|r| "\\#{r}" }
end

.filter_by_text(collection, lookup_string) ⇒ Object



19
20
21
22
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 19

def self.filter_by_text(collection, lookup_string)
  sql = column_searches(lookup_string).map{|column_search| "(#{column_search})" }.join(' OR ')
  collection.where(sql)
end

.filter_only_blank_translations(collection) ⇒ Object



10
11
12
13
14
15
16
17
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 10

def self.filter_only_blank_translations(collection)
  blank_where_collection = Releaf::I18nDatabase::I18nEntry
  search_columns.each do |column|
    blank_where_collection = blank_where_collection.where(column.eq('').or(column.eq(nil)))
  end

  collection.where(blank_where_collection.where_values.reduce(:or))
end

.include_localizations(collection) ⇒ Object



46
47
48
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 46

def self.include_localizations(collection)
  collection.select(localization_include_selects).joins(localization_include_joins)
end

.locale_tablesObject



40
41
42
43
44
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 40

def self.locale_tables
  Releaf.application.config.all_locales.inject({}) do|h, locale|
    h.update(locale => Releaf::I18nDatabase::I18nEntryTranslation.arel_table.alias("#{locale}_data"))
  end
end

.localization_include_joinsObject



50
51
52
53
54
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 50

def self.localization_include_joins
  locale_tables.map do |locale, table|
    "LEFT JOIN #{table.relation.name} AS #{table.name} ON #{locale}_data.i18n_entry_id = releaf_i18n_entries.id AND #{locale}_data.locale = '#{locale}'"
  end
end

.localization_include_locales_columnsObject



60
61
62
63
64
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 60

def self.localization_include_locales_columns
  locale_tables.map do |locale, table|
    ["#{table.name}.text AS #{locale}_localization", "#{table.name}.id AS #{locale}_localization_id"]
  end.flatten
end

.localization_include_selectsObject



56
57
58
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 56

def self.localization_include_selects
  (['releaf_i18n_entries.*'] + localization_include_locales_columns).join(', ')
end

.search(collection, search_string, only_blank) ⇒ Object



4
5
6
7
8
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 4

def self.search(collection, search_string, only_blank)
  collection = filter_by_text(collection, search_string) if search_string.present?
  collection = filter_only_blank_translations(collection) if only_blank == true
  collection
end

.search_columnsObject



32
33
34
# File 'app/lib/releaf/i18n_database/translations_utilities.rb', line 32

def self.search_columns
  [Releaf::I18nDatabase::I18nEntry.arel_table[:key]] + locale_tables.map{|_locale, table| table[:text] }
end