globalize3 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3415e9c85d0bbf0c55f9006d9ad91f7522c2ccac
4
+ data.tar.gz: 8faa411a7dc53b2cda49fcc1cab52c336c22a7c2
5
+ SHA512:
6
+ metadata.gz: a4d3c7485e0a2ddfa68dd471a40d5044b45c439f2f76b5a93186e5e28d7bae8993f8e20b882f659ca5a6baeb410580ce0bb0ca453159d58cba38dfa7cf94c6b8
7
+ data.tar.gz: 837b3b58a48ddf844d7796aabdac0b7436441d82b468ca1facebbbd6002d20435e672238e52de202016e843798ede5fbd189fc092ac87e3f60259320a0bb6838
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
@@ -1,85 +1,85 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- globalize3 (0.3.0)
4
+ globalize3 (0.3.1)
5
5
  activemodel (>= 3.0.0)
6
6
  activerecord (>= 3.0.0)
7
7
  paper_trail (~> 2)
8
8
 
9
9
  GEM
10
- remote: http://rubygems.org/
10
+ remote: https://rubygems.org/
11
11
  specs:
12
- actionpack (3.2.9)
13
- activemodel (= 3.2.9)
14
- activesupport (= 3.2.9)
12
+ actionpack (3.2.15)
13
+ activemodel (= 3.2.15)
14
+ activesupport (= 3.2.15)
15
15
  builder (~> 3.0.0)
16
16
  erubis (~> 2.7.0)
17
17
  journey (~> 1.0.4)
18
- rack (~> 1.4.0)
18
+ rack (~> 1.4.5)
19
19
  rack-cache (~> 1.2)
20
20
  rack-test (~> 0.6.1)
21
21
  sprockets (~> 2.2.1)
22
- activemodel (3.2.9)
23
- activesupport (= 3.2.9)
22
+ activemodel (3.2.15)
23
+ activesupport (= 3.2.15)
24
24
  builder (~> 3.0.0)
25
- activerecord (3.2.9)
26
- activemodel (= 3.2.9)
27
- activesupport (= 3.2.9)
25
+ activerecord (3.2.15)
26
+ activemodel (= 3.2.15)
27
+ activesupport (= 3.2.15)
28
28
  arel (~> 3.0.2)
29
29
  tzinfo (~> 0.3.29)
30
- activesupport (3.2.9)
31
- i18n (~> 0.6)
30
+ activesupport (3.2.15)
31
+ i18n (~> 0.6, >= 0.6.4)
32
32
  multi_json (~> 1.0)
33
33
  arel (3.0.2)
34
34
  builder (3.0.4)
35
- database_cleaner (0.5.2)
35
+ database_cleaner (0.6.7)
36
36
  erubis (2.7.0)
37
- hike (1.2.1)
38
- i18n (0.6.1)
37
+ hike (1.2.3)
38
+ i18n (0.6.5)
39
39
  journey (1.0.4)
40
- json (1.7.5)
40
+ json (1.8.1)
41
41
  metaclass (0.0.1)
42
- mocha (0.12.3)
42
+ mocha (0.14.0)
43
43
  metaclass (~> 0.0.1)
44
- multi_json (1.5.0)
45
- paper_trail (2.6.4)
44
+ multi_json (1.8.2)
45
+ paper_trail (2.7.2)
46
46
  activerecord (~> 3.0)
47
47
  railties (~> 3.0)
48
48
  pathname_local (0.0.2)
49
- rack (1.4.1)
49
+ rack (1.4.5)
50
50
  rack-cache (1.2)
51
51
  rack (>= 0.4)
52
- rack-ssl (1.3.2)
52
+ rack-ssl (1.3.3)
53
53
  rack
54
54
  rack-test (0.6.2)
55
55
  rack (>= 1.0)
56
- railties (3.2.9)
57
- actionpack (= 3.2.9)
58
- activesupport (= 3.2.9)
56
+ railties (3.2.15)
57
+ actionpack (= 3.2.15)
58
+ activesupport (= 3.2.15)
59
59
  rack-ssl (~> 1.3.2)
