Class: Lutaml::Xml::Decisions::Decision

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

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

#formatSymbol (readonly)

  • :prefix, :default, or :blank

Returns:

  • (Symbol)

    the current value of format



12
13
14
# File 'lib/lutaml/xml/decisions/decision.rb', line 12

def format
  @format
end

#namespace_classClass? (readonly)

  • The XmlNamespace class

Returns:

  • (Class, nil)

    the current value of namespace_class



12
13
14
# File 'lib/lutaml/xml/decisions/decision.rb', line 12

def namespace_class
  @namespace_class
end

#prefixString? (readonly)

  • The prefix to use (nil for default format)

Returns:

  • (String, nil)

    the current value of prefix



12
13
14
# File 'lib/lutaml/xml/decisions/decision.rb', line 12

def prefix
  @prefix
end

#reasonString? (readonly)

  • Human-readable reason for decision

Returns:

  • (String, nil)

    the current value of reason



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

#hashObject



88
89
90
# File 'lib/lutaml/xml/decisions/decision.rb', line 88

def hash
  [@format, @prefix, @namespace_class].hash
end

#to_sObject



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)

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


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

Returns:

  • (Boolean)


64
65
66
# File 'lib/lutaml/xml/decisions/decision.rb', line 64

def uses_prefix?
  @format == :prefix
end