Class: Lutaml::Xml::Decisions::Decision
- Inherits:
-
Object
- Object
- Lutaml::Xml::Decisions::Decision
- Defined in:
- lib/lutaml/xml/decisions/decision.rb
Overview
Immutable value object representing a namespace decision
Constant Summary collapse
- VALID_FORMATS =
%i[prefix default blank].freeze
Instance Attribute Summary collapse
-
#format ⇒ Symbol
readonly
-
:prefix, :default, or :blank.
-
-
#namespace_class ⇒ Class?
readonly
-
The XmlNamespace class.
-
-
#prefix ⇒ String?
readonly
-
The prefix to use (nil for default format).
-
-
#reason ⇒ String?
readonly
-
Human-readable reason for decision.
-
Class Method Summary collapse
-
.blank(namespace_class:, reason:) ⇒ Object
Convenience factory for blank namespace decisions Blank namespace means no xmlns attribute (element not in any namespace).
-
.default(namespace_class:, reason:) ⇒ Object
Convenience factory for default format decisions.
-
.prefix(prefix:, namespace_class:, reason:) ⇒ Object
Convenience factory for prefix format decisions.
Instance Method Summary collapse
-
#==(other) ⇒ Object
(also: #eql?)
Equality based on format, prefix, and namespace_class.
- #hash ⇒ Object
-
#initialize(format:, prefix: nil, namespace_class: nil, reason: nil) ⇒ Decision
constructor
A new instance of Decision.
- #to_s ⇒ Object
-
#uses_blank? ⇒ Boolean
Check if this decision uses blank namespace (no xmlns).
-
#uses_default? ⇒ Boolean
Check if this decision uses default format.
-
#uses_prefix? ⇒ Boolean
Check if this decision uses prefix format.
Constructor Details
#initialize(format:, prefix: nil, namespace_class: nil, reason: nil) ⇒ Decision
Returns a new instance of Decision.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 17 def initialize(format:, prefix: nil, namespace_class: nil, reason: nil) unless VALID_FORMATS.include?(format) raise ArgumentError, "Format must be :prefix, :default, or :blank" end if format == :prefix && prefix.nil? raise ArgumentError, "Prefix required for :prefix format" end if format == :default && !prefix.nil? raise ArgumentError, "Prefix must be nil for :default format" end if format == :blank && !prefix.nil? raise ArgumentError, "Prefix must be nil for :blank format" end @format = format @prefix = prefix @namespace_class = namespace_class @reason = reason freeze end |
Instance Attribute Details
#format ⇒ Symbol (readonly)
-
:prefix, :default, or :blank
12 13 14 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 12 def format @format end |
#namespace_class ⇒ Class? (readonly)
-
The XmlNamespace class
12 13 14 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 12 def namespace_class @namespace_class end |
#prefix ⇒ String? (readonly)
-
The prefix to use (nil for default format)
12 13 14 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 12 def prefix @prefix end |
#reason ⇒ String? (readonly)
-
Human-readable reason for decision
12 13 14 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 12 def reason @reason end |
Class Method Details
.blank(namespace_class:, reason:) ⇒ Object
Convenience factory for blank namespace decisions Blank namespace means no xmlns attribute (element not in any namespace)
58 59 60 61 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 58 def self.blank(namespace_class:, reason:) new(format: :blank, prefix: nil, namespace_class: namespace_class, reason: reason) end |
.default(namespace_class:, reason:) ⇒ Object
Convenience factory for default format decisions
51 52 53 54 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 51 def self.default(namespace_class:, reason:) new(format: :default, prefix: nil, namespace_class: namespace_class, reason: reason) end |
.prefix(prefix:, namespace_class:, reason:) ⇒ Object
Convenience factory for prefix format decisions
45 46 47 48 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 45 def self.prefix(prefix:, namespace_class:, reason:) new(format: :prefix, prefix: prefix, namespace_class: namespace_class, reason: reason) end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
Equality based on format, prefix, and namespace_class
Value objects are equal if all their attributes are equal.
81 82 83 84 85 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 81 def ==(other) return false unless other.is_a?(Decision) @format == other.format && @prefix == other.prefix && @namespace_class == other.namespace_class end |
#hash ⇒ Object
88 89 90 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 88 def hash [@format, @prefix, @namespace_class].hash end |
#to_s ⇒ Object
92 93 94 95 96 97 98 99 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 92 def to_s ns_info = @namespace_class ? @namespace_class.to_s : "no-namespace" if uses_prefix? "Decision[#{ns_info}]: format=#{@format}, prefix=#{@prefix}, reason=#{@reason}" else "Decision[#{ns_info}]: format=#{@format}, reason=#{@reason}" end end |
#uses_blank? ⇒ Boolean
Check if this decision uses blank namespace (no xmlns)
74 75 76 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 74 def uses_blank? @format == :blank end |
#uses_default? ⇒ Boolean
Check if this decision uses default format
69 70 71 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 69 def uses_default? @format == :default end |
#uses_prefix? ⇒ Boolean
Check if this decision uses prefix format
64 65 66 |
# File 'lib/lutaml/xml/decisions/decision.rb', line 64 def uses_prefix? @format == :prefix end |