60
60
  rake (>= 0.8.7)
61
61
  rdoc (~> 3.4)
62
62
  thor (>= 0.14.6, < 2.0)
63
- rake (10.0.3)
64
- rdoc (3.12)
63
+ rake (10.1.0)
64
+ rdoc (3.12.2)
65
65
  json (~> 1.4)
66
66
  sprockets (2.2.2)
67
67
  hike (~> 1.2)
68
68
  multi_json (~> 1.0)
69
69
  rack (~> 1.0)
70
70
  tilt (~> 1.1, != 1.3.0)
71
- sqlite3 (1.3.6)
71
+ sqlite3 (1.3.7)
72
72
  test_declarative (0.0.5)
73
- thor (0.16.0)
74
- tilt (1.3.3)
75
- tzinfo (0.3.35)
73
+ thor (0.18.1)
74
+ tilt (1.4.1)
75
+ tzinfo (0.3.38)
76
76
 
77
77
  PLATFORMS
78
78
  java
79
79
  ruby
80
80
 
81
81
  DEPENDENCIES
82
- database_cleaner (= 0.5.2)
82
+ database_cleaner (~> 0.6.0)
83
83
  globalize3!
84
84
  mocha
85
85
  pathname_local
@@ -2,10 +2,12 @@ require 'active_record'
2
2
  require 'patches/active_record/xml_attribute_serializer'
3
3
  require 'patches/active_record/query_method'
4
4
  require 'patches/active_record/uniqueness_validator'
5
+ require 'patches/active_record/relation'
5
6
 
6
7
  module Globalize
7
8
  autoload :ActiveRecord, 'globalize/active_record'
8
9
  autoload :Versioning, 'globalize/versioning'
10
+ autoload :Interpolation, 'globalize/interpolation'
9
11
 
10
12
  class << self
11
13
  def locale
@@ -18,9 +20,12 @@ module Globalize
18
20
 
19
21
  def with_locale(locale, &block)
20
22
  previous_locale = read_locale
21
- set_locale(locale)
22
- result = yield(locale)
23
- set_locale(previous_locale)
23
+ begin
24
+ set_locale(locale)
25
+ result = yield(locale)
26
+ ensure
27
+ set_locale(previous_locale)
28
+ end
24
29
  result
25
30
  end
26
31
 
@@ -4,45 +4,19 @@ module Globalize
4
4
  def translates(*attr_names)
5
5
 
6
6
  options = attr_names.extract_options!
7
- attr_names = attr_names.map(&:to_sym)
8
-
9
- unless translates?
10
- options[:table_name] ||= "#{table_name.singularize}_translations"
11
- options[:foreign_key] ||= class_name.foreign_key
12
-
13
- class_attribute :translated_attribute_names, :translation_options, :fallbacks_for_empty_translations
14
- self.translated_attribute_names = []
15
- self.translation_options = options
16
- self.fallbacks_for_empty_translations = options[:fallbacks_for_empty_translations]
17
-
18
- include InstanceMethods
19
- extend ClassMethods, Migration
20
-
21
- translation_class.table_name = options[:table_name] if translation_class.table_name.blank?
22
-
23
- has_many :translations, :class_name => translation_class.name,
24
- :foreign_key => options[:foreign_key],
25
- :dependent => :destroy,
26
- :extend => HasManyExtensions
27
-
28
- after_create :save_translations!
29
- after_update :save_translations!
30
-
31
- if options[:versioning]
32
- ::ActiveRecord::Base.extend(Globalize::Versioning::PaperTrail)
7
+ setup_translates!(options) unless translates?
33
8
 
34
- translation_class.has_paper_trail
35
- delegate :version, :versions, :to => :translation
36
- end
9
+ attr_names = attr_names.map(&:to_sym)
10
+ attr_names -= translated_attribute_names if defined?(translated_attribute_names)
37
11
 
