efficient_translations 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  pkg
2
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara request specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
@@ -17,6 +17,8 @@ Gem::Specification.new do |gem|
17
17
  gem.add_development_dependency 'rake'
18
18
  gem.add_development_dependency 'rspec'
19
19
  gem.add_development_dependency 'sqlite3'
20
+ gem.add_development_dependency 'guard'
21
+ gem.add_development_dependency 'guard-rspec'
20
22
  gem.add_dependency 'activerecord' , '~> 2.3'
21
23
  gem.add_dependency 'activesupport', '~> 2.3'
22
24
 
@@ -0,0 +1,35 @@
1
+ require 'active_support/deprecation'
2
+
3
+ module ActiveSupport
4
+ module Concern
5
+ def self.extended(base)
6
+ base.instance_variable_set("@_dependencies", [])
7
+ end
8
+
9
+ def append_features(base)
10
+ if base.instance_variable_defined?("@_dependencies")
11
+ base.instance_variable_get("@_dependencies") << self
12
+ return false
13
+ else
14
+ return false if base < self
15
+ @_dependencies.each { |dep| base.send(:include, dep) }
16
+ super
17
+ base.extend const_get("ClassMethods") if const_defined?("ClassMethods")
18
+ if const_defined?("InstanceMethods")
19
+ base.send :include, const_get("InstanceMethods")
20
+ ActiveSupport::Deprecation.warn "The InstanceMethods module inside ActiveSupport::Concern will be " \
21
+ "no longer included automatically. Please define instance methods directly in #{self} instead.", caller
22
+ end
23
+ base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block")
24
+ end
25
+ end
26
+
27
+ def included(base = nil, &block)
28
+ if base.nil?
29
+ @_included_block = block
30
+ else
31
+ super
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,11 +1,13 @@
1
1
  require 'active_support'
2
2
  require 'active_record'
3
3
 
4
- dir = File.join File.expand_path(File.dirname __FILE__), 'efficient_translations'
5
- require File.join dir, 'version'
6
- require File.join dir, 'schema'
7
- require File.join dir, 'translation_factory'
8
- require File.join dir, 'translates_method'
4
+ root = File.expand_path File.dirname __FILE__
5
+
6
+ require File.join root, 'active_support/concern'
7
+
8
+ %w(version schema translation_model translatable_model translation_factory translates_method).each do |file|
9
+ require File.join root, "efficient_translations/#{file}"
10
+ end
9
11
 
10
12
  ::ActiveRecord::ConnectionAdapters::AbstractAdapter.send :include, EfficientTranslations::Schema
11
13
  ::ActiveRecord::Base.send :include, EfficientTranslations::TranslatesMethod
@@ -0,0 +1,69 @@
1
+ module EfficientTranslations
2
+ module TranslatableModel
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ # Translation Model
7
+ cattr_accessor :translation_model, :translated_fields
8
+ self.translation_model = TranslationFactory.build_translation_model self
9
+
10
+ # Relationships
11
+ has_many :translations, :class_name => translation_model.name, :dependent => :delete_all
12
+ accepts_nested_attributes_for :translations
13
+
14
+ # Callbacks
15
+ after_save :update_translations!
16
+
17
+ # Scopes
18
+ named_scope :with_translations, :include => :translations
19
+ named_scope :with_current_translation, lambda {
20
+ {
21
+ :include => :translations,
22
+ :conditions => [
23
+ "#{translation_model.table_name}.locale = ? OR #{translation_model.table_name}.locale = ?",
24
+ I18n.locale.to_s, I18n.default_locale.to_s
25
+ ]
26
+ }
27
+ }
28
+ named_scope :with_translation_for, lambda { |locale|
29
+ {
30
+ :inlude => :translations,
31
+ :conditions => [
32
+ "#{translation_model.table_name}.locale = ? OR #{translation_model.table_name}.locale = ?",
33
+ locale.to_s, I18n.default_locale.to_s
34
+ ]
35
+ }
36
+ }
37
+ end
38
+
39
+ private
40
+
41
+ def default_locale_presence_validation
42
+ if efficient_translations_attributes[I18n.default_locale.to_sym].blank? && translations.detect { |t| t.locale.to_sym == I18n.default_locale.to_sym }.nil?
43
+ # people may expect this message to be localized too ;-)
44
+ errors.add :translations, "for #{I18n.default_locale} is missing"
45
+ end
46
+ end
47
+
48
+ # attributes are stored in @efficient_attributes instance variable via setter
49
+ def efficient_translations_attributes
50
+ @efficient_translations_attributes ||= Hash.new { |hash, key| hash[key] = {} }
51
+ end
52
+
53
+ def update_translations!
54
+ if efficient_translations_attributes.present?
55
+ translations true # force reload all translations
56
+ efficient_translations_attributes.each do |locale, attributes|
57
+ translation = translations.detect { |t| t.locale.to_sym == locale }
58
+ translation ||= begin
59
+ self.class.translation_model.new({
60
+ :locale => locale,
61
+ translation_model.translatable_relation_field => self
62
+ })
63
+ end
64
+ translation.update_attributes! attributes
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -6,44 +6,19 @@ module EfficientTranslations
6
6
 
