Class: ACH::Record::Dynamic

Inherits:
Base
  • Object
show all
Defined in:
lib/ach/record/dynamic.rb

Overview

Descendants of ACH::Record::Dynamic class are the only records allowed to have previously undefined fields. However, each new field definition requires a rule string to be passed. UndefinedFormatError will be raised otherwise. If the field has already been defined, and a new rule string is passed, a DuplicateFormatError is raised.

Example

class CustomHeader < ACH::Record::Dynamic
  request_type '<-9-' => '$$ADD ID='
  remote_id    '<-8-'
  file_type    '<-6-', 'NWFACH'
end

This example declares a CustomHeader record type with following fields:

  • request_type, defined by rule ‘<-9-’ with a default

value of ‘$$ADD ID=’

  • remote_id with no default value

  • file_type with default value of ‘NWFACH’

Note: passing two arguments to method call is equivalent to passing a hash with a single key-value pair.

Defined Under Namespace

Classes: DuplicateFormatError, UndefinedFormatError

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

Methods inherited from Base

#[]=, defaults, fields, #fields, from_s, #initialize, #to_s!

Methods included from Validations

#errors, #valid?

Constructor Details

This class inherits a constructor from ACH::Record::Base

Class Method Details

.method_missing(field, *args) ⇒ Object

For a dynamic record, analyze any unknown message as a pattern for new Rule, and define it for future usage on match.

Parameters:

  • field (Symbol)
  • args (*Object)

Raises:



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ach/record/dynamic.rb', line 56

def self.method_missing(field, *args)
  format, default = args.first.is_a?(Hash) ? args.first.first : args
  unless format =~ Formatter::Rule::RULE_PARSER_REGEX
    default, format = format, nil
  end
  
  unless Formatter.defined? field
    raise UndefinedFormatError.new(field) if format.nil?
    Formatter.define field, format
  else
    raise DuplicateFormatError.new(field) if format
  end
  define_field_methods(field)
  (@fields ||= []) << field
  (@defaults ||= {})[field] = default if default
end