Class: XmlConv::Util::Application

Inherits:
Object
  • Object
show all
Includes:
ODBA::Persistable
Defined in:
lib/xmlconv/util/application.rb

Constant Summary collapse

ODBA_EXCLUDE_VARS =
['@next_transaction_id', '@id_mutex']

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeApplication

Returns a new instance of Application.



23
24
25
26
# File 'lib/xmlconv/util/application.rb', line 23

def initialize
	@transactions = []
	@failed_transactions = []
end

Instance Attribute Details

#failed_transactionsObject (readonly)

Returns the value of attribute failed_transactions.



20
21
22
# File 'lib/xmlconv/util/application.rb', line 20

def failed_transactions
  @failed_transactions
end

#transactionsObject (readonly)

Returns the value of attribute transactions.



20
21
22
# File 'lib/xmlconv/util/application.rb', line 20

def transactions
  @transactions
end

Instance Method Details

#_execute(transaction) ⇒ Object

survive notification failure



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/xmlconv/util/application.rb', line 36

def _execute(transaction)
				transaction.transaction_id = next_transaction_id
				transaction.execute
  transaction.postprocess
			rescue Exception => error
				transaction.error = error
ensure
  ODBA.transaction {
    transaction.odba_store
    @transactions.push(transaction)
    @transactions.odba_isolated_store
  }
end

#execute(transaction) ⇒ Object



30
31
32
33
34
35
# File 'lib/xmlconv/util/application.rb', line 30

def execute(transaction)
	_execute(transaction)
	transaction.notify
rescue Exception => error
	## survive notification failure
end

#export_orders(first = Time.local(1990,1,1), last = Time.local(2037,1,1), output_file = nil) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/xmlconv/util/application.rb', line 76

def export_orders(first=Time.local(1990,1,1), last=Time.local(2037,1,1), output_file=nil)
  range=Range.new(first, last)
  output_file ||= "/home/ywesee/xmlconv_export/xmlconv_export.csv"
  open(output_file, "w") do |f|
    self.transactions.reverse.each do |t|
      if range.include?(t.commit_time)
        f.print t.output
      end
    end
  end
end

#initObject



27
28
29
# File 'lib/xmlconv/util/application.rb', line 27

def init
	@id_mutex = Mutex.new
end

#next_transaction_idObject



49
50
51
52
53
54
55
56
# File 'lib/xmlconv/util/application.rb', line 49

def next_transaction_id
	@id_mutex.synchronize {
		@next_transaction_id ||= @transactions.collect { |transaction|
			transaction.transaction_id.to_i
		}.max.to_i
		@next_transaction_id += 1
	}
end

#send_invoice(time_range, date = Date.today) ⇒ Object



70
71
72
73
74
75
# File 'lib/xmlconv/util/application.rb', line 70

def send_invoice(time_range, date = Date.today)
  transactions = @transactions.select { |trans| 
    time_range.include?(trans.commit_time)
  }
  Util::Invoicer.run(time_range, transactions, date)
end

#transaction(transaction_id) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/xmlconv/util/application.rb', line 57

def transaction(transaction_id)
	transaction_id = transaction_id.to_i
	if((last_id = @transactions.last.transaction_id) \
		&& (last_id >= transaction_id))
		start = (transaction_id - last_id - 1) 
		if(start + @transactions.size < 0)
			start = 0
		end
		@transactions[start..-1].each { |trans|
			return trans if(trans.transaction_id == transaction_id)
		}
	end
end