7
7
  module ClassMethods
8
8
  def translates *field_names
9
- make_efficient_translatable! unless defined?(translation_model)
9
+ include TranslatableModel unless included_modules.include? TranslatableModel
10
+ self.translated_fields = field_names
10
11
  field_names.each do |field|
11
12
  define_translation_accessors field
12
13
  end
13
14
  end
14
15
 
15
16
  def validates_presence_of_default_locale
16
- validate :default_locale_required
17
+ validate :default_locale_presence_validation
17
18
  end
18
19
 
19
20
  private
20
21
 
21
- def make_efficient_translatable!
22
- cattr_accessor :translation_model
23
- self.translation_model = TranslationFactory.build self
24
- has_many :translations, :class_name => translation_model.name, :dependent => :delete_all
25
- accepts_nested_attributes_for :translations
26
- after_save :update_translations!
27
-
28
- named_scope :with_translations, :include => :translations
29
- named_scope :with_current_translation, lambda {
30
- {
31
- :include => :translations,
32
- :conditions => [scope_conditions, I18n.locale.to_s, I18n.default_locale.to_s]
33
- }
34
- }
35
- named_scope :with_translation_for, lambda { |locale|
36
- {
37
- :inlude => :translations,
38
- :conditions => [scope_conditions, locale.to_s, I18n.default_locale.to_s]
39
- }
40
- }
41
- end
42
-
43
- def scope_conditions
44
- "#{translation_model.table_name}.locale = ? OR #{translation_model.table_name}.locale = ?"
45
- end
46
-
47
22
  def define_translation_accessors field
48
23
  field = field.to_sym
49
24
  class_eval do
@@ -60,17 +35,16 @@ module EfficientTranslations
60
35
  end
61
36
 
62
37
  define_method "#{field}_translation" do |locale|
63
- translation_field = self.send "#{field}_translation!", locale
38
+ translation_field = send "#{field}_translation!", locale
64
39
  if translation_field
65
40
  translation_field
66
41
  elsif locale.to_sym != I18n.default_locale
67
- self.send "#{field}_translation!", I18n.default_locale
42
+ send "#{field}_translation!", I18n.default_locale
68
43
  end
69
44
  end
70
45
 
71
46
  define_method "set_#{field}_translation" do |locale, value|
72
- locale = locale.to_sym
73
- efficient_translations_attributes[locale][field] = value
47
+ efficient_translations_attributes[locale.to_sym][field] = value
74
48
  end
75
49
 
76
50
  define_method field do
@@ -85,7 +59,7 @@ module EfficientTranslations
85
59
  self.send "set_#{field}_translation", I18n.locale, value
86
60
  end
87
61
 
88
- define_method("#{field}_translations") do
62
+ define_method "#{field}_translations" do
89
63
  found = {}
90
64
  efficient_translations_attributes.each do |locale, translation|
91
65
  found[locale] = translation[field]
@@ -98,34 +72,5 @@ module EfficientTranslations
98
72
  end
99
73
  end
100
74
  end
