Class: Eddy::Models::Element::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/eddy/models/element/base.rb

Overview

This class is abstract.

Base class for EDI Data Element types.

Direct Known Subclasses

AN, B, DT, ID, N, R, TM

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializevoid



29
30
31
32
# File 'lib/eddy/models/element/base.rb', line 29

def initialize()
  @val = nil
  @req = nil
end

Instance Attribute Details

#descriptionString (readonly)

Returns:

  • (String)


14
15
16
# File 'lib/eddy/models/element/base.rb', line 14

def description
  @description
end

#idString (readonly)

Positive number under 1688, or I01-I64

Returns:

  • (String)


10
11
12
# File 'lib/eddy/models/element/base.rb', line 10

def id
  @id
end

#maxInteger (readonly)

Maximum length for a valid value

Returns:

  • (Integer)


23
24
25
# File 'lib/eddy/models/element/base.rb', line 23

def max
  @max
end

#minInteger (readonly)

Minimum length for a valid value

Returns:

  • (Integer)


20
21
22
# File 'lib/eddy/models/element/base.rb', line 20

def min
  @min
end

#nameString (readonly)

Returns:

  • (String)


12
13
14
# File 'lib/eddy/models/element/base.rb', line 12

def name
  @name
end

#refString

String used to identify a data element within a Segment.

Returns:

  • (String)


26
27
28
# File 'lib/eddy/models/element/base.rb', line 26

def ref
  @ref
end

#typeString (readonly)

One of: AN, B, DT, ID, N, R, or TM

Returns:

  • (String)


17
18
19
# File 'lib/eddy/models/element/base.rb', line 17

def type
  @type
end

Class Method Details

.process_valuevoid

Note:

Classes inheriting from Eddy::Models::Element::Base must override the class the method process_value.

This method returns an undefined value.

Return a valid EDI string representation of @value.

Raises:

  • (NotImplementedError)


67
68
69
# File 'lib/eddy/models/element/base.rb', line 67

def self.process_value(*)
  raise NotImplementedError, "Classes inheriting from `Eddy::Models::Element::Base` must override the class the method `process_value`"
end

Instance Method Details

#doc_comment(header: true) ⇒ Hash

Generate a description to use as a doc comment for an element.

Parameters:

  • header (Boolean) (defaults to: true)

    (true)

Returns:

  • (Hash)


120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/eddy/models/element/base.rb', line 120

def doc_comment(header: true)
  if header
    return <<~END.strip
      ### Element Summary:

      - Id: #{self.id}
      - Name: #{self.name}
      - Type: #{self.type}
      - Min/Max: #{self.min}/#{self.max}
      - Description: #{self.description}
    END
  else
    return <<~END.strip
      - Id: #{self.id}
      - Name: #{self.name}
      - Type: #{self.type}
      - Min/Max: #{self.min}/#{self.max}
      - Description: #{self.description}
    END
  end
end

#process_valuevoid

Note:

Classes inheriting from Eddy::Models::Element::Base must override the method #process_value.

This method returns an undefined value.

Return a valid EDI string representation of @value.

Raises:

  • (NotImplementedError)


59
60
61
# File 'lib/eddy/models/element/base.rb', line 59

def process_value(*)
  raise NotImplementedError, "Classes inheriting from `Eddy::Models::Element::Base` must override the method `#process_value`"
end

#reqString

Indicates whether the value must be present in its segment.

code description official
M Mandatory yes
O Optional yes
C Conditional yes
F Floating deprecated
R Required no
S Situational no
A Advised no
N Not Advised no
N Not Used no
X Not Used no
X Conditional no

See:

Returns:

  • (String)


93
94
95
# File 'lib/eddy/models/element/base.rb', line 93

def req
  return @req
end

#req=(req) ⇒ String, void

Indicates whether the value must be present in its segment.

code description official
M Mandatory yes
O Optional yes
C Conditional yes
F Floating deprecated
R Required no
S Situational no
A Advised no
N Not Advised no
N Not Used no
X Not Used no
X Conditional no

See:

Parameters:

  • req (String, nil)

Returns:

  • (String)
  • (void)

Raises:

  • (ArgumentError)


101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/eddy/models/element/base.rb', line 101

def req=(req)
  if req.nil?
    @req = "O"
    return
  end
  raise ArgumentError, req.to_s unless req.is_a?(String)
  case req.upcase
  when "M", "R" then @req = "M"
  when "O"      then @req = "O"
  when "C", "X" then @req = "C"
  when "F" then raise Eddy::Errors::Error, "Req value 'F' not supported"
  else raise Eddy::Errors::Error, "Invalid argument for `req=`: #{req}"
  end
end

#valueObject

Note:

Classes inheriting from Eddy::Models::Element::Base must override the method #value.

Returns:

  • (Object)


42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/eddy/models/element/base.rb', line 42

def value()
  if @val == :skip
    return ""
  elsif @val.nil?
    case self.req
    when "M"      then raise Eddy::Errors::ElementNilValueError.new(element: self)
    when "O", "C" then return ""
    else raise Eddy::Errors::Error, "Invalid req value: #{self.req}"
    end
  end
  return self.process_value()
end

#value=void

Note:

Classes inheriting from Eddy::Models::Element::Base must override the method #value=.

This method returns an undefined value.

Raises:

  • (NotImplementedError)


36
37
38
# File 'lib/eddy/models/element/base.rb', line 36

def value=(*)
  raise NotImplementedError, "Classes inheriting from `Eddy::Models::Element::Base` must override the method `#value=`"
end