traco 3.1.3 → 3.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGU5NTFmYTU4ZDQ5ZDA5ZWUyMzIyYjNiZDkxOGZiYzkyZDAwOGU1ZA==
4
+ YzMxZDEzNjdmODYxYjJmNWVkOGUxNzI4YWYwNjE0Zjc2OTE1OWIzNw==
5
5
  data.tar.gz: !binary |-
6
- OTI3ODAxOTgwNTE1OGQyZmFjYjUxMTJlZjQ1MmI0YjBkNTY0MjU5OA==
6
+ NjFmNjBhMDFhYzFhODgzYjkzYmFiYzJjZWQ4YzhlMTc0MTc1YWVkOQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGFlOGM1M2QyMjVjZmQzNjQ1MjRkZDYxNDE5ZWQzOGQ2MjFkODFlNjU3ZjI2
10
- Y2UxNTJiYTZmYTRiM2FiMDFkYzYxMDRkMGNkMjA5NjVlNzIzYWNmMjJiZWFm
11
- MzU4Y2NiZWNlODk1MWMxODEyMTg4NTRmMDQ1ZjBkZmRlNjlkNDg=
9
+ NmNkMjExZjYwODBlOGIyMWU1ODhhNmI4NTRkMjIxNjY3M2ZlYTUxZjdhZTQ5
10
+ ZDU0MjJjNWRkZWFjZGZlMjg3ZDE1ZGVkZjY1NmNlZTk1ZTk5NTVmNmY3N2Mx
11
+ NzYzYzE2ZmZlNDkzYTg1ZWJkNzkyNWMwMTQ2NWMzNWRmNDIwMjk=
12
12
  data.tar.gz: !binary |-
13
- NWQ2MmFlZDZhY2FhZTllMTZkMTUzMWI2ZWRkZDEwNzBkMmY5M2Y2YmM0NjIz
14
- MGIwZmY3MmY3YTgxYTY0NzVmODM4M2Q1Mjk0ZTI5MDU1MjYxOTM0N2U3Njll
15
- NmQ0MWY4NzBmNjcyMjk2M2M2ZGQwNTdmMjBlNWU5ZmExMjU2MDA=
13
+ NDAxNjQ0NjM4NWY2ODcxYmFmZjA5ZTVlOTRkZTAwZjY4NDRjNGNhMGNmOTE4
14
+ NGE4NTQwYTFlODYzYjVhMDgzNWMwNTZlZmNkMjYzMjFjNTdjMTFlMmE0ODMy
15
+ MTA3OTMzZmIwMDkxMzYyZDcyZTIxNjE2NWQyMDBlYzNhYWVkYmI=
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.1.4
4
+
5
+ * Bugfix: restore sorting of `locale_columns` and `locales_for_attribute` to put default locale first, not current locale. Thanks to Leung Ho Kuen.
6
+
7
+ ## 3.1.3
8
+
9
+ * ~20 time speedup thanks to optimizations by Andrii Malyshko.
10
+
11
+ Reading a Traco translated attribute used to be ~250x slower than an untranslated attribute; now it's down to ~10x slower.
12
+
13
+ ## 3.1.2
14
+
15
+ * Bugfix: `.current_locale_column` handles dashed locales like "pt-BR" correctly. Thanks to Leung Ho Kuen.
16
+
17
+ ## 3.1.1
18
+
19
+ * Bugfix around fallbacks and memoization. Thanks to Leung Ho Kuen.
20
+
3
21
  ## 3.1.0
4
22
 
5
23
  * Introduce `.current_locale_column`, e.g. `Post.current_locale_column(:title) # => :title_sv`.
@@ -18,7 +36,7 @@
18
36
 
19
37
  ## 2.0.0
20
38
 
21
- * Backwards incompatible: for dashed locales like `:"pt-BR"`, the column names are now expected to end in e.g. `_pt_br`, not `_pt-BR`.
39
+ * Backwards incompatible: for dashed locales like "pt-BR", the column names are now expected to end in e.g. `_pt_br`, not `_pt-BR`.
22
40
 
23
41
  ## 1.3.0
24
42
 
@@ -1,20 +1,20 @@
1
1
  module Traco
2
2
  module ClassMethods
3
3
  def locales_for_attribute(attribute)
4
- traco_cache(attribute, LocaleFallbacks::ANY_FALLBACK).keys
5
- end
6
-
7
- # Consider this method internal.
8
- def _locale_columns_for_attribute(attribute, fallback)
9
- traco_cache(attribute, fallback).values
4
+ traco_cache(attribute, LocaleFallbacks::DEFAULT_FIRST_FALLBACK).keys
10
5
  end
