Class: Viitenumero::RFViite

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Validations
Defined in:
lib/viitenumero/rf_viite.rb

Overview

Note: Supports only ISO 11649 creditor references that are based on Finnish national reference numbers (see fi_viite). Does not support other SEPA countries.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(s) ⇒ RFViite

Returns a new instance of RFViite.



12
13
14
# File 'lib/viitenumero/rf_viite.rb', line 12

def initialize(s)
  @number = format(s)
end

Instance Attribute Details

#numberObject (readonly)

Returns the value of attribute number.



10
11
12
# File 'lib/viitenumero/rf_viite.rb', line 10

def number
  @number
end

Class Method Details

.generate(base, add_fi_checksum: true) ⇒ Object

Raises:

  • (ArgumentError)


28
29
30
31
32
33
34
35
# File 'lib/viitenumero/rf_viite.rb', line 28

def self.generate(base, add_fi_checksum: true)
  base = (base || '').to_s.gsub(/\s+/, '')
  raise ArgumentError.new('must be a number') if base.match(/\A\d+\z/).nil?
  raise ArgumentError.new('must be between 3-19 chars long') if base.length < 3 || base.length > 19

  base = base + FIViite.checksum(base) if add_fi_checksum
  RFViite.new('RF' + checksum(base) + base)
end

.random(length: 8) ⇒ Object

Raises:

  • (ArgumentError)


37
38
39
40
41
# File 'lib/viitenumero/rf_viite.rb', line 37

def self.random(length: 8)
  raise ArgumentError if length < 8 || length > 24
  base_length = length - 4
  FIViite.random(length: base_length).to_rf
end

.valid?(s) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/viitenumero/rf_viite.rb', line 43

def self.valid?(s)
  RFViite.new(s).valid?
end

Instance Method Details

#machine_formatObject



20
21
22
# File 'lib/viitenumero/rf_viite.rb', line 20

def machine_format
  number
end

#national_partObject



55
56
57
# File 'lib/viitenumero/rf_viite.rb', line 55

def national_part
  number[4..-1]
end

#paper_formatObject



16
17
18
# File 'lib/viitenumero/rf_viite.rb', line 16

def paper_format
  number.gsub(/.{4}(?=.)/, '\0 ')
end

#to_fiObject



51
52
53
# File 'lib/viitenumero/rf_viite.rb', line 51

def to_fi
  FIViite.new(national_part)
end

#to_sObject



47
48
49
# File 'lib/viitenumero/rf_viite.rb', line 47

def to_s
  machine_format
end

#valid?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/viitenumero/rf_viite.rb', line 24

def valid?
  valid_format? and valid_length? and valid_checksum? and valid_national_checksum?
end