ydim 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 90a5c5b25b62f89e7ca1befcf28f5c1725ebbfc3
4
- data.tar.gz: 7ab7b0eb7d81c20f1f94cb39cf5ed0914a5114de
3
+ metadata.gz: 878732dac4f51ff26346c7392d8241feb891cf28
4
+ data.tar.gz: dccb435ce281b6174843f75530288557d45c30f3
5
5
  SHA512:
6
- metadata.gz: 19aaa2dd84783ac4be344cf3a09fa1bef6c2ebe2aa706cf13fff41f1e5b9b45bcb04219520c9e51e49efdc2b6c196f007966f4558ce4cca8ff82f9d7a2ca52f0
7
- data.tar.gz: 10dfc234b60cb74b21c2b2c3a69bddb0e3430ea31aebca051c8349411f40a234eec553d812b1b679887db95706c1f7f6309f5a6185d1df066aefa4d4d868be5f
6
+ metadata.gz: 84c88d7a0921fec44fbed80751e077a26138b2d8260251a83aaf3ae5e7a2418eebd96b7187d7a1af228557fa4f44eded00848c80927e787fca94fcd68dad886f
7
+ data.tar.gz: 2cfe94ce46a6dcba53096d3a596b54fe1067ac5dae6d2d110292921228779c63a3814ab6dcb0327ec8a3b2cdb3ffbe183768e65255360fdc9bc116e76db5a3b0
@@ -8,12 +8,8 @@ sudo: false
8
8
  before_install:
9
9
  - gem --version
10
10
 
11
- script: bundle exec test/suite.rb
12
-
13
11
  rvm:
14
- - 2.1
15
- - 2.2
16
- - 2.3.0
12
+ - 2.4.0
17
13
  - ruby-head
18
14
 
19
15
  matrix:
@@ -1,3 +1,7 @@
1
+ === 1.0.4 / 08.03.2017
2
+
3
+ * Using mail gem instead of rmail. Updated tests.
4
+
1
5
  === 1.0.3 / 10.05.2016
2
6
 
3
7
  * Moved bin/ydim* to lib/ydim/ to make the executables work
data/Rakefile CHANGED
@@ -16,6 +16,17 @@ task :gem => :build do
16
16
  end
17
17
 
18
18
  task :spec => :clean
19
+ require 'rake/testtask'
20
+
21
+ task :default => [:clobber, :test, :gem]
22
+
23
+ dir = File.dirname(__FILE__)
24
+ Rake::TestTask.new do |t|
25
+ t.libs << 'test'
26
+ t.test_files = Dir.glob("#{dir}/test/suite.rb")
27
+ t.warning = false
28
+ t.verbose = false
29
+ end
19
30
 
20
31
  require 'rake/clean'
21
32
  CLEAN.include FileList['pkg/*.gem']
@@ -0,0 +1,29 @@
1
+ #!/bin/bash -v
2
+ set -x
3
+ DB_NAME=ydim
4
+
5
+ yyyy=`date -d '1 days ago' +"%Y"`
6
+ mm=`date -d '1 days ago' +"%m"`
7
+ dd=`date -d '1 days ago' +"%d"`
8
+ DB_DUMP=/var/backup/fast/db_dumps/${DB_NAME}.$yyyy$mm$dd.sql.gz
9
+
10
+
11
+ m=(dummy January February March April May June July August September October November December)
12
+ nm=`expr $mm + 0`
13
+ cd /var/backup/fast/db_dumps/
14
+ cmd="scp ywesee@ywesee.com:/var/backup/thinpower/db/postgresql/${m[nm]}-$yyyy/$yyyy-$mm-$dd/22\:00-postgresql_database-${DB_NAME}-backup.gz ${DB_NAME}.$yyyy$mm$dd.sql.gz"
15
+ echo Calling $cmd
16
+ $cmd
17
+ ls -l $DB_DUMP
18
+ sudo -u postgres dropdb $DB_NAME
19
+
20
+ sudo -u postgres createdb -E UTF8 -T template0 $DB_NAME
21
+ if [ $? -ne 0 ] ; then exit 1; fi
22
+ if [ ! -f $DB_DUMP ]
23
+ then
24
+ echo "Cannot find $DB_DUMP. Have look at the get_db_dumps.rb script or get it directly from"
25
+ exit 1
26
+ fi
27
+
28
+ zcat $DB_DUMP | sudo -u postgres psql $DB_NAME
29
+ if [ $? -ne 0 ] ; then exit 1; fi
@@ -1,51 +1,36 @@
1
1
  #!/usr/bin/env ruby