11
6
 
12
7
  def locale_columns(*attributes)
13
8
  attributes.each_with_object([]) do |attribute, columns|
14
- columns.concat(_locale_columns_for_attribute(attribute, LocaleFallbacks::ANY_FALLBACK))
9
+ columns.concat(_locale_columns_for_attribute(attribute, LocaleFallbacks::DEFAULT_FIRST_FALLBACK))
15
10
  end
16
11
  end
17
12
 
13
+ # Consider this method internal.
14
+ def _locale_columns_for_attribute(attribute, fallback)
15
+ traco_cache(attribute, fallback).values
16
+ end
17
+
18
18
  def current_locale_column(attribute)
19
19
  Traco.column(attribute, I18n.locale)
20
20
  end
@@ -6,6 +6,7 @@ module Traco
6
6
  DEFAULT_FALLBACK = :default,
7
7
  ANY_FALLBACK = :any,
8
8
  NO_FALLBACK = false,
9
+ DEFAULT_FIRST_FALLBACK = :default_first,
9
10
  ]
10
11
 
11
12
  attr_reader :fallback_option
@@ -17,23 +18,18 @@ module Traco
17
18
  @available_locales = I18n.available_locales.sort
18
19
  end
19
20
 
20
- def [](for_locale)
21
- chain = [for_locale]
22
- chain << @default_locale if include_default_locale?
23
- chain |= @available_locales if include_available_locales?
24
- chain
21
+ def [](current_locale)
22
+ case fallback_option
23
+ when DEFAULT_FALLBACK then [ current_locale, @default_locale ]
24
+ when ANY_FALLBACK then [ current_locale, @default_locale, *@available_locales ].uniq
25
+ when NO_FALLBACK then [ current_locale ]
26
+ when DEFAULT_FIRST_FALLBACK then [ @default_locale, *@available_locales ].uniq
27
+ else raise "Unknown fallback." # Should never get here.
28
+ end
25
29
  end
26
30
 
27
31
  private
28
32
 
29
- def include_default_locale?
30
- [ DEFAULT_FALLBACK, ANY_FALLBACK ].include?(fallback_option)
31
- end
32
-
33
- def include_available_locales?
34
- ANY_FALLBACK == fallback_option
35
- end
36
-
37
33
  def validate_option(fallback_option)
38
34
  if OPTIONS.include?(fallback_option)
39
35
  fallback_option
data/lib/traco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Traco
2
- VERSION = "3.1.3"
2
+ VERSION = "3.1.4"
3
3
  end
@@ -2,23 +2,15 @@ require "spec_helper"
2
2
  require "traco/locale_fallbacks"
3
3
 
4
4
  describe Traco::LocaleFallbacks do
5
- describe "#initialize" do
6
- it "accepts :default, :any, and false as valid arguments" do
7
- expect {
8
- Traco::LocaleFallbacks.new(:default)
9
- Traco::LocaleFallbacks.new(:any)
10
- Traco::LocaleFallbacks.new(false)
11
- }.not_to raise_error
12
- end
13
-
14
- it "raises ArgumentError if invalid argument passed in" do
15
- expect { Traco::LocaleFallbacks.new(:invalid) }.to raise_error(ArgumentError)
5
+ describe ".new" do
6
+ it "raises ArgumentError if an unknown argument passed in" do
7
+ expect { Traco::LocaleFallbacks.new(:foo) }.to raise_error(ArgumentError)
16
8
  expect { Traco::LocaleFallbacks.new(nil) }.to raise_error(ArgumentError)
17
9
  end
18
10
  end
19
11
 
20
12
  describe "#[]" do
21
- context "with the :default option" do
13
+ context "with the ':default' option" do
22
14
  it "returns given locale, then default locale" do
23
15
  I18n.default_locale = :en
24
16
  subject = Traco::LocaleFallbacks.new(:default)
@@ -26,20 +18,31 @@ describe Traco::LocaleFallbacks do
26
18
  end
27
19
  end
28
20
 
29
- context "with the :any option" do
21
+ context "with the ':any' option" do
30
22
  it "returns given locale, then default locale, then remaining available locales alphabetically" do
31
23
  I18n.default_locale = :en
32
24
  I18n.available_locales = [ :en, :sv, :uk, :de ]
25
+
33
26
  subject = Traco::LocaleFallbacks.new(:any)
34
27
  expect(subject[:sv]).to eq [ :sv, :en, :de, :uk ]
35
28
  end
36
29
  end
37
30
 
38
- context "with the false option" do
31
+ context "with the 'false' option" do
39
32
  it "returns only given locale" do
