Class: ACH::Record::Base

Inherits:
Object
  • Object
show all
Includes:
Constants, Validations
Defined in:
lib/ach/record/base.rb

Overview

Base class for all record entities (e.g. ACH::File::Header, ACH::File::Control, ACH::Record::Entry, others). Any record being declared should specify its fields, and optional default values. Except for ACH::Record::Dynamic, any declared field within a record should have corresponding rule defined under ACH::Rule::Formatter.

Example

class Addenda < Record
  fields :record_type,
         :addenda_type_code,
         :payment_related_info,
         :addenda_sequence_num,
         :entry_details_sequence_num

  defaults :record_type => 7
end

addenda = ACH::Addenda.new(
  :addenda_type_code => '05',
  :payment_related_info => 'PAYMENT_RELATED_INFO',
  :addenda_sequence_num => 1,
  :entry_details_sequence_num => 1 )
addenda.to_s! # => "705PAYMENT_RELATED_INFO                                                            00010000001"

Defined Under Namespace

Classes: EmptyFieldError, UnknownFieldError

Constant Summary

Constants included from Constants

Constants::BATCH_ADDENDA_RECORD_TYPE, Constants::BATCH_CONTROL_RECORD_TYPE, Constants::BATCH_ENTRY_RECORD_TYPE, Constants::BATCH_HEADER_RECORD_TYPE, Constants::BLOCKING_FACTOR, Constants::FILE_CONTROL_RECORD_TYPE, Constants::FILE_HEADER_RECORD_TYPE, Constants::FORMAT_CODE, Constants::RECORD_SIZE, Constants::ROWS_DELIMITER

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Validations

#errors, #valid?

Constructor Details

#initialize(fields = {}, &block) ⇒ Base

Returns a new instance of Base.



77
78
79
80
81
82
83
# File 'lib/ach/record/base.rb', line 77

def initialize(fields = {}, &block)
  defaults.each do |key, value|
    self.fields[key] = Proc === value ? value.call : value
  end
  self.fields.merge!(fields)
  instance_eval(&block) if block
end

Class Method Details

.defaults(default_values = nil) ⇒ Object

Sets default values for fields. See class description for example



56
57
58
59
# File 'lib/ach/record/base.rb', line 56

def self.defaults(default_values = nil)
  return @defaults if default_values.nil?
  @defaults = default_values.freeze
end

.fields(*field_names) ⇒ Object

Specifies fields of the record. Order is important. All fields must be declared in ACH::Formatter RULES. See class description for example



49
50
51
52
53
# File 'lib/ach/record/base.rb', line 49

def self.fields(*field_names)
  return @fields if field_names.empty?
  @fields = field_names
  @fields.each{ |field| define_field_methods(field) }
end

.from_s(string) ⇒ Object



72
73
74
75
# File 'lib/ach/record/base.rb', line 72

def self.from_s(string)
  field_matcher_regexp = Formatter.matcher_for(fields)
  new Hash[*fields.zip(string.match(field_matcher_regexp)[1..-1]).flatten]
end

Instance Method Details

#[]=(name, val) ⇒ Object



103
104
105
# File 'lib/ach/record/base.rb', line 103

def []=(name, val)
  fields[name] = val
end

#fieldsObject

Returns a hash where key is field’s name and value is field’s value.



94
95
96
# File 'lib/ach/record/base.rb', line 94

def fields
  @fields ||= {}
end

#to_s!Object

Builds a string from record object.



86
87
88
89
90
91
# File 'lib/ach/record/base.rb', line 86

def to_s!
  self.class.fields.map do |name|
    raise EmptyFieldError.new(name, self) if @fields[name].nil?
    Formatter.format name, @fields[name]
  end.join
end