Class: ACH::Record

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

Defined Under Namespace

Classes: EmptyField, UnknownField

Constant Summary

Constants included from Constants

Constants::BLOCKING_FACTOR, Constants::FORMAT_CODE, Constants::RECORD_SIZE

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Validations

#errors, #valid?

Constructor Details

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

Returns a new instance of Record.



39
40
41
42
43
44
45
# File 'lib/ach/record.rb', line 39

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



34
35
36
37
# File 'lib/ach/record.rb', line 34

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

.fields(*field_names) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ach/record.rb', line 18

def self.fields *field_names
  return @fields if field_names.empty?
  @fields = field_names
  @fields.each do |field|
    raise UnknownField.new(field, name) unless Formatter::RULES.key?(field)
    
    define_method(field) do |*args|
      args.empty? ? fields[field] : (fields[field] = args.first)
    end
    
    define_method("#{field}=") do |val|
      fields[field] = val
    end
  end
end

Instance Method Details

#[]=(name, val) ⇒ Object



55
56
57
# File 'lib/ach/record.rb', line 55

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

#defaultsObject



47
48
49
# File 'lib/ach/record.rb', line 47

def defaults
  self.class.defaults
end

#fieldsObject



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

def fields
  @fields ||= {}
end

#to_s!Object



59
60
61
62
63
64
# File 'lib/ach/record.rb', line 59

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