traco 3.1.0 → 3.1.1
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.
- checksums.yaml +13 -5
- data/README.md +2 -2
- data/lib/traco/attribute_setup.rb +1 -3
- data/lib/traco/version.rb +1 -1
- data/spec/traco_spec.rb +51 -43
- data/traco.gemspec +1 -1
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTBlNWVjMTY0MjQ4YzU3NGIwNjM0ZTlmYjI0Yzc4NjUyNzY1MGQ5OQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NDI5OGU2OGY5MzEwZjEyNWU4MWFlNzYzMjkxMmI1ZWZiZjY5YzYwMw==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
Y2M4NGIyNDhlNmI0OTE5YTI1ZTI1ODQyOWE1YmMyZDM4YjM2ZmZlOTk1MjI0
|
10
|
+
NGQ4OWVhYjk1OTY4Y2UyODJhNGQ1MWIxMzAzNjRhZjU3YjRhMDdlYmMzMzk2
|
11
|
+
ZTBkMTQzNmFiN2QyZDAzMWFlODk4OWQ2ODYzNGYzYjQ5ZGY4MDQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZDYzMDJkZTJhNjVjZTQ3YTZkNjExMTM3YmZlMTI5YmE0ZGVjYmM5OWUyMjc3
|
14
|
+
Y2ZmMzMxNzMxNTY0MmUzN2NhNGIwYmYwMzVjNjAzYjQxNmQxMGFmY2NhOTAw
|
15
|
+
ZTM5NzcyODM1Yzc3MDBkN2Q5MTE5OTE1YjVlNmE3NmY0MzIxM2E=
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@ Translatable attributes for Rails 3 and 4 (Ruby 1.9+), stored in the model table
|
|
6
6
|
|
7
7
|
Inspired by Iain Hecker's [translatable_columns](https://github.com/iain/translatable_columns/).
|
8
8
|
|
9
|
-
To store translations outside the model, see Sven Fuchs' [
|
9
|
+
To store translations outside the model, see Sven Fuchs' [Globalize](https://github.com/globalize/globalize).
|
10
10
|
|
11
11
|
|
12
12
|
## Usage
|
@@ -155,7 +155,7 @@ Possible improvements to make:
|
|
155
155
|
|
156
156
|
By [Barsoom](http://barsoom.se) under the MIT license:
|
157
157
|
|
158
|
-
> Copyright
|
158
|
+
> Copyright © 2012–2014 Barsoom AB
|
159
159
|
>
|
160
160
|
> Permission is hereby granted, free of charge, to any person obtaining a copy
|
161
161
|
> of this software and associated documentation files (the "Software"), to deal
|
@@ -54,9 +54,7 @@ module Traco
|
|
54
54
|
custom_define_method(attribute) do |method_opts = {}|
|
55
55
|
fallback = method_opts.fetch(:fallback, default_fallback)
|
56
56
|
|
57
|
-
|
58
|
-
@localized_readers[attribute] ||= Traco::LocalizedReader.new(self, attribute, fallback: fallback)
|
59
|
-
@localized_readers[attribute].value
|
57
|
+
Traco::LocalizedReader.new(self, attribute, fallback: fallback).value
|
60
58
|
end
|
61
59
|
end
|
62
60
|
|
data/lib/traco/version.rb
CHANGED
data/spec/traco_spec.rb
CHANGED
@@ -5,28 +5,28 @@ require "traco"
|
|
5
5
|
|
6
6
|
describe ActiveRecord::Base, ".translates" do
|
7
7
|
it "is available" do
|
8
|
-
Post.
|
8
|
+
expect(Post).to respond_to :translates
|
9
9
|
end
|
10
10
|
|
11
11
|
it "adds functionality" do
|
12
|
-
Post.new.
|
12
|
+
expect(Post.new).not_to respond_to :title
|
13
13
|
Post.translates :title
|
14
|
-
Post.new.
|
14
|
+
expect(Post.new).to respond_to :title
|
15
15
|
end
|
16
16
|
|
17
17
|
it "can be run more than once" do
|
18
|
-
Post.new.
|
18
|
+
expect(Post.new).not_to respond_to :title, :body
|
19
19
|
Post.translates :title
|
20
20
|
Post.translates :body
|
21
|
-
Post.new.
|
21
|
+
expect(Post.new).to respond_to :title, :body
|
22
22
|
end
|
23
23
|
|
24
24
|
it "inherits columns from the superclass" do
|
25
25
|
Post.translates :title
|
26
26
|
SubPost.translates :body
|
27
|
-
SubPost.new.
|
28
|
-
Post.new.
|
29
|
-
Post.new.
|
27
|
+
expect(SubPost.new).to respond_to :title, :body
|
28
|
+
expect(Post.new).to respond_to :title
|
29
|
+
expect(Post.new).not_to respond_to :body
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -36,7 +36,7 @@ describe Post, ".translatable_attributes" do
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "lists the translatable attributes" do
|
39
|
-
Post.translatable_attributes.
|
39
|
+
expect(Post.translatable_attributes).to match_array [ :title ]
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -47,7 +47,7 @@ describe Post, ".locales_for_attribute" do
|
|
47
47
|
|
48
48
|
it "lists the locales, default first and then alphabetically" do
|
49
49
|
I18n.default_locale = :"pt-BR"
|
50
|
-
Post.locales_for_attribute(:title).
|
50
|
+
expect(Post.locales_for_attribute(:title)).to match_array [
|
51
51
|
:pt_br, :en, :sv
|
52
52
|
]
|
53
53
|
end
|
@@ -60,14 +60,14 @@ describe Post, ".locale_columns" do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
it "lists the columns-with-locale for that attribute, default locale first and then alphabetically" do
|
63
|
-
Post.locale_columns(:title).
|
63
|
+
expect(Post.locale_columns(:title)).to match_array [
|
64
64
|
:title_pt_br, :title_en, :title_sv
|
65
65
|
]
|
66
66
|
end
|
67
67
|
|
68
68
|
it "supports multiple attributes" do
|
69
69
|
Post.translates :body
|
70
|
-
Post.locale_columns(:body, :title).
|
70
|
+
expect(Post.locale_columns(:body, :title)).to match_array [
|
71
71
|
:body_pt_br, :body_en, :body_sv,
|
72
72
|
:title_pt_br, :title_en, :title_sv
|
73
73
|
]
|
@@ -81,7 +81,7 @@ describe Post, ".current_locale_column" do
|
|
81
81
|
|
82
82
|
it "returns the column name for the current locale" do
|
83
83
|
I18n.locale = :sv
|
84
|
-
Post.current_locale_column(:title).
|
84
|
+
expect(Post.current_locale_column(:title)).to eq :title_sv
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -97,42 +97,50 @@ describe Post, "#title" do
|
|
97
97
|
end
|
98
98
|
|
99
99
|
it "gives the title in the current locale" do
|
100
|
-
post.title.
|
100
|
+
expect(post.title).to eq "Hej"
|
101
101
|
end
|
102
102
|
|
103
103
|
it "handles dashed locales" do
|
104
104
|
I18n.locale = :"pt-BR"
|
105
|
-
post.title_pt_br.
|
106
|
-
post.title.
|
105
|
+
expect(post.title_pt_br).to eq "Olá"
|
106
|
+
expect(post.title).to eq "Olá"
|
107
107
|
end
|
108
108
|
|
109
109
|
it "falls back to the default locale if locale has no column" do
|
110
110
|
I18n.locale = :ru
|
111
|
-
post.title.
|
111
|
+
expect(post.title).to eq "Halloa"
|
112
112
|
end
|
113
113
|
|
114
114
|
it "falls back to the default locale if blank" do
|
115
115
|
post.title_sv = " "
|
116
|
-
post.title.
|
116
|
+
expect(post.title).to eq "Halloa"
|
117
117
|
end
|
118
118
|
|
119
119
|
it "does not fall back to any other locale if default locale is blank" do
|
120
120
|
post.title_sv = " "
|
121
121
|
post.title_en = ""
|
122
|
-
post.title.
|
122
|
+
expect(post.title).to be_nil
|
123
123
|
end
|
124
124
|
|
125
125
|
it "does not fall back if called with fallback: false" do
|
126
126
|
I18n.locale = :sv
|
127
127
|
post.title_sv = ""
|
128
|
-
post.title(fallback: false).
|
128
|
+
expect(post.title(fallback: false)).to be_nil
|
129
|
+
end
|
130
|
+
|
131
|
+
# Had a bug: https://github.com/barsoom/traco/issues/25
|
132
|
+
it "does not incorrectly memoize fallback state" do
|
133
|
+
I18n.locale = :sv
|
134
|
+
post.title_sv = ""
|
135
|
+
expect(post.title(fallback: :any)).not_to be_nil
|
136
|
+
expect(post.title(fallback: false)).to be_nil
|
129
137
|
end
|
130
138
|
|
131
139
|
it "returns nil if all are blank" do
|
132
140
|
post.title_sv = " "
|
133
141
|
post.title_en = ""
|
134
142
|
post.title_pt_br = nil
|
135
|
-
post.title.
|
143
|
+
expect(post.title).to be_nil
|
136
144
|
end
|
137
145
|
|
138
146
|
it "is overridable" do
|
@@ -142,7 +150,7 @@ describe Post, "#title" do
|
|
142
150
|
end
|
143
151
|
end
|
144
152
|
|
145
|
-
post.title.
|
153
|
+
expect(post.title).to eq "jeH"
|
146
154
|
end
|
147
155
|
|
148
156
|
# Had a regression.
|
@@ -150,16 +158,16 @@ describe Post, "#title" do
|
|
150
158
|
Post.translates :title, :body
|
151
159
|
post.title_sv = "title"
|
152
160
|
post.body_sv = "body"
|
153
|
-
post.title.
|
154
|
-
post.body.
|
161
|
+
expect(post.title).to eq "title"
|
162
|
+
expect(post.body).to eq "body"
|
155
163
|
end
|
156
164
|
|
157
165
|
it "reflects locale change" do
|
158
|
-
post.title.
|
166
|
+
expect(post.title).to eq "Hej"
|
159
167
|
I18n.locale = :en
|
160
|
-
post.title.
|
168
|
+
expect(post.title).to eq "Halloa"
|
161
169
|
I18n.locale = :sv
|
162
|
-
post.title.
|
170
|
+
expect(post.title).to eq "Hej"
|
163
171
|
end
|
164
172
|
|
165
173
|
context "when the translation was defined with fallback: false" do
|
@@ -174,18 +182,18 @@ describe Post, "#title" do
|
|
174
182
|
|
175
183
|
it "does not fall back to the default locale if locale has no column" do
|
176
184
|
I18n.locale = :ru
|
177
|
-
post.title.
|
185
|
+
expect(post.title).to be_nil
|
178
186
|
end
|
179
187
|
|
180
188
|
it "does not fall back to the default locale if blank" do
|
181
189
|
I18n.locale = :sv
|
182
190
|
post.title_sv = " "
|
183
|
-
post.title.
|
191
|
+
expect(post.title).to be_nil
|
184
192
|
end
|
185
193
|
|
186
194
|
it "still falls back if called with fallback: :default" do
|
187
195
|
I18n.locale = :ru
|
188
|
-
post.title(fallback: :default).
|
196
|
+
expect(post.title(fallback: :default)).to eq "Halloa"
|
189
197
|
end
|
190
198
|
end
|
191
199
|
|
@@ -198,12 +206,12 @@ describe Post, "#title" do
|
|
198
206
|
|
199
207
|
it "falls back to any locale, not just the default" do
|
200
208
|
post = Post.new(title_en: "", title_pt_br: "", title_sv: "Hej")
|
201
|
-
post.title.
|
209
|
+
expect(post.title).to eq "Hej"
|
202
210
|
end
|
203
211
|
|
204
212
|
it "prefers the default locale" do
|
205
213
|
post = Post.new(title_en: "Hello", title_pt_br: "", title_sv: "Hej")
|
206
|
-
post.title.
|
214
|
+
expect(post.title).to eq "Hello"
|
207
215
|
end
|
208
216
|
end
|
209
217
|
end
|
@@ -218,20 +226,20 @@ describe Post, "#title=" do
|
|
218
226
|
it "assigns in the current locale" do
|
219
227
|
I18n.locale = :sv
|
220
228
|
post.title = "Hej"
|
221
|
-
post.title_sv.
|
229
|
+
expect(post.title_sv).to eq "Hej"
|
222
230
|
end
|
223
231
|
|
224
232
|
it "handles dashed locales" do
|
225
233
|
I18n.locale = :"pt-BR"
|
226
234
|
post.title = "Olá"
|
227
|
-
post.title_pt_br.
|
235
|
+
expect(post.title_pt_br).to eq "Olá"
|
228
236
|
end
|
229
237
|
|
230
238
|
it "raises if locale has no column" do
|
231
239
|
I18n.locale = :ru
|
232
|
-
|
240
|
+
expect {
|
233
241
|
post.title = "Privet"
|
234
|
-
}.
|
242
|
+
}.to raise_error(NoMethodError, /title_ru/)
|
235
243
|
end
|
236
244
|
end
|
237
245
|
|
@@ -242,32 +250,32 @@ describe Post, ".human_attribute_name" do
|
|
242
250
|
end
|
243
251
|
|
244
252
|
it "uses explicit translations if present" do
|
245
|
-
Post.human_attribute_name(:title_sv).
|
253
|
+
expect(Post.human_attribute_name(:title_sv)).to eq "Svensk titel"
|
246
254
|
end
|
247
255
|
|
248
256
|
it "appends translated language name if present" do
|
249
|
-
Post.human_attribute_name(:title_en).
|
257
|
+
expect(Post.human_attribute_name(:title_en)).to eq "Titel (engelska)"
|
250
258
|
end
|
251
259
|
|
252
260
|
it "appends an abbreviation when language name is not translated" do
|
253
|
-
Post.human_attribute_name(:title_pt_br).
|
261
|
+
expect(Post.human_attribute_name(:title_pt_br)).to eq "Titel (PT-BR)"
|
254
262
|
end
|
255
263
|
|
256
264
|
it "passes through the default behavior for untranslated attributes" do
|
257
|
-
Post.human_attribute_name(:title).
|
265
|
+
expect(Post.human_attribute_name(:title)).to eq "Titel"
|
258
266
|
end
|
259
267
|
|
260
268
|
it "passes through untranslated attributes even if the name suggests it's translated" do
|
261
|
-
Post.human_attribute_name(:body_sv).
|
269
|
+
expect(Post.human_attribute_name(:body_sv)).to eq "Body sv"
|
262
270
|
end
|
263
271
|
|
264
272
|
# ActiveModel::Errors#full_messages passes in an ugly default.
|
265
273
|
|
266
274
|
it "does not honor passed-in defaults for locale columns" do
|
267
|
-
Post.human_attribute_name(:title_en, default: "Title en").
|
275
|
+
expect(Post.human_attribute_name(:title_en, default: "Title en")).to eq "Titel (engelska)"
|
268
276
|
end
|
269
277
|
|
270
278
|
it "passes through defaults" do
|
271
|
-
Post.human_attribute_name(:body_sv, default: "Boday").
|
279
|
+
expect(Post.human_attribute_name(:body_sv, default: "Boday")).to eq "Boday"
|
272
280
|
end
|
273
281
|
end
|
data/traco.gemspec
CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.summary = "Translatable columns for Rails 3 or better, stored in the model table itself."
|
12
12
|
|
13
13
|
s.files = `git ls-files`.split("\n")
|
14
|
-
s.test_files = `git ls-files --
|
14
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
15
15
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrik Nyh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ! '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ! '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ! '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ! '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description:
|
@@ -73,9 +73,9 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
-
-
|
77
|
-
-
|
78
|
-
-
|
76
|
+
- .gitignore
|
77
|
+
- .rvmrc
|
78
|
+
- .travis.yml
|
79
79
|
- CHANGELOG.md
|
80
80
|
- Gemfile
|
81
81
|
- README.md
|
@@ -100,17 +100,17 @@ require_paths:
|
|
100
100
|
- lib
|
101
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
|
-
- -
|
103
|
+
- - ! '>='
|
104
104
|
- !ruby/object:Gem::Version
|
105
105
|
version: '0'
|
106
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
requirements: []
|
112
112
|
rubyforge_project:
|
113
|
-
rubygems_version: 2.2.
|
113
|
+
rubygems_version: 2.2.1
|
114
114
|
signing_key:
|
115
115
|
specification_version: 4
|
116
116
|
summary: Translatable columns for Rails 3 or better, stored in the model table itself.
|