Class: Apstrings::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/apstrings/strings_validator.rb

Class Method Summary collapse

Class Method Details

.paredFile(file) ⇒ Object



103
104
105
106
# File 'lib/apstrings/strings_validator.rb', line 103

def self.paredFile(file)
	file = Reader.read(file)
	StringsParser.new(file).parse_file
end

.validate(file, masterFile) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/apstrings/strings_validator.rb', line 8

def self.validate(file,masterFile)
	@master = nil
	# puts "apstrings: start validate  strings file  ..."
	if nil == masterFile
		Log::warn("No master file provided, validating file format for #{file} only ...")
	else
		@master = Validator::paredFile(masterFile)
	end

	valid_master, valid_file , no_missing_key  = true,true,true

	valid_file = Validator::validate_format(file)
	if masterFile != nil
		valid_master = Validator::validate_format(masterFile)
		no_missing_key = Validator::validate_missing(file,masterFile)
	end
	
	if valid_master && valid_file &&  no_missing_key
		# Log::info("Yeah! 🍻 🍻 ")
		return true
	else
		Log::error("Oh no! Invalid file.")
		return false
	end
end

.validate_duplicates(file) ⇒ Object



73
74
75
76
77
78
79
# File 'lib/apstrings/strings_validator.rb', line 73

def self.validate_duplicates(file)
	# puts "apstrings: checking dup-keys for #{file}..."
	sf = Validator::paredFile(file)
	sf.keys.detect {
		|e| sf.keys.count(e) > 1
	}
end

.validate_format(file) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/apstrings/strings_validator.rb', line 34

def self.validate_format(file)
	is_valid = true
	# puts "apstrings: start validate format for #{file} ..."
	dup_keys_in_file = Validator::validate_duplicates(file)
	mismatchs_in_file = Validator::validate_special_characters(file)
	if nil != dup_keys_in_file && !dup_keys_in_file.empty?
		Log::warn("Dup-keys found in #{file}: \n `#{dup_keys_in_file}`.")
	else
		# Log::info("OK . .")
	end

	if !mismatchs_in_file.empty?
		is_valid = false
		mismatchs_in_file.each { |e| e.each_pair {
				|key,value|
				Log::error("Mismatch format found in `#{file}`: \n `#{key}` ====>  `#{value}`")
			}
		}
	else
		# Log::info("OK ...  \n ")
	end
	is_valid
end

.validate_missing(file, masterFile) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/apstrings/strings_validator.rb', line 58

def self.validate_missing(file,masterFile)
	# puts "apstrings: checking missing keys for #{file}..."
	sf = Validator::paredFile(file)
	sf_masterFile = Validator::paredFile(masterFile)
	no_missing = true
	missing_keys = sf_masterFile.keys - sf.keys
	if !missing_keys.empty?
		no_missing =false
		Log::warn("#{missing_keys.count.to_s} missing keys found in #{file} comparing to master file: #{masterFile} : \n #{missing_keys.to_s}")
	else
		# Log::info("OK...")
	end
	no_missing
end

.validate_special_characters(file) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/apstrings/strings_validator.rb', line 82

def self.validate_special_characters(file)
	# puts "apstrings: checking syntax for #{file}..."
	sf = Validator::paredFile(file)
	variables_regex = /%[hlqLztj]?[@%dDuUxXoOfeEgGcCsSpaAF]/
	mismatchs = []
	sf.key_values.each {
		|e|  e.each_pair {
			|key,value|	
			fixed_key = Validator::value_in_master(key)	
			striped_key =  fixed_key.gsub(/%\d\$/,'%') # Strip numbered format placeholders , e.g. %1$@ --> %@ 
			striped_value = value.gsub(/%\d\$/,'%')   
			key_variables = striped_key.scan(variables_regex) 
			value_variables = striped_value.scan(variables_regex) 
			if !(key_variables.sort == value_variables.sort)
				mismatchs << {key => value}   
			end
		}
	}
	mismatchs
end

.value_in_master(key) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/apstrings/strings_validator.rb', line 108

def self.value_in_master(key)
	if @master
		value_comment = @master.to_hash[key] # 
		if value_comment == nil
			return key 
		else
			return value_comment.keys[0]
		end
	else
		key
	end
end