101
-
102
- # instance methods - no need to put them a module
103
- private
104
-
105
- # attributes are stored in @efficient_attributes instance variable via setter
106
- def efficient_translations_attributes
107
- @efficient_translations_attributes ||= Hash.new { |hash, key| hash[key] = {} }
108
- end
109
-
110
- def update_translations!
111
- if efficient_translations_attributes.present?
112
- translations true # force reload all translations
113
- efficient_translations_attributes.each do |locale, attributes|
114
- translation = translations.detect { |t| t.locale.to_sym == locale } || begin
115
- args = { :locale => locale }
116
- args[self.class.translation_model.translatable_relation_field] = self
117
- self.class.translation_model.new args
118
- end
119
- translation.update_attributes! attributes
120
- end
121
- end
122
- end
123
-
124
- def default_locale_required
125
- if efficient_translations_attributes[I18n.default_locale.to_sym].blank? && translations.detect { |t| t.locale.to_sym == I18n.default_locale.to_sym }.nil?
126
- # people may expect this message to be localized too ;-)
127
- errors.add :translations, "for #{I18n.default_locale} is missing"
128
- end
129
- end
130
75
  end
131
76
  end
@@ -1,29 +1,19 @@
1
1
  module EfficientTranslations
2
2
  module TranslationFactory
3
- def self.build base_model
4
- if base_model.const_defined? :Translation
5
- base_model.const_get :Translation
3
+ def self.translation_model_for model
4
+ if model.const_defined? :Translation
5
+ model.const_get :Translation
6
6
  else
7
- klass = base_model.const_set :Translation, Class.new(ActiveRecord::Base)
8
- klass.class_eval do
9
- table_name = "#{base_model.table_name.singularize}_translations"
10
- cattr_accessor :translatable_model, :translatable_relation_field
11
- self.translatable_model = base_model
12
- self.translatable_relation_field = base_model.model_name.underscore.gsub '/', '_'
13
-
14
- belongs_to translatable_relation_field, :class_name => self.translatable_model.name
15
- before_save :stringify_locale!
16
-
17
- named_scope :for_locale, lambda { |locale|
18
- { :conditions => ['locale = ? OR locale = ?', locale.to_s, I18n.locale.to_s] }
19
- }
20
-
21
- define_method :stringify_locale! do
22
- self.locale = locale.to_s
23
- end
24
- end
25
- klass
7
+ translation = model.const_set :Translation, Class.new(ActiveRecord::Base)
8
+ translation.send :include, TranslationModel
9
+ translation
26
10
  end
27
11
  end
12
+
13
+ def self.build_translation_model base_model
14
+ klass = translation_model_for base_model
15
+ klass.build_for base_model
16
+ klass
17
+ end
28
18
  end
29
19
  end
@@ -0,0 +1,36 @@
1
+ module EfficientTranslations
2
+ module TranslationModel
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ extend ClassMethods
7
+
8
+ cattr_accessor :translatable_model, :translatable_relation_field
9
+
10
+ before_save :stringify_locale!
11
+
12
+ named_scope :for_locale, lambda { |locale|
13
+ { :conditions => ['locale = ? OR locale = ?', locale.to_s, I18n.locale.to_s] }
14
+ }
15
+ end
16
+
17
+ module ClassMethods
18
+ def build_for base_model
19
+ if translatable_model
20
+ raise 'This translation model is already built'
21
+ else
22
+ self.translatable_model = base_model
23
+ self.translatable_relation_field = base_model.table_name.singularize.to_sym
24
+
25
+ belongs_to translatable_relation_field, :class_name => self.translatable_model.name
26
+ end
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def stringify_locale!
33
+ self.locale = locale.to_s
34
+ end
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module EfficientTranslations
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ module EfficientTranslations
4
+ describe TranslatableModel do
5
+ it 'is included in WorkingModel' do
6
+ WorkingModel.included_modules.should include TranslatableModel
7
+ end
8
+
9
+ it 'defines a translation model accessor' do
10
+ WorkingModel.translation_model.should == WorkingModel::Translation
11
+ end
12
+
13
+ it 'defines a translated_fields accessor' do
14
+ WorkingModel.should respond_to :translated_fields
15
+ end
16
+
17
+ it 'defines an has_many relationship with its translation child' do
18
+ WorkingModel.new.should respond_to :translations
19
+ end
20
+
21
+ it 'defines an after_save callback to update translations' do
22
+ WorkingModel.after_save_callback_chain.map(&:method).should include :update_translations!
23
+ end
24
+
25
+ it 'defines some named scopes' do
26
+ %w(with_translations with_current_translation with_translation_for).each do |m|
27
+ WorkingModel.should respond_to m
28
+ end
29
+ end
30
+
31
+ context '#default_locale_presence_validation' do
32
+ context 'when default locale does not exist' do
33
+ it 'adds an error' do
34
+ model = WorkingModel.new
35
+ model.send :default_locale_presence_validation
36
+ model.errors.should_not be_empty
37
+ end
38
+ end
39
+
40
+ context 'when default locale exist' do
41
+ it 'does not add an error' do
42
+ model = WorkingModel.new
43
+ model.set_name_translation I18n.default_locale, 'w'
44
+ model.send :default_locale_presence_validation
45
+ model.errors.should be_empty
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -24,17 +24,10 @@ describe EfficientTranslations do
24
24
  lambda { model.translates :content }.should_not raise_error
