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