class Sinatra::Schema::Reference

Attributes

id[RW]
options[RW]
ref_spec[RW]
referenced_def[RW]
resource[RW]

Public Class Methods

delegate(attribute) click to toggle source

helper to lazily delegate method to the referenced definition

# File lib/sinatra/schema/reference.rb, line 7
def self.delegate(attribute)
  define_method(attribute) do |*args|
    # support overriding attributes. example: referenced
    # definition is optional, but parameter is not
    return options[attribute] if options.has_key?(attribute)

    resolve!
    referenced_def.send(attribute, *args)
  end
end
new(resource, id, options={}) click to toggle source
# File lib/sinatra/schema/reference.rb, line 18
def initialize(resource, id, options={})
  @resource = resource
  @id       = id
  @ref_spec = options[:to] || id
  @options  = options
end

Public Instance Methods

resolve!() click to toggle source
# File lib/sinatra/schema/reference.rb, line 25
def resolve!
  return if referenced_def
  unless @referenced_def = resource.defs[ref_spec] || Sinatra::Schema::Root.instance.find_definition(ref_spec)
    raise BadReference.new(ref_spec)
  end
  return @referenced_def
end
valid?(value) click to toggle source

redefine to make sure overrides on “optional” are considered

# File lib/sinatra/schema/reference.rb, line 40
def valid?(value)
  resolve!
  referenced_def.valid?(value, self.optional)
end