class ValidatorCache

Public Class Methods

create_validator(jsonmodel, data) click to toggle source
# File lib/aspace_client/validator_cache.rb, line 3
def self.create_validator(jsonmodel, data)
  JSON::Validator.new(jsonmodel.schema,
                      data,
                      :errors_as_objects => true,
                      :record_errors => true)
end
with_validator_for(jsonmodel, data) { |validator| ... } click to toggle source
# File lib/aspace_client/validator_cache.rb, line 10
def self.with_validator_for(jsonmodel, data)
  Thread.current[:validator_cache] ||= {}

  created = false
  if Thread.current[:validator_cache][jsonmodel]

    # If we have a cache entry but it's in use, just return a newly allocated
    # validator.
    if Thread.current[:validator_cache][jsonmodel][:in_use]
      return self.create_validator(jsonmodel, data)
    end

  else
    # If there's no entry, add one
    Thread.current[:validator_cache][jsonmodel] = {}
    Thread.current[:validator_cache][jsonmodel][:validator] = self.create_validator(jsonmodel, data)
    created = true
  end

  validator = Thread.current[:validator_cache][jsonmodel][:validator]

  # Reuse this existing validator by setting its data
  if !created
    validator.instance_eval do
      @data = data
    end
  end

  Thread.current[:validator_cache][jsonmodel][:in_use] = true

  begin
    yield(validator)
  ensure
    Thread.current[:validator_cache][jsonmodel][:in_use] = false
  end
end