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
- #[](index) ⇒ Object
- #[]=(index, value) ⇒ Object
-
#field_info(name) ⇒ Object
:nodoc:.
-
#read_field(name) ⇒ Object
:nodoc:.
-
#write_field(name, value) ⇒ Object
:nodoc:.
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 |