class Hbci::Segment

Attributes

defined_element_groups[R]
dialog[RW]
element_groups[R]
message[RW]
request_message[RW]

Public Class Methods

element(name, definition = {}) click to toggle source
# File lib/hbci/segment.rb, line 22
def self.element(name, definition = {})
  element_groups_to_be_defined << definition.merge(name: name, block: nil, passthrough: true)
end
element_group(name, definition = {}, &block) click to toggle source
# File lib/hbci/segment.rb, line 18
def self.element_group(name, definition = {}, &block)
  element_groups_to_be_defined << definition.merge(name: name, block: block)
end
element_groups_to_be_defined() click to toggle source
# File lib/hbci/segment.rb, line 14
def self.element_groups_to_be_defined
  @element_groups_to_be_defined ||= []
end
fill(segment_data) click to toggle source
# File lib/hbci/segment.rb, line 35
def self.fill(segment_data)
  segment_data.each_with_object(new).with_index do |(element_group_data, segment), element_group_index|
    element_group_data.each_with_index do |element_data, element_index|
      segment.element_groups[element_group_index][element_index] = element_data
    end
  end
end
new() click to toggle source
# File lib/hbci/segment.rb, line 43
def initialize
  @element_groups = []
  @defined_element_groups ||= []
  define_element_groups
end

Public Instance Methods

build(message) click to toggle source
# File lib/hbci/segment.rb, line 26
def build(message)
  self.request_message = message

  type, version = self.class.name.split('::').last.split('v')

  head.type = type
  head.version = version
end
compile() click to toggle source
# File lib/hbci/segment.rb, line 49
def compile; end
to_s() click to toggle source
# File lib/hbci/segment.rb, line 51
def to_s
  element_groups.join('+').gsub(/\+*$/, '') << '\''
end

Private Instance Methods

after_build() click to toggle source
# File lib/hbci/segment.rb, line 115
def after_build; end
define_element_group(definition) click to toggle source
# File lib/hbci/segment.rb, line 65
def define_element_group(definition)
  defined_element_groups << definition[:name]

  if definition[:passthrough]
    initiate_passthrough_element_group(definition)
    define_element_group_passthrough_reader(definition[:name])
    define_element_group_passthrough_writer(definition[:name])
  else
    initiate_element_group(definition)
    define_element_group_reader(definition[:name])
    define_element_group_writer(definition[:name])
  end
end
define_element_group_passthrough_reader(name) click to toggle source
# File lib/hbci/segment.rb, line 91
def define_element_group_passthrough_reader(name)
  define_singleton_method(name.to_s) do
    element_groups[index_of_element_group(name)][0]
  end
end
define_element_group_passthrough_writer(name) click to toggle source
# File lib/hbci/segment.rb, line 109
def define_element_group_passthrough_writer(name)
  define_singleton_method("#{name}=") do |value|
    element_groups[index_of_element_group(name)][0] = value
  end
end
define_element_group_reader(name) click to toggle source
# File lib/hbci/segment.rb, line 97
def define_element_group_reader(name)
  define_singleton_method(name.to_s) do
    element_groups[index_of_element_group(name)]
  end
end
define_element_group_writer(name) click to toggle source
# File lib/hbci/segment.rb, line 103
def define_element_group_writer(name)
  define_singleton_method("#{name}=") do |value|
    element_groups[index_of_element_group(name)] = value
  end
end
define_element_groups() click to toggle source
# File lib/hbci/segment.rb, line 57
def define_element_groups
  self.class.element_groups_to_be_defined.each { |element_group| define_element_group(element_group) }
end
index_of_element_group(name) click to toggle source
# File lib/hbci/segment.rb, line 61
def index_of_element_group(name)
  defined_element_groups.index(name)
end
initiate_element_group(definition) click to toggle source
# File lib/hbci/segment.rb, line 85
def initiate_element_group(definition)
  element_group = definition[:type] ? definition[:type].new : Hbci::ElementGroup.new
  element_group.instance_eval(&definition[:block]) if definition[:block]
  element_groups[index_of_element_group(definition[:name])] = element_group
end
initiate_passthrough_element_group(definition) click to toggle source
# File lib/hbci/segment.rb, line 79
def initiate_passthrough_element_group(definition)
  element_group = Hbci::ElementGroup.new
  element_group.define_element(definition)
  element_groups[index_of_element_group(definition[:name])] = element_group
end