Skip to content

Commit

Permalink
Kaminary support
Browse files Browse the repository at this point in the history
Configurable table names
  • Loading branch information
rkyrychuk committed Nov 22, 2011
1 parent 0635d3a commit 33c02da
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 26 deletions.
11 changes: 8 additions & 3 deletions Gemfile.lock
Expand Up @@ -51,7 +51,12 @@ GEM
ffi (1.0.9)
hike (1.2.1)
i18n (0.6.0)
jquery-rails (1.0.18)
railties (~> 3.0)
thor (~> 0.14)
json_pure (1.6.1)
kaminari (0.12.4)
rails (>= 3.0.0)
mail (2.3.0)
i18n (>= 0.4.0)
mime-types (~> 1.16)
Expand Down Expand Up @@ -98,7 +103,7 @@ GEM
sprockets (2.0.0)
hike (~> 1.2)
rack (~> 1.0)
tilt (!= 1.3.0, ~> 1.1)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.4)
sqlite3-ruby (1.3.3)
sqlite3 (>= 1.3.3)
Expand All @@ -108,7 +113,6 @@ GEM
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.29)
will_paginate (3.0.2)
xpath (0.1.4)
nokogiri (~> 1.3)
ya2yaml (0.30)
Expand All @@ -119,8 +123,9 @@ PLATFORMS
DEPENDENCIES
capybara
factory_girl_rails
jquery-rails
kaminari
mocha
rails
sqlite3-ruby
will_paginate
ya2yaml
37 changes: 19 additions & 18 deletions app/models/tolk/locale.rb
@@ -1,6 +1,5 @@
module Tolk
class Locale < ActiveRecord::Base
set_table_name "tolk_locales"

