yaml-validator 0.1.1 → 0.1.2
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.lock +1 -1
- data/lib/helpers.rb +8 -0
- data/lib/pluralization-validator.rb +65 -0
- data/lib/yaml-validator/version.rb +1 -1
- data/lib/yaml-validator.rb +15 -3
- data/scripts/get-rails-i18n-rules.rb +38 -0
- data/spec/fixtures/weird_pluralizations/en.yml +7 -0
- data/spec/fixtures/weird_pluralizations/ru.yml +9 -0
- data/spec/helpers_spec.rb +12 -0
- data/spec/yaml-validator_spec.rb +11 -0
- metadata +10 -4
data/Gemfile.lock
CHANGED
data/lib/helpers.rb
CHANGED
@@ -20,5 +20,13 @@ module Helpers
|
|
20
20
|
array.each_with_index { |val, i| hash[i.to_s] = val }
|
21
21
|
hash
|
22
22
|
end
|
23
|
+
|
24
|
+
def self.pluralization?(object)
|
25
|
+
return false if object.nil?
|
26
|
+
|
27
|
+
keys = object.keys.map { |k| k.to_sym }
|
28
|
+
|
29
|
+
(keys.include? :one) and (keys.include? :other)
|
30
|
+
end
|
23
31
|
|
24
32
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
KEYS_BY_LANGUAGE = {
|
3
|
+
:be=>[:one, :few, :many, :other],
|
4
|
+
:bs=>[:one, :few, :many, :other],
|
5
|
+
:by=>[:one, :few, :many, :other],
|
6
|
+
:cs=>[:one, :few, :other],
|
7
|
+
:hr=>[:one, :few, :many, :other],
|
8
|
+
:iu=>[:one, :two, :other],
|
9
|
+
:kw=>[:one, :two, :other],
|
10
|
+
:mo=>[:one, :few, :other],
|
11
|
+
:naq=>[:one, :two, :other],
|
12
|
+
:ro=>[:one, :few, :other],
|
13
|
+
:ru=>[:one, :few, :many, :other],
|
14
|
+
:se=>[:one, :two, :other],
|
15
|
+
:sh=>[:one, :few, :many, :other],
|
16
|
+
:sk=>[:one, :few, :other],
|
17
|
+
:sma=>[:one, :two, :other],
|
18
|
+
:smi=>[:one, :two, :other],
|
19
|
+
:smj=>[:one, :two, :other],
|
20
|
+
:smn=>[:one, :two, :other],
|
21
|
+
:sms=>[:one, :two, :other],
|
22
|
+
:sr=>[:one, :few, :many, :other],
|
23
|
+
:uk=>[:one, :few, :many, :other]
|
24
|
+
}
|
25
|
+
|
26
|
+
class PluralizationValidator
|
27
|
+
def self.validate(language, yaml_object)
|
28
|
+
validate_object(language, '', yaml_object)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.validate_object(language, full_key, yaml_object)
|
32
|
+
return [] if yaml_object.nil?
|
33
|
+
|
34
|
+
if Helpers.pluralization? yaml_object
|
35
|
+
self.validate_pluralization(language, full_key, yaml_object)
|
36
|
+
else
|
37
|
+
errors = []
|
38
|
+
yaml_object.each do |key, value|
|
39
|
+
if value.is_a? Hash
|
40
|
+
full_subkey = (full_key.empty?) ? key : "#{full_key}.#{key}"
|
41
|
+
errors.concat validate_object(language, full_subkey, value)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
errors
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.validate_pluralization(language, full_key, yaml_object)
|
49
|
+
language = language.to_sym
|
50
|
+
if KEYS_BY_LANGUAGE.has_key? language
|
51
|
+
errors = []
|
52
|
+
KEYS_BY_LANGUAGE[language].each do |key|
|
53
|
+
unless (yaml_object.has_key? key) or
|
54
|
+
(yaml_object.has_key? key.to_s)
|
55
|
+
|
56
|
+
errors << "missing '#{key.to_s}' pluralization for '#{full_key}'"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
errors
|
60
|
+
else
|
61
|
+
[]
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
data/lib/yaml-validator.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'yaml-validator/version'
|
3
3
|
require_relative './helpers'
|
4
|
+
require_relative './pluralization-validator'
|
4
5
|
|
5
6
|
class YamlValidator
|
6
7
|
|
@@ -54,6 +55,7 @@ class YamlValidator
|
|
54
55
|
errors += validate_yaml_object('', yaml_object)
|
55
56
|
if @options[:show_missing]
|
56
57
|
errors.concat find_missing_translations(yaml_object)
|
58
|
+
errors.concat find_missing_pluralizations(filename, yaml_object)
|
57
59
|
end
|
58
60
|
|
59
61
|
errors.map { |err| "#{filename}: #{err}" }
|
@@ -73,11 +75,12 @@ class YamlValidator
|
|
73
75
|
def validate_yaml_object(full_key, yaml_object)
|
74
76
|
return [] if yaml_object.nil?
|
75
77
|
errors = []
|
78
|
+
is_pluralization = Helpers.pluralization? yaml_object
|
76
79
|
|
77
80
|
yaml_object.each do |key, value|
|
78
81
|
full_subkey = (full_key.empty?) ? key : "#{full_key}.#{key}"
|
79
82
|
if value.is_a? String
|
80
|
-
errors.concat validate_item(full_subkey, value)
|
83
|
+
errors.concat validate_item(full_subkey, value, is_pluralization)
|
81
84
|
else
|
82
85
|
errors.concat validate_yaml_object(full_subkey, value)
|
83
86
|
end
|
@@ -105,6 +108,11 @@ class YamlValidator
|
|
105
108
|
end
|
106
109
|
errors
|
107
110
|
end
|
111
|
+
|
112
|
+
def find_missing_pluralizations(filename, yaml_object)
|
113
|
+
language = File.basename(filename, '.*')
|
114
|
+
PluralizationValidator.validate(language, yaml_object)
|
115
|
+
end
|
108
116
|
|
109
117
|
def self.find_key_in_yaml_object(full_key, yaml_object)
|
110
118
|
position = yaml_object
|
@@ -120,10 +128,14 @@ class YamlValidator
|
|
120
128
|
end
|
121
129
|
end
|
122
130
|
|
123
|
-
def validate_item(full_key, value)
|
131
|
+
def validate_item(full_key, value, is_pluralization = false)
|
124
132
|
real_vars = get_key_en_vars(full_key)
|
125
133
|
if real_vars.nil?
|
126
|
-
|
134
|
+
if is_pluralization
|
135
|
+
return []
|
136
|
+
else
|
137
|
+
return ["#{full_key} doesn't exist in en.yml"]
|
138
|
+
end
|
127
139
|
end
|
128
140
|
|
129
141
|
used_vars = identify_variables(value)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
RAILS_I18N_PATH = File.expand_path("~/playground/rails-i18n")
|
6
|
+
|
7
|
+
|
8
|
+
NORMAL_RULES = ['one_other', 'other', 'one_upto_two_other', 'one_with_zero_other']
|
9
|
+
|
10
|
+
KEYS_BY_RULE = {
|
11
|
+
'west_slavic' => [:one, :few, :other],
|
12
|
+
'east_slavic' => [:one, :few, :many, :other],
|
13
|
+
'romanian' => [:one, :few, :other],
|
14
|
+
'one_two_other' => [:one, :two, :other]
|
15
|
+
}
|
16
|
+
|
17
|
+
PLURALS_PATH = File.join(RAILS_I18N_PATH, "rails/pluralization")
|
18
|
+
|
19
|
+
def find_rule(pluralization_file)
|
20
|
+
rule = `grep require #{pluralization_file}`
|
21
|
+
if rule.length > 0
|
22
|
+
/^.*pluralizations\/(.*)'$/.match(rule)[1]
|
23
|
+
else
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
all = {}
|
29
|
+
Dir["#{PLURALS_PATH}/*.rb"].each do |file|
|
30
|
+
lang = File.basename(file, '.*')
|
31
|
+
rule = find_rule(file)
|
32
|
+
unless rule.nil? or NORMAL_RULES.include? rule
|
33
|
+
keys = KEYS_BY_RULE[rule]
|
34
|
+
all[lang.to_sym] = keys
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
pp all
|
data/spec/helpers_spec.rb
CHANGED
@@ -50,4 +50,16 @@ describe Helpers do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
describe "#pluralization?" do
|
54
|
+
it "returns true when object has :one and :other" do
|
55
|
+
Helpers.pluralization?(:one => 'one', :other => 'other').should be_true
|
56
|
+
end
|
57
|
+
it "returns true when object has 'one' and 'other'" do
|
58
|
+
Helpers.pluralization?('one' => 'one', 'other' => 'other').should be_true
|
59
|
+
end
|
60
|
+
it "returns false for {}" do
|
61
|
+
Helpers.pluralization?({}).should be_false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
53
65
|
end
|
data/spec/yaml-validator_spec.rb
CHANGED
@@ -65,6 +65,17 @@ describe YamlValidator do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
describe "weird pluralizations" do
|
69
|
+
it "returns missing pluralizations error" do
|
70
|
+
validator = YamlValidator.new('spec/fixtures/weird_pluralizations')
|
71
|
+
errors = validator.validate()
|
72
|
+
errors.should == [
|
73
|
+
"ru.yml: missing 'few' pluralization for 'dogs'",
|
74
|
+
"ru.yml: missing 'many' pluralization for 'dogs'",
|
75
|
+
]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
68
79
|
end
|
69
80
|
|
70
81
|
describe "#validate_yaml" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml-validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -75,15 +75,19 @@ files:
|
|
75
75
|
- Rakefile
|
76
76
|
- bin/yaml-validator
|
77
77
|
- lib/helpers.rb
|
78
|
+
- lib/pluralization-validator.rb
|
78
79
|
- lib/yaml-validator.rb
|
79
80
|
- lib/yaml-validator/version.rb
|
80
81
|
- pkg/yaml-validator-0.0.1.gem
|
82
|
+
- scripts/get-rails-i18n-rules.rb
|
81
83
|
- spec/fixtures/inconsistent_types/en.yml
|
82
84
|
- spec/fixtures/inconsistent_types/he.yml
|
83
85
|
- spec/fixtures/invalid_yml/en.yml
|
84
86
|
- spec/fixtures/invalid_yml/invalid.yml
|
85
87
|
- spec/fixtures/missing_translations/en.yml
|
86
88
|
- spec/fixtures/missing_translations/he.yml
|
89
|
+
- spec/fixtures/weird_pluralizations/en.yml
|
90
|
+
- spec/fixtures/weird_pluralizations/ru.yml
|
87
91
|
- spec/fixtures/wrong_root/en.yml
|
88
92
|
- spec/fixtures/wrong_root/he.yml
|
89
93
|
- spec/fixtures/wrong_variables/en.yml
|
@@ -105,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
109
|
version: '0'
|
106
110
|
segments:
|
107
111
|
- 0
|
108
|
-
hash:
|
112
|
+
hash: -1836755832709183753
|
109
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
114
|
none: false
|
111
115
|
requirements:
|
@@ -114,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
118
|
version: '0'
|
115
119
|
segments:
|
116
120
|
- 0
|
117
|
-
hash:
|
121
|
+
hash: -1836755832709183753
|
118
122
|
requirements: []
|
119
123
|
rubyforge_project:
|
120
124
|
rubygems_version: 1.8.24
|
@@ -128,6 +132,8 @@ test_files:
|
|
128
132
|
- spec/fixtures/invalid_yml/invalid.yml
|
129
133
|
- spec/fixtures/missing_translations/en.yml
|
130
134
|
- spec/fixtures/missing_translations/he.yml
|
135
|
+
- spec/fixtures/weird_pluralizations/en.yml
|
136
|
+
- spec/fixtures/weird_pluralizations/ru.yml
|
131
137
|
- spec/fixtures/wrong_root/en.yml
|
132
138
|
- spec/fixtures/wrong_root/he.yml
|
133
139
|
- spec/fixtures/wrong_variables/en.yml
|