Module: HL7::Message::SegmentFields

Included in:
Segment
Defined in:
lib/segment_fields.rb

Overview

SegmentFields

class HL7::Message::Segment::NK1 < HL7::Message::Segment
  weight 100 # segments are sorted ascendingly
  add_field :something_you_want       # assumes :idx=>1
  add_field :something_else, :idx=>6  # :idx=>6 and field count=6

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



7
8
9
# File 'lib/segment_fields.rb', line 7

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#[](index) ⇒ Object



91
92
93
# File 'lib/segment_fields.rb', line 91

def []( index )
  @elements[index]
end

#[]=(index, value) ⇒ Object



95
96
97
# File 'lib/segment_fields.rb', line 95

def []=( index, value )
  @elements[index] = value.to_s
end

#field_info(name) ⇒ Object

:nodoc:



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/segment_fields.rb', line 79

def field_info( name ) #:nodoc:
  field_blk = nil
  idx = name # assume we've gotten a integer
  unless name.kind_of?(Integer)
    fld_info = self.class.fields[ name ]
    idx = fld_info[:idx].to_i
    field_blk = fld_info[:blk]
  end

  [ idx, field_blk ]
end

#read_field(name) ⇒ Object

:nodoc:



99
100
101
102
103
104
105
106
107
108
# File 'lib/segment_fields.rb', line 99

def read_field( name ) #:nodoc:
  idx, field_blk = field_info( name )
  return nil unless idx
  return nil if (idx >= @elements.length)

  ret = @elements[ idx ]
  ret = ret.first if (ret.kind_of?(Array) && ret.length == 1)
  ret = field_blk.call( ret ) if field_blk
  ret
end

#write_field(name, value) ⇒ Object

:nodoc:



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/segment_fields.rb', line 110

def write_field( name, value ) #:nodoc:
  idx, field_blk = field_info( name )
  return nil unless idx

  if (idx >= @elements.length)
    # make some space for the incoming field, missing items are assumed to
    # be empty, so this is valid per the spec -mg
    missing = ("," * (idx-@elements.length)).split(',',-1)
    @elements += missing
  end

  value = value.first if (value && value.kind_of?(Array) && value.length == 1)
  value = field_blk.call( value ) if field_blk
  @elements[ idx ] = value.to_s
end