rails_core_extensions 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/rails_core_extensions.rb +2 -0
- data/lib/rails_core_extensions/active_record_extensions.rb +0 -16
- data/lib/rails_core_extensions/translations.rb +32 -0
- data/lib/rails_core_extensions/version.rb +1 -1
- data/spec/en.yml +8 -0
- data/spec/schema.rb +4 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/coverage_loader.rb +3 -2
- data/spec/translation_spec.rb +104 -0
- metadata +8 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20b022eccf968998d9236870dd9255b5ca5eff46
|
4
|
+
data.tar.gz: a82a4adf1601c57035016df31d53d6a2fbc5e41e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53bfc4fb4f56485453989c62428fb370748e6cda40bd082ce98e21a544518bc5354b70cc6b3294b59f897664e08b146e21bd6ce385a64880e10a3184649ad0bc
|
7
|
+
data.tar.gz: d1d3a4637dff550333f1eba6fb3ae7ca9d19bfa6aad31f8deb4344ab60a9e99ac519b139e356ee9e203f4aa9a2ec98a707774d4c6b1841780f74000574194c64
|
data/CHANGELOG.md
CHANGED
@@ -27,11 +27,13 @@ module RailsCoreExtensions
|
|
27
27
|
require 'rails_core_extensions/active_record_cache_all_attributes'
|
28
28
|
require 'rails_core_extensions/active_record_extensions'
|
29
29
|
require 'rails_core_extensions/active_record_liquid_extensions'
|
30
|
+
require 'rails_core_extensions/translations'
|
30
31
|
|
31
32
|
ActiveRecord::Base.send(:include, ActiveRecordCloning)
|
32
33
|
ActiveRecord::Base.send(:include, ActiveRecordExtensions)
|
33
34
|
ActiveRecord::Base.send(:include, RailsCoreExtensions::ActiveRecordLiquidExtensions)
|
34
35
|
ActiveRecord::Base.send(:include, ActiveRecordExtensions::InstanceMethods)
|
36
|
+
ActiveRecord::Base.send(:include, RailsCoreExtensions::Translations)
|
35
37
|
|
36
38
|
if ActiveRecord::VERSION::MAJOR >= 3
|
37
39
|
require 'rails_core_extensions/active_model_extensions'
|
@@ -144,16 +144,6 @@ module ActiveRecordExtensions
|
|
144
144
|
# longer alive.
|
145
145
|
ActiveRecord::Base.clear_active_connections!
|
146
146
|
end
|
147
|
-
|
148
|
-
def translate(key, options = {})
|
149
|
-
klass = self
|
150
|
-
klass = klass.superclass while klass.superclass != ActiveRecord::Base
|
151
|
-
I18n.translate key, options.merge(:scope => klass.name.tableize.singularize)
|
152
|
-
end
|
153
|
-
|
154
|
-
def t(key, options = {})
|
155
|
-
self.translate(key, options)
|
156
|
-
end
|
157
147
|
end
|
158
148
|
|
159
149
|
module InstanceMethods
|
@@ -184,11 +174,5 @@ module ActiveRecordExtensions
|
|
184
174
|
def audit_log
|
185
175
|
return (self.methods.include?('audits') ? self.audits : [])
|
186
176
|
end
|
187
|
-
|
188
|
-
private
|
189
|
-
|
190
|
-
def t(key, options = {})
|
191
|
-
self.class.translate(key, options)
|
192
|
-
end
|
193
177
|
end
|
194
178
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module RailsCoreExtensions
|
2
|
+
module Translations
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def translate(key, options = {})
|
9
|
+
I18n.translate key, options.merge(scope: translation_key)
|
10
|
+
end
|
11
|
+
|
12
|
+
def translation_key
|
13
|
+
@translation_key ||= base_translation_class.name.tableize.singularize.gsub('/', '.')
|
14
|
+
end
|
15
|
+
|
16
|
+
def base_translation_class
|
17
|
+
return base_class if defined?(ActiveRecord) && ancestors.include?(ActiveRecord::Base)
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
def t(key, options = {})
|
22
|
+
self.translate(key, options)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def t(key, options = {})
|
29
|
+
self.class.translate(key, options)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/spec/en.yml
ADDED
data/spec/schema.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
MINIMUM_COVERAGE =
|
1
|
+
MINIMUM_COVERAGE = 81.1
|
2
2
|
|
3
3
|
unless ENV['COVERAGE'] == 'off'
|
4
4
|
require 'simplecov'
|
@@ -18,8 +18,9 @@ unless ENV['COVERAGE'] == 'off'
|
|
18
18
|
SimpleCov.at_exit do
|
19
19
|
SimpleCov.result.format!
|
20
20
|
percent = SimpleCov.result.covered_percent
|
21
|
+
puts "Coverage is #{"%.2f" % percent}%"
|
21
22
|
unless percent >= MINIMUM_COVERAGE
|
22
|
-
puts "Coverage must be above #{MINIMUM_COVERAGE}
|
23
|
+
puts "Coverage must be above #{MINIMUM_COVERAGE}%"
|
23
24
|
Kernel.exit(1)
|
24
25
|
end
|
25
26
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'i18n'
|
3
|
+
|
4
|
+
describe 'translations' do
|
5
|
+
let(:model_class) {
|
6
|
+
Class.new do
|
7
|
+
include RailsCoreExtensions::Translations
|
8
|
+
|
9
|
+
def initialize(name)
|
10
|
+
@name = name
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
t('display_me', name: @name)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
}
|
18
|
+
|
19
|
+
before do
|
20
|
+
stub_const 'TranslationModel', model_class
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:class_translation) { TranslationModel.t('display_me', name: 'Class') }
|
24
|
+
subject { TranslationModel.new('Ruby') }
|
25
|
+
|
26
|
+
specify { expect(TranslationModel.translation_key).to eq 'translation_model' }
|
27
|
+
specify { expect(subject.to_s).to eq 'My name is Ruby' }
|
28
|
+
specify { expect(class_translation).to eq 'My name is Class' }
|
29
|
+
|
30
|
+
context 'performance' do
|
31
|
+
before do
|
32
|
+
allow(TranslationModel).to receive(:base_translation_class).and_call_original
|
33
|
+
5.times { subject.to_s }
|
34
|
+
end
|
35
|
+
|
36
|
+
specify {
|
37
|
+
expect(TranslationModel).to have_received(:base_translation_class).once
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'non AR subclass' do
|
42
|
+
let(:model_subclass) {
|
43
|
+
Class.new(model_class)
|
44
|
+
}
|
45
|
+
|
46
|
+
before do
|
47
|
+
stub_const 'Translation::SubModel', model_subclass
|
48
|
+
end
|
49
|
+
|
50
|
+
let(:class_translation) { Translation::SubModel.t('display_me', name: 'Class') }
|
51
|
+
subject { Translation::SubModel.new('Ruby') }
|
52
|
+
|
53
|
+
specify { expect(Translation::SubModel.translation_key).to eq 'translation.sub_model' }
|
54
|
+
specify { expect(subject.to_s).to eq 'My subname is Ruby' }
|
55
|
+
specify { expect(class_translation).to eq 'My subname is Class' }
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'AR base class' do
|
59
|
+
let(:ar_model_class) {
|
60
|
+
Class.new(ActiveRecord::Base) do
|
61
|
+
self.table_name = 'parties'
|
62
|
+
|
63
|
+
include RailsCoreExtensions::Translations
|
64
|
+
|
65
|
+
def to_s
|
66
|
+
t('display_me', name: name)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
}
|
70
|
+
let(:ar_model_subclass) {
|
71
|
+
Class.new(Party) do
|
72
|
+
self.table_name = 'parties'
|
73
|
+
|
74
|
+
include RailsCoreExtensions::Translations
|
75
|
+
|
76
|
+
def to_s
|
77
|
+
t('display_me', name: name)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
}
|
81
|
+
|
82
|
+
before do
|
83
|
+
connect_to_sqlite
|
84
|
+
stub_const 'Party', ar_model_class
|
85
|
+
stub_const 'Person', ar_model_subclass
|
86
|
+
end
|
87
|
+
|
88
|
+
let(:class_translation) { Party.t('display_me', name: 'Class') }
|
89
|
+
subject { Party.new(name: 'Ruby') }
|
90
|
+
|
91
|
+
specify { expect(Party.translation_key).to eq 'party' }
|
92
|
+
specify { expect(subject.to_s).to eq 'Party Ruby' }
|
93
|
+
specify { expect(class_translation).to eq 'Party Class' }
|
94
|
+
|
95
|
+
context 'AR sub class' do
|
96
|
+
let(:class_translation) { Person.t('display_me', name: 'Class') }
|
97
|
+
subject { Person.new(name: 'Ruby') }
|
98
|
+
|
99
|
+
specify { expect(Person.translation_key).to eq 'party' }
|
100
|
+
specify { expect(subject.to_s).to eq 'Party Ruby' }
|
101
|
+
specify { expect(class_translation).to eq 'Party Class' }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_core_extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Noack
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-08-
|
12
|
+
date: 2016-08-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -234,6 +234,7 @@ files:
|
|
234
234
|
- lib/rails_core_extensions/tasks/position_initializer.rake
|
235
235
|
- lib/rails_core_extensions/time_with_zone.rb
|
236
236
|
- lib/rails_core_extensions/transfer_records.rb
|
237
|
+
- lib/rails_core_extensions/translations.rb
|
237
238
|
- lib/rails_core_extensions/version.rb
|
238
239
|
- rails_core_extensions.gemspec
|
239
240
|
- spec/action_controller_sortable_spec.rb
|
@@ -243,12 +244,14 @@ files:
|
|
243
244
|
- spec/active_record_extensions_spec.rb
|
244
245
|
- spec/breadcrumb_spec.rb
|
245
246
|
- spec/concurrency_spec.rb
|
247
|
+
- spec/en.yml
|
246
248
|
- spec/position_initializer_spec.rb
|
247
249
|
- spec/schema.rb
|
248
250
|
- spec/spec_helper.rb
|
249
251
|
- spec/spec_helper_model_base.rb
|
250
252
|
- spec/support/coverage_loader.rb
|
251
253
|
- spec/transfer_records_spec.rb
|
254
|
+
- spec/translation_spec.rb
|
252
255
|
homepage: http://github.com/sealink/rails_core_extensions
|
253
256
|
licenses:
|
254
257
|
- MIT
|
@@ -269,7 +272,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
272
|
version: '0'
|
270
273
|
requirements: []
|
271
274
|
rubyforge_project:
|
272
|
-
rubygems_version: 2.4.
|
275
|
+
rubygems_version: 2.4.8
|
273
276
|
signing_key:
|
274
277
|
specification_version: 4
|
275
278
|
summary: Set of extensions to core rails libraries.
|
@@ -281,9 +284,11 @@ test_files:
|
|
281
284
|
- spec/active_record_extensions_spec.rb
|
282
285
|
- spec/breadcrumb_spec.rb
|
283
286
|
- spec/concurrency_spec.rb
|
287
|
+
- spec/en.yml
|
284
288
|
- spec/position_initializer_spec.rb
|
285
289
|
- spec/schema.rb
|
286
290
|
- spec/spec_helper.rb
|
287
291
|
- spec/spec_helper_model_base.rb
|
288
292
|
- spec/support/coverage_loader.rb
|
289
293
|
- spec/transfer_records_spec.rb
|
294
|
+
- spec/translation_spec.rb
|