acts_as_translated 0.0.2 → 0.0.5
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +13 -5
- data/Rakefile +10 -0
- data/acts_as_translated.gemspec +8 -5
- data/lib/acts_as_translated.rb +15 -11
- data/lib/acts_as_translated/railtie.rb +13 -0
- data/lib/acts_as_translated/version.rb +3 -1
- data/{tests/translated_test.rb → test/acts_as_translated_test.rb} +52 -25
- data/{tests → test}/countries.yml +0 -1
- metadata +45 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7bcf85b91c371dc0de79182b7cc0ae764db8be7
|
4
|
+
data.tar.gz: d4bd339971fef7736eded1b1fbaae2261e2fdd6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7daf028af2e8b1d3244fd3a6613865a0dfe70e9a92c97397cfc3ef6504f8155147ec51d6cd6ed1436ff2a606f2b89472b91819feff7e4b2be399e5689252bc15
|
7
|
+
data.tar.gz: 4f6468e62efe8b5cd2e43d6eaafaec10dbcab1db039a1fa1be8fd069654a01cc4d790230e2f443ba37f5bc6f39ab566e032b949033b638f921b208961b45e70b
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -6,6 +6,7 @@ This acts_as extension allows easy attribute translation.
|
|
6
6
|
|
7
7
|
Your migration file should look like this;
|
8
8
|
|
9
|
+
```
|
9
10
|
create_table :countries do |t|
|
10
11
|
t.string :name_nl
|
11
12
|
t.string :name_fr
|
@@ -13,36 +14,43 @@ create_table :countries do |t|
|
|
13
14
|
|
14
15
|
t.timestamps
|
15
16
|
end
|
17
|
+
```
|
16
18
|
|
17
19
|
Create a class;
|
18
20
|
|
21
|
+
```
|
19
22
|
class Country < ActiveRecord::Base
|
20
23
|
acts_as_translated :name #, :default => :nl
|
21
24
|
end
|
25
|
+
```
|
22
26
|
|
23
27
|
Use it in your views, controllers, ...
|
24
28
|
|
29
|
+
```
|
25
30
|
<% Country.all.each do |country| %>
|
26
31
|
<%= country.name %>
|
27
32
|
<% end %>
|
28
|
-
|
33
|
+
```
|
29
34
|
|
30
35
|
# Form Example
|
31
36
|
|
32
37
|
Build a dynamic form that extends, based on the number of languages available;
|
33
38
|
|
34
|
-
|
39
|
+
```
|
40
|
+
<%= form_for @country do %>
|
35
41
|
...
|
36
42
|
<% @country.translated_fields_to_attributes.each do |attribute| %>
|
37
43
|
<p><%= f.label attribute %><br/>
|
38
|
-
|
44
|
+
<%= f.text_field attribute %></p>
|
39
45
|
<% end %>
|
40
46
|
...
|
41
47
|
<% end %>
|
42
|
-
|
48
|
+
```
|
43
49
|
|
44
50
|
# Install
|
45
51
|
|
46
52
|
In your bundler Gemfile
|
47
53
|
|
48
|
-
|
54
|
+
```
|
55
|
+
gem 'acts_as_translated'
|
56
|
+
```
|
data/Rakefile
CHANGED
data/acts_as_translated.gemspec
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
4
3
|
require 'acts_as_translated/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
@@ -9,14 +8,18 @@ Gem::Specification.new do |spec|
|
|
9
8
|
spec.authors = ["Stijn Mathysen"]
|
10
9
|
spec.email = ["stijn@skylight.be"]
|
11
10
|
spec.summary = %q{This acts_as extension allows easy attribute translation.}
|
12
|
-
spec.homepage = ""
|
11
|
+
spec.homepage = "https://github.com/stijnster/acts_as_translated"
|
13
12
|
spec.license = "MIT"
|
13
|
+
spec.description = %q{ActsAsTranslated is an acts_as for ActiveRecord that allows easy attribute translation.}
|
14
14
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.
|
21
|
-
|
20
|
+
spec.add_dependency 'activerecord', '>= 3.0.0'
|
21
|
+
|
22
|
+
spec.add_development_dependency 'sqlite3', '~> 0'
|
23
|
+
spec.add_development_dependency 'rake', '~> 0'
|
24
|
+
spec.add_development_dependency 'minitest', '~> 5.8'
|
22
25
|
end
|
data/lib/acts_as_translated.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
|
-
require
|
1
|
+
require 'acts_as_translated/version'
|
2
|
+
|
2
3
|
|
3
4
|
module ActsAsTranslated
|
5
|
+
|
6
|
+
require 'acts_as_translated/railtie' if defined? Rails::Railtie
|
7
|
+
|
4
8
|
def self.included(base)
|
9
|
+
|
5
10
|
class << base
|
6
11
|
attr_accessor :language
|
7
12
|
attr_accessor :translated_fields
|
8
13
|
end
|
9
|
-
|
14
|
+
|
10
15
|
base.extend(ClassMethods)
|
11
16
|
end
|
12
17
|
|
13
18
|
module ClassMethods
|
19
|
+
|
14
20
|
def acts_as_translated(fields, options = {})
|
15
21
|
self.language = options[:default] || 'en'
|
16
22
|
self.translated_fields = Array.new if self.translated_fields.blank?
|
@@ -20,13 +26,15 @@ module ActsAsTranslated
|
|
20
26
|
include InstanceMethods
|
21
27
|
end
|
22
28
|
end
|
29
|
+
|
23
30
|
end
|
24
|
-
|
31
|
+
|
25
32
|
module InstanceMethods
|
33
|
+
|
26
34
|
def translated_field_exists(field)
|
27
35
|
self.class.translated_fields.member?(field.to_sym) && attributes.member?("#{field}_#{self.class.language}")
|
28
36
|
end
|
29
|
-
|
37
|
+
|
30
38
|
def translated_fields_to_attributes
|
31
39
|
result = Array.new
|
32
40
|
self.class.translated_fields.each do |field|
|
@@ -36,22 +44,18 @@ module ActsAsTranslated
|
|
36
44
|
end
|
37
45
|
end
|
38
46
|
end
|
39
|
-
|
47
|
+
|
40
48
|
result.sort
|
41
49
|
end
|
42
|
-
|
50
|
+
|
43
51
|
def respond_to?(field, include_priv = false)
|
44
52
|
return true if translated_field_exists(field)
|
45
53
|
super
|
46
54
|
end
|
47
|
-
|
55
|
+
|
48
56
|
def method_missing(field, *args)
|
49
57
|
return self["#{field}_#{self.class.language}".to_sym] if translated_field_exists(field)
|
50
58
|
super
|
51
59
|
end
|
52
60
|
end
|
53
|
-
end
|
54
|
-
|
55
|
-
class ActiveRecord::Base
|
56
|
-
include ActsAsTranslated
|
57
61
|
end
|
@@ -1,31 +1,41 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
gem 'activerecord', '>= 1.15.4.7794'
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/pride'
|
5
3
|
require 'active_record'
|
4
|
+
require 'acts_as_translated'
|
5
|
+
|
6
|
+
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
6
7
|
|
7
|
-
|
8
|
+
def capture_stdout(&block)
|
9
|
+
real_stdout = $stdout
|
8
10
|
|
9
|
-
|
11
|
+
$stdout = StringIO.new
|
12
|
+
yield
|
13
|
+
$stdout.string
|
14
|
+
ensure
|
15
|
+
$stdout = real_stdout
|
16
|
+
end
|
10
17
|
|
11
18
|
def setup_db
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
capture_stdout do
|
20
|
+
ActiveRecord::Base.logger
|
21
|
+
ActiveRecord::Schema.define(:version => 1) do
|
22
|
+
create_table :countries do |t|
|
23
|
+
t.column :name_nl, :string
|
24
|
+
t.column :name_fr, :string
|
25
|
+
t.column :name_en, :string
|
26
|
+
t.column :description_nl, :text
|
27
|
+
t.column :description_fr, :text
|
28
|
+
t.column :description_en, :text
|
29
|
+
t.column :created_at, :datetime
|
30
|
+
t.column :updated_at, :datetime
|
31
|
+
t.column :position, :integer
|
32
|
+
end
|
23
33
|
end
|
24
34
|
end
|
25
35
|
end
|
26
36
|
|
27
37
|
def fixtures(filename)
|
28
|
-
records = YAML.load_file("#{filename}.yml")
|
38
|
+
records = YAML.load_file(File.join(__dir__, "#{filename}.yml"))
|
29
39
|
records.each do |key, record|
|
30
40
|
Country.create!(record)
|
31
41
|
end
|
@@ -38,13 +48,16 @@ def teardown_db
|
|
38
48
|
end
|
39
49
|
|
40
50
|
class Country < ActiveRecord::Base
|
51
|
+
include ActsAsTranslated
|
52
|
+
|
41
53
|
acts_as_translated :name
|
42
54
|
acts_as_translated :description
|
43
|
-
|
44
|
-
default_scope :order => 'position'
|
45
55
|
end
|
46
56
|
|
47
|
-
|
57
|
+
|
58
|
+
|
59
|
+
class ActsAsTranslatedTest < Minitest::Test
|
60
|
+
|
48
61
|
def setup
|
49
62
|
setup_db
|
50
63
|
fixtures :countries
|
@@ -54,29 +67,33 @@ class TranslatedTest < Test::Unit::TestCase
|
|
54
67
|
teardown_db
|
55
68
|
end
|
56
69
|
|
70
|
+
def test_version
|
71
|
+
refute_nil ActsAsTranslated::VERSION
|
72
|
+
end
|
73
|
+
|
57
74
|
def test_fixtures
|
58
75
|
assert_equal 2, Country.count
|
59
76
|
assert_equal 'Belgium', Country.first.name_en
|
60
77
|
assert_equal 'Netherlands', Country.last.name_en
|
61
78
|
end
|
62
79
|
|
63
|
-
def
|
80
|
+
def test_translated_attributes
|
64
81
|
@belgium = Country.first
|
65
82
|
@netherlands = Country.last
|
66
|
-
|
83
|
+
|
67
84
|
# test default language
|
68
85
|
assert_equal 'Belgium', @belgium.name
|
69
86
|
assert_equal 'Netherlands', @netherlands.name
|
70
87
|
assert_equal 'Kingdom of Belgium', @belgium.description
|
71
88
|
assert_equal 'Kingdom of the Netherlands', @netherlands.description
|
72
|
-
|
89
|
+
|
73
90
|
# change language to dutch
|
74
91
|
Country.language = 'nl'
|
75
92
|
assert_equal 'België', @belgium.name
|
76
93
|
assert_equal 'Nederland', @netherlands.name
|
77
94
|
assert_equal 'Koninkrijk België', @belgium.description
|
78
95
|
assert_equal 'Koninkrijk der Nederlanden', @netherlands.description
|
79
|
-
|
96
|
+
|
80
97
|
# change language to french
|
81
98
|
Country.language = 'fr'
|
82
99
|
assert_equal 'Belgique', @belgium.name
|
@@ -91,4 +108,14 @@ class TranslatedTest < Test::Unit::TestCase
|
|
91
108
|
assert_equal 'Kingdom of Belgium', @belgium.description
|
92
109
|
assert_equal 'Kingdom of the Netherlands', @netherlands.description
|
93
110
|
end
|
111
|
+
|
112
|
+
def test_class_helpers
|
113
|
+
@country = Country.first
|
114
|
+
|
115
|
+
assert @country.translated_field_exists('name')
|
116
|
+
refute @country.translated_field_exists('position')
|
117
|
+
|
118
|
+
assert_equal %w(description_en description_fr description_nl name_en name_fr name_nl), @country.translated_fields_to_attributes
|
119
|
+
end
|
120
|
+
|
94
121
|
end
|
metadata
CHANGED
@@ -1,44 +1,73 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_translated
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stijn Mathysen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
33
|
+
version: '0'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- - "
|
45
|
+
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- - "
|
52
|
+
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '0'
|
41
|
-
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: minitest
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.8'
|
69
|
+
description: ActsAsTranslated is an acts_as for ActiveRecord that allows easy attribute
|
70
|
+
translation.
|
42
71
|
email:
|
43
72
|
- stijn@skylight.be
|
44
73
|
executables: []
|
@@ -52,10 +81,11 @@ files:
|
|
52
81
|
- Rakefile
|
53
82
|
- acts_as_translated.gemspec
|
54
83
|
- lib/acts_as_translated.rb
|
84
|
+
- lib/acts_as_translated/railtie.rb
|
55
85
|
- lib/acts_as_translated/version.rb
|
56
|
-
-
|
57
|
-
-
|
58
|
-
homepage:
|
86
|
+
- test/acts_as_translated_test.rb
|
87
|
+
- test/countries.yml
|
88
|
+
homepage: https://github.com/stijnster/acts_as_translated
|
59
89
|
licenses:
|
60
90
|
- MIT
|
61
91
|
metadata: {}
|
@@ -75,8 +105,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
105
|
version: '0'
|
76
106
|
requirements: []
|
77
107
|
rubyforge_project:
|
78
|
-
rubygems_version: 2.
|
108
|
+
rubygems_version: 2.2.2
|
79
109
|
signing_key:
|
80
110
|
specification_version: 4
|
81
111
|
summary: This acts_as extension allows easy attribute translation.
|
82
|
-
test_files:
|
112
|
+
test_files:
|
113
|
+
- test/acts_as_translated_test.rb
|
114
|
+
- test/countries.yml
|