Class: Uniword::Wordprocessingml::NumberingConfiguration
- Inherits:
-
Lutaml::Model::Serializable
- Object
- Lutaml::Model::Serializable
- Uniword::Wordprocessingml::NumberingConfiguration
- Defined in:
- lib/uniword/wordprocessingml/numbering_configuration.rb
Overview
Document-level numbering configuration manager Manages abstract numbering definitions and concrete instances
Represents <w:numbering> element containing abstractNum and num children
Instance Method Summary collapse
-
#add_definition(definition = nil, **attrs) ⇒ Object
Add a numbering definition.
-
#add_instance(abstract_num_id:, num_id: nil) ⇒ Object
Add a numbering instance.
-
#create_numbering(type = :decimal) ⇒ Object
Create a complete numbering (definition + instance).
-
#default_bullet_num_id ⇒ Object
Get default bullet numbering (create if not exists).
-
#default_decimal_num_id ⇒ Object
Get default decimal numbering (create if not exists).
-
#get_definition(abstract_num_id) ⇒ Object
Get a definition by abstract_num_id (accepts Integer or AbstractNumId).
-
#get_definition_for_num_id(num_id) ⇒ Object
Get definition for a given num_id.
-
#get_instance(num_id) ⇒ Object
Get an instance by num_id.
-
#has_numbering? ⇒ Boolean
Check if configuration has any numbering.
-
#initialize(attributes = {}) ⇒ NumberingConfiguration
constructor
A new instance of NumberingConfiguration.
Constructor Details
#initialize(attributes = {}) ⇒ NumberingConfiguration
Returns a new instance of NumberingConfiguration.
52 53 54 55 56 57 58 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 52 def initialize(attributes = {}) super @definitions ||= [] @instances ||= [] @next_abstract_num_id = 0 @next_num_id = 1 end |
Instance Method Details
#add_definition(definition = nil, **attrs) ⇒ Object
Add a numbering definition
61 62 63 64 65 66 67 68 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 61 def add_definition(definition = nil, **attrs) defn = definition || NumberingDefinition.new(**attrs) defn.abstract_num_id = next_abstract_num_id unless defn.abstract_num_id definitions << defn defn end |
#add_instance(abstract_num_id:, num_id: nil) ⇒ Object
Add a numbering instance
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 71 def add_instance(abstract_num_id:, num_id: nil) instance_num_id = num_id || next_num_id # abstract_num_id may be passed as integer; wrap in AbstractNumId if needed abstract_num = if abstract_num_id.is_a?(AbstractNumId) abstract_num_id elsif abstract_num_id.is_a?(Integer) AbstractNumId.new(val: abstract_num_id) else abstract_num_id end instance = NumberingInstance.new( num_id: instance_num_id, abstract_num_id: abstract_num ) instances << instance instance end |
#create_numbering(type = :decimal) ⇒ Object
Create a complete numbering (definition + instance)
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 93 def create_numbering(type = :decimal, **) # Create the definition definition = case type when :decimal NumberingDefinition.decimal( abstract_num_id: next_abstract_num_id, ** ) when :bullet NumberingDefinition.bullet( abstract_num_id: next_abstract_num_id, ** ) when :roman NumberingDefinition.roman( abstract_num_id: next_abstract_num_id, ** ) when :letter NumberingDefinition.letter( abstract_num_id: next_abstract_num_id, ** ) else raise ArgumentError, "Unknown numbering type: #{type}" end add_definition(definition) # Create instance for this definition instance = add_instance(abstract_num_id: definition.abstract_num_id) instance.num_id end |
#default_bullet_num_id ⇒ Object
Get default bullet numbering (create if not exists)
158 159 160 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 158 def default_bullet_num_id @default_bullet_num_id ||= create_numbering(:bullet, name: "Default Bullet") end |
#default_decimal_num_id ⇒ Object
Get default decimal numbering (create if not exists)
153 154 155 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 153 def default_decimal_num_id @default_decimal_num_id ||= create_numbering(:decimal, name: "Default Decimal") end |
#get_definition(abstract_num_id) ⇒ Object
Get a definition by abstract_num_id (accepts Integer or AbstractNumId)
129 130 131 132 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 129 def get_definition(abstract_num_id) target_id = abstract_num_id.respond_to?(:val) ? abstract_num_id.val : abstract_num_id definitions.find { |d| d.abstract_num_id == target_id } end |
#get_definition_for_num_id(num_id) ⇒ Object
Get definition for a given num_id
140 141 142 143 144 145 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 140 def get_definition_for_num_id(num_id) instance = get_instance(num_id) return nil unless instance get_definition(instance.abstract_num_id) end |
#get_instance(num_id) ⇒ Object
Get an instance by num_id
135 136 137 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 135 def get_instance(num_id) instances.find { |i| i.num_id == num_id } end |
#has_numbering? ⇒ Boolean
Check if configuration has any numbering
148 149 150 |
# File 'lib/uniword/wordprocessingml/numbering_configuration.rb', line 148 def has_numbering? definitions.any? || instances.any? end |