i18n-active_record 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.
- checksums.yaml +4 -4
- data/README.textile +19 -8
- data/Rakefile +29 -11
- data/lib/i18n/active_record/version.rb +1 -1
- data/lib/i18n/backend/active_record.rb +22 -5
- data/lib/i18n/backend/active_record/configuration.rb +13 -0
- data/lib/i18n/backend/active_record/translation.rb +2 -0
- data/test/active_record_test.rb +28 -0
- data/test/test_helper.rb +16 -8
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e3b0e3d5e5bfff8a2405a2aea617cf46a3b3b84
|
4
|
+
data.tar.gz: 80efc0144976cfc26a73bf2c75a627a6ee7d8ddc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a36a02163e4c98ec21995a567ee48a5bc27c9701590ae317d9e1d5deeefc7481b8190c36fce62a1314f42bdd174bb2561ebe1d64e043f9db3cb859e015840715
|
7
|
+
data.tar.gz: af48a542fc5d59c5c11e6885f994f60a0729253c48cd10a6a08fa7961c3f3c26f1a41eb65a9d06f8f713eed1bcb5d3169ce867f9227ff1efe39a63a008552548
|
data/README.textile
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
h1. I18n::Backend::ActiveRecord
|
2
2
|
|
3
|
+
!https://travis-ci.org/svenfuchs/i18n-active_record.svg?branch=master!:https://travis-ci.org/svenfuchs/i18n-active_record
|
4
|
+
|
3
5
|
This repository contains the I18n ActiveRecord backend and support code that has been extracted from the "I18n":http://github.com/svenfuchs/i18n.
|
6
|
+
It is fully compatible with Rails 3, 4 and 5
|
4
7
|
|
5
8
|
h2. Installation
|
6
9
|
|
7
10
|
For Bundler put the following in your Gemfile:
|
8
11
|
|
9
12
|
<pre>
|
10
|
-
gem 'i18n-active_record',
|
11
|
-
:git => 'git://github.com/svenfuchs/i18n-active_record.git',
|
12
|
-
:require => 'i18n/active_record'
|
13
|
+
gem 'i18n-active_record', :require => 'i18n/active_record'
|
13
14
|
</pre>
|
14
15
|
|
15
16
|
Next create a active record model named @Translation@ with the Rails Generator.
|
@@ -51,14 +52,13 @@ A more advanced example (Thanks Moritz), which uses YAML files and ActiveRecord
|
|
51
52
|
|
52
53
|
<pre>
|
53
54
|
require 'i18n/backend/active_record'
|
54
|
-
|
55
|
+
|
55
56
|
Translation = I18n::Backend::ActiveRecord::Translation
|
56
|
-
|
57
|
+
|
57
58
|
if Translation.table_exists?
|
58
59
|
I18n.backend = I18n::Backend::ActiveRecord.new
|
59
60
|
|
60
61
|
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
|
61
|
-
I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Flatten)
|
62
62
|
I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
|
63
63
|
I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)
|
64
64
|
|
@@ -66,12 +66,23 @@ A more advanced example (Thanks Moritz), which uses YAML files and ActiveRecord
|
|
66
66
|
end
|
67
67
|
</pre>
|
68
68
|
|
69
|
+
You may also configure whether the ActiveRecord backend should use @destroy@ or @delete@ when cleaning up internally.
|
70
|
+
|
71
|
+
<pre>
|
72
|
+
I18n::Backend::ActiveRecord.configure do |config|
|
73
|
+
config.cleanup_with_destroy = true # defaults to false
|
74
|
+
end
|
75
|
+
</pre>
|
76
|
+
|
69
77
|
h2. Usage
|
70
78
|
|
71
79
|
You can now use @I18n.t('Your String')@ to lookup translations in the database.
|
72
80
|
|
73
|
-
h2.
|
81
|
+
h2. Examples
|
74
82
|
|
75
|
-
*
|
83
|
+
* http://collectiveidea.com/blog/archives/2016/05/31/beyond-yml-files-dynamic-translations/
|
76
84
|
|
85
|
+
h2. Maintainers
|
77
86
|
|
87
|
+
* Sven Fuchs
|
88
|
+
* Tim Maslyuchenko
|
data/Rakefile
CHANGED
@@ -7,27 +7,42 @@ def execute(command)
|
|
7
7
|
system command
|
8
8
|
end
|
9
9
|
|
10
|
+
def bundle_options
|
11
|
+
opt = ''
|
12
|
+
opt += "--gemfile #{ENV['BUNDLE_GEMFILE']}" if ENV['BUNDLE_GEMFILE']
|
13
|
+
end
|
14
|
+
|
15
|
+
def each_database(&block)
|
16
|
+
['sqlite', 'postgres', 'mysql'].each &block
|
17
|
+
end
|
18
|
+
|
10
19
|
namespace :bundle do
|
11
20
|
task :env do
|
12
|
-
db = ENV['DB'].to_s
|
13
|
-
db = 'sqlite' if db == ''
|
14
21
|
ar = ENV['AR'].to_s
|
15
22
|
|
16
|
-
next if
|
23
|
+
next if ar.empty?
|
17
24
|
|
18
|
-
gemfile =
|
19
|
-
gemfile += ".rails_#{ar}" unless ar.empty?
|
20
|
-
gemfile += ".#{db}" unless db.empty?
|
25
|
+
gemfile = "gemfiles/Gemfile.rails_#{ar}"
|
21
26
|
raise "Cannot find gemfile at #{gemfile}" unless File.exist?(gemfile)
|
22
27
|
|
23
28
|
ENV['BUNDLE_GEMFILE'] = gemfile
|
29
|
+
puts "Using gemfile: #{gemfile}"
|
24
30
|
end
|
25
31
|
|
26
32
|
task install: :env do
|
27
|
-
|
28
|
-
opt += "--gemfile #{ENV['BUNDLE_GEMFILE']}" if ENV['BUNDLE_GEMFILE']
|
29
|
-
execute "bundle install #{opt}"
|
33
|
+
execute "bundle install #{bundle_options}"
|
30
34
|
end
|
35
|
+
|
36
|
+
task :install_all do
|
37
|
+
[nil, '3', '4', 'master'].each do |ar|
|
38
|
+
opt = ar && "AR=#{ar}"
|
39
|
+
execute "rake bundle:install #{opt}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
task :test do
|
45
|
+
each_database { |db| execute "rake #{db}:test" }
|
31
46
|
end
|
32
47
|
|
33
48
|
Rake::TestTask.new :_test do |t|
|
@@ -36,8 +51,11 @@ Rake::TestTask.new :_test do |t|
|
|
36
51
|
t.verbose = false
|
37
52
|
end
|
38
53
|
|
39
|
-
|
40
|
-
|
54
|
+
each_database do |db|
|
55
|
+
namespace db do
|
56
|
+
task(:env) { ENV['DB'] = db }
|
57
|
+
task test: ['env', 'bundle:env', '_test']
|
58
|
+
end
|
41
59
|
end
|
42
60
|
|
43
61
|
task default: :test
|
@@ -4,9 +4,20 @@ require 'i18n/backend/active_record/translation'
|
|
4
4
|
module I18n
|
5
5
|
module Backend
|
6
6
|
class ActiveRecord
|
7
|
-
autoload :Missing,
|
8
|
-
autoload :StoreProcs,
|
9
|
-
autoload :Translation,
|
7
|
+
autoload :Missing, 'i18n/backend/active_record/missing'
|
8
|
+
autoload :StoreProcs, 'i18n/backend/active_record/store_procs'
|
9
|
+
autoload :Translation, 'i18n/backend/active_record/translation'
|
10
|
+
autoload :Configuration, 'i18n/backend/active_record/configuration'
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def configure
|
14
|
+
yield(config) if block_given?
|
15
|
+
end
|
16
|
+
|
17
|
+
def config
|
18
|
+
@config ||= Configuration.new
|
19
|
+
end
|
20
|
+
end
|
10
21
|
|
11
22
|
module Implementation
|
12
23
|
include Base, Flatten
|
@@ -22,7 +33,14 @@ module I18n
|
|
22
33
|
def store_translations(locale, data, options = {})
|
23
34
|
escape = options.fetch(:escape, true)
|
24
35
|
flatten_translations(locale, data, escape, false).each do |key, value|
|
25
|
-
Translation.locale(locale).lookup(expand_keys(key))
|
36
|
+
translation = Translation.locale(locale).lookup(expand_keys(key))
|
37
|
+
|
38
|
+
if ActiveRecord.config.cleanup_with_destroy
|
39
|
+
translation.destroy_all
|
40
|
+
else
|
41
|
+
translation.delete_all
|
42
|
+
end
|
43
|
+
|
26
44
|
Translation.create(:locale => locale.to_s, :key => key.to_s, :value => value)
|
27
45
|
end
|
28
46
|
end
|
@@ -59,4 +77,3 @@ module I18n
|
|
59
77
|
end
|
60
78
|
end
|
61
79
|
end
|
62
|
-
|
data/test/active_record_test.rb
CHANGED
@@ -8,6 +8,7 @@ class I18nBackendActiveRecordTest < I18n::TestCase
|
|
8
8
|
|
9
9
|
def teardown
|
10
10
|
I18n::Backend::ActiveRecord::Translation.destroy_all
|
11
|
+
I18n::Backend::ActiveRecord.instance_variable_set :@config, I18n::Backend::ActiveRecord::Configuration.new
|
11
12
|
super
|
12
13
|
end
|
13
14
|
|
@@ -48,4 +49,31 @@ class I18nBackendActiveRecordTest < I18n::TestCase
|
|
48
49
|
test "expand_keys" do
|
49
50
|
assert_equal %w(foo foo.bar foo.bar.baz), I18n.backend.send(:expand_keys, :'foo.bar.baz')
|
50
51
|
end
|
52
|
+
|
53
|
+
test "available_locales returns uniq locales" do
|
54
|
+
I18n::Backend::ActiveRecord::Translation.delete_all
|
55
|
+
I18n.backend.store_translations(:en, :foo => { :bar => 'bar' })
|
56
|
+
I18n.backend.store_translations(:en, :foo => { :baz => 'baz' })
|
57
|
+
I18n.backend.store_translations(:de, :foo1 => 'foo')
|
58
|
+
I18n.backend.store_translations(:de, :foo2 => 'foo')
|
59
|
+
I18n.backend.store_translations(:uk, :foo3 => 'foo')
|
60
|
+
|
61
|
+
available_locales = I18n::Backend::ActiveRecord::Translation.available_locales
|
62
|
+
assert_equal 3, available_locales.size
|
63
|
+
assert_includes available_locales, :en
|
64
|
+
assert_includes available_locales, :de
|
65
|
+
assert_includes available_locales, :uk
|
66
|
+
end
|
67
|
+
|
68
|
+
test "the default configuration has cleanup_with_destroy == false" do
|
69
|
+
refute I18n::Backend::ActiveRecord.config.cleanup_with_destroy
|
70
|
+
end
|
71
|
+
|
72
|
+
test "the configuration supports cleanup_with_destroy being set" do
|
73
|
+
I18n::Backend::ActiveRecord.configure do |config|
|
74
|
+
config.cleanup_with_destroy = true
|
75
|
+
end
|
76
|
+
|
77
|
+
assert I18n::Backend::ActiveRecord.config.cleanup_with_destroy
|
78
|
+
end
|
51
79
|
end
|
data/test/test_helper.rb
CHANGED
@@ -8,8 +8,6 @@ require 'test_declarative'
|
|
8
8
|
require 'i18n/active_record'
|
9
9
|
require 'i18n/tests'
|
10
10
|
|
11
|
-
gemfile = ENV['BUNDLE_GEMFILE'] || 'Gemfile'
|
12
|
-
|
13
11
|
begin
|
14
12
|
require 'active_record'
|
15
13
|
::ActiveRecord::Base.connection
|
@@ -17,9 +15,11 @@ rescue LoadError => e
|
|
17
15
|
puts "can't use ActiveRecord backend because: #{e.message}"
|
18
16
|
rescue ::ActiveRecord::ConnectionNotEstablished
|
19
17
|
require 'i18n/backend/active_record'
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
case ENV['DB']
|
19
|
+
when 'postgres'
|
20
|
+
::ActiveRecord::Base.establish_connection adapter: 'postgresql', database: 'i18n_unittest', username: ENV['PG_USER'] || 'i18n', password: '', host: 'localhost'
|
21
|
+
when 'mysql'
|
22
|
+
::ActiveRecord::Base.establish_connection adapter: 'mysql', database: 'i18n_unittest', username: 'root', password: '', host: 'localhost'
|
23
23
|
else
|
24
24
|
::ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
|
25
25
|
end
|
@@ -48,6 +48,15 @@ class TEST_CASE
|
|
48
48
|
end
|
49
49
|
|
50
50
|
class I18n::TestCase < TEST_CASE
|
51
|
+
def setup
|
52
|
+
I18n.enforce_available_locales = false
|
53
|
+
I18n.available_locales = []
|
54
|
+
I18n.locale = :en
|
55
|
+
I18n.default_locale = :en
|
56
|
+
I18n.load_path = []
|
57
|
+
super
|
58
|
+
end
|
59
|
+
|
51
60
|
def teardown
|
52
61
|
I18n.enforce_available_locales = false
|
53
62
|
I18n.available_locales = []
|
@@ -55,15 +64,14 @@ class I18n::TestCase < TEST_CASE
|
|
55
64
|
I18n.default_locale = :en
|
56
65
|
I18n.load_path = []
|
57
66
|
I18n.backend = nil
|
67
|
+
super
|
58
68
|
end
|
59
69
|
|
60
70
|
def translations
|
61
71
|
I18n.backend.instance_variable_get(:@translations)
|
62
72
|
end
|
63
73
|
|
64
|
-
def store_translations(
|
65
|
-
data = args.pop
|
66
|
-
locale = args.pop || :en
|
74
|
+
def store_translations(locale, data)
|
67
75
|
I18n.backend.store_translations(locale, data)
|
68
76
|
end
|
69
77
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: i18n-active_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven Fuchs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|
@@ -51,6 +51,7 @@ files:
|
|
51
51
|
- lib/i18n/active_record.rb
|
52
52
|
- lib/i18n/active_record/version.rb
|
53
53
|
- lib/i18n/backend/active_record.rb
|
54
|
+
- lib/i18n/backend/active_record/configuration.rb
|
54
55
|
- lib/i18n/backend/active_record/missing.rb
|
55
56
|
- lib/i18n/backend/active_record/store_procs.rb
|
56
57
|
- lib/i18n/backend/active_record/translation.rb
|