class Hippo_eyeDoc::Segments::Base

Attributes

fields[RW]
fixed_width[RW]
identifier[RW]
parent[RW]
values[RW]

Public Class Methods

composite_field(field_name) { || ... } click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 50
def composite_field(field_name)
  @composite_block = true
  @default_separator = :composite_separator
  fields << []
  yield
  @default_separator = :field_separator
  @composite_block = false
end
field(field) click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 20
def field(field)
  f              = Hippo_eyeDoc::Field.new
  f.sequence     = fields.length + 1
  f.name         = field[:name]
  f.datatype     = field[:datatype]
  f.minimum      = field[:minimum]
  f.maximum      = field[:maximum]
  f.options      = field[:options]
  f.restrictions = field[:restrictions]
  f.required     = field[:required]  || false
  f.separator    = field[:separator] || @default_separator || :field_separator

  if @composite_block
    f.composite = true
    f.composite_sequence = fields.length
    f.sequence = fields.last.length + 1
    fields.last << f
  else
    fields << f
  end
end
new(options = {}) click to toggle source
Calls superclass method Hippo_eyeDoc::Separator::new
# File lib/hippo_eyeDoc/segments/base.rb, line 92
def initialize(options = {})
  @parent = options.delete(:parent)

  super
end
segment?() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 42
def segment?
  true
end
segment_fixed_width() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 64
def segment_fixed_width
  @fixed_width = true
end
segment_identifier(id) click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 59
def segment_identifier(id)
  @identifier = id
  @fields     = []
end
transaction_set?() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 46
def transaction_set?
  false
end

Public Instance Methods

ancestors() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 79
def ancestors
  if parent
    parent.ancestors.flatten
  else
    []
  end
end
get_field(field) click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 106
def get_field(field)
  if field =~ /\A#{self.class.identifier}(?:(\d+)(?:_(\d+)){0,1})\z/
    if $2 && self.class.fields[$1.to_i - 1].class == Array
      self.class.fields[$1.to_i - 1][$2.to_i - 1]
    else
      self.class.fields[$1.to_i - 1]
    end
  else
    fields = self.class.fields.flatten.select{|f| f.name == field.gsub(/_\d{1,2}\z/,'')}

    if field =~ /_(\d{1,2})\z/
      fields[$1.to_i - 1]
    else
      fields.first
    end
  end
end
get_field_name(text) click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 102
def get_field_name(text)
  text.to_s.gsub(' ','').gsub('=','')
end
identifier() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 160
def identifier
  self.class.identifier
end
method_missing(method_name, *args) click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 164
def method_missing(method_name, *args)
  values

  field = get_field(get_field_name(method_name.to_s))

  if field.nil? || field.class == Array
     raise Hippo_eyeDoc::Exceptions::InvalidField.new("Invalid field '#{method_name.to_s}' specified.")
  end

  if method_name.to_s =~ /=\z/
    if field.composite
      self.values[field.composite_sequence] ||= {}
      self.values[field.composite_sequence][field.sequence] = field.formatted_value(args[0])
    else
      self.values[field.sequence] = field.formatted_value(args[0])
    end
  else
    if field.composite
      self.values[field.composite_sequence] ||= {}
      self.values[field.composite_sequence][field.sequence]
    else
      self.values[field.sequence]
    end
  end
end
segment_count() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 75
def segment_count
  segments.count
end
segments() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 71
def segments
  [self]
end
to_a()
Alias for: to_ary
to_ary() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 87
def to_ary
  nil
end
Also aliased as: to_a
to_s() click to toggle source
# File lib/hippo_eyeDoc/segments/base.rb, line 124
def to_s
  output = self.class.identifier + @field_separator

  self.class.fields.each_with_index do |field, index|
    if field.class == Array # this is a composite field
      field.each do |comp_field|
        field_value = if values[comp_field.composite_sequence]
                        # some values exist for this composite field
                        comp_field.string_value(values[comp_field.composite_sequence][comp_field.sequence])
                      else
                        # no values exist for the entire composite field
                        ''
                      end

        output += field_value + @composite_separator
      end

      output += @field_separator
    else # standard field
      field_value = field.string_value(values[field.sequence])

      output += field_value + @field_separator
    end
  end

  unless self.class.fixed_width
    output = remove_empty_fields(output)
    output = output.gsub(repeating_composite_separator_regexp, @field_separator)
  end

  output += @segment_separator
  output = output.gsub(repeating_field_separator_at_end_of_segment_regexp, @segment_separator)

  output =~ /\A#{self.class.identifier}#{segment_separator}/ ? '' : output
end