serial_translator 0.0.4 → 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/.rspec +1 -0
- data/lib/serial_translator.rb +1 -0
- data/lib/serial_translator/version.rb +1 -1
- data/spec/lib/serial_translator/serial_translator_validator_spec.rb +31 -17
- data/spec/lib/serial_translator_spec.rb +26 -21
- data/spec/spec_helper.rb +0 -4
- data/spec/support/fake_object.rb +22 -0
- metadata +21 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46318b38f444ed6a25379dd0aeafe616232b1f22
|
4
|
+
data.tar.gz: 4aa381357c2b9ae40d97330ca7b466114d69225f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 179f207c79c20b56732b8a760ac18e0c02cb7e97de9d781a9de6761fc9a6480b7908f0cb701c40dfda4f51b3058f89cf9914511042d004fea80593c66baa7585
|
7
|
+
data.tar.gz: 2c46ea1ceaf2f97f76c67d954ca935167bb3f793b6fafedf3acf3a346635328feb396487be6035cd77e3ce687d0bcfe3daa1806e86fcf38b6804e9074989ac22
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/lib/serial_translator.rb
CHANGED
@@ -6,80 +6,94 @@ describe SerialTranslator::SerialTranslatorValidator do
|
|
6
6
|
describe 'presence validation' do
|
7
7
|
it 'validates presence correctly if attribute is nil' do
|
8
8
|
example.valid?
|
9
|
-
example.
|
9
|
+
expect(example.errors[:description].size).to eq 1
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'validates presence correctly if attribute is empty' do
|
13
13
|
example.description = ''
|
14
|
-
example.
|
14
|
+
example.valid?
|
15
|
+
expect(example.errors[:description].size).to eq 1
|
15
16
|
end
|
16
17
|
|
17
18
|
it 'has no error if everything is fine' do
|
18
19
|
example.description = 'This is a nice foo thing'
|
19
|
-
example.
|
20
|
+
example.valid?
|
21
|
+
expect(example.errors[:description].size).to eq 0
|
20
22
|
end
|
21
23
|
|
22
24
|
it 'is valid if any language has a value' do
|
23
25
|
example.description_translations = { en: '', de: '' }
|
24
|
-
example.
|
26
|
+
example.valid?
|
27
|
+
expect(example.errors[:description].size).to eq 1
|
28
|
+
|
25
29
|
example.description_translations = { en: '', de: 'foobar' }
|
26
|
-
example.
|
30
|
+
example.valid?
|
31
|
+
expect(example.errors[:description].size).to eq 0
|
32
|
+
|
27
33
|
example.description_translations = { en: 'foobar', de: nil }
|
28
|
-
example.
|
34
|
+
example.valid?
|
35
|
+
expect(example.errors[:description].size).to eq 0
|
29
36
|
end
|
30
37
|
end
|
31
38
|
|
32
39
|
describe 'length validation' do
|
33
40
|
it 'validates min length correctly' do
|
34
41
|
example.title = '123'
|
35
|
-
example.
|
42
|
+
example.valid?
|
43
|
+
expect(example.errors[:title].size).to eq 1
|
36
44
|
end
|
37
45
|
|
38
46
|
it 'validates max length correctly' do
|
39
47
|
example.title = 'f' * 26
|
40
|
-
example.
|
48
|
+
example.valid?
|
49
|
+
expect(example.errors[:title].size).to eq 1
|
41
50
|
end
|
42
51
|
|
43
52
|
it 'ignores blank fields' do
|
44
53
|
example.title = ''
|
45
|
-
example.
|
54
|
+
example.valid?
|
55
|
+
expect(example.errors[:title].size).to eq 0
|
46
56
|
end
|
47
57
|
|
48
58
|
it 'validates all translation values' do
|
49
59
|
example.title_translations = { en: '123', de: '123' }
|
50
|
-
example.
|
60
|
+
example.valid?
|
61
|
+
expect(example.errors[:title].size).to eq 2
|
51
62
|
|
52
63
|
example.title_translations = { en: '123456', de: '123' }
|
53
|
-
example.
|
64
|
+
example.valid?
|
65
|
+
expect(example.errors[:title].size).to eq 1
|
54
66
|
|
55
67
|
example.title_translations = { en: '123', de: '123456' }
|
56
|
-
example.
|
68
|
+
example.valid?
|
69
|
+
expect(example.errors[:title].size).to eq 1
|
57
70
|
|
58
71
|
example.title_translations = { en: '123456', de: '123456' }
|
59
|
-
example.
|
72
|
+
example.valid?
|
73
|
+
expect(example.errors[:title].size).to eq 0
|
60
74
|
end
|
61
75
|
|
62
76
|
it 'validates correctly on language change as well' do
|
63
77
|
I18n.locale = :de
|
64
78
|
example.description = :something_to_make_it_pass_valid
|
65
79
|
example.title = 'Valid foo'
|
66
|
-
example.
|
80
|
+
expect(example).to be_valid
|
67
81
|
|
68
82
|
I18n.locale = :en
|
69
83
|
example.title = ''
|
70
|
-
example.
|
84
|
+
expect(example).to be_valid
|
71
85
|
end
|
72
86
|
end
|
73
87
|
|
74
88
|
describe '#kind' do
|
75
89
|
it 'returns length if length validation is set' do
|
76
90
|
validator = SerialTranslator::SerialTranslatorValidator.new(attributes: :foo, length: 1..2)
|
77
|
-
validator.kind.
|
91
|
+
expect(validator.kind).to eq :length
|
78
92
|
end
|
79
93
|
|
80
94
|
it 'returns presence if it is no length validation' do
|
81
95
|
validator = SerialTranslator::SerialTranslatorValidator.new(attributes: :foo)
|
82
|
-
validator.kind.
|
96
|
+
expect(validator.kind).to eq :presence
|
83
97
|
end
|
84
98
|
end
|
85
99
|
end
|
@@ -7,32 +7,32 @@ describe SerialTranslator do
|
|
7
7
|
describe 'getting a translated value' do
|
8
8
|
it 'returns the translated value in the requested locale' do
|
9
9
|
object.title_translations = { de: 'German translation', en: 'English translation' }
|
10
|
-
object.title(:de).
|
10
|
+
expect(object.title(:de)).to eq 'German translation'
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'returns the origin locale value if no translation is present' do
|
14
14
|
object.title_translations = { en: 'English translation' }
|
15
|
-
object.title(:de).
|
15
|
+
expect(object.title(:de)).to eq 'English translation'
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'returns the origin locale value if the translation is empty' do
|
19
19
|
object.title_translations = { de: '', en: 'English translation' }
|
20
|
-
object.title(:de).
|
20
|
+
expect(object.title(:de)).to eq 'English translation'
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'returns nil if no translations are there at all' do
|
24
24
|
object.title_translations = {}
|
25
|
-
object.title(:de).
|
25
|
+
expect(object.title(:de)).to be_nil
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'uses the given text locale' do
|
29
29
|
object.title_translations = { de: 'Deutsch', en: 'English' }
|
30
30
|
object.current_translation_locale = :en
|
31
|
-
object.title.
|
31
|
+
expect(object.title).to eq 'English'
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'does not fail even if translations were not initialized before' do
|
35
|
-
object.title.
|
35
|
+
expect(object.title).to be_blank
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -40,74 +40,79 @@ describe SerialTranslator do
|
|
40
40
|
it 'sets the value for the current text locale' do
|
41
41
|
object.current_translation_locale = :de
|
42
42
|
object.title = 'Deutsch'
|
43
|
-
object.title_translations.
|
43
|
+
expect(object.title_translations).to eq({ de: 'Deutsch' })
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'nil removes the value for the current text locale' do
|
47
47
|
object.title_translations = { de: 'Deutsch' }
|
48
48
|
object.current_translation_locale = :de
|
49
49
|
object.title = nil
|
50
|
-
object.title_translations.
|
50
|
+
expect(object.title_translations).to eq({})
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'blank string removes the value for the current text locale' do
|
54
54
|
object.title_translations = { de: 'Deutsch' }
|
55
55
|
object.current_translation_locale = :de
|
56
56
|
object.title = " "
|
57
|
-
object.title_translations.
|
57
|
+
expect(object.title_translations).to eq({})
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'marks the changes on the object for active record' do
|
61
|
+
object.title = 'Changed'
|
62
|
+
expect(object.changes).to include :title_translations
|
58
63
|
end
|
59
64
|
end
|
60
65
|
|
61
66
|
describe 'getting an attribute for a specific locale' do
|
62
67
|
it 'gets the correct translation' do
|
63
68
|
object.title_translations = { de: 'Deutsch' }
|
64
|
-
object.title_de.
|
69
|
+
expect(object.title_de).to eq 'Deutsch'
|
65
70
|
end
|
66
71
|
|
67
72
|
it 'uses fallback mechanisms as well' do
|
68
73
|
object.title_translations = { en: 'English' }
|
69
|
-
object.title_de.
|
74
|
+
expect(object.title_de).to eq 'English'
|
70
75
|
end
|
71
76
|
end
|
72
77
|
|
73
78
|
describe 'writing an attribute with for a specific locale' do
|
74
79
|
it 'sets the value for the correct locale' do
|
75
80
|
object.title_de = 'Deutsch'
|
76
|
-
object.title_translations.
|
81
|
+
expect(object.title_translations).to eq({ de: 'Deutsch' })
|
77
82
|
end
|
78
83
|
|
79
84
|
it 'works for complex locales as well' do
|
80
85
|
object.title_en_gb = 'Arrr'
|
81
|
-
object.title_translations.
|
86
|
+
expect(object.title_translations).to eq({ :'en-GB' => 'Arrr' })
|
82
87
|
end
|
83
88
|
end
|
84
89
|
|
85
90
|
describe '#current_translation_locale' do
|
86
91
|
it 'returns the value that was given' do
|
87
92
|
object.current_translation_locale = 'de'
|
88
|
-
object.current_translation_locale.
|
93
|
+
expect(object.current_translation_locale).to eq :de
|
89
94
|
end
|
90
95
|
|
91
96
|
it 'must not return nil' do
|
92
97
|
object.current_translation_locale = nil
|
93
|
-
object.current_translation_locale.
|
98
|
+
expect(object.current_translation_locale).to eq I18n.locale.to_sym
|
94
99
|
end
|
95
100
|
end
|
96
101
|
|
97
102
|
describe '#translated_locales' do
|
98
103
|
it 'returns an empty array if nothing was translated' do
|
99
|
-
object.translated_locales.
|
104
|
+
expect(object.translated_locales).to eq []
|
100
105
|
end
|
101
106
|
|
102
107
|
it 'includes all locales where something is present' do
|
103
108
|
object.title_translations = { en: 'Foo', de: 'Foo' }
|
104
109
|
object.summary_translations = { nb: 'Foo' }
|
105
|
-
object.translated_locales.
|
110
|
+
expect(object.translated_locales).to eq [:en, :de, :nb]
|
106
111
|
end
|
107
112
|
|
108
113
|
it 'does not include locales where all translations are blank' do
|
109
114
|
object.title_translations = { en: 'Foo', de: '' }
|
110
|
-
object.translated_locales.
|
115
|
+
expect(object.translated_locales).to eq [:en]
|
111
116
|
end
|
112
117
|
end
|
113
118
|
|
@@ -115,15 +120,15 @@ describe SerialTranslator do
|
|
115
120
|
before { object.title_translations = { en: 'Foo', de: '' } }
|
116
121
|
|
117
122
|
it 'returns true if there is a translation available for this locale' do
|
118
|
-
object.
|
123
|
+
expect(object).to be_translated_into :en
|
119
124
|
end
|
120
125
|
|
121
126
|
it 'returns false if there is no translation present for this locale' do
|
122
|
-
object.
|
127
|
+
expect(object).to_not be_translated_into :de
|
123
128
|
end
|
124
129
|
|
125
130
|
it 'returns false if this locale is unknown yet' do
|
126
|
-
object.
|
131
|
+
expect(object).to_not be_translated_into :yml
|
127
132
|
end
|
128
133
|
end
|
129
134
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/fake_object.rb
CHANGED
@@ -1,13 +1,35 @@
|
|
1
1
|
# This class is only used for testing purposes.
|
2
2
|
class FakeObject
|
3
3
|
include ActiveModel::Validations
|
4
|
+
|
4
5
|
def self.serialize(*) ; end
|
5
6
|
def self.before_save(*) ; end
|
7
|
+
|
6
8
|
attr_accessor :title_translations, :description_translations, :summary_translations
|
7
9
|
|
8
10
|
# Has to be set in this context to test it correctly
|
9
11
|
I18n.available_locales = [:en, :de, :'en-GB']
|
10
12
|
|
13
|
+
def changes
|
14
|
+
@changes ||= []
|
15
|
+
end
|
16
|
+
|
17
|
+
def mark_change(attribute)
|
18
|
+
changes << attribute
|
19
|
+
end
|
20
|
+
|
21
|
+
def description_translations_will_change!
|
22
|
+
mark_change :description_translations
|
23
|
+
end
|
24
|
+
|
25
|
+
def title_translations_will_change!
|
26
|
+
mark_change :title_translations
|
27
|
+
end
|
28
|
+
|
29
|
+
def summary_translations_will_change!
|
30
|
+
mark_change :summary_translations
|
31
|
+
end
|
32
|
+
|
11
33
|
include SerialTranslator
|
12
34
|
serial_translator_for :title, :description, :summary
|
13
35
|
validates :title, serial_translator: { length: 5..25 }
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serial_translator
|
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
|
- betterplace development team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activeresource
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 3.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 3.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
description: Translate attribute values without additional models
|
@@ -101,10 +101,11 @@ executables: []
|
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
-
|
105
|
-
-
|
106
|
-
-
|
107
|
-
-
|
104
|
+
- .gitignore
|
105
|
+
- .rspec
|
106
|
+
- .ruby-gemset
|
107
|
+
- .ruby-version
|
108
|
+
- .travis.yml
|
108
109
|
- Gemfile
|
109
110
|
- LICENSE.txt
|
110
111
|
- README.md
|
@@ -128,12 +129,12 @@ require_paths:
|
|
128
129
|
- lib
|
129
130
|
required_ruby_version: !ruby/object:Gem::Requirement
|
130
131
|
requirements:
|
131
|
-
- -
|
132
|
+
- - '>='
|
132
133
|
- !ruby/object:Gem::Version
|
133
134
|
version: '0'
|
134
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
136
|
requirements:
|
136
|
-
- -
|
137
|
+
- - '>='
|
137
138
|
- !ruby/object:Gem::Version
|
138
139
|
version: '0'
|
139
140
|
requirements: []
|