Class: Uniword::Ooxml::Schema::ElementDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/ooxml/schema/element_definition.rb

Overview

Represents the definition of ONE OOXML element type.

Responsibility: Hold schema definition for a single element type. Single Responsibility - represents one element’s structure only.

Loaded from external YAML schema configuration.

Examples:

Create from config

definition = ElementDefinition.new({
  tag: 'w:p',
  description: 'Paragraph element',
  children: [...],
  attributes: [...]
})

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(definition) ⇒ ElementDefinition

Initialize element definition from configuration

Parameters:

  • definition (Hash)

    Element definition hash from YAML



26
27
28
29
30
31
32
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 26

def initialize(definition)
  @tag = definition[:tag]
  @description = definition[:description]
  @namespace = definition[:namespace]
  @children = build_children(definition[:children] || [])
  @attributes = build_attributes(definition[:attributes] || [])
end

Instance Attribute Details

#attributesObject (readonly)

Returns the value of attribute attributes.



21
22
23
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 21

def attributes
  @attributes
end

#childrenObject (readonly)

Returns the value of attribute children.



21
22
23
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 21

def children
  @children
end

#descriptionObject (readonly)

Returns the value of attribute description.



21
22
23
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 21

def description
  @description
end

#namespaceObject (readonly)

Returns the value of attribute namespace.



21
22
23
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 21

def namespace
  @namespace
end

#tagObject (readonly)

Returns the value of attribute tag.



21
22
23
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 21

def tag
  @tag
end

Instance Method Details

#attribute(attr_name) ⇒ AttributeDefinition?

Get attribute definition by name

Examples:

Find attribute

val_attr = element_def.attribute(:val)

Parameters:

  • attr_name (Symbol, String)

    Attribute name

Returns:



67
68
69
70
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 67

def attribute(attr_name)
  attr_name = attr_name.to_sym
  @attributes.find { |a| a.name == attr_name }
end

#child(element_type) ⇒ ChildDefinition?

Get child definition by element type

Examples:

Find child

run_def = para_def.child(:run)

Parameters:

  • element_type (Symbol, String)

    Child element type

Returns:



55
56
57
58
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 55

def child(element_type)
  element_type = element_type.to_sym
  @children.find { |c| c.element_type == element_type }
end

#has_attributes?Boolean

Check if element has attributes

Returns:

  • (Boolean)

    true if has attributes



82
83
84
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 82

def has_attributes?
  !@attributes.empty?
end

#has_children?Boolean

Check if element has children

Returns:

  • (Boolean)

    true if has child elements



75
76
77
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 75

def has_children?
  !@children.empty?
end

#local_nameString

Get element tag without namespace prefix

Examples:

Get local name

element_def.local_name  # 'w:p' => 'p'

Returns:

  • (String)

    Tag name without prefix



120
121
122
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 120

def local_name
  @tag.split(":").last
end

#namespace_declarationsHash

Get namespace declarations for XML element

Examples:

Get namespaces

declarations = element_def.namespace_declarations
# => { 'xmlns:w' => 'http://...' }

Returns:

  • (Hash)

    Namespace declarations



41
42
43
44
45
46
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 41

def namespace_declarations
  return {} unless @namespace

  prefix = tag.split(":").first
  { "xmlns:#{prefix}" => @namespace }
end

#optional_attributesArray<AttributeDefinition>

Get optional attributes

Returns:



110
111
112
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 110

def optional_attributes
  @attributes.reject(&:required?)
end

#optional_childrenArray<ChildDefinition>

Get optional children

Returns:



96
97
98
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 96

def optional_children
  @children.reject(&:required?)
end

#prefixString?

Get namespace prefix

Examples:

Get prefix

element_def.prefix  # 'w:p' => 'w'

Returns:

  • (String, nil)

    Namespace prefix



130
131
132
133
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 130

def prefix
  parts = @tag.split(":")
  parts.length > 1 ? parts.first : nil
end

#required_attributesArray<AttributeDefinition>

Get required attributes

Returns:



103
104
105
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 103

def required_attributes
  @attributes.select(&:required?)
end

#required_childrenArray<ChildDefinition>

Get required children

Returns:



89
90
91
# File 'lib/uniword/ooxml/schema/element_definition.rb', line 89

def required_children
  @children.select(&:required?)
end