12
+ if attr_names.present?
38
13
  translation_class.instance_eval %{
39
- attr_accessible :#{(attr_names | [:locale]).join(', :')}
14
+ attr_accessible :#{attr_names.join(', :')}
40
15
  }
41
16
 
42
- # detect and apply serialization
43
17
  attr_names.each do |attr_name|
18
+ # Detect and apply serialization.
44
19
  serializer = self.serialized_attributes[attr_name.to_s]
45
-
46
20
  if serializer.present?
47
21
  if defined?(::ActiveRecord::Coders::YAMLColumn) &&
48
22
  serializer.is_a?(::ActiveRecord::Coders::YAMLColumn)
@@ -52,12 +26,15 @@ module Globalize
52
26
 
53
27
  translation_class.send :serialize, attr_name, serializer
54
28
  end
29
+
30
+ # Create accessors for the attribute.
31
+ translated_attr_accessor(attr_name)
32
+ translations_accessor(attr_name)
33
+
34
+ # Add attribute to the list.
35
+ self.translated_attribute_names << attr_name
55
36
  end
56
37
  end
57
-
58
- new_attr_names = attr_names - translated_attribute_names
59
- new_attr_names.each { |attr_name| translated_attr_accessor(attr_name) }
60
- self.translated_attribute_names += new_attr_names
61
38
  end
62
39
 
63
40
  def class_name
@@ -70,6 +47,44 @@ module Globalize
70
47
  def translates?
71
48
  included_modules.include?(InstanceMethods)
72
49
  end
50
+
51
+ protected
52
+ def setup_translates!(options)
53
+ options[:table_name] ||= "#{table_name.singularize}_translations"
54
+ options[:foreign_key] ||= class_name.foreign_key
55
+
56
+ class_attribute :translated_attribute_names, :translation_options, :fallbacks_for_empty_translations
57
+ self.translated_attribute_names = []
58
+ self.translation_options = options
59
+ self.fallbacks_for_empty_translations = options[:fallbacks_for_empty_translations]
60
+
61
+ include InstanceMethods
62
+ extend ClassMethods, Migration
63
+
64
+ translation_class.table_name = options[:table_name]
65
+
66
+ has_many :translations, :class_name => translation_class.name,
67
+ :foreign_key => options[:foreign_key],
68
+ :dependent => :destroy,
69
+ :extend => HasManyExtensions,
70
+ :autosave => false
71
+
72
+ after_create :save_translations!
73
+ after_update :save_translations!
74
+
75
+ if options[:versioning]
76
+ if options[:versioning].is_a?(Hash)
77
+ translation_class.versioned options[:versioning]
78
+ else
79
+ ::ActiveRecord::Base.extend(Globalize::Versioning::PaperTrail)
80
+
81
+ translation_class.has_paper_trail
82
+ delegate :version, :versions, :to => :translation
83
+ end
84
+ end
85
+
86
+ translation_class.instance_eval %{ attr_accessible :locale }
87
+ end
73
88
  end
74
89
 
75
90
  module HasManyExtensions
@@ -19,6 +19,10 @@ module Globalize
19
19
  return nil
20
20
  end
21
21
 
22
+ def stash_contains?(locale, name)
23
+ stash.contains?(locale, name)
24
+ end
25
+
22
26
  def fetch(locale, name)
23
27
  record.globalize_fallbacks(locale).each do |fallback|
24
28
  value = stash.contains?(fallback, name) ? fetch_stash(fallback, name) : fetch_attribute(fallback, name)
@@ -37,16 +41,21 @@ module Globalize
37
41
  end
38
42
 
39
43
  def save_translations!
44
+ existing_translations_by_locale = {}
45
+ record.translations.each do |t|
46
+ existing_translations_by_locale[t.locale.to_s] = t
47
+ end
48
+
40
49
  stash.each do |locale, attrs|
41
50
  if attrs.any?
42
- translation = record.translations.find_or_initialize_by_locale(locale.to_s)
51
+ locale_str = locale.to_s
52
+ translation = existing_translations_by_locale[locale_str] ||
53
+ record.translations.find_or_initialize_by_locale(locale_str)
43
54
  attrs.each { |name, value| translation[name] = value }