2
- # Mail -- ydim -- 18.01.2006 -- hwyss@ywesee.com
3
2
 
4
- require 'net/smtp'
5
- require 'rmail'
6
- require 'ydim/smtp_tls'
3
+ require 'ydim/server' # to pick up the configuration
4
+ require 'mail'
7
5
 
8
6
  module YDIM
9
- module Mail
10
- def Mail.body(config, debitor, invoice)
11
- salutation = config.salutation[debitor.salutation.to_s]
12
- sprintf(config.mail_body, salutation, debitor.contact, invoice.description)
13
- end
14
- def Mail.send_invoice(config, invoice, sort_args={})
15
- debitor = invoice.debitor
16
- to = debitor.email
17
- subject = sprintf('Rechnung %s #%i, %s', debitor.name,
18
- invoice.unique_id, invoice.description)
19
- invoice_name = sprintf("%s.pdf", subject.tr(' /', '_-'))
20
- mpart = RMail::Message.new
21
- header = mpart.header
22
- header.to = to
23
- cc = header.cc = debitor.emails_cc
24
- header.from = config.mail_from
25
- header.subject = encode_subject config, subject
26
- header.date = Time.now
27
- tpart = RMail::Message.new
28
- mpart.add_part(tpart)
29
- tpart.header.add('Content-Type', 'text/plain', nil,
30
- 'charset' => config.mail_charset)
31
- tpart.body = body(config, debitor, invoice)
32
- fpart = RMail::Message.new
33
- mpart.add_part(fpart)
34
- header = fpart.header
35
- header.add('Content-Type', 'application/pdf')
36
- header.add('Content-Disposition', 'attachment', nil,
37
- {'filename' => invoice_name })
38
- header.add('Content-Transfer-Encoding', 'base64')
39
- fpart.body = [invoice.to_pdf(sort_args)].pack('m')
40
- recipients = config.mail_recipients.dup.push(to).concat(cc).uniq
41
- Net::SMTP.start(config.smtp_server, config.smtp_port,
42
- config.smtp_domain, config.smtp_user, config.smtp_pass,
43
- config.smtp_authtype) { |smtp|
44
- recipients.each { |recipient|
45
- smtp.sendmail(mpart.to_s, config.smtp_user, recipient)
46
- }
47
- }
48
- recipients
7
+ module Mail
8
+ ::Mail.defaults do
9
+ delivery_method :smtp, {
10
+ :address => Server.config.smtp_server,
11
+ :port => Server.config.smtp_port,
12
+ :domain => Server.config.smtp_domain,
13
+ :user_name => Server.config.smtp_user,
14
+ :password => Server.config.smtp_pass,
15
+ }
16
+ end
17
+ def Mail.body(config, debitor, invoice)
18
+ salutation = config.salutation[debitor.salutation.to_s]
19
+ sprintf(config.mail_body, salutation, debitor.contact, invoice.description)
20
+ end
21
+ def Mail.send_invoice(config, invoice, sort_args={})
22
+ debitor = invoice.debitor
23
+ invoice_subject = sprintf('Rechnung %s #%i, %s', debitor.name,
24
+ invoice.unique_id, invoice.description)
25
+ @mail = ::Mail.new
26
+ @mail.to = debitor.email
27
+ @mail.cc = debitor.emails_cc
28
+ @mail.from = config.mail_from
29
+ @mail.subject = invoice_subject
30
+ @mail.body = body(config, debitor, invoice)
31
+ @mail.attachments['myfile.pdf'] = { :mime_type => 'application/x-pdf',
32
+ :content => invoice.to_pdf(sort_args) }
33
+ @mail.deliver
49
34
  rescue Timeout::Error
