translatable_ar 1.0.5 → 1.1.0
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/active_record_base.rb +23 -20
- data/lib/railtie.rb +2 -10
- data/lib/templates/setup.rb +7 -13
- data/lib/translatable_ar_class.rb +1 -10
- metadata +3 -3
data/lib/active_record_base.rb
CHANGED
@@ -3,7 +3,7 @@ class TranslatableAR
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
module ClassMethods
|
6
|
-
|
6
|
+
|
7
7
|
attr_accessor :translatable_ar_attributes
|
8
8
|
|
9
9
|
def translates(*attributes)
|
@@ -12,23 +12,22 @@ class TranslatableAR
|
|
12
12
|
remember_translatable_ar_attribute(attribute)
|
13
13
|
define_translatable_ar_methods(attribute)
|
14
14
|
end
|
15
|
-
end
|
16
|
-
|
15
|
+
end
|
16
|
+
|
17
17
|
private
|
18
18
|
|
19
19
|
def remember_translatable_ar_model
|
20
20
|
TranslatableAR.models << self
|
21
21
|
TranslatableAR.models.uniq!
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def remember_translatable_ar_attribute(attribute)
|
25
|
-
@translatable_ar_attributes ||= []
|
25
|
+
@translatable_ar_attributes ||= []
|
26
26
|
@translatable_ar_attributes << attribute
|
27
27
|
@translatable_ar_attributes.uniq!
|
28
28
|
end
|
29
|
-
|
30
|
-
def define_translatable_ar_methods(attribute)
|
31
|
-
serialize "#{attribute}_i18n", TranslatableAR.coder_or_default_object
|
29
|
+
|
30
|
+
def define_translatable_ar_methods(attribute)
|
32
31
|
class_eval do
|
33
32
|
define_translatable_ar_writer(attribute)
|
34
33
|
define_translatable_ar_reader(attribute)
|
@@ -36,55 +35,59 @@ class TranslatableAR
|
|
36
35
|
define_translatable_ar_before_type_cast(attribute)
|
37
36
|
end
|
38
37
|
end
|
39
|
-
|
38
|
+
|
40
39
|
def define_translatable_ar_reader(attribute)
|
41
40
|
define_method("#{attribute}") do
|
42
41
|
if respond_to?("#{attribute}_i18n")
|
43
|
-
|
44
|
-
|
42
|
+
i18n = send("#{attribute}_i18n") || {}
|
43
|
+
if i18n.has_key?(I18n.locale.to_s)
|
44
|
+
i18n[I18n.locale.to_s]
|
45
45
|
else
|
46
|
-
|
46
|
+
i18n[TranslatableAR.fallback_locale.to_s]
|
47
47
|
end
|
48
48
|
else
|
49
49
|
super()
|
50
50
|
end
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
def define_translatable_ar_writer(attribute)
|
55
55
|
define_method("#{attribute}=") do |value|
|
56
56
|
if respond_to?("#{attribute}_i18n")
|
57
57
|
if value.is_a?(Hash)
|
58
58
|
send("#{attribute}_i18n=", value)
|
59
59
|
else
|
60
|
-
send("#{attribute}_i18n")
|
60
|
+
i18n = send("#{attribute}_i18n") || {}
|
61
|
+
i18n[I18n.locale.to_s] = value
|
62
|
+
send("#{attribute}_i18n=", i18n)
|
61
63
|
end
|
64
|
+
send("#{attribute}_i18n_will_change!")
|
62
65
|
else
|
63
66
|
super(value)
|
64
67
|
end
|
65
68
|
end
|
66
69
|
end
|
67
|
-
|
70
|
+
|
68
71
|
def define_translatable_ar_changed?(attribute)
|
69
|
-
define_method("#{attribute}_changed?") do
|
72
|
+
define_method("#{attribute}_changed?") do
|
70
73
|
if respond_to?("#{attribute}_i18n")
|
71
74
|
send("#{attribute}_i18n_changed?")
|
72
75
|
else
|
73
|
-
super(
|
76
|
+
super()
|
74
77
|
end
|
75
78
|
end
|
76
79
|
end
|
77
|
-
|
80
|
+
|
78
81
|
def define_translatable_ar_before_type_cast(attribute)
|
79
82
|
define_method("#{attribute}_before_type_cast") do
|
80
83
|
if respond_to?("#{attribute}_i18n")
|
81
|
-
send("#{attribute}
|
84
|
+
send("#{attribute}_i18n")[I18n.locale.to_s]
|
82
85
|
else
|
83
86
|
super()
|
84
87
|
end
|
85
88
|
end
|
86
89
|
end
|
87
|
-
|
90
|
+
|
88
91
|
end
|
89
92
|
end
|
90
93
|
end
|
data/lib/railtie.rb
CHANGED
@@ -31,7 +31,7 @@ class TranslatableAr < Rails::Railtie
|
|
31
31
|
|
32
32
|
migration_template 'setup.rb', "db/migrate/setup_translatable_ar_#{time}.rb"
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def models
|
36
36
|
TranslatableAR.models.select do |model|
|
37
37
|
model.translatable_ar_attributes.any? do |attribute|
|
@@ -39,7 +39,7 @@ class TranslatableAr < Rails::Railtie
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
def attributes
|
44
44
|
attributes = []
|
45
45
|
attribute_struct = Struct.new(:name, :model)
|
@@ -52,14 +52,6 @@ class TranslatableAr < Rails::Railtie
|
|
52
52
|
end
|
53
53
|
attributes
|
54
54
|
end
|
55
|
-
|
56
|
-
def column_type
|
57
|
-
uses_hstore? ? :hstore : :text
|
58
|
-
end
|
59
|
-
|
60
|
-
def uses_hstore?
|
61
|
-
TranslatableAR.uses_hstore?
|
62
|
-
end
|
63
55
|
|
64
56
|
end
|
65
57
|
end
|
data/lib/templates/setup.rb
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
class <%= migration_class_name %> < ActiveRecord::Migration
|
2
2
|
|
3
3
|
def up
|
4
|
-
|
5
|
-
<% if uses_hstore? -%>
|
4
|
+
|
6
5
|
execute "CREATE EXTENSION IF NOT EXISTS hstore"
|
7
|
-
|
8
|
-
|
6
|
+
|
9
7
|
<% attributes.each do |attribute| -%>
|
10
|
-
add_column :<%= attribute.model.table_name %>, :<%= attribute.name %>_i18n,
|
8
|
+
add_column :<%= attribute.model.table_name %>, :<%= attribute.name %>_i18n, :hstore
|
11
9
|
<% end -%>
|
12
10
|
|
13
|
-
<% if uses_hstore?
|
14
11
|
attributes.each do |attribute| -%>
|
15
12
|
add_hstore_index :<%= attribute.model.table_name %>, :<%= attribute.name %>_i18n
|
16
|
-
<% end
|
17
|
-
end-%>
|
13
|
+
<% end -%>
|
18
14
|
|
19
15
|
<% models.each do |model| -%>
|
20
16
|
puts "Preparing existing <%= model.to_s %> objects ..."
|
@@ -27,17 +23,15 @@ end-%>
|
|
27
23
|
end
|
28
24
|
<% end -%>
|
29
25
|
end
|
30
|
-
|
26
|
+
|
31
27
|
def down
|
32
28
|
<% attributes.each do |attribute| -%>
|
33
29
|
remove_column :<%= attribute.model.table_name %>, :<%= attribute.name %>_i18n
|
34
30
|
<% end -%>
|
35
31
|
|
36
|
-
<%
|
37
|
-
attributes.each do |attribute| -%>
|
32
|
+
<% attributes.each do |attribute| -%>
|
38
33
|
remove_hstore_index :<%= attribute.model.table_name %>, :<%= attribute.name %>_i18n
|
39
|
-
<% end
|
40
|
-
end-%>
|
34
|
+
<% end -%>
|
41
35
|
end
|
42
36
|
|
43
37
|
end
|
@@ -1,18 +1,9 @@
|
|
1
1
|
class TranslatableAR
|
2
2
|
|
3
3
|
class << self
|
4
|
-
attr_accessor :models, :
|
5
|
-
def coder_or_default_object
|
6
|
-
@coder_or_default_object ||= Hash
|
7
|
-
end
|
4
|
+
attr_accessor :models, :fallback_locale
|
8
5
|
def models
|
9
6
|
@models ||= []
|
10
|
-
end
|
11
|
-
def uses_hstore?
|
12
|
-
@coder_or_default_object == ActiveRecord::Coders::Hstore rescue false
|
13
|
-
end
|
14
|
-
def use_hstore!
|
15
|
-
@coder_or_default_object = ActiveRecord::Coders::Hstore
|
16
7
|
end
|
17
8
|
def fallback_locale=(locale)
|
18
9
|
@fallback_locale = locale
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: translatable_ar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-10-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -62,5 +62,5 @@ rubyforge_project:
|
|
62
62
|
rubygems_version: 1.8.25
|
63
63
|
signing_key:
|
64
64
|
specification_version: 3
|
65
|
-
summary: i18n for your active record models with HStore
|
65
|
+
summary: i18n for your active record models with HStore attribute
|
66
66
|
test_files: []
|