44
55
  translation.save!
45
56
  end
46
57
  end
47
58
 
48
- record.translations.each(&:reload)
49
- record.translations.reset
50
59
  reset
51
60
  end
52
61
 
@@ -45,7 +45,7 @@ module Globalize
45
45
  klass = self.const_set(:Translation, Class.new(Globalize::ActiveRecord::Translation))
46
46
  end
47
47
 
48
- klass.belongs_to name.underscore.gsub('/', '_').to_sym, :class_name => self.name
48
+ klass.belongs_to :globalized_model, :class_name => self.name, :foreign_key => translation_options[:foreign_key]
49
49
  klass
50
50
  end
51
51
  end
@@ -145,11 +145,27 @@ module Globalize
145
145
  write_attribute(name, value)
146
146
  end
147
147
  define_method(name) do |*args|
148
- read_attribute(name, {:locale => args.first})
148
+ Globalize::Interpolation.interpolate(name, self, args)
149
149
  end
150
150
  alias_method :"#{name}_before_type_cast", name
151
151
  end
152
152
 
153
+ def translations_accessor(name)
154
+ define_method(:"#{name}_translations") do
155
+ result = translations.each_with_object(HashWithIndifferentAccess.new) do |translation, result|
156
+ result[translation.locale] = translation.send(name)
157
+ end
158
+ globalize.stash.keys.each_with_object(result) do |locale, result|
159
+ result[locale] = globalize.fetch_stash(locale, name) if globalize.stash_contains?(locale, name)
160
+ end
161
+ end
162
+ define_method(:"#{name}_translations=") do |value|
163
+ value.each do |(locale, value)|
164
+ write_attribute name, value, :locale => locale
165
+ end
166
+ end
167
+ end
168
+
153
169
  end
154
170
 
155
171
  end
@@ -44,8 +44,21 @@ module Globalize
44
44
  options = {:locale => options}
45
45
  end
46
46
  options = {:locale => Globalize.locale}.merge(options)
47
- attribute_will_change! name.to_s
48
-
47
+
48
+ # Dirty tracking, paraphrased from
49
+ # ActiveRecord::AttributeMethods::Dirty#write_attribute.
50
+ name_str = name.to_s
51
+ if attribute_changed?(name_str)
52
+ # If there's already a change, delete it if this undoes the change.
53
+ old = changed_attributes[name_str]
54
+ changed_attributes.delete(name_str) if value == old
55
+ else
56
+ # If there's not a change yet, record it.
57
+ old = globalize.fetch(options[:locale], name)
58
+ old = old.clone if old.duplicable?
59
+ changed_attributes[name_str] = old if value != old
60
+ end
61
+
49
62
  globalize.write(options[:locale], name, value)
50
63
  else
51
64
  super(name, value)
@@ -63,7 +76,7 @@ module Globalize
63
76
  if self.class.translated?(name) and options[:translated]
64
77
  if (value = globalize.fetch(options[:locale] || Globalize.locale, name))
65
78
  value
66
- elsif respond_to?(:serialized_attributes) && serialized_attributes.has_key?(name.to_s)
79
+ else
67
80
  super(name)
68
81
  end
69
82
  else
@@ -105,6 +118,7 @@ module Globalize
105
118
  end
106
119
  translation.save
107
120
  end
121
+ globalize.reset
108
122
  end
109
123
 
110
124
  def reload(options = nil)
@@ -154,6 +168,24 @@ module Globalize
154
168
  translation_caches[::Globalize.locale] = translation.previous_version
155
169
  end
156
170
 
171
+ def column_for_attribute name
172
+ translated_attribute_names.include?(name) ? globalize.send(:column_for_attribute, name) : super
173
+ end
174
+
175
+ private
176
+
177
+ def update(*)
178
+ I18n.with_locale(read_attribute(:locale) || I18n.default_locale) do
179
+ super
180
+ end
181
+ end
182
+
183
+ def create(*)
184
+ I18n.with_locale(read_attribute(:locale) || I18n.default_locale) do
185
+ super
186
+ end
187
+ end
188
+
157
189
  protected