50
35
  retries ||= 3
51
36
  if retries > 0
@@ -55,41 +40,23 @@ module YDIM
55
40
  else
56
41
  raise
57
42
  end
58
- end
43
+ end
59
44
  def Mail.send_reminder(config, autoinvoice)
60
- subject = autoinvoice.reminder_subject.to_s.strip
61
- subject.gsub! %r{<year>\s*}, ''
62
- subject.gsub! %r{\s*</year>}, ''
63
- body = autoinvoice.reminder_body.to_s.strip
64
- body.gsub! %r{<invoice>\s*}, ''
65
- body.gsub! %r{\s*</invoice>}, ''
66
- unless(subject.empty? || body.empty?)
67
- debitor = autoinvoice.debitor
68
- to = debitor.email
69
- mpart = RMail::Message.new
70
- header = mpart.header
71
- header.to = to
72
- cc = header.cc = debitor.emails_cc
73
- header.from = config.mail_from
74
- header.subject = encode_subject config, subject
75
- header.date = Time.now
76
- header.add('Content-Type', 'text/plain', nil,
77
- 'charset' => config.mail_charset)
78
- mpart.body = body
79
- recipients = config.mail_recipients.dup.push(to).concat(cc).uniq
80
- Net::SMTP.start(config.smtp_server, config.smtp_port,
81
- config.smtp_domain, config.smtp_user, config.smtp_pass,
82
- config.smtp_authtype) { |smtp|
83
- recipients.each { |recipient|
84
- smtp.sendmail(mpart.to_s, config.smtp_user, recipient)
85
- }
86
- }
87
- recipients
88
- end
89
- end
90
- def Mail.encode_subject(config, subject)
91
- encoded = [subject].pack('M').gsub("=\n", '').gsub(' ', '=20')
92
- sprintf("=?%s?q?%s?=", config.mail_charset, encoded)
45
+ debitor = autoinvoice.debitor
46
+ reminder_subject = autoinvoice.reminder_subject.to_s.strip
47
+ reminder_subject.gsub! %r{<year>\s*}, ''
48
+ reminder_subject.gsub! %r{\s*</year>}, ''
49
+ mail_body = autoinvoice.reminder_body.to_s.strip
50
+ mail_body.gsub! %r{<invoice>\s*}, ''
51
+ mail_body.gsub! %r{\s*</invoice>}, ''
52
+ return if reminder_subject.empty? || mail_body.empty?
53
+ @mail = ::Mail.new
54
+ @mail.to = debitor.email
55
+ @mail.cc = debitor.emails_cc
56
+ @mail.from = config.mail_from
57
+ @mail.subject = reminder_subject
58
+ @mail.body = mail_body
59
+ @mail.deliver
93
60
  end
94
61
  end
95
62
  end
@@ -1,3 +1,3 @@
1
1
  module YDIM
2
- VERSION = '1.0.3'
2
+ VERSION = '1.0.4'
3
3
  end
@@ -24,7 +24,7 @@ module YDIM
24
24
  assert_equal(7.6, item.vat_rate)
25
25
  assert_equal({}, item.data)
26
26
  assert_equal(time, item.time)
27
- assert_equal(nil, item.expiry_time)
27
+ assert_nil(item.expiry_time)
28
28
  end
29
29
  def test_total_netto
30
30
  item = Item.new
@@ -6,10 +6,15 @@ $: << File.expand_path('../lib', File.dirname(__FILE__))
6
6
  require 'minitest/autorun'
7
7
  require 'flexmock/test_unit'
