translatable 0.1.3 → 0.1.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/README.rdoc +6 -0
- data/VERSION +1 -1
- data/lib/translatable.rb +15 -1
- data/test/messages.rb +72 -0
- data/test/posts.rb +1 -1
- data/test/test_translatable.rb +19 -0
- data/translatable.gemspec +3 -2
- metadata +18 -17
data/README.rdoc
CHANGED
@@ -72,6 +72,12 @@ Block accepts following methods:
|
|
72
72
|
OR
|
73
73
|
translatable_locale :lang
|
74
74
|
|
75
|
+
translatable_attr_protected
|
76
|
+
If this line is set then the attributes :locale and :origin will be protected from
|
77
|
+
mass-assigment, otherwise they will be available.
|
78
|
+
|
79
|
+
Note: Note sure that this is the best implementation. Would appreciate any better ideas.
|
80
|
+
|
75
81
|
== Now to create the translations?
|
76
82
|
|
77
83
|
They can be created in two different ways:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
data/lib/translatable.rb
CHANGED
@@ -107,6 +107,20 @@ module ActiveRecord
|
|
107
107
|
@translatable[:origin] = translatable_origin_prepared origin_key
|
108
108
|
end
|
109
109
|
|
110
|
+
###
|
111
|
+
# Will not register the attributes as accessible.
|
112
|
+
# IMPORTANT: Translatable block will be evaluated on the model after it
|
113
|
+
# was loaded, so it will modify certain thing on final version. Hence this thing is needed.
|
114
|
+
# Examples:
|
115
|
+
#
|
116
|
+
# translatable_attr_protected
|
117
|
+
#
|
118
|
+
# Default: false
|
119
|
+
#
|
120
|
+
def translatable_attr_protected
|
121
|
+
@translatable[:attr_protected] = true
|
122
|
+
end
|
123
|
+
|
110
124
|
###
|
111
125
|
# Define the key that the translation will be used for belongs_to association,
|
112
126
|
# to communicate with original model
|
@@ -195,7 +209,7 @@ module ActiveRecord
|
|
195
209
|
|
196
210
|
belongs_to :#{@translatable[:origin]}, :class_name => "#{self.name}"
|
197
211
|
|
198
|
-
|
212
|
+
attr_#{!!@translatable[:attr_protected] ? "protected" : "accessible" } :#{@translatable[:locale]}, :#{@translatable[:origin]}_id
|
199
213
|
RUBY
|
200
214
|
|
201
215
|
@translatable[:properties].each do |p|
|
data/test/messages.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'translatable'
|
3
|
+
|
4
|
+
class CreateMessagesTables < ActiveRecord::Migration
|
5
|
+
def up
|
6
|
+
create_table(:writers, :force => true) do |t|
|
7
|
+
t.string :name, :null => false
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
|
12
|
+
create_table(:translated_messages) do |t|
|
13
|
+
t.string :title, :null => false
|
14
|
+
t.string :content, :null => false
|
15
|
+
t.integer :message_id, :null => false
|
16
|
+
t.string :locale, :null => false, :limit => 2
|
17
|
+
t.integer :writer_id
|
18
|
+
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
|
22
|
+
create_table(:messages) do |t|
|
23
|
+
t.integer :writer_id
|
24
|
+
|
25
|
+
t.timestamps
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def down
|
30
|
+
drop_table(:writers)
|
31
|
+
drop_table(:translated_messages)
|
32
|
+
drop_table(:messages)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
CreateMessagesTables.migrate(:up)
|
37
|
+
|
38
|
+
class Author < ActiveRecord::Base
|
39
|
+
validates :name, :presence => true
|
40
|
+
end
|
41
|
+
|
42
|
+
class TranslatedMessage < ActiveRecord::Base
|
43
|
+
attr_accessible :title, :content
|
44
|
+
|
45
|
+
before_validation :set_default_locale, :if => :writer_id
|
46
|
+
before_create :duplicate_writer_id, :unless => :writer_id
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
def set_default_locale
|
51
|
+
self.locale ||= ::I18n.locale
|
52
|
+
end
|
53
|
+
|
54
|
+
def duplicate_writer_id
|
55
|
+
self.writer_id = message.writer_id
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class Message < ActiveRecord::Base
|
60
|
+
|
61
|
+
belongs_to :writer
|
62
|
+
|
63
|
+
translatable do
|
64
|
+
translatable :title, :presence => true, :uniqueness => true
|
65
|
+
translatable :content, :presence => true
|
66
|
+
translatable_model 'TranslatedMessage'
|
67
|
+
translatable_origin :message
|
68
|
+
translatable_attr_protected
|
69
|
+
end
|
70
|
+
|
71
|
+
attr_accessible :writer_id, :writer
|
72
|
+
end
|
data/test/posts.rb
CHANGED
data/test/test_translatable.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'helper'
|
3
3
|
require 'news'
|
4
4
|
require 'posts'
|
5
|
+
require 'messages'
|
5
6
|
|
6
7
|
class TestDmTranslatable < Test::Unit::TestCase
|
7
8
|
|
@@ -218,4 +219,22 @@ class TestDmTranslatable < Test::Unit::TestCase
|
|
218
219
|
|
219
220
|
assert_equal post, post.translations.first.post
|
220
221
|
end
|
222
|
+
|
223
|
+
def test_protected_mass_assigment
|
224
|
+
tm = TranslatedMessage.new( :title => "Resent Post", :content => "That is where the text goes", :locale => "en", :message_id => 1)
|
225
|
+
|
226
|
+
assert_equal "Resent Post", tm.title
|
227
|
+
assert_equal "That is where the text goes", tm.content
|
228
|
+
assert_equal nil, tm.locale
|
229
|
+
assert_equal nil, tm.message_id
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_accessible_mass_assigment
|
233
|
+
tp = TranslatableNews.new( :title => "Resent News", :content => "That is where the text goes", :locale => "en", :origin_id => 1)
|
234
|
+
|
235
|
+
assert_equal "Resent News", tp.title
|
236
|
+
assert_equal "That is where the text goes", tp.content
|
237
|
+
assert_equal "en", tp.locale
|
238
|
+
assert_equal 1, tp.origin_id
|
239
|
+
end
|
221
240
|
end
|
data/translatable.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "translatable"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["E-Max"]
|
12
|
-
s.date = "2012-08-
|
12
|
+
s.date = "2012-08-25"
|
13
13
|
s.description = "This game was build to make whole proccess of working with translation for DM to be almost invisble. That was THE AIM."
|
14
14
|
s.email = "max@studentify.nl"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"VERSION",
|
29
29
|
"lib/translatable.rb",
|
30
30
|
"test/helper.rb",
|
31
|
+
"test/messages.rb",
|
31
32
|
"test/news.rb",
|
32
33
|
"test/posts.rb",
|
33
34
|
"test/support/active_record.rb",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: translatable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-25 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &74173130 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *74173130
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: i18n
|
27
|
-
requirement: &
|
27
|
+
requirement: &74172880 !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: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *74172880
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
requirement: &
|
38
|
+
requirement: &74172640 !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: *74172640
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &74172400 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *74172400
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &74172160 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *74172160
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: simplecov
|
71
|
-
requirement: &
|
71
|
+
requirement: &74171880 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.6.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *74171880
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rcov
|
82
|
-
requirement: &
|
82
|
+
requirement: &74171640 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: 1.0.0
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *74171640
|
91
91
|
description: This game was build to make whole proccess of working with translation
|
92
92
|
for DM to be almost invisble. That was THE AIM.
|
93
93
|
email: max@studentify.nl
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- VERSION
|
109
109
|
- lib/translatable.rb
|
110
110
|
- test/helper.rb
|
111
|
+
- test/messages.rb
|
111
112
|
- test/news.rb
|
112
113
|
- test/posts.rb
|
113
114
|
- test/support/active_record.rb
|
@@ -129,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
130
|
version: '0'
|
130
131
|
segments:
|
131
132
|
- 0
|
132
|
-
hash:
|
133
|
+
hash: -993677265
|
133
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
135
|
none: false
|
135
136
|
requirements:
|