class RailsConfigValidator::Validator

Attributes

config_path[R]
schema_path[R]

Public Class Methods

new(config_name, env, options = {}) click to toggle source
# File lib/rails_config_validator/validator.rb, line 8
def initialize(config_name, env, options = {})
  @pwd = options[:pwd] || '.'
  @config_path = options[:config_path] || build_config_path(config_name)
  @schema_path = options[:schema_path] || build_schema_path(config_name)
  @env = env
  @raise_errors = options.fetch(:raise_errors, true)
end

Public Instance Methods

meta_validate() click to toggle source
# File lib/rails_config_validator/validator.rb, line 38
def meta_validate
  meta_validator = Kwalify::MetaValidator.instance
  errors = meta_validator.validate(schema)
  errors.map do |error|
    "[#{error.path}](#{error.error_symbol}) #{error.message}"
  end
rescue Errno::ENOENT => e
  raise InvalidSchemaError, e
end
valid!() click to toggle source
# File lib/rails_config_validator/validator.rb, line 23
def valid!
  mv = meta_validate
  return error(
    InvalidSchemaError,
    "Incorrect schema #{schema_path}; errors: #{mv}"
  ) unless mv.empty?
  v = validate
  error(
    InvalidConfigurationError,
    "Incorrect config #{config_path}; errors: #{v}"
  ) unless v.empty?
rescue InvalidConfigurationError, InvalidSchemaError => e
  error(e.class, e)
end
valid?() click to toggle source
# File lib/rails_config_validator/validator.rb, line 16
def valid?
  meta_validate.empty? && validate.empty?
rescue
  # ignored
  false
end
validate() click to toggle source
# File lib/rails_config_validator/validator.rb, line 48
def validate
  validator = kwalify_validator
  env_settings = env_config
  errors = validator.validate(env_settings)
  errors.map do |error|
    "[#{error.path}](#{error.error_symbol}) #{error.message}"
  end
rescue InvalidConfigurationError => e
  [e.message]
rescue Errno::ENOENT => e
  raise InvalidConfigurationError, e
end

Private Instance Methods

build_config_path(config_name) click to toggle source
# File lib/rails_config_validator/validator.rb, line 93
def build_config_path(config_name)
  File.join(@pwd, 'config', "#{config_name}.yml")
end
build_schema_path(config_name) click to toggle source
# File lib/rails_config_validator/validator.rb, line 97
def build_schema_path(config_name)
  File.join(@pwd, 'config', 'schemas', "#{config_name}.schema.yml")
end
config() click to toggle source
# File lib/rails_config_validator/validator.rb, line 80
def config
  YAML.load(ERB.new(File.read(config_path)).result)
end
env_config() click to toggle source
# File lib/rails_config_validator/validator.rb, line 84
def env_config
  document = config
  raise InvalidConfigurationError,
        "config file #{config_path} is empty" unless document
  raise InvalidConfigurationError,
        "missing configuration for env #{@env} in #{config_path}" unless document.key?(@env)
  document[@env]
end
error(*args) click to toggle source
# File lib/rails_config_validator/validator.rb, line 65
def error(*args)
  raise(*args) if @raise_errors
  warn(args.join("\n")) # Ruby 1.9 accepts only single argument
end
kwalify_validator() click to toggle source
# File lib/rails_config_validator/validator.rb, line 70
def kwalify_validator
  Kwalify::Validator.new(schema)
rescue Errno::ENOENT => e
  raise InvalidSchemaError, e
end
schema() click to toggle source
# File lib/rails_config_validator/validator.rb, line 76
def schema
  YAML.load_file(schema_path)
end