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