require "eddy/build/elements/element" require "eddy/build/elements/n" require "eddy/build/elements/id" module Eddy # Generate Ruby classes for modeling Data Element logic, notes, and validation. module Build module Elements # Generate `Eddy::Element` classes for all data elements defined in `data/004010/elements.tsv` # # @param elements [Array] # @return [void] def self.generate_elements(elements = self.generate_element_data()) existing = (Eddy::Util.list_element_classes() + Eddy::Util.list_built_elements()).uniq() elements.each do |el| next if existing.include?(el.id) existing.append(el.id) case el.edi_type() when "B" then next when "ID" then self.id(el) when "N" then self.n(el) when "AN" then self.element(el) when "DT" then self.element(el) when "R" then self.element(el) when "TM" then self.element(el) end end return nil end # Generate usable data from `data/004010/elements.tsv`. # # @return [Array] def self.generate_element_data() data = Eddy::Util.raw_element_data() elements = data.map do |el| next if el[:type].nil? || el[:description].nil? Eddy::Schema::ElementSummary.create(el) end return elements.compact end end end end