1 module LWES::ClassMaker
4 file = options[:file] or
5 raise ArgumentError, "TypeDB :db or ESF :file missing"
6 File.readable?(file) or
7 raise ArgumentError, "file #{file.inspect} not readable"
12 def class_for(options, dump)
13 klass = options[:class] || begin
14 # make it easier to deal with single event files
15 events = (dump.keys - [ :MetaEventInfo ])
18 "multiple event defs available: #{events.inspect}\n" \
19 "pick one with :class"
22 name = options[:name] || klass.to_s
23 event_def = dump[name.to_sym] or
24 raise RuntimeError, "#{name.inspect} not defined in #{file}"
25 [ klass, name, event_def ]
28 def set_constants(tmp, db, klass, name, options)
29 tmp.const_set :TYPE_DB, db
30 tmp.const_set :NAME, name.to_s.dup.freeze
31 defaults = options[:defaults] || {}
32 tmp.const_set :DEFAULTS, defaults.dup
33 parent = options.include?(:parent) ? options[:parent] : Object
35 components = klass.to_s.split(/::/)
36 components.each_with_index do |component, i|
37 if i == (components.size - 1)
38 tmp = parent.const_set(component, tmp)
41 parent.const_get(component)
43 parent.const_set component, Module.new