25
25
  end
26
26
 
27
- it 'should generate the translation model the first time it\'s invoked' do
27
+ it 'fills a translated_fields list' do
28
28
  model = my_model_class
29
- model.should_receive :make_efficient_translatable!
30
29
  model.translates :name
31
- end
32
-
33
- it 'should not regenerate the translation model when called multiple times' do
34
- model = my_model_class
35
- model.translates :name
36
- model.should_not_receive :make_efficient_translatable!
37
- model.translates :content
30
+ model.translated_fields.should =~ [:name]
38
31
  end
39
32
  end
40
33
 
@@ -1,58 +1,57 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe EfficientTranslations::TranslationFactory do
4
- before :each do
5
- Kernel.silence_warnings do
6
- @model_class = Object.const_set :MyModel, Class.new(ActiveRecord::Base)
7
- end
8
- end
9
-
10
- describe '::build' do
11
- context 'when no translation model is found' do
12
- before do
13
- @klass = Class.new(ActiveRecord::Base)
14
- @model_class.stub :const_set => @klass
15
- end
16
-
17
- it 'should create a new ::Translation class' do
18
- @model_class.should_receive(:const_set).with(:Translation, kind_of(Class)) { |name, klass| klass }
19
- EfficientTranslations::TranslationFactory::build @model_class
20
- end
21
-
22
- it 'should define a belongs_to association to the main model' do
23
- @klass.should_receive(:belongs_to)
24
- EfficientTranslations::TranslationFactory::build @model_class
3
+ module EfficientTranslations
4
+ describe TranslationFactory do
5
+ before :each do
6
+ Kernel.silence_warnings do
7
+ @model_class = Object.const_set :MyModel, Class.new(ActiveRecord::Base)
25
8
  end
9
+ end
26
10
 
27
- it 'should assign the translatable model in an accessor' do
28
- translation = EfficientTranslations::TranslationFactory::build @model_class
29
- translation.translatable_model.should == @model_class
30
- end
11
+ describe '::translation_model' do
12
+ context "the first time it's invoked on a model" do
13
+ it 'defines the translation model' do
14
+ expect { @model_class.const_get :Translation }.to raise_error NameError
15
+ TranslationFactory.translation_model_for @model_class
16
+ expect { @model_class.const_get :Translation }.to_not raise_error NameError
17
+ end
31
18
 
32
- it 'should assign the translatable model field in an accessor' do
33
- translation = EfficientTranslations::TranslationFactory::build @model_class
34
- translation.translatable_relation_field.should == @model_class.name.underscore.gsub('/','_')
19
+ it 'includes the TranslationModel module in the translation model' do
20
+ TranslationFactory.translation_model_for(@model_class).included_modules.should include TranslationModel
21
+ end
35
22
  end
36
23
 
37
- it 'should return the created translation class' do
38
- klass = Class.new(ActiveRecord::Base)
39
- @model_class.stub :const_set => klass
40
- EfficientTranslations::TranslationFactory::build(@model_class).should == klass
24
+ it 'returns the existing translation_model' do
25
+ t = TranslationFactory.translation_model_for @model_class
26
+ TranslationFactory.translation_model_for(@model_class).should == t
41
27
  end
42
28
  end
43
29
 
