Module: Crowbar::Validate::Databags

Defined in:
lib/crowbar/validate/databags.rb,
lib/crowbar/validate/databags/version.rb

Constant Summary collapse

VERSION =
"1.0.0"

Class Method Summary collapse

Class Method Details

.validate(dir) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/crowbar/validate/databags.rb', line 8

def self.validate(dir)
  # add missing slash if needed
  dir = "#{dir}/" unless dir[-1] == "/"

  schema_files = Dir["#{dir}*.schema"].reject { |f| File.directory? f }
  migration_folders = Dir["#{dir}migrate/*/"]

  rc = []
  schema_files.each { |schema| rc.push(validate_schema(schema)) }
  schema_files.each { |schema| rc.push(validate_json(schema)) }
  migration_folders.each { |folder| rc.push(validate_migrations(folder)) }
  return rc.uniq

end

.validate_json(schema_filename) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/crowbar/validate/databags.rb', line 37

def self.validate_json(schema_filename)
  config_filename = schema_filename.sub(".schema", ".json")
  validator = CrowbarValidator.new(schema_filename)
  parser = Kwalify::Yaml::Parser.new(validator)
  parser.parse_file(config_filename)

  if parser.errors && !parser.errors.empty?
    parser.errors.each do |e|
      puts "#{config_filename}: #{e.linenum}:#{e.column} [#{e.path}] #{e.message}"
    end
    return -2
  end
  return 0
end

.validate_migrations(folder) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/crowbar/validate/databags.rb', line 52

def self.validate_migrations(folder)
  folder = "#{folder}/" unless folder[-1] == "/"
  files = Dir["#{folder}*.rb"]
  migration_numbers = files.map { |f| File.basename(f)[0, 3] }
  duplicated = migration_numbers.select { |m| migration_numbers.count(m) > 1 }.uniq
  unless duplicated.empty?
    puts "Found duplicated number migration(s) on #{folder} with number(s) #{duplicated}"
    return -3
  end
  return 0
end

.validate_schema(schema_filename) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/crowbar/validate/databags.rb', line 23

def self.validate_schema(schema_filename)
  metavalidator = Kwalify::MetaValidator.instance
  parser = Kwalify::Yaml::Parser.new(metavalidator)
  parser.parse_file(schema_filename)

  if parser.errors && !parser.errors.empty?
    parser.errors.each do |e|
      puts "#{schema_filename}: #{e.linenum}:#{e.column} [#{e.path}] #{e.message}"
    end
    return -1
  end
  return 0
end