xmlconv 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +11 -0
- data/History.txt +8 -0
- data/README.txt +0 -4
- data/Rakefile +16 -32
- data/bin/migrate_xmlconv_to_utf_8 +235 -0
- data/bin/{admin → xmlconv_admin} +0 -0
- data/bin/xmlconvd +3 -1
- data/converter_scripts/convert.rb +23 -0
- data/{xmlconv_convert.rb → converter_scripts/xmlconv_convert.rb} +0 -0
- data/lib/xmlconv/config.rb +6 -0
- data/lib/xmlconv/custom/lookandfeel.rb +1 -1
- data/lib/xmlconv/i2/header.rb +5 -3
- data/lib/xmlconv/i2/position.rb +3 -2
- data/lib/xmlconv/util/application.rb +9 -6
- data/lib/xmlconv/util/destination.rb +11 -6
- data/lib/xmlconv/util/mail.rb +26 -14
- data/lib/xmlconv/util/transaction.rb +3 -1
- data/lib/xmlconv/version.rb +3 -0
- data/readme.md +46 -0
- data/test/data/polling.yaml +10 -0
- data/test/test_i2/address.rb +2 -2
- data/test/test_i2/date.rb +2 -2
- data/test/test_i2/document.rb +12 -22
- data/test/test_i2/header.rb +2 -2
- data/test/test_i2/order.rb +18 -32
- data/test/test_i2/parser.rb +4 -3
- data/test/test_i2/position.rb +9 -23
- data/test/test_model/address.rb +2 -2
- data/test/test_model/agreement.rb +2 -2
- data/test/test_model/bdd.rb +8 -9
- data/test/test_model/bsr.rb +6 -7
- data/test/test_model/delivery.rb +11 -15
- data/test/test_model/delivery_item.rb +5 -5
- data/test/test_model/freetext_container.rb +3 -3
- data/test/test_model/invoice.rb +8 -11
- data/test/test_model/invoice_item.rb +5 -4
- data/test/test_model/name.rb +2 -2
- data/test/test_model/part_info.rb +2 -2
- data/test/test_model/party.rb +16 -22
- data/test/test_model/price.rb +2 -2
- data/test/test_util/application.rb +36 -86
- data/test/test_util/destination.rb +11 -19
- data/test/test_util/invoicer.rb +3 -3
- data/test/test_util/polling_manager.rb +11 -11
- data/test/test_util/transaction.rb +31 -55
- data/xmlconv.gemspec +45 -0
- metadata +378 -78
- data/.gemtest +0 -0
- data/lib/xmlconv/i2/parser.rb +0 -23
- data/lib/xmlconv.rb +0 -3
- data/test/mock.rb +0 -149
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 46d35b7a65ef782dbe67831fecd80f57d9232459
|
4
|
+
data.tar.gz: 810608f3c9a8a737804bc9808c9b2796ffeb8a62
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8ac3b021484be356b929461097a3ef31dd4655373cbe49c31752c8120e84ea1b437696be054502604e6b4fc884dd2320789ba52d6870c13bdb7c4546a721108
|
7
|
+
data.tar.gz: 809229409f64acf59c88cb3a6c80a3557bed1691856adc37b753dfc49c9ceb2e63bf802b7eb3e27cb5b56972bb4eeaea964ef48287348c9dc04a930dacdf9e7d
|
data/Gemfile
ADDED
data/History.txt
CHANGED
data/README.txt
CHANGED
data/Rakefile
CHANGED
@@ -1,37 +1,21 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'xmlconv/version'
|
6
|
+
require "bundler/gem_tasks"
|
7
|
+
require 'rspec/core/rake_task'
|
2
8
|
|
3
|
-
|
4
|
-
require 'hoe'
|
9
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
10
|
|
6
|
-
|
11
|
+
# dependencies are now declared in bbmb.gemspec
|
7
12
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# Hoe.plugin :gem_prelude_sucks
|
12
|
-
# Hoe.plugin :gem_prelude_sucks
|
13
|
-
# Hoe.plugin :git
|
14
|
-
# Hoe.plugin :inline
|
15
|
-
# Hoe.plugin :inline
|
16
|
-
# Hoe.plugin :inline
|
17
|
-
# Hoe.plugin :manifest
|
18
|
-
# Hoe.plugin :newgem
|
19
|
-
# Hoe.plugin :racc
|
20
|
-
# Hoe.plugin :racc
|
21
|
-
# Hoe.plugin :rubyforge
|
22
|
-
# Hoe.plugin :rubyforge
|
23
|
-
# Hoe.plugin :rubyforge
|
24
|
-
# Hoe.plugin :website
|
25
|
-
# Hoe.plugin :yard
|
26
|
-
|
27
|
-
Hoe.spec 'xmlconv' do
|
28
|
-
# HEY! If you fill these out in ~/.hoe_template/Rakefile.erb then
|
29
|
-
# you'll never have to touch them again!
|
30
|
-
# (delete this comment too, of course)
|
31
|
-
|
32
|
-
developer('Masaomi Hatakeyama, Zeno R.R. Davatz', 'mhatakeyama@ywesee.com, zdavatz@ywesee.com')
|
33
|
-
|
34
|
-
# self.rubyforge_name = 'xmlconvx' # if different than 'xmlconv'
|
13
|
+
desc 'Offer a gem task like hoe'
|
14
|
+
task :gem => :build do
|
15
|
+
Rake::Task[:build].invoke
|
35
16
|
end
|
36
17
|
|
37
|
-
|
18
|
+
task :spec => :clean
|
19
|
+
|
20
|
+
require 'rake/clean'
|
21
|
+
CLEAN.include FileList['pkg/*.gem']
|
@@ -0,0 +1,235 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
puts "#{Time.now}: Loading #{__FILE__}"
|
4
|
+
STDOUT.sync = true
|
5
|
+
|
6
|
+
require 'syck'
|
7
|
+
|
8
|
+
if ARGV.size != 1 || !File.exist?(ARGV[0])
|
9
|
+
puts "#{__FILE__}: Must specify a config yaml for the database connection"
|
10
|
+
exit
|
11
|
+
end
|
12
|
+
config = YAML.load_file(ARGV[0])
|
13
|
+
puts "DB used is DBI:Pg:#{config['db_name']} #{config['db_user']} #{config['db_auth']}"
|
14
|
+
|
15
|
+
here = File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'lib'))
|
16
|
+
$: << here
|
17
|
+
require 'logger'
|
18
|
+
require 'needle'
|
19
|
+
require 'odba/id_server'
|
20
|
+
require 'rrba/server'
|
21
|
+
require 'yus/entity'
|
22
|
+
require 'yus/privilege'
|
23
|
+
require 'ydim/autoinvoicer'
|
24
|
+
require 'ydim/client'
|
25
|
+
require 'ydim/currency_converter'
|
26
|
+
require 'ydim/currency_updater'
|
27
|
+
require 'ydim/factory'
|
28
|
+
require 'ydim/root_user'
|
29
|
+
require 'ydim/server'
|
30
|
+
require 'ydim/util'
|
31
|
+
require 'odba/connection_pool'
|
32
|
+
require 'odba/drbwrapper'
|
33
|
+
require 'ydim/root_user'
|
34
|
+
require 'ydim/autoinvoicer'
|
35
|
+
require 'xmlconv/model/address'
|
36
|
+
require 'xmlconv/model/delivery'
|
37
|
+
require 'xmlconv/model/name'
|
38
|
+
require 'xmlconv/model/party'
|
39
|
+
require 'xmlconv/model/bdd'
|
40
|
+
require 'xmlconv/model/item'
|
41
|
+
require 'xmlconv/model/bsr'
|
42
|
+
require 'xmlconv/model/delivery_item'
|
43
|
+
require 'xmlconv/util/application'
|
44
|
+
require 'xmlconv/util/session'
|
45
|
+
require 'xmlconv/util/transaction'
|
46
|
+
|
47
|
+
module XmlConv
|
48
|
+
class Server
|
49
|
+
# http://stackoverflow.com/questions/2982677/ruby-1-9-invalid-byte-sequence-in-utf-8
|
50
|
+
# https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences
|
51
|
+
def sanitize_utf8(string)
|
52
|
+
return nil if string.nil?
|
53
|
+
# return string.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
54
|
+
return string if string.valid_encoding?
|
55
|
+
if string.force_encoding(Encoding::ISO_8859_1).valid_encoding?
|
56
|
+
string.force_encoding(Encoding::ISO_8859_1).clone.encode(Encoding::UTF_8)
|
57
|
+
else
|
58
|
+
string.chars.select { |c| c.valid_encoding? }.join
|
59
|
+
end
|
60
|
+
end
|
61
|
+
def _migrate_to_utf8 queue, table, opts={}
|
62
|
+
while obj = queue.shift do
|
63
|
+
if obj.is_a?(Numeric)
|
64
|
+
begin
|
65
|
+
obj = ODBA.cache.fetch obj
|
66
|
+
rescue ODBA::OdbaError
|
67
|
+
return
|
68
|
+
end
|
69
|
+
else
|
70
|
+
obj = obj.odba_instance
|
71
|
+
end
|
72
|
+
puts " #{__LINE__}: #{Time.now} Migrating #{obj.class} #{obj.to_s}" if obj.is_a?(XmlConv::Model::Bdd) # if $VERBOSE
|
73
|
+
return unless obj
|
74
|
+
_migrate_obj_to_utf8 obj, queue, table, opts
|
75
|
+
obj.odba_store unless obj.odba_unsaved?
|
76
|
+
end
|
77
|
+
end
|
78
|
+
def _migrate_obj_to_utf8 obj, queue, table, opts={}
|
79
|
+
obj.instance_variables.each do |name|
|
80
|
+
child = obj.instance_variable_get name
|
81
|
+
if child.respond_to?(:odba_unsaved?) && !child.odba_unsaved? \
|
82
|
+
&& obj.respond_to?(:odba_serializables) \
|
83
|
+
&& obj.odba_serializables.include?(name)
|
84
|
+
child.instance_variable_set '@odba_persistent', nil
|
85
|
+
end
|
86
|
+
child = _migrate_child_to_utf8 child, queue, table, opts
|
87
|
+
obj.instance_variable_set name, child
|
88
|
+
end
|
89
|
+
if obj.is_a?(Array)
|
90
|
+
obj.collect! do |child|
|
91
|
+
_migrate_child_to_utf8 child, queue, table, opts
|
92
|
+
end
|
93
|
+
end
|
94
|
+
if obj.is_a?(Hash)
|
95
|
+
obj.dup.each do |key, child|
|
96
|
+
obj.store key, _migrate_child_to_utf8(child, queue, table, opts)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
obj
|
100
|
+
end
|
101
|
+
def _migrate_child_to_utf8 child, queue, table, opts={}
|
102
|
+
@serialized ||= {}
|
103
|
+
case child
|
104
|
+
when ODBA::Persistable, ODBA::Stub
|
105
|
+
if child = child.odba_instance
|
106
|
+
if child.odba_unsaved?
|
107
|
+
_migrate_to_utf8 [child], table, opts
|
108
|
+
elsif opts[:all]
|
109
|
+
odba_id = child.odba_id
|
110
|
+
unless table[odba_id]
|
111
|
+
table.store odba_id, true
|
112
|
+
queue.push odba_id
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
when String
|
117
|
+
old = child.encoding
|
118
|
+
if ( child.encoding != Encoding::UTF_8 && child.force_encoding(Encoding::ISO_8859_1).valid_encoding? ) ||
|
119
|
+
( child.encoding == Encoding::UTF_8 && !child.valid_encoding? )
|
120
|
+
child = child.force_encoding(Encoding::ISO_8859_1).clone.encode(Encoding::UTF_8)
|
121
|
+
puts "force_encoding from ISO_8859_1 #{old}. is now #{child}" if $VERBOSE
|
122
|
+
end
|
123
|
+
case child.encoding.to_s
|
124
|
+
when /ASCII-8BIT|US-ASCII/
|
125
|
+
# nothing todo
|
126
|
+
when /UTF-8/
|
127
|
+
puts "UTF-8: for #{child.to_s}" if $VERBOSE
|
128
|
+
child = sanitize_utf8(child)
|
129
|
+
when /ISO-8859-1/i
|
130
|
+
child = sanitize_utf8(child)
|
131
|
+
# child = child.force_encoding('UTF-8')
|
132
|
+
puts "force_encoding from #{old}. is now #{child}" if $VERBOSE
|
133
|
+
else
|
134
|
+
puts "Unhandeled encoding #{child.encoding}"
|
135
|
+
# child = child.force_encoding
|
136
|
+
end
|
137
|
+
when
|
138
|
+
Yus::Entity,
|
139
|
+
Yus::Privilege,
|
140
|
+
YDIM::AutoInvoice,
|
141
|
+
YDIM::Debitor,
|
142
|
+
YDIM::Debitor,
|
143
|
+
YDIM::Invoice,
|
144
|
+
YDIM::Invoice::Info,
|
145
|
+
YDIM::Item,
|
146
|
+
XmlConv::Model::Bdd
|
147
|
+
child = _migrate_obj_to_utf8 child, queue, table, opts
|
148
|
+
when Float, Fixnum, TrueClass, FalseClass, NilClass,
|
149
|
+
XmlConv::Model::Name,
|
150
|
+
XmlConv::Model::Item,
|
151
|
+
XmlConv::Model::Party,
|
152
|
+
XmlConv::Model::Bsr,
|
153
|
+
Symbol, Time, Date, DateTime
|
154
|
+
# do nothing
|
155
|
+
else
|
156
|
+
@ignored ||= {}
|
157
|
+
unless @ignored[child.class]
|
158
|
+
@ignored.store child.class, true
|
159
|
+
warn "ignoring #{child.class}"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
child
|
163
|
+
rescue SystemStackError
|
164
|
+
puts child.class
|
165
|
+
raise
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
@logger = Logger.new('/tmp/ migrate_to_utf8.log')
|
171
|
+
@logger.level = Logger::DEBUG
|
172
|
+
module Yus
|
173
|
+
class Entity
|
174
|
+
include ODBA::Persistable
|
175
|
+
class << self
|
176
|
+
alias :all :odba_extent
|
177
|
+
end
|
178
|
+
end
|
179
|
+
class Privilege
|
180
|
+
include ODBA::Persistable
|
181
|
+
class << self
|
182
|
+
alias :all :odba_extent
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
module XmlConv
|
187
|
+
module Model
|
188
|
+
class Address
|
189
|
+
include ODBA::Persistable
|
190
|
+
class << self
|
191
|
+
alias :all :odba_extent
|
192
|
+
end
|
193
|
+
end
|
194
|
+
class Transaction
|
195
|
+
include ODBA::Persistable
|
196
|
+
class << self
|
197
|
+
alias :all :odba_extent
|
198
|
+
end
|
199
|
+
end
|
200
|
+
class Bdd
|
201
|
+
include ODBA::Persistable
|
202
|
+
class << self
|
203
|
+
alias :all :odba_extent
|
204
|
+
end
|
205
|
+
end
|
206
|
+
class Party
|
207
|
+
include ODBA::Persistable
|
208
|
+
class << self
|
209
|
+
alias :all :odba_extent
|
210
|
+
end
|
211
|
+
end if false
|
212
|
+
class Bsr
|
213
|
+
include ODBA::Persistable
|
214
|
+
class << self
|
215
|
+
alias :all :odba_extent
|
216
|
+
end
|
217
|
+
end if false
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
ODBA.storage.dbi = ODBA::ConnectionPool.new("DBI:Pg:#{config['db_name']}", config['db_user'], config['db_auth'], :client_encoding => 'LATIN1')
|
222
|
+
ODBA.cache.setup
|
223
|
+
DRb.install_id_conv ODBA::DRbIdConv.new
|
224
|
+
|
225
|
+
@server = XmlConv::Server.new
|
226
|
+
@server.extend(DRbUndumped)
|
227
|
+
session = YDIM::RootSession.new(YDIM::RootUser.new(1))
|
228
|
+
|
229
|
+
session.serv = @server
|
230
|
+
{ :bdds => XmlConv::Model::Bdd.odba_extent,
|
231
|
+
}.each do |name, to_migrate|
|
232
|
+
puts "#{Time.now}: Start migrating #{to_migrate.size} #{name}"
|
233
|
+
@server._migrate_to_utf8(to_migrate, {})
|
234
|
+
end
|
235
|
+
puts "#{Time.now}: Finished #{__FILE__}"
|
data/bin/{admin → xmlconv_admin}
RENAMED
File without changes
|
data/bin/xmlconvd
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# XmlConv -- xmlconv2 -- 10.05.2012 -- yasaka@ywesee.com
|
2
3
|
# XmlConv -- xmlconv2 -- 07.06.2004 -- hwyss@ywesee.com
|
3
4
|
|
4
5
|
require 'drb/drb'
|
@@ -27,9 +28,10 @@ XmlConv::LOGGER = logger
|
|
27
28
|
XmlConv::Util.autoload(config.plugin_dir, 'plugin')
|
28
29
|
XmlConv::Util.autoload(config.postproc_dir, 'postproc')
|
29
30
|
|
30
|
-
ODBA.storage.dbi = ODBA::ConnectionPool.new("DBI:
|
31
|
+
ODBA.storage.dbi = ODBA::ConnectionPool.new("DBI:Pg:#{config.db_name}",
|
31
32
|
config.db_user, config.db_auth)
|
32
33
|
ODBA.cache.setup
|
34
|
+
ODBA.cache.prefetch
|
33
35
|
|
34
36
|
$0 = config.program_name
|
35
37
|
DRb.start_service(config.server_url, XmlConvApp.new)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/local/bin/ruby186/bin/ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
$: << '/usr/local/share/src/xmlconv/lib'
|
6
|
+
|
7
|
+
require 'lib/conversion/propharma_bdd'
|
8
|
+
require 'lib/conversion/pharmacieplus_bdd'
|
9
|
+
require 'lib/conversion/bdd_csv'
|
10
|
+
require 'lib/conversion/bdd_i2'
|
11
|
+
|
12
|
+
source_xml = ARGV.first
|
13
|
+
|
14
|
+
#reader = XmlConv::Conversion::ProPharmaBdd
|
15
|
+
reader = XmlConv::Conversion::PharmaciePlusBdd
|
16
|
+
#input = reader.parse(File.read('input.txt'))
|
17
|
+
input = reader.parse(File.read(source_xml))
|
18
|
+
model = reader.convert(input)
|
19
|
+
#writer = XmlConv::Conversion::BddCsv
|
20
|
+
writer = XmlConv::Conversion::BddI2
|
21
|
+
output = writer.convert(model)
|
22
|
+
|
23
|
+
print output.to_s
|
File without changes
|
data/lib/xmlconv/config.rb
CHANGED
@@ -34,6 +34,12 @@ module XmlConv
|
|
34
34
|
'invoice_item_format' => "Commission %s\n%s %1.2f Turnover\nout of %i transmitted invoices",
|
35
35
|
'log_file' => STDERR,
|
36
36
|
'log_level' => 'INFO',
|
37
|
+
'mail_suppress_sending' => false,
|
38
|
+
'smtp_server' => 'localhost',
|
39
|
+
'smtp_port' => 587,
|
40
|
+
'smtp_user' => 'username@domain',
|
41
|
+
'smtp_pass' => 'topsecret',
|
42
|
+
'smtp_domain' => 'localdomain',
|
37
43
|
'mail_host' => 'localhost',
|
38
44
|
'mail_from' => 'xmlconv@ywesee.com',
|
39
45
|
'pass_hash' => nil,
|
@@ -34,7 +34,7 @@ module XmlConv
|
|
34
34
|
:th_commit_time => 'Zeit',
|
35
35
|
:th_error => 'Fehler',
|
36
36
|
:th_input => 'Input',
|
37
|
-
:th_uri_comparable => '
|
37
|
+
:th_uri_comparable => 'Empfänger',
|
38
38
|
:th_filename => 'Filename',
|
39
39
|
:th_transaction_id => 'ID',
|
40
40
|
:th_origin => 'Absender',
|
data/lib/xmlconv/i2/header.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# I2::Header --
|
2
|
+
# XmlConv::I2::Header -- xmlconv -- 27.07.2011 -- mhatakeyama@ywesee.com
|
3
|
+
# XmlConv::I2::Header -- xmlconv2 -- 02.06.2004 -- hwyss@ywesee.com
|
3
4
|
|
4
5
|
module XmlConv
|
5
6
|
module I2
|
@@ -10,8 +11,9 @@ module XmlConv
|
|
10
11
|
@recipient_id = recipient_id
|
11
12
|
@prefix = @recipient_id
|
12
13
|
time = Time.now
|
13
|
-
msec = sprintf('%03i', (time.to_f * 1000).to_i % 100)
|
14
|
-
|
14
|
+
# msec = sprintf('%03i', (time.to_f * 1000).to_i % 100)
|
15
|
+
#@transaction_id = time.strftime("%Y%m%d%H%M#{msec}")
|
16
|
+
@transaction_id = time.strftime("%Y%m%d%H%M")
|
15
17
|
end
|
16
18
|
def suffix=(suffix)
|
17
19
|
@suffix = "_" << suffix.to_s
|
data/lib/xmlconv/i2/position.rb
CHANGED
@@ -16,10 +16,11 @@ module XmlConv
|
|
16
16
|
def to_s
|
17
17
|
output = <<-EOS
|
18
18
|
500:#{@number}
|
19
|
-
501:#{@article_ean}
|
20
19
|
EOS
|
20
|
+
#501:#{@article_ean}
|
21
21
|
[@customer_id, @pharmacode].compact.each { |id|
|
22
|
-
output << sprintf("502:%s\n", id)
|
22
|
+
#output << sprintf("502:%s\n", id)
|
23
|
+
output << sprintf("501:%s\n", id)
|
23
24
|
}
|
24
25
|
output << sprintf("520:%s\n", @qty)
|
25
26
|
if(@unit)
|
@@ -1,4 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# XmlConv::Application -- xmlconv -- 10.05.2012 -- yasaka@ywesee.com
|
3
|
+
# XmlConv::Application -- xmlconv -- 29.09.2011 -- mhatakeyama@ywesee.com
|
2
4
|
# XmlConv::Application -- xmlconv2 -- 07.06.2004 -- hwyss@ywesee.com
|
3
5
|
|
4
6
|
require 'sbsm/drbserver'
|
@@ -37,12 +39,13 @@ module XmlConv
|
|
37
39
|
transaction.postprocess
|
38
40
|
rescue Exception => error
|
39
41
|
transaction.error = error
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
ensure
|
43
|
+
ODBA.transaction {
|
44
|
+
transaction.odba_store
|
45
|
+
@transactions.push(transaction)
|
46
|
+
@transactions.odba_isolated_store
|
47
|
+
}
|
48
|
+
end
|
46
49
|
def next_transaction_id
|
47
50
|
@id_mutex.synchronize {
|
48
51
|
@next_transaction_id ||= @transactions.collect { |transaction|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# Destination --
|
2
|
+
# XmlConv::Destination -- xmlconv -- 22.09.2011 -- mhatakeyama@ywesee.com
|
3
|
+
# XmlConv::Destination -- xmlconv2 -- 08.06.2004 -- hwyss@ywesee.com
|
3
4
|
|
4
5
|
require 'fileutils'
|
5
6
|
require 'uri'
|
@@ -134,17 +135,21 @@ module XmlConv
|
|
134
135
|
end
|
135
136
|
def deliver_to_connection(connection, delivery, idx=nil)
|
136
137
|
if(delivery.is_a?(Array))
|
137
|
-
delivery.each_with_index { |part, idx|
|
138
|
-
|
138
|
+
#delivery.each_with_index { |part, idx|
|
139
|
+
delivery.each { |part|
|
140
|
+
#deliver_to_connection(connection, part, idx)
|
141
|
+
deliver_to_connection(connection, part)
|
139
142
|
}
|
140
143
|
else
|
141
144
|
fh = Tempfile.new('xmlconv')
|
142
145
|
fh.puts(delivery)
|
143
146
|
fh.flush
|
144
147
|
target = delivery.filename
|
145
|
-
if(idx)
|
146
|
-
target = sprintf("%03i_%s", idx, target)
|
147
|
-
|
148
|
+
# if(idx)
|
149
|
+
#target = sprintf("%03i_%s", idx, target)
|
150
|
+
# target.gsub!(/\.dat/, "%03i.dat" % idx)
|
151
|
+
# target.gsub!(/(CO_\d{13})/, '\1%02d' % idx)
|
152
|
+
# end
|
148
153
|
if(@tmp)
|
149
154
|
tmp = File.join(@tmp.path, target)
|
150
155
|
connection.puttextfile(fh.path, tmp)
|
data/lib/xmlconv/util/mail.rb
CHANGED
@@ -1,30 +1,42 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
2
3
|
# Util::Mail -- XmlConv -- 23.04.2009 -- hwyss@ywesee.com
|
3
4
|
|
4
|
-
require '
|
5
|
-
require 'tmail'
|
5
|
+
require 'mail'
|
6
6
|
require 'xmlconv/config'
|
7
7
|
|
8
8
|
module XmlConv
|
9
9
|
module Util
|
10
10
|
module Mail
|
11
11
|
SMTP_HANDLER = Net::SMTP
|
12
|
-
def Mail.notify recipients,
|
12
|
+
def Mail.notify recipients, my_subject, my_body
|
13
|
+
config = XmlConv::CONFIG
|
14
|
+
if config.mail_suppress_sending
|
15
|
+
puts "#{__FILE__}:#{__LINE__} Suppress sending mail with subject: #{my_subject}"
|
16
|
+
::Mail.defaults do delivery_method :test end
|
17
|
+
else
|
18
|
+
puts "Mail.sendmail #{config.smtp_server} #{config.smtp_port} smtp_user: #{config.smtp_user} subject #{my_subject}"
|
19
|
+
::Mail.defaults do
|
20
|
+
options = { :address => config.smtp_server,
|
21
|
+
:port => config.smtp_port,
|
22
|
+
:domain => config.smtp_domain,
|
23
|
+
:user_name => config.smtp_user,
|
24
|
+
:password => config.smtp_pass,
|
25
|
+
:authentication => 'plain',
|
26
|
+
:enable_starttls_auto => true }
|
27
|
+
delivery_method :smtp, options
|
28
|
+
end
|
29
|
+
end
|
13
30
|
recipients.flatten!
|
14
31
|
recipients.compact!
|
15
32
|
recipients.uniq!
|
16
33
|
return if(recipients.empty?)
|
17
|
-
mail =
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
mail.date = Time.now
|
24
|
-
mail['User-Agent'] = 'XmlConv::Util::Mail'
|
25
|
-
SMTP_HANDLER.start(XmlConv::CONFIG.mail_host) { |smtp|
|
26
|
-
smtp.sendmail(mail.encoded, XmlConv::CONFIG.mail_from, recipients)
|
27
|
-
}
|
34
|
+
mail = ::Mail.deliver do
|
35
|
+
from (config.mail_from || 'dummy@test.com')
|
36
|
+
to recipients
|
37
|
+
subject my_subject
|
38
|
+
body my_body
|
39
|
+
end
|
28
40
|
end
|
29
41
|
end
|
30
42
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# Util::Transaction -- xmlconv2 -- 10.05.2012 -- yasaka@ywesee.com
|
2
3
|
# Util::Transaction -- xmlconv2 -- 04.06.2004 -- hwyss@ywesee.com
|
3
4
|
|
4
5
|
require 'odba'
|
@@ -10,6 +11,7 @@ module XmlConv
|
|
10
11
|
class Transaction
|
11
12
|
include ODBA::Persistable
|
12
13
|
ODBA_SERIALIZABLE = ['@postprocs', '@responses', '@arguments']
|
14
|
+
ODBA_PREFETCH = true
|
13
15
|
odba_index :invoice_ids
|
14
16
|
attr_accessor :input, :reader, :writer, :destination, :origin,
|
15
17
|
:transaction_id, :partner, :error, :postprocs,
|
@@ -28,7 +30,7 @@ module XmlConv
|
|
28
30
|
@arguments ||= []
|
29
31
|
@model = reader_instance.convert(input_model, *@arguments)
|
30
32
|
output_model = writer_instance.convert(@model, *@arguments)
|
31
|
-
@output = output_model.to_s
|
33
|
+
@output = output_model.is_a?(Array) ? output_model.join("\n").to_s : output_model.to_s
|
32
34
|
@destination.deliver(output_model)
|
33
35
|
@commit_time = Time.now
|
34
36
|
@output
|
data/readme.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# xmlconv
|
2
|
+
|
3
|
+
* https://github.com/zdavatz/xmlconv
|
4
|
+
|
5
|
+
## DESCRIPTION:
|
6
|
+
|
7
|
+
xmlconverter, convert XML to flat files.
|
8
|
+
|
9
|
+
## REQUIREMENTS:
|
10
|
+
|
11
|
+
* xmlconv - sudo gem install sandozxmlconv
|
12
|
+
|
13
|
+
## INSTALL:
|
14
|
+
|
15
|
+
* sudo gem install xmlconv
|
16
|
+
|
17
|
+
## Debugging
|
18
|
+
|
19
|
+
Use the `bin/xmlconv_admin config=/path/to/your/config.yml`. There you may call stuff like
|
20
|
+
|
21
|
+
```transactions.size
|
22
|
+
transactions.last.status
|
23
|
+
transactions.last.output[0..120]
|
24
|
+
transactions.last.uri
|
25
|
+
transactions.last.commit_time
|
26
|
+
transactions.last.destination.uri
|
27
|
+
transactions.last.arguments
|
28
|
+
transactions.last.transaction_id
|
29
|
+
transactions.last.update_status
|
30
|
+
transactions.last.response
|
31
|
+
transactions.last.output_model
|
32
|
+
transactions.last.partner
|
33
|
+
transactions.last.reader
|
34
|
+
transactions.last.writer```
|
35
|
+
|
36
|
+
|
37
|
+
## DEVELOPERS:
|
38
|
+
|
39
|
+
* Zeno R.R. Davatz
|
40
|
+
* Masaomi Hatakeyama
|
41
|
+
* Hannes Wyss (up to Version 1.0)
|
42
|
+
* Niklaus Giger (Ported to Ruby 2.3.1)
|
43
|
+
|
44
|
+
## LICENSE:
|
45
|
+
|
46
|
+
GPLv2.0
|
@@ -0,0 +1,10 @@
|
|
1
|
+
--- !ruby/object:XmlConv::Util::PollingMission
|
2
|
+
reader: I2Bdd
|
3
|
+
directory: "./test/test_util/data/i2"
|
4
|
+
writer: BddXml
|
5
|
+
destination: "http://example.com:12345"
|
6
|
+
--- !ruby/object:XmlConv::Util::PollingMission
|
7
|
+
directory: "./test/test_util/data/xml"
|
8
|
+
destination: "http://user:pass@foo.bar.baz"
|
9
|
+
writer: BddI2
|
10
|
+
reader: XmlBdd
|
data/test/test_i2/address.rb
CHANGED
@@ -4,12 +4,12 @@
|
|
4
4
|
$: << File.dirname(__FILE__)
|
5
5
|
$: << File.expand_path('../../lib', File.dirname(__FILE__))
|
6
6
|
|
7
|
-
require 'test/unit'
|
8
7
|
require 'xmlconv/i2/address'
|
8
|
+
require 'minitest/autorun'
|
9
9
|
|
10
10
|
module XmlConv
|
11
11
|
module I2
|
12
|
-
class TestAddress <
|
12
|
+
class TestAddress < ::Minitest::Test
|
13
13
|
def setup
|
14
14
|
@address = I2::Address.new
|
15
15
|
end
|
data/test/test_i2/date.rb
CHANGED
@@ -4,12 +4,12 @@
|
|
4
4
|
$: << File.dirname(__FILE__)
|
5
5
|
$: << File.expand_path('../../lib', File.dirname(__FILE__))
|
6
6
|
|
7
|
-
require 'test/unit'
|
8
7
|
require 'xmlconv/i2/date'
|
8
|
+
require 'minitest/autorun'
|
9
9
|
|
10
10
|
module XmlConv
|
11
11
|
module I2
|
12
|
-
class TestDate <
|
12
|
+
class TestDate < ::Minitest::Test
|
13
13
|
def test_from_date
|
14
14
|
a_date = Date.new(1975, 8, 21)
|
15
15
|
date = I2::Date.from_date(a_date)
|