traco 0.2.3 → 0.2.4
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/lib/traco.rb +1 -1
- data/lib/traco/class_methods.rb +11 -7
- data/lib/traco/localized_reader.rb +39 -0
- data/lib/traco/translates.rb +3 -3
- data/lib/traco/version.rb +1 -1
- metadata +14 -14
- data/lib/traco/instance_methods.rb +0 -28
data/lib/traco.rb
CHANGED
data/lib/traco/class_methods.rb
CHANGED
@@ -3,13 +3,7 @@ module Traco
|
|
3
3
|
def locales_for_column(column)
|
4
4
|
column_names.grep(/\A#{column}_([a-z]{2})\z/) {
|
5
5
|
$1.to_sym
|
6
|
-
}.sort_by { |locale|
|
7
|
-
if locale == I18n.default_locale
|
8
|
-
"0"
|
9
|
-
else
|
10
|
-
locale.to_s
|
11
|
-
end
|
12
|
-
}
|
6
|
+
}.sort_by { |locale| locale_sort_value(locale) }
|
13
7
|
end
|
14
8
|
|
15
9
|
def human_attribute_name(attribute, options = {})
|
@@ -25,6 +19,16 @@ module Traco
|
|
25
19
|
|
26
20
|
private
|
27
21
|
|
22
|
+
def locale_sort_value(locale)
|
23
|
+
if locale == I18n.default_locale
|
24
|
+
# Sort the default locale first.
|
25
|
+
"0"
|
26
|
+
else
|
27
|
+
# Sort the rest alphabetically.
|
28
|
+
locale.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
28
32
|
def translates?(column)
|
29
33
|
translatable_columns.include?(column.to_sym)
|
30
34
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Traco
|
2
|
+
class LocalizedReader
|
3
|
+
def initialize(record, column)
|
4
|
+
@record = record
|
5
|
+
@column = column
|
6
|
+
end
|
7
|
+
|
8
|
+
def value
|
9
|
+
locales.each do |locale|
|
10
|
+
value = @record.send("#{@column}_#{locale}")
|
11
|
+
return value if value.present?
|
12
|
+
end
|
13
|
+
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def locales
|
20
|
+
@record.class.locales_for_column(@column).sort_by { |locale|
|
21
|
+
locale_sort_value(locale)
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def locale_sort_value(locale)
|
26
|
+
case locale
|
27
|
+
when I18n.locale
|
28
|
+
# Sort the current locale first.
|
29
|
+
"0"
|
30
|
+
when I18n.default_locale
|
31
|
+
# Sort the default locale second.
|
32
|
+
"1"
|
33
|
+
else
|
34
|
+
# Sort the rest alphabetically.
|
35
|
+
locale.to_s
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/traco/translates.rb
CHANGED
@@ -18,7 +18,6 @@ module Traco
|
|
18
18
|
return if respond_to?(:translatable_columns)
|
19
19
|
|
20
20
|
extend Traco::ClassMethods
|
21
|
-
include Traco::InstanceMethods
|
22
21
|
|
23
22
|
class_attribute :translatable_columns
|
24
23
|
self.translatable_columns = []
|
@@ -30,13 +29,14 @@ module Traco
|
|
30
29
|
|
31
30
|
def define_localized_reader(column)
|
32
31
|
define_method(column) do
|
33
|
-
|
32
|
+
@localized_reader ||= Traco::LocalizedReader.new(self, column)
|
33
|
+
@localized_reader.value
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
def define_localized_writer(column)
|
38
38
|
define_method("#{column}=") do |value|
|
39
|
-
|
39
|
+
send("#{column}_#{I18n.locale}=", value)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
data/lib/traco/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-11-18 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70337754840160 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70337754840160
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &70337754839700 !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: *
|
35
|
+
version_requirements: *70337754839700
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70337754839240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70337754839240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70337754838800 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70337754838800
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: guard
|
60
|
-
requirement: &
|
60
|
+
requirement: &70337754838320 !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: *70337754838320
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-rspec
|
71
|
-
requirement: &
|
71
|
+
requirement: &70337754837840 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70337754837840
|
80
80
|
description:
|
81
81
|
email:
|
82
82
|
- henrik@barsoom.se
|
@@ -93,7 +93,7 @@ files:
|
|
93
93
|
- Rakefile
|
94
94
|
- lib/traco.rb
|
95
95
|
- lib/traco/class_methods.rb
|
96
|
-
- lib/traco/
|
96
|
+
- lib/traco/localized_reader.rb
|
97
97
|
- lib/traco/translates.rb
|
98
98
|
- lib/traco/version.rb
|
99
99
|
- spec/app/post.rb
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Traco
|
2
|
-
module InstanceMethods
|
3
|
-
|
4
|
-
private
|
5
|
-
|
6
|
-
def read_localized_value(column)
|
7
|
-
locales_for_reading_column(column).each do |locale|
|
8
|
-
value = send("#{column}_#{locale}")
|
9
|
-
return value if value.present?
|
10
|
-
end
|
11
|
-
nil
|
12
|
-
end
|
13
|
-
|
14
|
-
def write_localized_value(column, value)
|
15
|
-
send("#{column}_#{I18n.locale}=", value)
|
16
|
-
end
|
17
|
-
|
18
|
-
def locales_for_reading_column(column)
|
19
|
-
self.class.locales_for_column(column).sort_by { |locale|
|
20
|
-
case locale
|
21
|
-
when I18n.locale then "0"
|
22
|
-
when I18n.default_locale then "1"
|
23
|
-
else locale.to_s
|
24
|
-
end
|
25
|
-
}
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|