MAPPING = {
'ar' => 'Arabic',
Expand Down Expand Up @@ -60,7 +59,8 @@ class Locale < ActiveRecord::Base
self.locales_config_path = "#{Rails.root}/config/locales"

cattr_accessor :primary_locale_name
self.primary_locale_name = I18n.default_locale.to_s
#self.primary_locale_name = I18n.default_locale.to_s
self.primary_locale_name = "en"

include Tolk::Sync
include Tolk::Import
Expand Down Expand Up @@ -112,29 +112,29 @@ def pluralization_data?(data)
end

def has_updated_translations?
translations.count(:conditions => {:'tolk_translations.primary_updated' => true}) > 0
translations.where(:primary_updated => true).count > 0
end

def phrases_with_translation(page = nil)
find_phrases_with_translations(page, :'tolk_translations.primary_updated' => false)
find_phrases_with_translations(page, :"#{Tolk::Translation.table_name}.primary_updated" => false)
end

def phrases_with_updated_translation(page = nil)
find_phrases_with_translations(page, :'tolk_translations.primary_updated' => true)
find_phrases_with_translations(page, :"#{Tolk::Translation.table_name}.primary_updated" => true)
end

def count_phrases_without_translation
existing_ids = self.translations.all(:select => 'tolk_translations.phrase_id').map(&:phrase_id).uniq
existing_ids = self.translations.all(:select => "#{Tolk::Translation.table_name}.phrase_id").map(&:phrase_id).uniq
Tolk::Phrase.count - existing_ids.count
end

def phrases_without_translation(page = nil, options = {})
phrases = Tolk::Phrase.scoped(:order => 'tolk_phrases.key ASC')
phrases = Tolk::Phrase.scoped(:order => "#{Tolk::Phrase.table_name}.key ASC")

existing_ids = self.translations.all(:select => 'tolk_translations.phrase_id').map(&:phrase_id).uniq
phrases = phrases.includes(:translations => [:locale]).scoped(:conditions => ['tolk_phrases.id NOT IN (?)', existing_ids]) if existing_ids.present?
existing_ids = self.translations.all(:select => "#{Tolk::Translation.table_name}.phrase_id").map(&:phrase_id).uniq
phrases = phrases.includes(:translations => [:locale]).scoped(:conditions => ["#{Tolk::Phrase.table_name}.id NOT IN (?)", existing_ids]) if existing_ids.present?

result = phrases.paginate(:page => page, :per_page => Tolk::Phrase.per_page)#page(page).per(Tolk::Phrase.per_page)
result = phrases.page(page).per(Tolk::Phrase.per_page)
result
end

Expand All @@ -148,19 +148,19 @@ def search_phrases(query, scope, page = nil, options = {})
self.translations.containing_text(query)
end

phrases = Tolk::Phrase.scoped(:order => 'tolk_phrases.key ASC')
phrases = phrases.scoped(:conditions => ['tolk_phrases.id IN(?)', translations.map(&:phrase_id).uniq])
phrases = Tolk::Phrase.scoped(:order => "#{Tolk::Phrase.table_name}.key ASC")
phrases = phrases.scoped(:conditions => ["#{Tolk::Phrase.table_name}.id IN(?)", translations.map(&:phrase_id).uniq])
phrases.page(page)
end

def search_phrases_without_translation(query, page = nil, options = {})
return phrases_without_translation(page, options) unless query.present?

phrases = Tolk::Phrase.scoped(:order => 'tolk_phrases.key ASC')
phrases = Tolk::Phrase.scoped(:order => "#{Tolk::Phrase.table_name}.key ASC")

found_translations_ids = Tolk::Locale.primary_locale.translations.all(:conditions => ["tolk_translations.text LIKE ?", "%#{query}%"], :select => 'tolk_translations.phrase_id').map(&:phrase_id).uniq
existing_ids = self.translations.all(:select => 'tolk_translations.phrase_id').map(&:phrase_id).uniq
phrases = phrases.scoped(:conditions => ['tolk_phrases.id NOT IN (?) AND tolk_phrases.id IN(?)', existing_ids, found_translations_ids]) if existing_ids.present?
found_translations_ids = Tolk::Locale.primary_locale.translations.all(:conditions => ["#{Tolk::Translation.table_name}.text LIKE ?", "%#{query}%"], :select => "#{Tolk::Translation.table_name}.phrase_id").map(&:phrase_id).uniq
existing_ids = self.translations.all(:select => "#{Tolk::Translation.table_name}.phrase_id").map(&:phrase_id).uniq
phrases = phrases.scoped(:conditions => ["#{Tolk::Phrase.table_name}.id NOT IN (?) AND #{Tolk::Phrase.table_name}.id IN(?)", existing_ids, found_translations_ids]) if existing_ids.present?

result = phrases.page(page)
result
Expand Down Expand Up @@ -218,8 +218,9 @@ def remove_invalid_translations_from_target

def find_phrases_with_translations(page, conditions = {})
result = Tolk::Phrase.page(page).find(:all,
:conditions => { :'tolk_translations.locale_id' => self.id }.merge(conditions),
:joins => :translations, :order => 'tolk_phrases.key ASC')
:conditions => {:"#{Tolk::Translation.table_name}.locale_id" => self.id }.merge(conditions),
:joins => :translations, :order => "#{Tolk::Phrase.table_name}.key ASC")


result.each do |phrase|
phrase.translation = phrase.translations.for(self)
Expand Down
1 change: 0 additions & 1 deletion app/models/tolk/phrase.rb
@@ -1,6 +1,5 @@
module Tolk
class Phrase < ActiveRecord::Base
set_table_name "tolk_phrases"

validates_uniqueness_of :key

Expand Down
2 changes: 0 additions & 2 deletions app/models/tolk/translation.rb
@@ -1,7 +1,5 @@
module Tolk
class Translation < ActiveRecord::Base
set_table_name "tolk_translations"

scope :containing_text, lambda {|query| where("#{self.table_name}.text LIKE ?", "%#{query}%") }

serialize :text
Expand Down
3 changes: 2 additions & 1 deletion lib/tolk.rb
@@ -1,8 +1,9 @@
require 'will_paginate'
require 'kaminari'
require 'ya2yaml'
require 'tolk/engine'
require 'tolk/sync'
require 'tolk/import'

module Tolk

end
2 changes: 1 addition & 1 deletion tolk.gemspec
Expand Up @@ -9,7 +9,7 @@ Gem::Specification.new do |s|
s.homepage = 'http://www.rubyonrails.org'

s.platform = Gem::Platform::RUBY
s.add_dependency('will_paginate')
s.add_dependency('kaminari')
s.add_dependency('jquery-rails')
s.add_dependency('ya2yaml', '~> 0.26')

Expand Down

0 comments on commit 33c02da

Please sign in to comment.