Module: SDCMeta::DataStorage
- Included in:
- SDC::Data
- Defined in:
- lib/include/DataStorage.rb
Constant Summary collapse
- SYMBOL_PREFIX =
If an actual symbol is not needed, e.g. for one-time draw routines
"_UNKNOWN_"
Instance Method Summary collapse
- #clear_containers ⇒ Object
- #create_loading_method(name, obj_class, load_method) ⇒ Object
- #define_new_data_type(name, as_hash: true, plural: name.to_s + "s") ⇒ Object
Instance Method Details
#clear_containers ⇒ Object
33 34 35 36 37 |
# File 'lib/include/DataStorage.rb', line 33 def clear_containers @container_list.each do |container| container.clear end end |
#create_loading_method(name, obj_class, load_method) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/include/DataStorage.rb', line 39 def create_loading_method(name, obj_class, load_method) define_singleton_method("load_#{name}") do |index = nil, file_index: nil, filename: nil| if !index then if !file_index && !filename then raise ArgumentError.new("Neither file_index nor filename were given.") elsif !file_index then index = (SYMBOL_PREFIX + filename).to_sym elsif !filename then index = file_index.to_sym else index = file_index.to_sym end end if !@container_list[name][index] then if !file_index && !filename then raise ArgumentError.new("Neither file_index nor filename were given.") elsif !filename then filename = @filenames[file_index] raise RuntimeError.new("File index #{file_index} has no associated filename.") elsif file_index && file_name then add_filename(filename, index: file_index) end obj = obj_class.new obj.method(load_method).call(filename) self.singleton_method("add_#{name}".to_sym).call(obj, index: index) end return @container_list[name][index] end end |
#define_new_data_type(name, as_hash: true, plural: name.to_s + "s") ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/include/DataStorage.rb', line 7 def define_new_data_type(name, as_hash: true, plural: name.to_s + "s") @container_list = {} if !@container_list @plural_list = {} if !@plural_list instance_variable_set("@#{plural}", (as_hash ? {} : [])) data = instance_variable_get("@#{plural}") define_singleton_method("add_#{name}") do |obj, index: nil| if !index then if as_hash then raise("No index for hash data type given") else index = data.size end end data[index] = obj return index end define_singleton_method(plural) do return data end @plural_list[name] = plural @container_list[name] = instance_variable_get("@#{plural}") end |