Module: Odin

Defined in:
lib/odin.rb,
lib/odin/forms.rb,
lib/odin/export.rb,
lib/odin/version.rb,
lib/odin/forms/css.rb,
lib/odin/types/diff.rb,
lib/odin/diff/differ.rb,
lib/odin/forms/types.rb,
lib/odin/forms/units.rb,
lib/odin/diff/patcher.rb,
lib/odin/forms/parser.rb,
lib/odin/types/errors.rb,
lib/odin/types/schema.rb,
lib/odin/types/values.rb,
lib/odin/parsing/token.rb,
lib/odin/forms/renderer.rb,
lib/odin/parsing/parser.rb,
lib/odin/types/document.rb,
lib/odin/types/directive.rb,
lib/odin/types/dyn_value.rb,
lib/odin/types/modifiers.rb,
lib/odin/types/array_item.rb,
lib/odin/types/value_type.rb,
lib/odin/utils/path_utils.rb,
lib/odin/parsing/tokenizer.rb,
lib/odin/types/ordered_map.rb,
lib/odin/parsing/token_type.rb,
lib/odin/utils/format_utils.rb,
lib/odin/forms/accessibility.rb,
lib/odin/parsing/value_parser.rb,
lib/odin/validation/validator.rb,
lib/odin/utils/security_limits.rb,
lib/odin/resolver/type_registry.rb,
lib/odin/transform/verb_context.rb,
lib/odin/types/document_builder.rb,
lib/odin/serialization/stringify.rb,
lib/odin/resolver/import_resolver.rb,
lib/odin/transform/source_parsers.rb,
lib/odin/validation/schema_parser.rb,
lib/odin/transform/transform_types.rb,
lib/odin/transform/verbs/geo_verbs.rb,
lib/odin/serialization/canonicalize.rb,
lib/odin/transform/format_exporters.rb,
lib/odin/transform/transform_engine.rb,
lib/odin/transform/transform_parser.rb,
lib/odin/validation/redos_protection.rb,
lib/odin/transform/verbs/object_verbs.rb,
lib/odin/validation/format_validators.rb,
lib/odin/validation/schema_serializer.rb,
lib/odin/transform/verbs/numeric_verbs.rb,
lib/odin/transform/verbs/datetime_verbs.rb,
lib/odin/validation/invariant_evaluator.rb,
lib/odin/transform/verbs/financial_verbs.rb,
lib/odin/transform/verbs/collection_verbs.rb,
lib/odin/transform/verbs/aggregation_verbs.rb,
lib/odin/validation/schema_definition_validator.rb

Defined Under Namespace

Modules: Diff, Errors, Export, Forms, Parsing, Resolver, Serialization, Transform, Types, Utils, Validation

Constant Summary collapse

VERSION =
"1.1.0"

Class Method Summary collapse

Class Method Details

.builderObject



166
167
168
# File 'lib/odin.rb', line 166

def builder
  Types::OdinDocumentBuilder.new
end

.canonicalize(doc) ⇒ Object



138
139
140
# File 'lib/odin.rb', line 138

def canonicalize(doc)
  Serialization::Canonicalize.new.canonicalize(doc)
end

.collapse_chain(input, options = nil) ⇒ Object

Collapse a chained ODIN document into its computed current state.

Later documents overlay earlier ones, a repeated path replaces the earlier value, field = ~ removes the field and its descendants, and field[] = ~ clears the array. The result carries the final document’s metadata.

Accepts chained ODIN text or a pre-parsed list of documents.



65
66
67
68
# File 'lib/odin.rb', line 65

def collapse_chain(input, options = nil)
  docs = input.is_a?(Array) ? input : parse_documents(input, options)
  collapse_documents(docs)
end

.diff(a, b) ⇒ Object



158
159
160
# File 'lib/odin.rb', line 158

def diff(a, b)
  Diff::Differ.new.compute_diff(a, b)
end

.execute_transform(transform_def, source, import_resolver: nil) ⇒ Object



175
176
177
# File 'lib/odin.rb', line 175

def execute_transform(transform_def, source, import_resolver: nil)
  Transform::TransformEngine.new.execute(transform_def, source, import_resolver: import_resolver)
end

.parse(text, options = nil) ⇒ Object



46
47
48
49
# File 'lib/odin.rb', line 46

def parse(text, options = nil)
  text = text.encode("UTF-8") if text.is_a?(String) && text.encoding != Encoding::UTF_8
  Parsing::OdinParser.new.parse(text, options)
end

.parse_documents(text, options = nil) ⇒ Object

Parse a chained document (one or more documents separated by —) into the full list of documents. A single document yields a one-element array.



53
54
55
56
# File 'lib/odin.rb', line 53

def parse_documents(text, options = nil)
  result = parse(text, options)
  result.respond_to?(:documents) ? result.documents : [result]
end

.parse_schema(text) ⇒ Object



142
143
144
145
# File 'lib/odin.rb', line 142

def parse_schema(text)
  text = text.encode("UTF-8") if text.is_a?(String) && text.encoding != Encoding::UTF_8
  Validation::SchemaParser.new.parse_schema(text)
end

.parse_transform(text) ⇒ Object



170
171
172
173
# File 'lib/odin.rb', line 170

def parse_transform(text)
  text = text.encode("UTF-8") if text.is_a?(String) && text.encoding != Encoding::UTF_8
  Transform::TransformParser.new.parse(text)
end

.patch(doc, diff_result) ⇒ Object



162
163
164
# File 'lib/odin.rb', line 162

def patch(doc, diff_result)
  Diff::Patcher.new.apply_patch(doc, diff_result)
end

.stringify(doc, options = {}) ⇒ Object



134
135
136
# File 'lib/odin.rb', line 134

def stringify(doc, options = {})
  Serialization::Stringify.new(options).stringify(doc)
end

.transform(transform_text, source) ⇒ Object



179
180
181
182
# File 'lib/odin.rb', line 179

def transform(transform_text, source)
  td = parse_transform(transform_text)
  execute_transform(td, source)
end

.validate(doc, schema, options = {}, registry = nil) ⇒ Object



147
148
149
# File 'lib/odin.rb', line 147

def validate(doc, schema, options = {}, registry = nil)
  Validation::Validator.new.validate(doc, schema, options, registry)
end

.validate_with_imports(doc, schema, base_path, options = {}, resolver_options = {}) ⇒ Object

Resolve a schema’s imports into a type registry, then validate the document.



152
153
154
155
156
# File 'lib/odin.rb', line 152

def validate_with_imports(doc, schema, base_path, options = {}, resolver_options = {})
  _flattened, registry = Resolver::ImportResolver.new(**resolver_options)
                                                 .resolve_with_registry(schema, base_path: base_path)
  validate(doc, schema, options, registry)
end