attr-translatable 0.1.0 → 0.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.
- data/README.md +35 -1
- data/lib/attr_translatable/base.rb +5 -5
- data/lib/attr_translatable/translation.rb +2 -2
- data/lib/attr_translatable/version.rb +1 -1
- data/lib/models/attr_translation.rb +1 -1
- data/spec/attr_translatable_spec.rb +21 -0
- data/spec/spec_helper.rb +4 -4
- metadata +98 -105
data/README.md
CHANGED
@@ -32,7 +32,41 @@ end
|
|
32
32
|
)
|
33
33
|
@post.update_translation(:title, :ja, "新しいブログポスト")
|
34
34
|
@post.translate(:title, :ja)
|
35
|
-
|
35
|
+
# => "新しいブログポスト"
|
36
|
+
@post.t(:title, :ja)
|
37
|
+
# => "新しいブログポスト"
|
38
|
+
```
|
39
|
+
|
40
|
+
## Define Translatable Attributes
|
41
|
+
|
42
|
+
You can define translatable as shown below. All translatable attributes must be a string.
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
attr_translatable :attr_name1, :attr_name2, ...
|
46
|
+
```
|
47
|
+
|
48
|
+
## Add/Update Translation
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
update_translation(attr_name, lang, translation)
|
52
|
+
```
|
53
|
+
|
54
|
+
## Translate Attributes
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
translate(attr_name, lang)
|
58
|
+
# or you can use shorten version:
|
59
|
+
t(attr_name, lang)
|
60
|
+
```
|
61
|
+
|
62
|
+
## Access Translatable Attributes Name
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
ActiveRecord::Base.translatable_attrs
|
66
|
+
# => ["attr1", "attr2", ...]
|
67
|
+
# For example,
|
68
|
+
Post.translatable_attrs
|
69
|
+
# => ["title", "content"]
|
36
70
|
```
|
37
71
|
## Authors
|
38
72
|
|
@@ -10,14 +10,14 @@ module AttrTranslatable
|
|
10
10
|
def attr_translatable(*args)
|
11
11
|
attrs = validate_attrs(args)
|
12
12
|
unless ancestors.include?(AttrTranslatable::Translation)
|
13
|
-
@
|
14
|
-
has_many :attr_translatables, as
|
13
|
+
@translatable_attrs = attrs
|
14
|
+
has_many :attr_translatables, :as => :model, :dependent => :destroy
|
15
15
|
include AttrTranslatable::Translation
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
@
|
19
|
+
def translatable_attrs
|
20
|
+
@translatable_attrs || []
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
@@ -28,7 +28,7 @@ module AttrTranslatable
|
|
28
28
|
a = a.to_s
|
29
29
|
raise ArgumentError, "#{a} is not an attribute of #{self.name}." unless valid_attrs.include?(a)
|
30
30
|
type = columns.find { |c| c.name == a }.type
|
31
|
-
raise ArgumentError, "Only a string type can be translatable." unless
|
31
|
+
raise ArgumentError, "#{a} has a #{type} type. Only a string type can be translatable." unless [:string, :text].include? type
|
32
32
|
a
|
33
33
|
end
|
34
34
|
end
|
@@ -28,12 +28,12 @@ module AttrTranslatable
|
|
28
28
|
def internal_translate(attr, lang)
|
29
29
|
attr, lang = [attr.to_s, lang.to_s]
|
30
30
|
validate_attr(attr)
|
31
|
-
at = AttrTranslation.select(:translation).where(attr
|
31
|
+
at = AttrTranslation.select(:translation).where(:attr => attr, :lang => lang, :model_id => self.id, :model_type => self.class.name).first
|
32
32
|
at ? at.translation : self.send(attr)
|
33
33
|
end
|
34
34
|
|
35
35
|
def validate_attr(attr)
|
36
|
-
raise ArgumentError, "#{attr} is not translatable attribute." unless self.class.
|
36
|
+
raise ArgumentError, "#{attr} is not translatable attribute." unless self.class.translatable_attrs.include?(attr)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
end
|
@@ -5,5 +5,5 @@ class AttrTranslation < ActiveRecord::Base
|
|
5
5
|
|
6
6
|
attr_accessible :translation, :lang, :attr, :model_id, :model_type
|
7
7
|
|
8
|
-
validates :attr, uniqueness
|
8
|
+
validates :attr, :uniqueness => { :scope => [:lang, :model_id, :model_type] }
|
9
9
|
end
|
@@ -24,12 +24,33 @@ describe ActiveRecord::Base do
|
|
24
24
|
Post.attr_translatable :title, :content
|
25
25
|
end
|
26
26
|
|
27
|
+
describe "#translatable_attrs" do
|
28
|
+
it "returns translatable attributes" do
|
29
|
+
Post.translatable_attrs.should == ["title", "content"]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
27
33
|
describe "#update_translation" do
|
28
34
|
context "when non translatable attribute is given" do
|
29
35
|
it "raises an error" do
|
30
36
|
lambda { @post.update_translation(:url, :ja, "アドレス") }.should raise_error ArgumentError
|
31
37
|
end
|
32
38
|
end
|
39
|
+
context "when translatable attribute is given" do
|
40
|
+
it "adds new translation" do
|
41
|
+
translation = "ブログのタイトル"
|
42
|
+
@post.update_translation(:title, :ja, translation)
|
43
|
+
@post.t(:title, :ja).should == translation
|
44
|
+
end
|
45
|
+
it "updates existing translation" do
|
46
|
+
translation = "ブログのタイトル"
|
47
|
+
@post.update_translation(:title, :ja, translation)
|
48
|
+
@post.t(:title, :ja).should == translation
|
49
|
+
translation = "新しいブログのタイトル"
|
50
|
+
@post.update_translation(:title, :ja, translation)
|
51
|
+
@post.t(:title, :ja).should == translation
|
52
|
+
end
|
53
|
+
end
|
33
54
|
end
|
34
55
|
|
35
56
|
describe "#translate" do
|
data/spec/spec_helper.rb
CHANGED
@@ -6,8 +6,8 @@ require 'sqlite3'
|
|
6
6
|
require 'attr_translatable'
|
7
7
|
|
8
8
|
ActiveRecord::Base.establish_connection(
|
9
|
-
adapter
|
10
|
-
database
|
9
|
+
:adapter => "sqlite3",
|
10
|
+
:database => ":memory:"
|
11
11
|
)
|
12
12
|
|
13
13
|
RSpec.configure do |config|
|
@@ -26,11 +26,11 @@ ActiveRecord::Schema.define do
|
|
26
26
|
t.string :translation
|
27
27
|
t.string :lang
|
28
28
|
t.string :attr
|
29
|
-
t.references :model, polymorphic
|
29
|
+
t.references :model, :polymorphic => true
|
30
30
|
t.timestamps
|
31
31
|
end
|
32
32
|
|
33
|
-
add_index :attr_translations, [:lang, :attr, :model_id, :model_type], unique
|
33
|
+
add_index :attr_translations, [:lang, :attr, :model_id, :model_type], :unique => true, :name => "index_attr_translations_on_attr_and_lang_and_model"
|
34
34
|
|
35
35
|
create_table :posts do |t|
|
36
36
|
t.string :title
|
metadata
CHANGED
@@ -1,119 +1,111 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr-translatable
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
6
10
|
platform: ruby
|
7
|
-
authors:
|
11
|
+
authors:
|
8
12
|
- Katsuya Noguchi
|
9
13
|
autorequire:
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
|
17
|
+
date: 2012-08-06 00:00:00 +09:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: activerecord
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :development
|
23
22
|
prerelease: false
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
name: rake
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 0.8.7
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
38
30
|
type: :development
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: rake
|
39
34
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
- 8
|
42
|
+
- 7
|
45
43
|
version: 0.8.7
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '2.8'
|
54
44
|
type: :development
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
55
48
|
prerelease: false
|
56
|
-
|
57
|
-
|
58
|
-
requirements:
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
59
51
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
-
|
63
|
-
|
64
|
-
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 2
|
55
|
+
- 8
|
56
|
+
version: "2.8"
|
70
57
|
type: :development
|
58
|
+
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rdoc
|
71
61
|
prerelease: false
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
name: database_cleaner
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ~>
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: 0.7.1
|
62
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
86
69
|
type: :development
|
70
|
+
version_requirements: *id004
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: database_cleaner
|
87
73
|
prerelease: false
|
88
|
-
|
89
|
-
|
90
|
-
requirements:
|
74
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
91
76
|
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 7
|
81
|
+
- 1
|
93
82
|
version: 0.7.1
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: sqlite3
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ~>
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: 1.3.5
|
102
83
|
type: :development
|
84
|
+
version_requirements: *id005
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: sqlite3
|
103
87
|
prerelease: false
|
104
|
-
|
105
|
-
|
106
|
-
requirements:
|
88
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
107
90
|
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
segments:
|
93
|
+
- 1
|
94
|
+
- 3
|
95
|
+
- 5
|
109
96
|
version: 1.3.5
|
97
|
+
type: :development
|
98
|
+
version_requirements: *id006
|
110
99
|
description: attr-translatable gem allows attributes of ActiveRecord to be translated.
|
111
|
-
email:
|
100
|
+
email:
|
112
101
|
- katsuya7s@gmail.com
|
113
102
|
executables: []
|
103
|
+
|
114
104
|
extensions: []
|
105
|
+
|
115
106
|
extra_rdoc_files: []
|
116
|
-
|
107
|
+
|
108
|
+
files:
|
117
109
|
- LICENSE
|
118
110
|
- README.md
|
119
111
|
- Rakefile
|
@@ -126,34 +118,35 @@ files:
|
|
126
118
|
- lib/models/attr_translation.rb
|
127
119
|
- spec/attr_translatable_spec.rb
|
128
120
|
- spec/spec_helper.rb
|
121
|
+
has_rdoc: true
|
129
122
|
homepage: https://github.com/katsuyan/attr-translatable
|
130
123
|
licenses: []
|
124
|
+
|
131
125
|
post_install_message:
|
132
126
|
rdoc_options: []
|
133
|
-
|
127
|
+
|
128
|
+
require_paths:
|
134
129
|
- lib
|
135
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
version: '0'
|
141
|
-
segments:
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
segments:
|
142
135
|
- 0
|
143
|
-
|
144
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
version: '0'
|
150
|
-
segments:
|
136
|
+
version: "0"
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
segments:
|
151
142
|
- 0
|
152
|
-
|
143
|
+
version: "0"
|
153
144
|
requirements: []
|
145
|
+
|
154
146
|
rubyforge_project:
|
155
|
-
rubygems_version: 1.
|
147
|
+
rubygems_version: 1.3.6
|
156
148
|
signing_key:
|
157
149
|
specification_version: 3
|
158
150
|
summary: attr-translatable gem allows attributes of ActiveRecord to be translated.
|
159
151
|
test_files: []
|
152
|
+
|