8
8
  require 'ydim/mail'
9
-
10
9
  module YDIM
11
10
  class TestMail < Minitest::Test
12
11
  include FlexMock::TestCase
12
+ def setup
13
+ ::Mail.defaults do
14
+ delivery_method :test
15
+ end
16
+ ::Mail::TestMailer.deliveries.clear
17
+ end
13
18
  def setup_config
14
19
  config = flexmock('Config')
15
20
  config.should_receive(:mail_body).and_return <<-MAIL
@@ -42,11 +47,12 @@ module YDIM
42
47
  debitor.should_receive(:contact).and_return('Melanie Esterhazy')
43
48
  invoice = flexmock('Invoice')
44
49
  invoice.should_receive(:description).and_return('Description')
45
- body = Mail.body(setup_config, debitor, invoice)
46
- assert_equal <<-EXPECTED, body
47
- Sehr geehrte Frau Melanie Esterhazy
50
+ assert_equal(0, ::Mail::TestMailer.deliveries.size)
51
+ res = Mail.body(setup_config, debitor, invoice)
52
+ expected = %( Sehr geehrte Frau Melanie Esterhazy
48
53
  Description
49
- EXPECTED
54
+ )
55
+ assert_equal(expected, res)
50
56
  end
51
57
  def test_send_invoice
52
58
  debitor = flexmock('Debitor')
@@ -60,16 +66,13 @@ module YDIM
60
66
  invoice.should_receive(:unique_id).and_return(12345)
61
67
  invoice.should_receive(:description).and_return('Description')
62
68
  invoice.should_receive(:to_pdf).times(1).and_return('pdf-document')
63
- smtp = flexmock('SMTP')
64
- flexstub(Net::SMTP).should_receive(:new).and_return(smtp)
65
- smtp.should_receive(:start)
66
- smtp.should_receive(:sendmail).with(String,
67
- 'smtp@ywesee.com', 'cc@ywesee.com').and_return { assert(true) }
68
- smtp.should_receive(:sendmail).with(String,
69
- 'smtp@ywesee.com', 'test@ywesee.com').and_return { assert(true) }
70
- smtp.should_receive(:sendmail).with(String,
71
- 'smtp@ywesee.com', 'test.cc@ywesee.com').and_return { assert(true) }
69
+ assert_equal(0, ::Mail::TestMailer.deliveries.size)
72
70
  Mail.send_invoice(setup_config, invoice)
71
+ assert_equal(1, ::Mail::TestMailer.deliveries.size)
72
+ assert_equal(" Sehr geehrter Herr Contact-Name\n" +
73
+ " Description\n",
74
+ ::Mail::TestMailer.deliveries.first.body.to_s)
75
+ assert_equal('Rechnung Company-Name #12345, Description', ::Mail::TestMailer.deliveries.first.subject)
73
76
  end
74
77
  def test_send_reminder
75
78
  debitor = flexmock('Debitor')
@@ -84,16 +87,11 @@ module YDIM
84
87
  invoice.should_receive(:description).and_return('Description')
85
88
  invoice.should_receive(:reminder_subject).and_return('Reminder')
86
89
  invoice.should_receive(:reminder_body).and_return('Reminder Body')
87
- smtp = flexmock('SMTP')
88
- flexstub(Net::SMTP).should_receive(:new).and_return(smtp)
89
- smtp.should_receive(:start)
90
- smtp.should_receive(:sendmail).with(String,
91
- 'smtp@ywesee.com', 'cc@ywesee.com').and_return { assert(true) }
92
- smtp.should_receive(:sendmail).with(String,
93
- 'smtp@ywesee.com', 'test@ywesee.com').and_return { assert(true) }
94
- smtp.should_receive(:sendmail).with(String,
95
- 'smtp@ywesee.com', 'test.cc@ywesee.com').and_return { assert(true) }
90
+ assert_equal(0, ::Mail::TestMailer.deliveries.size)
96
91
  Mail.send_reminder(setup_config, invoice)
