Module: Chemicalml::Cml

Defined in:
lib/chemicalml/cml.rb,
lib/chemicalml/cml/atom.rb,
lib/chemicalml/cml/base.rb,
lib/chemicalml/cml/bond.rb,
lib/chemicalml/cml/list.rb,
lib/chemicalml/cml/name.rb,
lib/chemicalml/cml/role.rb,
lib/chemicalml/cml/unit.rb,
lib/chemicalml/cml/array.rb,
lib/chemicalml/cml/label.rb,
lib/chemicalml/cml/matrix.rb,
lib/chemicalml/cml/scalar.rb,
lib/chemicalml/cml/formula.rb,
lib/chemicalml/cml/product.rb,
lib/chemicalml/cml/schema3.rb,
lib/chemicalml/cml/document.rb,
lib/chemicalml/cml/elements.rb,
lib/chemicalml/cml/metadata.rb,
lib/chemicalml/cml/molecule.rb,
lib/chemicalml/cml/property.rb,
lib/chemicalml/cml/reactant.rb,
lib/chemicalml/cml/reaction.rb,
lib/chemicalml/cml/schema24.rb,
lib/chemicalml/cml/base/atom.rb,
lib/chemicalml/cml/base/bond.rb,
lib/chemicalml/cml/base/list.rb,
lib/chemicalml/cml/base/name.rb,
lib/chemicalml/cml/base/unit.rb,
lib/chemicalml/cml/namespace.rb,
lib/chemicalml/cml/parameter.rb,
lib/chemicalml/cml/role/atom.rb,
lib/chemicalml/cml/role/bond.rb,
lib/chemicalml/cml/role/list.rb,
lib/chemicalml/cml/role/name.rb,
lib/chemicalml/cml/role/unit.rb,
lib/chemicalml/cml/substance.rb,
lib/chemicalml/cml/unit_list.rb,
lib/chemicalml/cml/unit_type.rb,
lib/chemicalml/cml/visitable.rb,
lib/chemicalml/cml/atom_array.rb,
lib/chemicalml/cml/base/array.rb,
lib/chemicalml/cml/base/label.rb,
lib/chemicalml/cml/bond_array.rb,
lib/chemicalml/cml/cml_module.rb,
lib/chemicalml/cml/dictionary.rb,
lib/chemicalml/cml/identifier.rb,
lib/chemicalml/cml/role/array.rb,
lib/chemicalml/cml/role/label.rb,
lib/chemicalml/cml/translator.rb,
lib/chemicalml/cml/atom_parity.rb,
lib/chemicalml/cml/base/matrix.rb,
lib/chemicalml/cml/base/scalar.rb,
lib/chemicalml/cml/bond_stereo.rb,
lib/chemicalml/cml/role/matrix.rb,
lib/chemicalml/cml/role/scalar.rb,
lib/chemicalml/cml/base/formula.rb,
lib/chemicalml/cml/base/product.rb,
lib/chemicalml/cml/product_list.rb,
lib/chemicalml/cml/role/formula.rb,
lib/chemicalml/cml/role/product.rb,
lib/chemicalml/cml/base/document.rb,
lib/chemicalml/cml/base/metadata.rb,
lib/chemicalml/cml/base/molecule.rb,
lib/chemicalml/cml/base/property.rb,
lib/chemicalml/cml/base/reactant.rb,
lib/chemicalml/cml/base/reaction.rb,
lib/chemicalml/cml/metadata_list.rb,
lib/chemicalml/cml/property_list.rb,
lib/chemicalml/cml/reactant_list.rb,
lib/chemicalml/cml/reaction_list.rb,
lib/chemicalml/cml/role/document.rb,
lib/chemicalml/cml/role/metadata.rb,
lib/chemicalml/cml/role/molecule.rb,
lib/chemicalml/cml/role/property.rb,
lib/chemicalml/cml/role/reactant.rb,
lib/chemicalml/cml/role/reaction.rb,
lib/chemicalml/cml/base/parameter.rb,
lib/chemicalml/cml/base/substance.rb,
lib/chemicalml/cml/base/unit_list.rb,
lib/chemicalml/cml/base/unit_type.rb,
lib/chemicalml/cml/parameter_list.rb,
lib/chemicalml/cml/role/parameter.rb,
lib/chemicalml/cml/role/substance.rb,
lib/chemicalml/cml/role/unit_list.rb,
lib/chemicalml/cml/role/unit_type.rb,
lib/chemicalml/cml/unit_type_list.rb,
lib/chemicalml/cml/base/atom_array.rb,
lib/chemicalml/cml/base/bond_array.rb,
lib/chemicalml/cml/base/cml_module.rb,
lib/chemicalml/cml/base/dictionary.rb,
lib/chemicalml/cml/base/identifier.rb,
lib/chemicalml/cml/role/atom_array.rb,
lib/chemicalml/cml/role/bond_array.rb,
lib/chemicalml/cml/role/cml_module.rb,
lib/chemicalml/cml/role/dictionary.rb,
lib/chemicalml/cml/role/identifier.rb,
lib/chemicalml/cml/base/atom_parity.rb,
lib/chemicalml/cml/base/bond_stereo.rb,
lib/chemicalml/cml/dictionary_entry.rb,
lib/chemicalml/cml/role/atom_parity.rb,
lib/chemicalml/cml/role/bond_stereo.rb,
lib/chemicalml/cml/wire_class_macro.rb,
lib/chemicalml/cml/base/product_list.rb,
lib/chemicalml/cml/role/product_list.rb,
lib/chemicalml/cml/base/metadata_list.rb,
lib/chemicalml/cml/base/property_list.rb,
lib/chemicalml/cml/base/reactant_list.rb,
lib/chemicalml/cml/base/reaction_list.rb,
lib/chemicalml/cml/role/metadata_list.rb,
lib/chemicalml/cml/role/property_list.rb,
lib/chemicalml/cml/role/reactant_list.rb,
lib/chemicalml/cml/role/reaction_list.rb,
lib/chemicalml/cml/base/parameter_list.rb,
lib/chemicalml/cml/base/unit_type_list.rb,
lib/chemicalml/cml/role/parameter_list.rb,
lib/chemicalml/cml/role/unit_type_list.rb,
lib/chemicalml/cml/base/dictionary_entry.rb,
lib/chemicalml/cml/role/dictionary_entry.rb,
lib/chemicalml/cml/schema3/configuration.rb,
lib/chemicalml/cml/schema24/configuration.rb,
lib/chemicalml/cml/translator/value_translations.rb