40
33
  subject = Traco::LocaleFallbacks.new(false)
41
34
  expect(subject[:sv]).to eq [ :sv ]
42
35
  end
43
36
  end
37
+
38
+ context "with the ':default_first' option" do
39
+ it "returns default locale, then remaining available locales alphabetically" do
40
+ I18n.default_locale = :uk
41
+ I18n.available_locales = [ :en, :sv, :uk, :de ]
42
+
43
+ subject = Traco::LocaleFallbacks.new(:default_first)
44
+ expect(subject[:sv]).to eq [ :uk, :de, :en, :sv ]
45
+ end
46
+ end
44
47
  end
45
48
  end
@@ -1,9 +1,12 @@
1
1
  RSpec.configure do |config|
2
- # Clear class state before each spec.
3
2
  config.before(:each) do
3
+ # Clear class state before each spec.
4
4
  Object.send(:remove_const, 'Post')
5
5
  Object.send(:remove_const, 'SubPost')
6
6
  load "app/post.rb"
7
+
8
+ # Known state.
9
+ I18n.default_locale = :sv
7
10
  end
8
11
  end
9
12
 
data/spec/traco_spec.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "spec_helper_models"
4
3
  require "spec_helper"
4
+ require "spec_helper_models"
5
5
  require "traco"
6
6
 
7
7
  describe Traco, ".split_localized_column" do
@@ -80,44 +80,46 @@ end
80
80
  describe Post, ".locales_for_attribute" do
81
81
  before do
82
82
  Post.translates :title
83
- I18n.locale = :"pt-BR"
83
+ I18n.default_locale = :"pt-BR"
84
+ I18n.locale = :en
84
85
  end
85
86
 
86
- it "lists the current locale with :any locale fallback" do
87
- expect(Traco).to receive(:locale_with_fallbacks).with(:"pt-BR", :any).and_return([:"pt-BR", :en, :sv])
87
+ it "lists the locales for that attribute, default locale first and then alphabetically" do
88
88
  expect(Post.locales_for_attribute(:title)).to eq [ :"pt-BR", :en, :sv ]
89
89
  end
90
90
 
91
91
  it "doesn't include a locale if there's no corresponding column for it" do
92
- expect(Traco).to receive(:locale_with_fallbacks).with(:"pt-BR", :any).and_return([:"pt-BR", :ru])
93
- expect(Post.locales_for_attribute(:title)).to eq [ :"pt-BR" ]
92
+ I18n.available_locales += [ :ru ]
93
+
94
+ expect(Post.locales_for_attribute(:title)).not_to include(:ru)
94
95
  end
95
96
  end
96
97
 
97
98
  describe Post, ".locale_columns" do
98
99
  before do
99
100
  Post.translates :title
100
- I18n.locale = :"pt-BR"
101
+ I18n.default_locale = :"pt-BR"
102
+ I18n.locale = :en
101
103
  end
102
104
 
103
- it "lists the columns-with-locale for current locale with :any locale fallback" do
104
- expect(Traco).to receive(:locale_with_fallbacks).with(:"pt-BR", :any).and_return([:"pt-BR", :en, :sv])
105
+ it "lists the columns-with-locale for that attribute, default locale first and then alphabetically" do
105
106
  expect(Post.locale_columns(:title)).to eq [
106
107
  :title_pt_br, :title_en, :title_sv
107
108
  ]
108
109
  end
109
110
 
110
111
  it "doesn't include a column-with-locale if it doesn't exist" do
111
- expect(Traco).to receive(:locale_with_fallbacks).with(:"pt-BR", :any).and_return([:"pt-BR", :ru])
112
- expect(Post.locale_columns(:title)).to eq [ :title_pt_br ]
112
+ I18n.available_locales += [ :ru ]
113
+
114
+ expect(Post.locale_columns(:title)).not_to include(:title_ru)
113
115
  end
114
116
 
115
117
  it "supports multiple attributes" do
116
118
  Post.translates :body
117
- expect(Traco).to receive(:locale_with_fallbacks).with(:"pt-BR", :any).twice.and_return([:"pt-BR", :en, :sv])
119
+
118
120
  expect(Post.locale_columns(:body, :title)).to eq [
119
121
  :body_pt_br, :body_en, :body_sv,
120
- :title_pt_br, :title_en, :title_sv
122
+ :title_pt_br, :title_en, :title_sv,
121
123
  ]
122
124
  end
123
125
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: traco
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.3
4
+ version: 3.1.4
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-08-12 00:00:00.000000000 Z
11
+ date: 2014-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord