class DataModel::Domain
Attributes
contents[R]
name[R]
Public Class Methods
code(*context, description: nil, title: nil, uri: nil)
click to toggle source
# File src/data_model.rb, line 171 def code(*context, description: nil, title: nil, uri: nil) unless instance_variable_defined? :@codes @codes = {} self.define_singleton_method(:codes) {@codes} end id = "#{context.join '.'}" @codes[id] = {:id => id, :description => description, :title => title, :uri => uri} end
datatype(name, extends: DataType, description: "", &block)
click to toggle source
# File src/data_model.rb, line 139 def datatype(name, extends: DataType, description: "", &block) unless instance_variable_defined? :@types @types = {} self.define_singleton_method(:types) {@types} end extends = getType(extends) type = self.const_set name, Class.new(extends) @types[name] = type dom = self type.instance_exec do init name, dom, extends, description end type.instance_exec &block type end
getType(typeref)
click to toggle source
# File src/data_model.rb, line 155 def getType(typeref) if !typeref return nil end if typeref.class == Symbol if !types[typeref] raise "Can't find type #{typeref} in #{typeref}" end return types[typeref] elsif typeref.class == Class return typeref else raise "type refs must be symbol or DataType class" end end
new(name, &block)
click to toggle source
# File src/data_model.rb, line 185 def initialize name, &block @contents = {} @name = name self.class.const_set name, self self.class.types.values.each do |t| # add a definition / accessor for each type k = t.typename.downcase self.define_singleton_method(k.to_sym) do |*args, &block| if args.length == 0 && !block unless @contents[k] raise("reading unset type decl #{k} on #{self}") end return @contents[k] end decl = t.new(k) @contents[k] = [] unless @contents[k] @contents[k] << decl if block_given? decl.instance_exec &block else puts "warning: no block given for type #{k} in #{self}" end return decl end end self.instance_exec &block end