Overview

CML model layer. The wire classes live under Schema3:: and Schema24:: namespaces; the top-level Cml::* constants are backward-compatible aliases pointing at the Schema3 versions. Shared attribute + xml-mapping declarations live under Base::* and are included by both schema-versioned class hierarchies.

Defined Under Namespace

Modules: Base, Elements, Role, Schema24, Schema3, Visitable Classes: Namespace, Translator

Class Method Summary collapse

Class Method Details

.define_wire_classes(namespace:, context_id:, except: []) ⇒ Object

Macro for defining a schema version's wire classes without writing 35+ boilerplate files. Each generated class:

- subclasses `Lutaml::Model::Serializable`
- includes the corresponding `Base::*` mixin (shared attribute
declarations and xml mapping)
- includes `Cml::Visitable` (uniform interface for the
constraint walker)
- defines `self.lutaml_default_register` returning the
provided context_id

Usage:

Chemicalml::Cml.define_wire_classes(
namespace: Chemicalml::Cml::Schema3,
context_id: :chemicalml_schema3
)

Pass except: to skip elements (e.g. Schema 2.4 lacks ):

Chemicalml::Cml.define_wire_classes(
namespace: Chemicalml::Cml::Schema24,
context_id: :chemicalml_schema24,
except: Chemicalml::Cml::Elements::SCHEMA3_ONLY
)


30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/chemicalml/cml/wire_class_macro.rb', line 30

def self.define_wire_classes(namespace:, context_id:, except: [])
  skip = except.to_set
  Elements::ALL.each_key do |class_name|
    next if skip.include?(class_name)

    base_module = Base.const_get(class_name)
    klass = Class.new(Lutaml::Model::Serializable) do
      include base_module
      include Chemicalml::Cml::Visitable
    end
    klass.define_singleton_method(:lutaml_default_register) { context_id }
    namespace.const_set(class_name, klass)
  end
end