44
- context 'when a translation model is found' do
45
- it 'should not create a ::Translation class' do
46
- EfficientTranslations::TranslationFactory::build @model_class
47
- @model_class.should_not_receive(:const_set)
48
- EfficientTranslations::TranslationFactory::build @model_class
49
- end
50
-
51
- it 'should return the already defined translation class' do
52
- klass = Class.new(ActiveRecord::Base)
53
- @model_class.stub :const_set => klass
54
- EfficientTranslations::TranslationFactory::build @model_class
55
- EfficientTranslations::TranslationFactory::build(@model_class).should == klass
30
+ describe '::build_translation_model' do
31
+ before { @translation_model = TranslationFactory.translation_model_for @model_class }
32
+
33
+ context 'when translation model is not built' do
34
+ it 'sets translatable model reader' do
35
+ @translation_model.translatable_model.should be_nil
36
+ TranslationFactory.build_translation_model @model_class
37
+ @translation_model.translatable_model.should == @model_class
38
+ end
39
+
40
+ it 'sets translatable relation field reader' do
41
+ @translation_model.translatable_relation_field.should be_nil
42
+ TranslationFactory.build_translation_model @model_class
43
+ @translation_model.translatable_relation_field.should == :my_model
44
+ end
45
+ end
46
+
47
+ context 'when translation model is already built' do
48
+ it 'raises an error' do
49
+ TranslationFactory.build_translation_model(@model_class)
50
+ TranslationFactory.translation_model_for(@model_class).should_not_receive(:belongs_to)
51
+ expect {
52
+ TranslationFactory.build_translation_model @model_class
53
+ }.to raise_error
54
+ end
56
55
  end
57
56
  end
58
57
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ module EfficientTranslations
4
+ describe TranslationModel do
5
+ it 'is included in WorkingModel::Translation' do
6
+ WorkingModel::Translation.included_modules.should include TranslationModel
7
+ end
8
+
9
+ it 'defines a stringify_locale! method' do
10
+ instance = WorkingModel::Translation.new :locale => :us
11
+ expect {
12
+ instance.send :stringify_locale!
13
+ }.to change(instance, :locale).to 'us'
14
+ end
15
+
16
+ it 'defines a translatable_model reader' do
17
+ WorkingModel::Translation.translatable_model.should == WorkingModel
18
+ end
19
+
20
+ it 'defines a translatable_relation_field reader' do
21
+ WorkingModel::Translation.translatable_relation_field.should == :working_model
22
+ end
23
+
24
+ it 'defines a for_locale named_scope' do
25
+ WorkingModel::Translation.should respond_to :for_locale
26
+ end
27
+
28
+ it 'defines a before_save filter to force the locale in string' do
29
+ WorkingModel::Translation.before_save_callback_chain.map(&:method).should include :stringify_locale!
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,8 @@
1
1
  class WorkingModel < ActiveRecord::Base
2
2
  translates :name, :content
3
+ end
4
+
5
+ module Sample
6
+ class NamespacedModel < ActiveRecord::Base
7
+ end
3
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: efficient_translations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-24 00:00:00.000000000Z
12
+ date: 2012-07-31 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70331397226260 !ruby/object:Gem::Requirement
16
+ requirement: &70173405313380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70331397226260
24
+ version_requirements: *70173405313380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70331397225580 !ruby/object:Gem::Requirement
27
+ requirement: &70173405312760 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70331397225580
35
+ version_requirements: *70173405312760
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: sqlite3
38
- requirement: &70331397224860 !ruby/object:Gem::Requirement
38
+ requirement: &70173405312000 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,32 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70331397224860
46
+ version_requirements: *70173405312000
47
+ - !ruby/object:Gem::Dependency
48
+ name: guard
49
+ requirement: &70173405311100 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70173405311100
58
+ - !ruby/object:Gem::Dependency
59
+ name: guard-rspec
60
+ requirement: &70173405310360 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70173405310360
47
69
  - !ruby/object:Gem::Dependency
48
70
  name: activerecord
49
- requirement: &70331397223800 !ruby/object:Gem::Requirement
71
+ requirement: &70173405309360 !ruby/object:Gem::Requirement
50
72
  none: false
51
73
  requirements:
52
74
  - - ~>
@@ -54,10 +76,10 @@ dependencies:
54
76
  version: '2.3'
55
77
  type: :runtime
56
78
  prerelease: false