158
190
 
159
191
  def each_locale_and_translated_attribute
@@ -177,7 +209,11 @@ module Globalize
177
209
 
178
210
  def with_given_locale(attributes, &block)
179
211
  attributes.symbolize_keys! if attributes.respond_to?(:symbolize_keys!)
180
- if locale = attributes.try(:delete, :locale)
212
+
213
+ locale = respond_to?(:locale=) ? attributes.try(:[], :locale) :
214
+ attributes.try(:delete, :locale)
215
+
216
+ if locale
181
217
  Globalize.with_locale(locale, &block)
182
218
  else
183
219
  yield
@@ -9,7 +9,7 @@ module Globalize
9
9
  @globalize_migrator ||= Migrator.new(self)
10
10
  end
11
11
 
12
- delegate :create_translation_table!, :drop_translation_table!,
12
+ delegate :create_translation_table!, :add_translation_fields!, :drop_translation_table!,
13
13
  :translation_index_name, :translation_locale_index_name,
14
14
  :to => :globalize_migrator
15
15
 
@@ -26,20 +26,29 @@ module Globalize
26
26
 
27
27
  def create_translation_table!(fields = {}, options = {})
28
28
  @fields = fields
29
- complete_translated_fields
29
+ # If we have fields we only want to create the translation table with those fields
30
+ complete_translated_fields if fields.blank?
30
31
  validate_translated_fields
31
32
 
32
33
  create_translation_table
34
+ add_translation_fields!(fields, options)
35
+ create_translations_index
36
+ clear_schema_cache!
37
+ end
38
+
39
+ def add_translation_fields!(fields, options = {})
40
+ @fields = fields
41
+ validate_translated_fields
42
+
43
+ add_translation_fields
44
+ clear_schema_cache!
33
45
  move_data_to_translation_table if options[:migrate_data]
34
46
  remove_source_columns if options[:remove_source_columns]
35
- create_translations_index
36
47
  clear_schema_cache!
37
48
  end
38
49
 
39
50
  def remove_source_columns
40
- translated_attribute_names.each do |attribute|
41
- connection.remove_column(table_name, attribute)
42
- end
51
+ connection.remove_columns(table_name, *fields.keys)
43
52
  end
44
53
 
45
54
  def drop_translation_table!(options = {})
@@ -49,6 +58,8 @@ module Globalize
49
58
  clear_schema_cache!
50
59
  end
51
60
 
61
+ # This adds all the current translated attributes of the model
62
+ # It's a problem because in early migrations would add all the translated attributes
52
63
  def complete_translated_fields
53
64
  translated_attribute_names.each do |name|
54
65
  fields[name] = column_type(name) unless fields[name]
@@ -57,8 +68,14 @@ module Globalize
57
68
 
58
69
  def create_translation_table
59
70
  connection.create_table(translations_table_name) do |t|
