simple_localizer 0.0.5 → 0.0.6
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/VERSION +1 -1
- data/lib/simple_localizer.rb +25 -22
- data/simple_localizer.gemspec +2 -2
- data/spec/dummy/Gemfile.lock +1 -1
- data/spec/dummy/db/migrate/20130123200543_create_product_translations.rb +3 -2
- data/spec/dummy/db/schema.rb +4 -3
- data/spec/simple_localizer_spec.rb +18 -1
- metadata +19 -19
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
data/lib/simple_localizer.rb
CHANGED
@@ -24,28 +24,31 @@ module SimpleLocalizer
|
|
24
24
|
|
25
25
|
module ClassMethods
|
26
26
|
def translates *columns
|
27
|
-
underscore_name = name.underscore.gsub("/", "_").to_sym
|
28
|
-
foreign_key = "#{underscore_name}_id".to_sym
|
29
|
-
|
30
|
-
translation_class = const_set(:Translation, Class.new(ActiveRecord::Base))
|
31
27
|
translated_attribute_names = columns.map &:to_s
|
32
28
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
:
|
45
|
-
:
|
46
|
-
:
|
47
|
-
|
48
|
-
|
29
|
+
unless const_defined? :Translation
|
30
|
+
underscore_name = name.underscore.gsub("/", "_").to_sym
|
31
|
+
foreign_key = "#{underscore_name}_id".to_sym
|
32
|
+
|
33
|
+
translation_class = const_set(:Translation, Class.new(ActiveRecord::Base))
|
34
|
+
|
35
|
+
translation_class.table_name = "#{underscore_name}_translations"
|
36
|
+
translation_class.belongs_to(underscore_name, # WORKAROUND Rails prefers association name to be symbol
|
37
|
+
:class_name => self.name,
|
38
|
+
:foreign_key => foreign_key
|
39
|
+
)
|
40
|
+
translation_class.validates :locale, :presence => true
|
41
|
+
translation_class.validates underscore_name, :presence => true
|
42
|
+
translation_class.validates :locale, :uniqueness => { :scope => foreign_key }
|
43
|
+
|
44
|
+
has_many(:translations,
|
45
|
+
:dependent => :destroy,
|
46
|
+
:autosave => true,
|
47
|
+
:class_name => translation_class.name,
|
48
|
+
:inverse_of => underscore_name,
|
49
|
+
:foreign_key => foreign_key
|
50
|
+
)
|
51
|
+
end
|
49
52
|
|
50
53
|
translated_attribute_names.each do |attr|
|
51
54
|
define_method attr do
|
@@ -68,9 +71,9 @@ module SimpleLocalizer
|
|
68
71
|
}
|
69
72
|
|
70
73
|
if I18n.respond_to?(:fallbacks) && translation.try(attr).nil?
|
71
|
-
fallbacks_locales = I18n.fallbacks
|
74
|
+
fallbacks_locales = I18n.fallbacks.fetch(locale.to_sym, locale).map(&:to_s)
|
72
75
|
translation = translations.detect { |translation|
|
73
|
-
fallbacks_locales.include?(translation.locale
|
76
|
+
fallbacks_locales.include?(translation.locale) && translation.send(attr).present?
|
74
77
|
}
|
75
78
|
end
|
76
79
|
|
data/simple_localizer.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "simple_localizer"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["vad4msiu"]
|
12
|
-
s.date = "2013-01-
|
12
|
+
s.date = "2013-01-24"
|
13
13
|
s.description = "Simple localization your ActiveRecord fields without magic"
|
14
14
|
s.email = "vad4msiu@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/dummy/Gemfile.lock
CHANGED
@@ -2,8 +2,9 @@ class CreateProductTranslations < ActiveRecord::Migration
|
|
2
2
|
def change
|
3
3
|
create_table :product_translations do |t|
|
4
4
|
t.string :locale, :null => false
|
5
|
-
t.integer :product_id
|
6
|
-
t.string :name
|
5
|
+
t.integer :product_id
|
6
|
+
t.string :name
|
7
|
+
t.string :description
|
7
8
|
|
8
9
|
t.timestamps
|
9
10
|
end
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -55,11 +55,12 @@ ActiveRecord::Schema.define(:version => 20130123200543) do
|
|
55
55
|
add_index "legacy_service_translations", ["locale"], :name => "index_legacy_service_translations_on_locale"
|
56
56
|
|
57
57
|
create_table "product_translations", :force => true do |t|
|
58
|
-
t.string "locale",
|
58
|
+
t.string "locale", :null => false
|
59
59
|
t.integer "product_id"
|
60
60
|
t.string "name"
|
61
|
-
t.
|
62
|
-
t.datetime "
|
61
|
+
t.string "description"
|
62
|
+
t.datetime "created_at", :null => false
|
63
|
+
t.datetime "updated_at", :null => false
|
63
64
|
end
|
64
65
|
|
65
66
|
add_index "product_translations", ["locale", "product_id"], :name => "index_product_translations_on_locale_and_product_id", :unique => true
|
@@ -121,8 +121,25 @@ end
|
|
121
121
|
describe Product do
|
122
122
|
let(:product) { Product.create! :name_ru => 'asd' }
|
123
123
|
|
124
|
-
|
124
|
+
it "должен поддерживать повтороный вызов translates" do
|
125
|
+
expect {
|
126
|
+
product.update_attributes(
|
127
|
+
:name_ru => 'qwe',
|
128
|
+
:description_ru => 'asd'
|
129
|
+
)
|
130
|
+
}.to raise_error
|
125
131
|
|
132
|
+
Product.translates :description
|
133
|
+
|
134
|
+
expect {
|
135
|
+
product.update_attributes(
|
136
|
+
:name_ru => 'qwe',
|
137
|
+
:description_ru => 'asd'
|
138
|
+
)
|
139
|
+
}.to_not raise_error
|
140
|
+
end
|
141
|
+
|
142
|
+
describe "после обвноления" do
|
126
143
|
it "должен обновлять перевод" do
|
127
144
|
product.update_attributes :name_ru => 'qwe'
|
128
145
|
product.translations.where(:locale => 'ru').first.name.should == 'qwe'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_localizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
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: 2013-01-
|
12
|
+
date: 2013-01-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70339903079500 !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: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70339903079500
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70339903089440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.8.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70339903089440
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &70339903087320 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70339903087320
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &70339903084420 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.8.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70339903084420
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: database_cleaner
|
60
|
-
requirement: &
|
60
|
+
requirement: &70339903082420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70339903082420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sqlite3
|
71
|
-
requirement: &
|
71
|
+
requirement: &70339903097020 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70339903097020
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rails
|
82
|
-
requirement: &
|
82
|
+
requirement: &70339903095720 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - =
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 3.2.10
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70339903095720
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rack
|
93
|
-
requirement: &
|
93
|
+
requirement: &70339903093360 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - =
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: 1.4.1
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70339903093360
|
102
102
|
description: Simple localization your ActiveRecord fields without magic
|
103
103
|
email: vad4msiu@gmail.com
|
104
104
|
executables: []
|
@@ -206,7 +206,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
206
|
version: '0'
|
207
207
|
segments:
|
208
208
|
- 0
|
209
|
-
hash:
|
209
|
+
hash: -4422529473626842115
|
210
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
211
|
none: false
|
212
212
|
requirements:
|