57
- version_requirements: *70331397223800
79
+ version_requirements: *70173405309360
58
80
  - !ruby/object:Gem::Dependency
59
81
  name: activesupport
60
- requirement: &70331397222920 !ruby/object:Gem::Requirement
82
+ requirement: &70173405308540 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ~>
@@ -65,7 +87,7 @@ dependencies:
65
87
  version: '2.3'
66
88
  type: :runtime
67
89
  prerelease: false
68
- version_requirements: *70331397222920
90
+ version_requirements: *70173405308540
69
91
  description: Translation library for ActiveRecord models in Rails 2
70
92
  email:
71
93
  - nicola@nicolaracco.com
@@ -74,20 +96,26 @@ extensions: []
74
96
  extra_rdoc_files: []
75
97
  files:
76
98
  - .gitignore
99
+ - .rspec
77
100
  - Gemfile
78
- - Gemfile.lock
101
+ - Guardfile
79
102
  - README.md
80
103
  - Rakefile
81
104
  - efficient_translations.gemspec
105
+ - lib/active_support/concern.rb
82
106
  - lib/efficient_translations.rb
83
107
  - lib/efficient_translations/schema.rb
108
+ - lib/efficient_translations/translatable_model.rb
84
109
  - lib/efficient_translations/translates_method.rb
85
110
  - lib/efficient_translations/translation_factory.rb
111
+ - lib/efficient_translations/translation_model.rb
86
112
  - lib/efficient_translations/version.rb
87
113
  - spec/fixtures/schema.rb
88
114
  - spec/lib/efficient_translations/schema_spec.rb
115
+ - spec/lib/efficient_translations/translatable_model_spec.rb
89
116
  - spec/lib/efficient_translations/translates_method_spec.rb
90
117
  - spec/lib/efficient_translations/translation_factory_spec.rb
118
+ - spec/lib/efficient_translations/translation_model_spec.rb
91
119
  - spec/spec_helper.rb
92
120
  - spec/support/fake_schema_adapter.rb
93
121
  - spec/support/working_model.rb
@@ -105,7 +133,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
133
  version: '0'
106
134
  segments:
107
135
  - 0
108
- hash: -962575030856720435
136
+ hash: 1567763944166599876
109
137
  required_rubygems_version: !ruby/object:Gem::Requirement
110
138
  none: false
111
139
  requirements:
@@ -114,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
142
  version: '0'
115
143
  segments:
116
144
  - 0
117
- hash: -962575030856720435
145
+ hash: 1567763944166599876
118
146
  requirements: []
119
147
  rubyforge_project:
120
148
  rubygems_version: 1.8.10
@@ -124,8 +152,10 @@ summary: Translation library for ActiveRecord models in Rails 2 with an eye on p
124
152
  test_files:
125
153
  - spec/fixtures/schema.rb
126
154
  - spec/lib/efficient_translations/schema_spec.rb
155
+ - spec/lib/efficient_translations/translatable_model_spec.rb
127
156
  - spec/lib/efficient_translations/translates_method_spec.rb
128
157
  - spec/lib/efficient_translations/translation_factory_spec.rb
158
+ - spec/lib/efficient_translations/translation_model_spec.rb
129
159
  - spec/spec_helper.rb
130
160
  - spec/support/fake_schema_adapter.rb
131
161
  - spec/support/working_model.rb
@@ -1,33 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- efficient_translations (0.0.8)
5
- activerecord (~> 2.3)
6
- activesupport (~> 2.3)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- activerecord (2.3.14)
12
- activesupport (= 2.3.14)
13
- activesupport (2.3.14)
14
- diff-lcs (1.1.3)
15
- rake (0.9.2.2)
16
- rspec (2.7.0)
17
- rspec-core (~> 2.7.0)
18
- rspec-expectations (~> 2.7.0)
19
- rspec-mocks (~> 2.7.0)
20
- rspec-core (2.7.1)
21
- rspec-expectations (2.7.0)
22
- diff-lcs (~> 1.1.2)
23
- rspec-mocks (2.7.0)
24
- sqlite3 (1.3.5)
25
-
26
- PLATFORMS
27
- ruby
28
-
29
- DEPENDENCIES
30
- efficient_translations!
31
- rake
32
- rspec
33
- sqlite3