rails-translate-models 0.0.2 → 0.0.3
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/Gemfile +3 -3
- data/Gemfile.lock +66 -5
- data/README.rdoc +14 -7
- data/Rakefile +0 -8
- data/VERSION +1 -1
- data/lib/rails-translate-models.rb +2 -2
- data/rails-translate-models.gemspec +10 -11
- data/test/test_rails-translate-models.rb +96 -4
- metadata +22 -23
- data/test/helper.rb +0 -18
data/Gemfile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gem "
|
3
|
+
gem "rails", ">= 3.0"
|
4
4
|
|
5
5
|
# Add dependencies to develop your gem here.
|
6
6
|
# Include everything needed to run rake, tests, features, etc.
|
7
7
|
group :development do
|
8
|
-
gem "shoulda", ">= 0"
|
9
8
|
gem "bundler", "~> 1.0.0"
|
10
9
|
gem "jeweler", "~> 1.6.4"
|
11
|
-
gem
|
10
|
+
gem 'sqlite3'
|
11
|
+
gem "minitest"
|
12
12
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,6 +1,20 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
actionmailer (3.1.3)
|
5
|
+
actionpack (= 3.1.3)
|
6
|
+
mail (~> 2.3.0)
|
7
|
+
actionpack (3.1.3)
|
8
|
+
activemodel (= 3.1.3)
|
9
|
+
activesupport (= 3.1.3)
|
10
|
+
builder (~> 3.0.0)
|
11
|
+
erubis (~> 2.7.0)
|
12
|
+
i18n (~> 0.6)
|
13
|
+
rack (~> 1.3.5)
|
14
|
+
rack-cache (~> 1.1)
|
15
|
+
rack-mount (~> 0.8.2)
|
16
|
+
rack-test (~> 0.6.1)
|
17
|
+
sprockets (~> 2.0.3)
|
4
18
|
activemodel (3.1.3)
|
5
19
|
activesupport (= 3.1.3)
|
6
20
|
builder (~> 3.0.0)
|
@@ -10,28 +24,75 @@ GEM
|
|
10
24
|
activesupport (= 3.1.3)
|
11
25
|
arel (~> 2.2.1)
|
12
26
|
tzinfo (~> 0.3.29)
|
27
|
+
activeresource (3.1.3)
|
28
|
+
activemodel (= 3.1.3)
|
29
|
+
activesupport (= 3.1.3)
|
13
30
|
activesupport (3.1.3)
|
14
31
|
multi_json (~> 1.0)
|
15
32
|
arel (2.2.1)
|
16
33
|
builder (3.0.0)
|
34
|
+
erubis (2.7.0)
|
17
35
|
git (1.2.5)
|
36
|
+
hike (1.2.1)
|
18
37
|
i18n (0.6.0)
|
19
38
|
jeweler (1.6.4)
|
20
39
|
bundler (~> 1.0)
|
21
40
|
git (>= 1.2.5)
|
22
41
|
rake
|
42
|
+
json (1.6.4)
|
43
|
+
mail (2.3.0)
|
44
|
+
i18n (>= 0.4.0)
|
45
|
+
mime-types (~> 1.16)
|
46
|
+
treetop (~> 1.4.8)
|
47
|
+
mime-types (1.17.2)
|
48
|
+
minitest (2.10.0)
|
23
49
|
multi_json (1.0.4)
|
50
|
+
polyglot (0.3.3)
|
51
|
+
rack (1.3.6)
|
52
|
+
rack-cache (1.1)
|
53
|
+
rack (>= 0.4)
|
54
|
+
rack-mount (0.8.3)
|
55
|
+
rack (>= 1.0.0)
|
56
|
+
rack-ssl (1.3.2)
|
57
|
+
rack
|
58
|
+
rack-test (0.6.1)
|
59
|
+
rack (>= 1.0)
|
60
|
+
rails (3.1.3)
|
61
|
+
actionmailer (= 3.1.3)
|
62
|
+
actionpack (= 3.1.3)
|
63
|
+
activerecord (= 3.1.3)
|
64
|
+
activeresource (= 3.1.3)
|
65
|
+
activesupport (= 3.1.3)
|
66
|
+
bundler (~> 1.0)
|
67
|
+
railties (= 3.1.3)
|
68
|
+
railties (3.1.3)
|
69
|
+
actionpack (= 3.1.3)
|
70
|
+
activesupport (= 3.1.3)
|
71
|
+
rack-ssl (~> 1.3.2)
|
72
|
+
rake (>= 0.8.7)
|
73
|
+
rdoc (~> 3.4)
|
74
|
+
thor (~> 0.14.6)
|
24
75
|
rake (0.9.2.2)
|
25
|
-
|
26
|
-
|
76
|
+
rdoc (3.12)
|
77
|
+
json (~> 1.4)
|
78
|
+
sprockets (2.0.3)
|
79
|
+
hike (~> 1.2)
|
80
|
+
rack (~> 1.0)
|
81
|
+
tilt (~> 1.1, != 1.3.0)
|
82
|
+
sqlite3 (1.3.5)
|
83
|
+
thor (0.14.6)
|
84
|
+
tilt (1.3.3)
|
85
|
+
treetop (1.4.10)
|
86
|
+
polyglot
|
87
|
+
polyglot (>= 0.3.1)
|
27
88
|
tzinfo (0.3.31)
|
28
89
|
|
29
90
|
PLATFORMS
|
30
91
|
ruby
|
31
92
|
|
32
93
|
DEPENDENCIES
|
33
|
-
activerecord (>= 3.0)
|
34
94
|
bundler (~> 1.0.0)
|
35
95
|
jeweler (~> 1.6.4)
|
36
|
-
|
37
|
-
|
96
|
+
minitest
|
97
|
+
rails (>= 3.0)
|
98
|
+
sqlite3
|
data/README.rdoc
CHANGED
@@ -61,7 +61,7 @@ Or you can also get any other language using in_language_code for each attribute
|
|
61
61
|
a.title_in_en
|
62
62
|
=> "example title"
|
63
63
|
|
64
|
-
Note that if the current language doesn't have a translation it always tries to fallback to
|
64
|
+
Note that if the current language doesn't have a translation it always tries to fallback to default locale (I18n.default_locale) then returns nil if it's also not available.
|
65
65
|
|
66
66
|
To create a new object.
|
67
67
|
|
@@ -99,11 +99,9 @@ Here's a simple example to make a form to edit the example article model in all
|
|
99
99
|
form.html.erb
|
100
100
|
|
101
101
|
<%= form_for @article do |f| %>
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
<% end %>
|
106
|
-
</div>
|
102
|
+
<% I18n.available_locales.each do |locale| %>
|
103
|
+
<%= render "form_translations", {:f => f, :locale => locale } %>
|
104
|
+
<% end %>
|
107
105
|
<% end %>
|
108
106
|
|
109
107
|
_form_translations.html.erb partial
|
@@ -118,9 +116,18 @@ _form_translations.html.erb partial
|
|
118
116
|
|
119
117
|
It's an initial implementation for a work in progress project, it's just an initial release but does the basic stuff I need. Help is welcome ;)
|
120
118
|
|
121
|
-
* make tests
|
122
119
|
* translations models generators
|
120
|
+
* fallback as an option
|
121
|
+
* complete tests? (now there's some basic testing with minitest)
|
123
122
|
|
123
|
+
== Similar projects
|
124
|
+
|
125
|
+
Not convinced or need a different approach? Try out:
|
126
|
+
|
127
|
+
* has_translations (https://github.com/dmitry/has_translations)
|
128
|
+
* translated_attributes (https://github.com/grosser/translated_attributes)
|
129
|
+
* rails-translate (https://github.com/fesplugas/rails-translate)
|
130
|
+
* globalize2 (https://github.com/joshmh/globalize2)
|
124
131
|
|
125
132
|
|
126
133
|
|
data/Rakefile
CHANGED
@@ -32,14 +32,6 @@ Rake::TestTask.new(:test) do |test|
|
|
32
32
|
test.verbose = true
|
33
33
|
end
|
34
34
|
|
35
|
-
require 'rcov/rcovtask'
|
36
|
-
Rcov::RcovTask.new do |test|
|
37
|
-
test.libs << 'test'
|
38
|
-
test.pattern = 'test/**/test_*.rb'
|
39
|
-
test.verbose = true
|
40
|
-
test.rcov_opts << '--exclude "gems/*"'
|
41
|
-
end
|
42
|
-
|
43
35
|
task :default => :test
|
44
36
|
|
45
37
|
require 'rake/rdoctask'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
@@ -56,8 +56,8 @@ module RailsTranslateModels
|
|
56
56
|
translated_value = if locale
|
57
57
|
translated_attributes_for(locale)[attribute]
|
58
58
|
else
|
59
|
-
# find translated attribute, first try current locale, then
|
60
|
-
text = translated_attributes_for(I18n.locale)[attribute] || translated_attributes_for(
|
59
|
+
# find translated attribute, first try current locale, then default_locale
|
60
|
+
text = translated_attributes_for(I18n.locale)[attribute] || translated_attributes_for(I18n.default_locale)[attribute]
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "rails-translate-models"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Francesc Pla"]
|
@@ -26,7 +26,6 @@ Gem::Specification.new do |s|
|
|
26
26
|
"VERSION",
|
27
27
|
"lib/rails-translate-models.rb",
|
28
28
|
"rails-translate-models.gemspec",
|
29
|
-
"test/helper.rb",
|
30
29
|
"test/test_rails-translate-models.rb"
|
31
30
|
]
|
32
31
|
s.homepage = "http://github.com/francesc/rails-translate-models"
|
@@ -39,24 +38,24 @@ Gem::Specification.new do |s|
|
|
39
38
|
s.specification_version = 3
|
40
39
|
|
41
40
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
42
|
-
s.add_runtime_dependency(%q<
|
43
|
-
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
41
|
+
s.add_runtime_dependency(%q<rails>, [">= 3.0"])
|
44
42
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
45
43
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
46
|
-
s.add_development_dependency(%q<
|
44
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
45
|
+
s.add_development_dependency(%q<minitest>, [">= 0"])
|
47
46
|
else
|
48
|
-
s.add_dependency(%q<
|
49
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
47
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
50
48
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
51
49
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
52
|
-
s.add_dependency(%q<
|
50
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
51
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
53
52
|
end
|
54
53
|
else
|
55
|
-
s.add_dependency(%q<
|
56
|
-
s.add_dependency(%q<shoulda>, [">= 0"])
|
54
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
57
55
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
58
56
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
59
|
-
s.add_dependency(%q<
|
57
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
58
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
60
59
|
end
|
61
60
|
end
|
62
61
|
|
@@ -1,7 +1,99 @@
|
|
1
|
-
|
1
|
+
# coding: UTF-8
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'minitest/autorun'
|
14
|
+
require 'active_record'
|
15
|
+
|
16
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
17
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
18
|
+
require 'rails-translate-models'
|
19
|
+
|
20
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
21
|
+
|
22
|
+
def setup_db
|
23
|
+
silence_stream(STDOUT) do
|
24
|
+
ActiveRecord::Schema.define(:version => 1) do
|
25
|
+
create_table :articles, :force => true do |t|
|
26
|
+
t.timestamps
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
ActiveRecord::Schema.define(:version => 1) do
|
31
|
+
create_table :article_translations, :force => true do |t|
|
32
|
+
t.integer :article_id
|
33
|
+
t.string :language_code
|
34
|
+
t.string :title
|
35
|
+
t.text :body
|
36
|
+
t.timestamps
|
37
|
+
end
|
38
|
+
end
|
6
39
|
end
|
7
40
|
end
|
41
|
+
|
42
|
+
class Article < ActiveRecord::Base
|
43
|
+
has_translations :title, :body
|
44
|
+
end
|
45
|
+
|
46
|
+
class RailsTranslateModelsTest < MiniTest::Unit::TestCase
|
47
|
+
|
48
|
+
def setup
|
49
|
+
|
50
|
+
setup_db
|
51
|
+
|
52
|
+
Article.create :title_in_en => "Title",
|
53
|
+
:title_in_es => "Título",
|
54
|
+
:body_in_en => "Content",
|
55
|
+
:body_in_es => "Contenido",
|
56
|
+
:created_at => Time.now - 60
|
57
|
+
|
58
|
+
Article.create :title_in_en => "Second title",
|
59
|
+
:title_in_es => "Segundo título",
|
60
|
+
:body_in_en => "Second content",
|
61
|
+
:body_in_es => "Segundo contenido",
|
62
|
+
:created_at => Time.now
|
63
|
+
|
64
|
+
I18n.default_locale = :en
|
65
|
+
I18n.locale = :en
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
def teardown
|
70
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
71
|
+
ActiveRecord::Base.connection.drop_table(table)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_should_get_title_in_en_of_the_article
|
76
|
+
article = Article.first
|
77
|
+
assert_equal article.send('title_in_en'), article.title
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_should_get_title_in_es_of_the_article
|
81
|
+
I18n.locale = :es
|
82
|
+
article = Article.first
|
83
|
+
assert_equal article.send('title_in_es'), article.title
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_return_title_in_es_as_fallback_locale
|
87
|
+
I18n.default_locale = :es
|
88
|
+
I18n.locale = :undefined
|
89
|
+
article = Article.first
|
90
|
+
assert_equal article.send('title_in_es'), article.title
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_wrong_method_should_raise_nomethod_error
|
94
|
+
assert_raises NoMethodError do
|
95
|
+
Article.foo_bar
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-translate-models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,8 +12,8 @@ cert_chain: []
|
|
12
12
|
date: 2011-12-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: rails
|
16
|
+
requirement: &70323455271460 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,43 +21,43 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70323455271460
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
|
-
name:
|
27
|
-
requirement: &
|
26
|
+
name: bundler
|
27
|
+
requirement: &70323455270960 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
|
-
- -
|
30
|
+
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 1.0.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70323455270960
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement: &
|
37
|
+
name: jeweler
|
38
|
+
requirement: &70323455270480 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.
|
43
|
+
version: 1.6.4
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70323455270480
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: &
|
48
|
+
name: sqlite3
|
49
|
+
requirement: &70323455269980 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70323455269980
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
60
|
-
requirement: &
|
59
|
+
name: minitest
|
60
|
+
requirement: &70323455269420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70323455269420
|
69
69
|
description: Simple gem to translate multi-lingual content in Rails models in separate
|
70
70
|
tables for each model (modelname_translations)
|
71
71
|
email: francesc@francesc.net
|
@@ -84,7 +84,6 @@ files:
|
|
84
84
|
- VERSION
|
85
85
|
- lib/rails-translate-models.rb
|
86
86
|
- rails-translate-models.gemspec
|
87
|
-
- test/helper.rb
|
88
87
|
- test/test_rails-translate-models.rb
|
89
88
|
homepage: http://github.com/francesc/rails-translate-models
|
90
89
|
licenses:
|
@@ -101,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
100
|
version: '0'
|
102
101
|
segments:
|
103
102
|
- 0
|
104
|
-
hash:
|
103
|
+
hash: 781173456630097566
|
105
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
105
|
none: false
|
107
106
|
requirements:
|
data/test/helper.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler'
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'test/unit'
|
11
|
-
require 'shoulda'
|
12
|
-
|
13
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
-
require 'rails-translate-models'
|
16
|
-
|
17
|
-
class Test::Unit::TestCase
|
18
|
-
end
|