92
+ assert_equal(1, ::Mail::TestMailer.deliveries.size)
93
+ assert_equal("Reminder Body", ::Mail::TestMailer.deliveries.first.body.to_s)
94
+ assert_equal('Reminder', ::Mail::TestMailer.deliveries.first.subject)
97
95
  end
98
96
  end
99
97
  end
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "ydbd-pg", '>= 0.5.1'
22
22
  spec.add_dependency "ydbi", '>= 0.5.1'
23
23
  spec.add_dependency "syck"
24
- spec.add_dependency "rmail"
24
+ spec.add_dependency "mail"
25
25
  spec.add_dependency "rclconf"
26
26
  spec.add_dependency "needle"
27
27
  spec.add_dependency "ypdf-writer"
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
2
+ #encoding: ASCII-8BIT
3
3
  puts "#{Time.now}: Loading #{__FILE__}"
4
4
  STDOUT.sync = true
5
5
 
@@ -150,43 +150,17 @@ module YDIM
150
150
  end
151
151
  end
152
152
 
153
- puts "#{Time.now}: Calling migrate_to_utf8"
154
- @logger = Logger.new('migrate_to_utf8.log')
153
+ @logger = Logger.new("/tmp/#{File.basename(__FILE__)}.log")
154
+ @logger.info "#{Time.now}: Calling #{File.basename(__FILE__)}"
155
155
  @logger.level = Logger::DEBUG
156
156
  config = YDIM::Server.config
157
+ @logger.info "user: #{config.db_user} auth: #{config.db_auth}"
157
158
 
158
- ODBA.storage.dbi = ODBA::ConnectionPool.new(config.db_driver_url,
159
- config.db_user, config.db_auth, :client_encoding => 'LATIN1')
159
+ ODBA.storage.dbi = ODBA::ConnectionPool.new(config.db_driver_url, config.db_user, config.db_auth, :client_encoding => 'LATIN1')
160
160
  ODBA.cache.setup
161
161
 
162
162
  DRb.install_id_conv ODBA::DRbIdConv.new
163
163
 
164
- if false
165
- server = YDIM::Server.new(config, logger)
166
- server.extend(DRbUndumped)
167
-
168
- puts config.inspect
169
- if(config.detach)
170
- pidfile = '/var/run/ydimd.pid'
171
- File.open(pidfile, 'w') { |fh| fh.puts $$ }
172
- at_exit { File.unlink(pidfile) }
173
- Process.fork and exit!(0)
174
- end
175
-
176
- begin
177
- url = config.server_url
178
- url.untaint
179
- DRb.start_service(url, server)
180
- $SAFE = 1
181
- logger.info('start') {
182
- sprintf("starting ydim-server on %s", config.server_url) }
183
- DRb.thread.join
184
- rescue Exception => error
185
- logger.error('fatal') { error }
186
- raise
187
- end
188
- end
189
-
190
164
  @server = YDIM::Server.new(config, @logger)
191
165
  @server.extend(DRbUndumped)
192
166
  session = YDIM::RootSession.new(YDIM::RootUser.new(1))
@@ -195,7 +169,7 @@ session.serv = @server
195
169
  :invoices => session.invoices,
196
170
  :debitors => session.debitors,
197
171
  }.each do |name, to_migrate|
198
- puts "#{Time.now}: Start migrating #{name}"
172
+ puts "#{Time.now}: Start migrating #{to_migrate.size} #{name}"
199
173
  @server._migrate_to_utf8(to_migrate, {})
200
174
  end
201
- puts "#{Time.now}: Finished migrate_to_utf8"
175
+ @logger.info "#{Time.now}: Finished #{File.basename(__FILE__)}"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ydim
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaomi Hatakeyama, Zeno R.R. Davatz, Niklaus Giger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-10 00:00:00.000000000 Z
11
+ date: 2017-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: odba
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rmail
70
+ name: mail
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -265,7 +265,6 @@ dependencies:
265
265
  description: ywesee distributed invoice manager. A Ruby gem