60
- t.references table_name.sub(/^#{table_name_prefix}/, '').singularize
61
- t.string :locale
71
+ t.references table_name.sub(/^#{table_name_prefix}/, '').singularize, :null => false
72
+ t.string :locale, :null => false
73
+ t.timestamps
74
+ end
75
+ end
76
+
77
+ def add_translation_fields
78
+ connection.change_table(translations_table_name) do |t|
62
79
  fields.each do |name, options|
63
80
  if options.is_a? Hash
64
81
  t.column name, options.delete(:type), options
@@ -66,7 +83,6 @@ module Globalize
66
83
  t.column name, options
67
84
  end
68
85
  end
69
- t.timestamps
70
86
  end
71
87
  end
72
88
 
@@ -94,10 +110,9 @@ module Globalize
94
110
 
95
111
  def move_data_to_translation_table
96
112
  model.find_each do |record|
97
- untranslated_attributes = record.untranslated_attributes
98
- translation = record.translations.build(:locale => I18n.default_locale)
99
- translated_attribute_names.each do |attribute|
100
- translation[attribute] = untranslated_attributes[attribute.to_s]
113
+ translation = record.translation_for(I18n.default_locale) || record.translations.build(:locale => I18n.default_locale)
114
+ fields.each do |attribute_name, attribute_type|
115
+ translation[attribute_name] = record.read_attribute(attribute_name, {:translated => false})
101
116
  end
102
117
  translation.save!
103
118
  end
@@ -144,16 +159,20 @@ module Globalize
144
159
 
145
160
  def translation_index_name
146
161
  index_name = "index_#{translations_table_name}_on_#{table_name.singularize}_id"
147
- index_name.size < connection.index_name_length ? index_name : "index_#{Digest::SHA1.hexdigest(index_name)}"
162
+ index_name.size < connection.index_name_length ? index_name :
163
+ "index_#{Digest::SHA1.hexdigest(index_name)}"[0, connection.index_name_length]
148
164
  end
149
165
 
150
166
  def translation_locale_index_name
151
167
  index_name = "index_#{translations_table_name}_on_locale"
152
- index_name.size < connection.index_name_length ? index_name : "index_#{Digest::SHA1.hexdigest(index_name)}"
168
+ index_name.size < connection.index_name_length ? index_name :
169
+ "index_#{Digest::SHA1.hexdigest(index_name)}"[0, connection.index_name_length]
153
170
  end
154
171
 
155
172
  def clear_schema_cache!
156
173
  connection.schema_cache.clear! if connection.respond_to? :schema_cache
174
+ model::Translation.reset_column_information
175
+ model.reset_column_information
157
176
  end
158
177
 
159
178
  private
@@ -21,7 +21,7 @@ module Globalize
21
21
  alias with_locale with_locales
22
22
 
23
23
  def translated_locales
24
- select('DISTINCT locale').map(&:locale).sort { |l,r| l.to_s <=> r.to_s }
24
+ select('DISTINCT locale').order(:locale).map(&:locale)
25
25
  end
26
26
  end
27
27
 
@@ -0,0 +1,28 @@
1
+ module Globalize
2
+ module Interpolation
3
+ def interpolate(name, model, args)
4
+ translation = model.read_attribute(name, {:locale => locale_from(args)})
5
+ try_interpolation translation, interpolation_args_from(args)
6
+ end
7
+
8
+ private
9
+
10
+ def interpolation_args_from(args)
11
+ args.detect {|a| a.is_a? Hash }
12
+ end
13
+
14
+ def locale_from(args)
15
+ args.detect {|a| !a.is_a? Hash }
16
+ end
17
+
18
+ def try_interpolation(translation,args)
19
+ if args
20
+ I18n.interpolate(translation,args)
21
+ else
22
+ translation
23
+ end
24
+ end
25
+
26
+ extend self
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module Globalize3
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.1'
3
3
  end
@@ -0,0 +1,15 @@
1
+ module ActiveRecord
2
+ class Relation
3
+ if ::ActiveRecord::VERSION::STRING >= "3.2.1"
4
+ def where_values_hash
5
+ _translations_table_name = klass.respond_to?(:translations_table_name) ? klass.translations_table_name : nil
6
+
7
+ equalities = with_default_scope.where_values.grep(Arel::Nodes::Equality).find_all { |node|
8
+ [table_name, _translations_table_name].compact.include? node.left.relation.name
9
+ }
10
+
11
+ Hash[equalities.map { |where| [where.left.name, where.right] }].with_indifferent_access
12
+ end
13
+ end
14
+ end
15
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: globalize3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
5
- prerelease:
4
+ version: 0.3.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sven Fuchs
@@ -11,139 +10,124 @@ authors:
11
10
  - John-Paul Bader
12
11
  - Tomasz Stachewicz
13
12
  - Philip Arndt
13
+ - Chris Salzberg
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2012-12-20 00:00:00.000000000 Z
17
+ date: 2013-10-24 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activerecord
21
- prerelease: false
22
21
  requirement: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - ! '>='
23
+ - - '>='
25
24
  - !ruby/object:Gem::Version
26
25
  version: 3.0.0
27
- none: false
28
26
  type: :runtime
27
+ prerelease: false
29
28
  version_requirements: !ruby/object:Gem::Requirement
30
29
  requirements:
31
- - - ! '>='
30
+ - - '>='
32
31
  - !ruby/object:Gem::Version
33
32
  version: 3.0.0
34
- none: false
35
33
  - !ruby/object:Gem::Dependency
36
34
  name: activemodel
37
- prerelease: false
38
35
  requirement: !ruby/object:Gem::Requirement
39
36
  requirements:
40
- - - ! '>='
37
+ - - '>='
41
38
  - !ruby/object:Gem::Version
42
39
  version: 3.0.0
43
- none: false
44
40
  type: :runtime
41
+ prerelease: false
45
42
  version_requirements: !ruby/object:Gem::Requirement
46
43
  requirements:
47
- - - ! '>='
44
+ - - '>='
48
45
  - !ruby/object:Gem::Version
49
46
  version: 3.0.0
50
- none: false
51
47
  - !ruby/object:Gem::Dependency
52
48
  name: paper_trail
53
- prerelease: false
54
49
  requirement: !ruby/object:Gem::Requirement
55
50
  requirements:
56
51
  - - ~>
57
52
  - !ruby/object:Gem::Version
58
53
  version: '2'
59
- none: false
60
54
  type: :runtime
55
+ prerelease: false
61
56
  version_requirements: !ruby/object:Gem::Requirement
62
57
  requirements:
63
58
  - - ~>
64
59
  - !ruby/object:Gem::Version
65
60
  version: '2'
66
- none: false
67
61
  - !ruby/object:Gem::Dependency
68
62
  name: database_cleaner
69
- prerelease: false
70
63
  requirement: !ruby/object:Gem::Requirement
71
64
  requirements:
72
- - - '='
65
+ - - ~>
73
66
  - !ruby/object:Gem::Version
74
- version: 0.5.2
75
- none: false
67
+ version: 0.6.0
76
68
  type: :development
69
+ prerelease: false
77
70
  version_requirements: !ruby/object:Gem::Requirement
78
71
  requirements:
79
- - - '='
72
+ - - ~>
80
73
  - !ruby/object:Gem::Version
81
- version: 0.5.2
82
- none: false
74
+ version: 0.6.0
83
75
  - !ruby/object:Gem::Dependency
84
76
  name: mocha
85
- prerelease: false
86
77
  requirement: !ruby/object:Gem::Requirement
87
78
  requirements:
88
- - - ! '>='
79
+ - - '>='
89
80
  - !ruby/object:Gem::Version
90
81
  version: '0'
91
- none: false
92
82
  type: :development
83
+ prerelease: false
93
84
  version_requirements: !ruby/object:Gem::Requirement
94
85
  requirements:
95
- - - ! '>='
86
+ - - '>='
96
87
  - !ruby/object:Gem::Version
97
88
  version: '0'
98
- none: false
99
89
  - !ruby/object:Gem::Dependency
100
90
  name: pathname_local
101
- prerelease: false
102
91
  requirement: !ruby/object:Gem::Requirement
103
92
  requirements:
104
- - - ! '>='
93
+ - - '>='
105
94
  - !ruby/object:Gem::Version
106
95
  version: '0'
107
- none: false
108
96
  type: :development
97
+ prerelease: false
109
98
  version_requirements: !ruby/object:Gem::Requirement
110
99
  requirements:
111
- - - ! '>='
100
+ - - '>='
112
101
  - !ruby/object:Gem::Version
113
102
  version: '0'
114
- none: false
115
103
  - !ruby/object:Gem::Dependency
116
104
  name: test_declarative
117
- prerelease: false
118
105
  requirement: !ruby/object:Gem::Requirement
119
106
  requirements:
120
- - - ! '>='
107
+ - - '>='
121
108
  - !ruby/object:Gem::Version
122
109
  version: '0'
123
- none: false
124
110
  type: :development
111
+ prerelease: false
125
112
  version_requirements: !ruby/object:Gem::Requirement
126
113
  requirements:
127
- - - ! '>='
114
+ - - '>='
128
115
  - !ruby/object:Gem::Version
129
116
  version: '0'
130
- none: false
131
117
  - !ruby/object:Gem::Dependency
132
118
  name: sqlite3
133
- prerelease: false
134
119
  requirement: !ruby/object:Gem::Requirement
135
120
  requirements:
136
- - - ! '>='
121
+ - - '>='
137
122
  - !ruby/object:Gem::Version
138
123
  version: '0'
139
- none: false
140
124
  type: :development
125
+ prerelease: false
141
126
  version_requirements: !ruby/object:Gem::Requirement
142
127
  requirements:
143
- - - ! '>='
128
+ - - '>='
144
129
  - !ruby/object:Gem::Version
145
130
  version: '0'
146
- none: false
147
131
  description: Rails I18n de-facto standard library for ActiveRecord 3 model/data translation.
148
132
  email: nobody@globalize-rails.org
149
133
  executables: []
@@ -159,6 +143,7 @@ files:
159
143
  - lib/globalize/active_record/migration.rb
160
144
  - lib/globalize/active_record/translation.rb
161
145
  - lib/globalize/active_record.rb
146
+ - lib/globalize/interpolation.rb
162
147
  - lib/globalize/versioning/paper_trail.rb
163
148
  - lib/globalize/versioning.rb
164
149
  - lib/globalize.rb
@@ -167,6 +152,7 @@ files:
167
152
  - lib/i18n/missing_translations_log_handler.rb
168
153
  - lib/i18n/missing_translations_raise_handler.rb
169
154
  - lib/patches/active_record/query_method.rb
155
+ - lib/patches/active_record/relation.rb
170
156
  - lib/patches/active_record/uniqueness_validator.rb
171
157
  - lib/patches/active_record/xml_attribute_serializer.rb
172
158
  - Gemfile
@@ -175,27 +161,36 @@ files:
175
161
  - Rakefile
176
162
  homepage: http://github.com/svenfuchs/globalize3
177
163
  licenses: []
178
- post_install_message:
164
+ metadata: {}
165
+ post_install_message: |2+
166
+
167
+ HEADS UP! Globalize3 has been renamed "Globalize" and now supports both
168
+ ActiveRecord 3.x and ActiveRecord 4. To use the new gem with ActiveRecord
169
+ 3.x, replace "gem 'globalize3'" with "gem 'globalize', '~> 3.0.0'" in your
170
+ Gemfile.
171
+
172
+ All future updates to the ActiveRecord 3.x version of Globalize will happen
173
+ in versions 3.x of the new gem (globalize). globalize3 is deprecated and will
174
+ no longer be updated.
175
+
179
176
  rdoc_options: []
180
177
  require_paths:
181
178
  - lib
182
179
  required_ruby_version: !ruby/object:Gem::Requirement
183
180
  requirements:
184
- - - ! '>='
181
+ - - '>='
185
182
  - !ruby/object:Gem::Version
186
183
  version: '0'
187
- none: false
188
184
  required_rubygems_version: !ruby/object:Gem::Requirement
189
185
  requirements:
190
- - - ! '>='
186
+ - - '>='
191
187
  - !ruby/object:Gem::Version
192
188
  version: '0'
193
- none: false
194
189
  requirements: []
195
- rubyforge_project: ! '[none]'
196
- rubygems_version: 1.8.24
190
+ rubyforge_project: '[none]'
191
+ rubygems_version: 2.1.0
197
192
  signing_key:
198
- specification_version: 3
193
+ specification_version: 4
199
194
  summary: Rails I18n de-facto standard library for ActiveRecord 3 model/data translation
200
195
  test_files: []
201
196
  has_rdoc: