Module: Xmi::ParserPipeline

Defined in:
lib/xmi/parser_pipeline.rb

Overview

Composable pipeline for XMI parsing.

Each step receives a context hash and returns an updated context hash. New concerns (validation, logging, caching) are added by inserting steps without modifying existing code — Open/Closed Principle.

Examples:

context = { xml: xml_content, root_class: Xmi::Sparx::SparxRoot }
result = Xmi::ParserPipeline.run(context)
result[:root]  # => parsed SparxRoot instance

Defined Under Namespace

Modules: Steps

Constant Summary collapse

DEFAULT_STEPS =
[
  Steps::FixEncoding,
  Steps::InitVersioning,
  Steps::ParseXml,
  Steps::BuildIndex,
].freeze

Class Method Summary collapse

Class Method Details

.run(ctx, steps: DEFAULT_STEPS) ⇒ Hash

Run the pipeline with default or custom steps.

Parameters:

  • ctx (Hash)

    Initial context with :xml and :root_class

  • steps (Array<Module>) (defaults to: DEFAULT_STEPS)

    Pipeline steps (defaults to DEFAULT_STEPS)

Returns:

  • (Hash)

    Final context including :root



66
67
68
# File 'lib/xmi/parser_pipeline.rb', line 66

def self.run(ctx, steps: DEFAULT_STEPS)
  steps.reduce(ctx) { |context, step| step.call(context) }
end