simple_model_translations 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,28 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- simple_model_translations (0.2.3)
4
+ simple_model_translations (0.2.4)
5
5
  activerecord (~> 3.0.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- activemodel (3.0.1)
11
- activesupport (= 3.0.1)
10
+ activemodel (3.0.5)
11
+ activesupport (= 3.0.5)
12
12
  builder (~> 2.1.2)
13
- i18n (~> 0.4.1)
14
- activerecord (3.0.1)
15
- activemodel (= 3.0.1)
16
- activesupport (= 3.0.1)
17
- arel (~> 1.0.0)
13
+ i18n (~> 0.4)
14
+ activerecord (3.0.5)
15
+ activemodel (= 3.0.5)
16
+ activesupport (= 3.0.5)
17
+ arel (~> 2.0.2)
18
18
  tzinfo (~> 0.3.23)
19
- activesupport (3.0.1)
20
- arel (1.0.1)
21
- activesupport (~> 3.0.0)
19
+ activesupport (3.0.5)
20
+ arel (2.0.9)
22
21
  builder (2.1.2)
23
22
  database_cleaner (0.5.2)
24
23
  diff-lcs (1.1.2)
25
- i18n (0.4.1)
24
+ i18n (0.5.0)
26
25
  rspec (2.0.1)
27
26
  rspec-core (~> 2.0.1)
28
27
  rspec-expectations (~> 2.0.1)
@@ -35,13 +34,12 @@ GEM
35
34
  rspec-expectations (~> 2.0.1)
36
35
  shoulda (2.11.3)
37
36
  sqlite3-ruby (1.3.1)
38
- tzinfo (0.3.23)
37
+ tzinfo (0.3.24)
39
38
 
40
39
  PLATFORMS
41
40
  ruby
42
41
 
43
42
  DEPENDENCIES
44
- activerecord (~> 3.0.0)
45
43
  database_cleaner (~> 0.5.2)
46
44
  rspec (~> 2.0.0)
47
45
  shoulda (~> 2.11.3)
@@ -1,19 +1,19 @@
1
1
  module SimpleModelTranslations
2
2
  module Attributes
3
3
  def attributes=(attributes)
4
- I18n.with_locale(attributes.delete(:locale) || current_locale_for_translation) do
4
+ I18n.with_locale(attributes.delete(:locale) || translation_helper.current_locale_for_translation) do
5
5
  super(attributes)
6
6
  end
7
7
  end
8
8
 
9
9
  def update_attributes!(attributes)
10
- I18n.with_locale(attributes.delete(:locale) || current_locale_for_translation) do
10
+ I18n.with_locale(attributes.delete(:locale) || translation_helper.current_locale_for_translation) do
11
11
  super(attributes)
12
12
  end
13
13
  end
14
14
 
15
15
  def update_attributes(attributes)
16
- I18n.with_locale(attributes.delete(:locale) || current_locale_for_translation) do
16
+ I18n.with_locale(attributes.delete(:locale) || translation_helper.current_locale_for_translation) do
17
17
  super(attributes)
18
18
  end
19
19
  end
@@ -21,8 +21,8 @@ module SimpleModelTranslations
21
21
  configure_translations(attributes.extract_options!)
22
22
  translation_class.class_eval(&block) if block_given?
23
23
 
24
- delegate *(attributes + [:to => :current_translation, :allow_nil => true])
25
- delegate *(attributes.map { |attr| "#{attr}=" } + [:to => :find_or_build_current_translation])
24
+ delegate *(attributes + [:to => 'translation_helper.current_translation'.to_sym, :allow_nil => true])
25
+ delegate *(attributes.map { |attr| "#{attr}=" } + [:to => 'translation_helper.find_or_build_current_translation'.to_sym])
26
26
  end
27
27
 
28
28
  private
@@ -1,11 +1,9 @@
1
1
  module SimpleModelTranslations
2
2
  module ClassMethods
3
3
  def with_translations(*args)
4
- if args.empty?
5
- includes(:translations).where("#{translated_column_name(:id)} IS NOT NULL")
6
- else
7
- includes(:translations).where("#{translated_column_name(:locale)} IN (?)", args)
8
- end
4
+ current_scope = joins(:translations)
5
+ current_scope = current_scope.where("#{translated_column_name(:locale)} IN (?)", args) unless args.empty?
6
+ current_scope
9
7
  end
10
8
  alias with_translation with_translations
11
9
 
@@ -1,36 +1,9 @@
1
+ require 'simple_model_translations/translation_helper'
2
+
1
3
  module SimpleModelTranslations
2
4
  module InstanceMethods
3
- def find_translation_by_locale(locale)
4
- translations.detect { |t| t.locale.to_sym == locale }
5
+ def translation_helper
6
+ @translation_helper ||= SimpleModelTranslations::TranslationHelper.new(self)
5
7
  end
6
-
7
- def find_or_build_translation_by_locale(locale)
8
- find_translation_by_locale(locale) || build_translation_for_locale(locale)
9
- end
10
-
11
- def build_translation_for_locale(locale)
12
- translations.build(:locale => locale, foreign_object_key => self)
13
- end
14
-
15
- def current_locale_for_translation
16
- I18n.locale
17
- end
18
-
19
- def default_locale_for_translation
20
- I18n.default_locale
21
- end
22
-
23
- def current_translation
24
- find_translation_by_locale(current_locale_for_translation) || find_translation_by_locale(default_locale_for_translation)
25
- end
26
-
27
- def find_or_build_current_translation
28
- find_or_build_translation_by_locale(current_locale_for_translation)
29
- end
30
-
31
- private
32
- def foreign_object_key
33
- self.class.name.underscore.to_sym
34
- end
35
8
  end
36
9
  end
@@ -0,0 +1,45 @@
1
+ module SimpleModelTranslations
2
+ class TranslationHelper
3
+ def initialize(record, translation_association = :translations)
4
+ @record = record
5
+ @translation_association = translation_association
6
+ end
7
+
8
+ def find_translation_by_locale(locale)
9
+ translations.detect { |t| t.locale.to_sym == locale }
10
+ end
11
+
12
+ def find_or_build_translation_by_locale(locale)
13
+ find_translation_by_locale(locale) || build_translation_for_locale(locale)
14
+ end
15
+
16
+ def build_translation_for_locale(locale)
17
+ translations.build(:locale => locale, foreign_object_key => @record)
18
+ end
19
+
20
+ def current_locale_for_translation
21
+ I18n.locale
22
+ end
23
+
24
+ def default_locale_for_translation
25
+ I18n.default_locale
26
+ end
27
+
28
+ def current_translation
29
+ find_translation_by_locale(current_locale_for_translation) || find_translation_by_locale(default_locale_for_translation)
30
+ end
31
+
32
+ def find_or_build_current_translation
33
+ find_or_build_translation_by_locale(current_locale_for_translation)
34
+ end
35
+
36
+ private
37
+ def foreign_object_key
38
+ @record.class.name.underscore.to_sym
39
+ end
40
+
41
+ def translations
42
+ @record.send(@translation_association)
43
+ end
44
+ end
45
+ end
@@ -2,10 +2,8 @@ module SimpleModelTranslations
2
2
  module Validations
3
3
  class TranslationsValidator < ::ActiveModel::Validator
4
4
  def validate(record)
5
- locales = options[:locales]
6
- locales = [locales] unless locales.respond_to?(:each)
7
- locales.each do |locale|
8
- unless record.find_translation_by_locale(locale)
5
+ Array.wrap(options[:locales]).each do |locale|
6
+ unless record.translation_helper.find_translation_by_locale(locale)
9
7
  record.errors.add(:translations, "miss #{locale} translation")
10
8
  end
11
9
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleModelTranslations
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.4'
3
3
  end
@@ -28,18 +28,18 @@ describe Article do
28
28
  describe '#current_translation' do
29
29
  it 'should return translation for current locale if it exists' do
30
30
  article = Article.create!(:slug => '__hello__', :name => 'Hello', :content => 'World')
31
- article.current_translation.should == article.translations.find_by_locale(I18n.locale)
31
+ article.translation_helper.current_translation.should == article.translations.find_by_locale(I18n.locale)
32
32
  end
33
33
 
34
34
  it 'should return translation for default locale if translation for current locale does not exist' do
35
35
  article = Article.create!(:slug => '__hello__', :name => 'Hello', :content => 'World')
36
36
  I18n.locale = :de
37
- article.current_translation.should == article.translations.find_by_locale(I18n.default_locale)
37
+ article.translation_helper.current_translation.should == article.translations.find_by_locale(I18n.default_locale)
38
38
  end
39
39
 
40
40
  it 'should return nil if translations for current and default locales do not exist' do
41
41
  article = Article.create!(:slug => '__hello__')
42
- article.current_translation.should be_nil
42
+ article.translation_helper.current_translation.should be_nil
43
43
  end
44
44
  end
45
45
  end
data/spec/spec_helper.rb CHANGED
@@ -23,12 +23,12 @@ end
23
23
 
24
24
  RSpec::Matchers.define :have_translation do |locale|
25
25
  match do |record|
26
- !record.find_translation_by_locale(locale).nil?
26
+ !record.translation_helper.find_translation_by_locale(locale).nil?
27
27
  end
28
28
  end
29
29
 
30
30
  RSpec::Matchers.define :have_translated_attribute do |locale, attribute, value|
31
31
  match do |record|
32
- record.find_translation_by_locale(locale).send(attribute) == value
32
+ record.translation_helper.find_translation_by_locale(locale).send(attribute) == value
33
33
  end
34
34
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_model_translations
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Pavel Forkert
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-20 00:00:00 +02:00
18
+ date: 2011-03-13 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -121,6 +121,7 @@ files:
121
121
  - lib/simple_model_translations/base.rb
122
122
  - lib/simple_model_translations/class_methods.rb
123
123
  - lib/simple_model_translations/instance_methods.rb
124
+ - lib/simple_model_translations/translation_helper.rb
124
125
  - lib/simple_model_translations/validations.rb
125
126
  - lib/simple_model_translations/version.rb
126
127
  - lib/simple_model_translations.rb
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
164
  requirements: []
164
165
 
165
166
  rubyforge_project:
166
- rubygems_version: 1.4.1
167
+ rubygems_version: 1.5.2
167
168
  signing_key:
168
169
  specification_version: 3
169
170
  summary: Simple ActiveRecord translations for Rails 3