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_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