class XmlConv::Util::Transaction

Constants

ODBA_PREFETCH
ODBA_SERIALIZABLE

Attributes

arguments[RW]
commit_time[R]
debug_recipients[RW]
destination[RW]
domain[RW]
error[RW]
error_recipients[RW]
input[RW]
input_model[R]
model[R]
origin[RW]
output[R]
output_model[R]
partner[RW]
postprocs[RW]
reader[RW]
response[RW]
start_time[R]
transaction_id[RW]
writer[RW]

Public Class Methods

new() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 23
def initialize
  @postprocs = []
end

Public Instance Methods

execute() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 26
                def execute
                        reader_instance = Conversion.const_get(@reader)
                        writer_instance = Conversion.const_get(@writer)
                        @start_time = Time.now
@input =  @input.force_encoding("UTF-8")
@input = @input.encode("UTF-8", :invalid=>:replace, :replace=>"?") if !@input.valid_encoding?
@input.gsub!(/\t+|\s+/, ' ')
input_model = reader_instance.parse(@input)
@arguments ||= []
                        @model = reader_instance.convert(input_model, *@arguments)
                        output_model = writer_instance.convert(@model, *@arguments)
                        @output = output_model.is_a?(Array) ? output_model.join("\n").to_s : output_model.to_s
SBSM.info("_execute #{input_model.class} => #{@output} #{@destination.inspect}")
                        @destination.deliver(output_model)
                        @commit_time = Time.now
                        @output
                ensure
                        @destination.forget_credentials!
                end
invoice_ids() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 46
def invoice_ids
  @model.invoices.collect do |inv|
    inv.invoice_id.last.to_s.gsub /^0+/, ''
  end
end
notify() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 51
                        def notify
                                recipients = [@debug_recipients]
                                subject = 'XmlConv2 - Debug-Notification'
                                if(@error)
                                        recipients.push(@error_recipients)
                                        subject = 'XmlConv2 - Error-Notification'
                                end
                                recipients.flatten!
                                recipients.compact!
                                recipients.uniq!
                                return if(recipients.empty?)
                                body = <<-EOS
Date:   #{@start_time.strftime("%d.%m.%Y")}
Time:   #{@start_time.strftime("%H:%M:%S")}
Status: #{status}
Error:  #{@error}
Link:   http://#{@domain}/de/transaction/transaction_id/#{@transaction_id}

Input:
# input start
#{@input}
# input end

Output:
# output start
#{@output}
# output end
                                EOS
        Util::Mail.notify recipients, subject, body
                        end
odba_store() click to toggle source
Calls superclass method
# File lib/xmlconv/util/transaction.rb, line 81
def odba_store
  @input.extend(ODBA::Persistable) if(@input)
  @output.extend(ODBA::Persistable) if(@output)
  super
end
postprocess() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 86
def postprocess
  if(@postprocs.respond_to?(:each))
    @postprocs.each do |klass, *args|
      next if args.empty?
      SBSM.info(msg = "Postprocess calling for klass #{klass} #{args.inspect}")
      args.push(self)
      res = PostProcess.const_get(klass).send(*args)
      SBSM.info(msg = "Postprocess returned #{res} for klass #{klass}")
    end
  end
end
respond(delivery, response) click to toggle source
# File lib/xmlconv/util/transaction.rb, line 97
def respond delivery, response
  responses[delivery] = response
end
responses() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 106
def responses
  @responses ||= []
end
status() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 109
                def status
                        if(@error)
                                :error
elsif(@model.nil? || @model.empty?)
  :empty
                        elsif(@destination.respond_to?(:status))
                                @destination.status
                        end
                end
status=(status) click to toggle source
# File lib/xmlconv/util/transaction.rb, line 118
def status=(status)
  if @destination.respond_to?(:status=)
    @destination.status = status
    @destination.odba_store
    @destination.status
  end
end
status_comparable() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 125
def status_comparable
        if(@destination.respond_to?(:status_comparable))
                @destination.status_comparable
        end
end
update_status() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 130
def update_status
        if(@destination.respond_to?(:update_status))
                @destination.update_status
        end
end
uri() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 135
def uri
        @destination.uri if(@destination.respond_to?(:uri))
end
uri_comparable() click to toggle source
# File lib/xmlconv/util/transaction.rb, line 138
def uri_comparable
        self.uri.to_s
end