266
266
  email: mhatakeyama@ywesee.com, zdavatz@ywesee.com, ngiger@ywesee.com
267
267
  executables:
268
- - migrate_to_utf_8
269
268
  - ydim-edit
270
269
  - ydim-inject
271
270
  - ydimd
@@ -280,10 +279,10 @@ files:
280
279
  - LICENSE.txt
281
280
  - Manifest.txt
282
281
  - Rakefile
283
- - bin/migrate_to_utf_8
284
282
  - bin/ydim-edit
285
283
  - bin/ydim-inject
286
284
  - bin/ydimd
285
+ - get_db_ydim
287
286
  - install.rb
288
287
  - lib/pdfinvoice/config.rb
289
288
  - lib/pdfinvoice/invoice.rb
@@ -301,7 +300,6 @@ files:
301
300
  - lib/ydim/root_session.rb
302
301
  - lib/ydim/root_user.rb
303
302
  - lib/ydim/server.rb
304
- - lib/ydim/smtp_tls.rb
305
303
  - lib/ydim/util.rb
306
304
  - lib/ydim/version.rb
307
305
  - lib/ydim/ydim-edit
@@ -326,6 +324,7 @@ files:
326
324
  - test/test_root_user.rb
327
325
  - test/test_server.rb
328
326
  - ydim.gemspec
327
+ - ydim_migrate_to_utf_8
329
328
  homepage: https://github.com/zdavatz/ydim
330
329
  licenses:
331
330
  - GPL-v2
@@ -346,7 +345,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
346
345
  version: '0'
347
346
  requirements: []
348
347
  rubyforge_project:
349
- rubygems_version: 2.4.5
348
+ rubygems_version: 2.6.8
350
349
  signing_key:
351
350
  specification_version: 4
352
351
  summary: ywesee distributed invoice manager
@@ -367,4 +366,3 @@ test_files:
367
366
  - test/test_root_session.rb
368
367
  - test/test_root_user.rb
369
368
  - test/test_server.rb
370
- has_rdoc:
@@ -1,58 +0,0 @@
1
- require "openssl"
2
- require "net/smtp"
3
-
4
- Net::SMTP.class_eval do
5
- private
6
- def do_start(helodomain, user, secret, authtype)
7
- raise IOError, 'SMTP session already started' if @started
8
- check_auth_args user, secret, authtype if user or secret
9
-
10
- sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
11
- @socket = Net::InternetMessageIO.new(sock)
12
- @socket.read_timeout = 60 #@read_timeout
13
- @socket.debug_output = STDERR #@debug_output
14
-
15
- check_response(critical { recv_response() })
16
- do_helo(helodomain)
17
-
18
- raise 'openssl library not installed' unless defined?(OpenSSL)
19
- starttls
20
- ssl = OpenSSL::SSL::SSLSocket.new(sock)
21
- ssl.sync_close = true
22
- ssl.connect
23
- @socket = Net::InternetMessageIO.new(ssl)
24
- @socket.read_timeout = 60 #@read_timeout
25
- @socket.debug_output = STDERR #@debug_output
26
- do_helo(helodomain)
27
-
28
- authenticate user, secret, authtype if user
29
- @started = true
30
- ensure
31
- unless @started
32
- # authentication failed, cancel connection.
33
- @socket.close if not @started and @socket and not @socket.closed?
34
- @socket = nil
35
- end
36
- end
37
-
38
- def do_helo(helodomain)
39
- begin
40
- if @esmtp
41
- ehlo helodomain
42
- else
43
- helo helodomain
44
- end
45
- rescue Net::ProtocolError
46
- if @esmtp
47
- @esmtp = false
48
- @error_occured = false
49
- retry
50
- end
51
- raise
52
- end
53
- end
54
-
55
- def starttls
56
- getok('STARTTLS')
57
- end
58
- end