lucadeal 0.5.0 → 0.5.2

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
  SHA256:
3
- metadata.gz: fa7bf6bd03335ca54d5bf0a1bf2b3e525677ef21e0ea20b009530ba73b310fc9
4
- data.tar.gz: 7791dbb5b32566b52ae2bc4209382ca59f1eb95b3f284990f16bd0427f7302ae
3
+ metadata.gz: 010b355d37f7fdd2fa49fa9000923fbaac7791bbda971760b8c862daa4ab2664
4
+ data.tar.gz: e6a2cc3bbef17ee547ba669b22f1390782e6567b753da98288a760106fb31215
5
5
  SHA512:
6
- metadata.gz: a1b16a74bfdb56bdbda22f1f5003e24f9f5361d361b38c0875a6d8289607328f670a0f10756dc41af7df92b12c1d3b162f15bf9fa68069d175815e13af70bd74
7
- data.tar.gz: fce3bf80a9cf60ac5b904e7c51bd7fa83911cd1b5d59377cfb5cdfcaa49adc63fef2d6fdc2fbb8c8d6f0443cd9434ce0dd9eddd8012694439bc0554c818771f2
6
+ metadata.gz: beb6f9aa0a2c02f4726faab2b7aa9d398c1256dd106a5c5595ce1f48da757c9699577661be6fb2de5bab8b19da9a147716000cae4400c0f004e90375bf371801
7
+ data.tar.gz: ad20fd6cdc1c2f056206398a4266a89b7523be8aabed79c2a80d53f001205d23e3830c55b4baf8e5db186cf86dce04236aea296fd07c511658af90e3ec06ff26
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## LucaDeal 0.5.2
2
+
3
+ * Fix: Setup project dir for `luca-deal invoice mail`
4
+
5
+ ## LucaDeal 0.5.1
6
+
7
+ * Refine `luca-deal customer list` output: Limit columns to name, address and id.
8
+ * Reworked global constants w/LucaRecord v0.7
9
+ * Removed bundler from test suite avoiding casual native build
10
+ * add `luca-deal version` subcommand
11
+
1
12
  ## LucaDeal 0.5.0
2
13
 
3
14
  * `luca-deal` command now searches valid sub directory.
data/exe/luca-deal CHANGED
@@ -1,19 +1,12 @@
1
1
  #!/usr/bin/ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- unless Dir.exist?('data') || ARGV[0] == 'new'
5
- target = 'customers'
6
- Dir.glob('*').reject { |f| File.symlink?(f) }
7
- .find { |f| File.directory?("#{f}/data/#{target}") }.tap do |d|
8
- abort "No valid data directory, exit..." if d.nil?
9
-
10
- Dir.chdir(d)
11
- end
12
- end
4
+ REQUIRED_DIR='customers'
13
5
 
14
6
  require 'date'
15
7
  require 'optparse'
16
8
  require 'luca_deal'
9
+ require 'luca_cmd'
17
10
 
18
11
  class LucaCmd
19
12
  class Customer < LucaCmd
@@ -67,6 +60,7 @@ class LucaCmd
67
60
  end
68
61
 
69
62
  def self.list(args = nil, params = {})
63
+ params[:col_order] = %w(name address id)
70
64
  render(LucaDeal::Customer.new.list_name, params)
71
65
  end
72
66
  end
@@ -284,7 +278,7 @@ class LucaCmd
284
278
  when 'json'
285
279
  puts JSON.dump(dat)
286
280
  when 'nu'
287
- LucaSupport::View.nushell(dat, :expand)
281
+ LucaSupport::View.nushell(dat, :expand, params[:col_order] || [])
288
282
  when 'explore'
289
283
  LucaSupport::View.nushell(dat, :explore)
290
284
  when 'csv'
@@ -303,7 +297,6 @@ def new_pj(args = nil, params = {})
303
297
  LucaDeal::Setup.create_project args[0]
304
298
  end
305
299
 
306
- LucaRecord::Base.valid_project?
307
300
  cmd = ARGV.shift
308
301
  params = {}
309
302
 
@@ -315,7 +308,9 @@ when /customers?/
315
308
  OptionParser.new do |opt|
316
309
  opt.banner = 'Usage: luca-deal customers create CustomerName'
317
310
  args = opt.parse(ARGV)
318
- LucaCmd::Customer.create(args, params)
311
+ LucaCmd.check_dir(REQUIRED_DIR) do
312
+ LucaCmd::Customer.create(args, params)
313
+ end
319
314
  end
320
315
  when 'list'
321
316
  OptionParser.new do |opt|
@@ -324,7 +319,9 @@ when /customers?/
324
319
  opt.on('--explore', 'explore table in nushell') { |_v| params[:output] = 'explore' }
325
320
  opt.on('-o', '--output VAL', 'output serialized data') { |v| params[:output] = v }
326
321
  args = opt.parse(ARGV)
327
- LucaCmd::Customer.list(args, params)
322
+ LucaCmd.check_dir(REQUIRED_DIR) do
323
+ LucaCmd::Customer.list(args, params)
324
+ end
328
325
  end
329
326
  when 'describe'
330
327
  OptionParser.new do |opt|
@@ -332,10 +329,14 @@ when /customers?/
332
329
  opt.on('--nu', 'show table in nushell') { |_v| params[:output] = 'nu' }
333
330
  opt.on('-o', '--output VAL', 'output serialized data') { |v| params[:output] = v }
334
331
  args = opt.parse(ARGV)
335
- LucaCmd::Customer.describe(args, params)
332
+ LucaCmd.check_dir(REQUIRED_DIR) do
333
+ LucaCmd::Customer.describe(args, params)
334
+ end
336
335
  end
337
336
  when 'delete'
338
- LucaCmd::Customer.delete(ARGV)
337
+ LucaCmd.check_dir(REQUIRED_DIR) do
338
+ LucaCmd::Customer.delete(ARGV)
339
+ end
339
340
  else
340
341
  puts 'Proper subcommand needed.'
341
342
  puts
@@ -356,7 +357,9 @@ when /contracts?/
356
357
  params['category'] = 'sales_fee'
357
358
  end
358
359
  args = opt.parse(ARGV)
359
- LucaCmd::Contract.create(args, params)
360
+ LucaCmd.check_dir(REQUIRED_DIR) do
361
+ LucaCmd::Contract.create(args, params)
362
+ end
360
363
  end
361
364
  when 'describe'
362
365
  OptionParser.new do |opt|
@@ -364,10 +367,14 @@ when /contracts?/
364
367
  opt.on('--nu', 'show table in nushell') { |_v| params[:output] = 'nu' }
365
368
  opt.on('-o', '--output VAL', 'output serialized data') { |v| params[:output] = v }
366
369
  args = opt.parse(ARGV)
367
- LucaCmd::Contract.describe(args, params)
370
+ LucaCmd.check_dir(REQUIRED_DIR) do
371
+ LucaCmd::Contract.describe(args, params)
372
+ end
368
373
  end
369
374
  when 'delete'
370
- LucaCmd::Contract.delete(ARGV)
375
+ LucaCmd.check_dir(REQUIRED_DIR) do
376
+ LucaCmd::Contract.delete(ARGV)
377
+ end
371
378
  else
372
379
  puts 'Proper subcommand needed.'
373
380
  puts
@@ -378,7 +385,9 @@ when /contracts?/
378
385
  exit 1
379
386
  end
380
387
  when 'export'
381
- LucaCmd::Invoice.export(ARGV)
388
+ LucaCmd.check_dir(REQUIRED_DIR) do
389
+ LucaCmd::Invoice.export(ARGV)
390
+ end
382
391
  when /invoices?/, 'i'
383
392
  subcmd = ARGV.shift
384
393
  case subcmd
@@ -389,10 +398,14 @@ when /invoices?/, 'i'
389
398
  opt.on('--monthly', 'generate monthly data') { |_v| params[:mode] = 'monthly' }
390
399
  opt.on('--with-fee', 'generate sales fee data after monthly invoice creation') { |_v| params[:fee] = true }
391
400
  args = opt.parse(ARGV)
392
- LucaCmd::Invoice.create(args, params)
401
+ LucaCmd.check_dir(REQUIRED_DIR) do
402
+ LucaCmd::Invoice.create(args, params)
403
+ end
393
404
  end
394
405
  when 'delete'
395
- LucaCmd::Invoice.delete(ARGV)
406
+ LucaCmd.check_dir(REQUIRED_DIR) do
407
+ LucaCmd::Invoice.delete(ARGV)
408
+ end
396
409
  when 'list'
397
410
  OptionParser.new do |opt|
398
411
  opt.banner = 'Usage: luca-deal invoices list [options] year month [date]'
@@ -402,21 +415,27 @@ when /invoices?/, 'i'
402
415
  opt.on('--mail', 'send payment list by email') { |_v| params[:mail] = true }
403
416
  opt.on('--full', 'add settlement info') { |_v| params[:mode] = 'full' }
404
417
  args = opt.parse(ARGV)
405
- LucaCmd::Invoice.list(args, params)
418
+ LucaCmd.check_dir(REQUIRED_DIR) do
419
+ LucaCmd::Invoice.list(args, params)
420
+ end
406
421
  end
407
422
  when 'mail'
408
423
  OptionParser.new do |opt|
409
424
  opt.banner = 'Usage: luca-deal invoices mail [options] year month [date]'
410
425
  opt.on('--preview', 'send to preview user') { |_v| params['mode'] = 'preview' }
411
426
  args = opt.parse(ARGV)
412
- LucaCmd::Invoice.mail(args, params)
427
+ LucaCmd.check_dir(REQUIRED_DIR) do
428
+ LucaCmd::Invoice.mail(args, params)
429
+ end
413
430
  end
414
431
  when 'print'
415
432
  OptionParser.new do |opt|
416
433
  opt.banner = 'Usage: luca-deal invoices print [options] <invoice_id | year month>'
417
434
  opt.on('--pdf', 'output PDF invoices. wkhtmlpdf is required') { |_v| params[:output] = :pdf }
418
435
  args = opt.parse(ARGV)
419
- LucaCmd::Invoice.print(args, params)
436
+ LucaCmd.check_dir(REQUIRED_DIR) do
437
+ LucaCmd::Invoice.print(args, params)
438
+ end
420
439
  end
421
440
  when 'settle'
422
441
  params[:term] = 1
@@ -424,7 +443,9 @@ when /invoices?/, 'i'
424
443
  opt.banner = 'Usage: luca-deal invoices settle [filepath]'
425
444
  opt.on('--search-term VAL', 'search invoice N months before payment date. default: 1') { |v| params[:term] = v.to_i }
426
445
  args = opt.parse(ARGV)
427
- LucaCmd::Invoice.settle(args, params)
446
+ LucaCmd.check_dir(REQUIRED_DIR) do
447
+ LucaCmd::Invoice.settle(args, params)
448
+ end
428
449
  end
429
450
  else
430
451
  puts 'Proper subcommand needed.'
@@ -452,7 +473,9 @@ when /reports?/, 'r'
452
473
  opt.on('--detail', 'show detail info') { |_v| params[:detail] = true }
453
474
  opt.on('--force-due', 'respect due date over actual payment') { |_v| params[:due] = true }
454
475
  args = opt.parse(ARGV)
455
- LucaCmd::Invoice.report(args, params)
476
+ LucaCmd.check_dir(REQUIRED_DIR) do
477
+ LucaCmd::Invoice.report(args, params)
478
+ end
456
479
  end
457
480
  else
458
481
  puts 'Proper subcommand needed.'
@@ -476,12 +499,18 @@ when /fee/
476
499
  opt.banner = 'Usage: luca-deal fee create [options] year month [date]'
477
500
  opt.on('--monthly', 'generate monthly data') { |_v| params[:mode] = 'monthly' }
478
501
  args = opt.parse(ARGV)
479
- LucaCmd::Fee.create(args, params)
502
+ LucaCmd.check_dir(REQUIRED_DIR) do
503
+ LucaCmd::Fee.create(args, params)
504
+ end
480
505
  end
481
506
  when 'delete'
482
- LucaCmd::Fee.delete(ARGV)
507
+ LucaCmd.check_dir(REQUIRED_DIR) do
508
+ LucaCmd::Fee.delete(ARGV)
509
+ end
483
510
  when 'export'
484
- LucaCmd::Fee.export(ARGV)
511
+ LucaCmd.check_dir(REQUIRED_DIR) do
512
+ LucaCmd::Fee.export(ARGV)
513
+ end
485
514
  when 'list'
486
515
  OptionParser.new do |opt|
487
516
  opt.banner = 'Usage: luca-deal fee list [options] year month [date]'
@@ -490,14 +519,18 @@ when /fee/
490
519
  opt.on('-o', '--output VAL', 'output serialized data') { |v| params[:output] = v }
491
520
  opt.on('--html', 'output html invoices') { |_v| params[:html] = 'monthly' }
492
521
  args = opt.parse(ARGV)
493
- LucaCmd::Fee.list(args, params)
522
+ LucaCmd.check_dir(REQUIRED_DIR) do
523
+ LucaCmd::Fee.list(args, params)
524
+ end
494
525
  end
495
526
  when 'mail'
496
527
  OptionParser.new do |opt|
497
528
  opt.banner = 'Usage: luca-deal fee mail [options] year month [date]'
498
529
  opt.on('--preview', 'send to preview user') { |_v| params['mode'] = 'preview' }
499
530
  args = opt.parse(ARGV)
500
- LucaCmd::Fee.mail(args, params)
531
+ LucaCmd.check_dir(REQUIRED_DIR) do
532
+ LucaCmd::Fee.mail(args, params)
533
+ end
501
534
  end
502
535
  else
503
536
  puts 'Proper subcommand needed.'
@@ -509,6 +542,9 @@ when /fee/
509
542
  puts ' mail: send mail with report'
510
543
  exit 1
511
544
  end
545
+ when 'version'
546
+ puts "luca-deal: version #{LucaDeal::VERSION}"
547
+ exit 0
512
548
  else
513
549
  puts 'Proper subcommand needed.'
514
550
  puts
data/lib/luca_deal/fee.rb CHANGED
@@ -5,7 +5,6 @@ require 'json'
5
5
  require 'yaml'
6
6
  require 'pathname'
7
7
  require 'bigdecimal'
8
- require 'luca_support/config'
9
8
  require 'luca_support/mail'
10
9
  require 'luca_deal'
11
10
 
@@ -67,7 +66,7 @@ module LucaDeal
67
66
  end
68
67
 
69
68
  def deliver_mail(attachment_type = nil, mode: nil, skip_no_item: true)
70
- attachment_type = CONFIG.dig('fee', 'attachment') || :html
69
+ attachment_type = CONST.config.dig('fee', 'attachment') || :html
71
70
  fees = self.class.asof(@date.year, @date.month)
72
71
  raise "No report for #{@date.year}/#{@date.month}" if fees.count.zero?
73
72
 
@@ -76,7 +75,7 @@ module LucaDeal
76
75
  next if skip_no_item && dat['items'].empty?
77
76
 
78
77
  mail = compose_mail(dat, mode: mode, attachment: attachment_type.to_sym)
79
- LucaSupport::Mail.new(mail, PJDIR).deliver
78
+ LucaSupport::Mail.new(mail, CONST.pjdir).deliver
80
79
  self.class.add_status!(path, 'mail_delivered') if mode.nil?
81
80
  end
82
81
  end
@@ -101,9 +100,9 @@ module LucaDeal
101
100
 
102
101
  mail = Mail.new
103
102
  mail.to = dat.dig('customer', 'to') if mode.nil?
104
- mail.subject = CONFIG.dig('fee', 'mail_subject') || 'Your Report is available'
103
+ mail.subject = CONST.config.dig('fee', 'mail_subject') || 'Your Report is available'
105
104
  if mode == :preview
106
- mail.cc = CONFIG.dig('mail', 'preview') || CONFIG.dig('mail', 'from')
105
+ mail.cc = CONST.config.dig('mail', 'preview') || CONST.config.dig('mail', 'from')
107
106
  mail.subject = '[preview] ' + mail.subject
108
107
  end
109
108
  mail.text_part = Mail::Part.new(body: render_erb(search_template('fee-report-mail.txt.erb')), charset: 'UTF-8')
@@ -224,10 +223,10 @@ module LucaDeal
224
223
  __dir__
225
224
  end
226
225
 
227
- # TODO: load labels from CONFIG before country defaults
226
+ # TODO: load labels from CONST.config before country defaults
228
227
  #
229
228
  def export_labels
230
- case CONFIG['country']
229
+ case CONST.confg['country']
231
230
  when 'jp'
232
231
  {
233
232
  debit: { fee: '支払手数料', tax: '支払手数料', deduction: '未払費用' },
@@ -245,9 +244,9 @@ module LucaDeal
245
244
  #
246
245
  def set_company
247
246
  {}.tap do |h|
248
- h['name'] = CONFIG.dig('company', 'name')
249
- h['address'] = CONFIG.dig('company', 'address')
250
- h['address2'] = CONFIG.dig('company', 'address2')
247
+ h['name'] = CONST.config.dig('company', 'name')
248
+ h['address'] = CONST.config.dig('company', 'address')
249
+ h['address2'] = CONST.config.dig('company', 'address2')
251
250
  end
252
251
  end
253
252
 
@@ -281,9 +280,9 @@ module LucaDeal
281
280
  # load Tax Rate from config.
282
281
  #
283
282
  def load_tax_rate(name)
284
- return 0 if CONFIG.dig('tax_rate', name).nil?
283
+ return 0 if CONST.config.dig('tax_rate', name).nil?
285
284
 
286
- BigDecimal(take_current(CONFIG['tax_rate'], name).to_s)
285
+ BigDecimal(take_current(CONST.config['tax_rate'], name).to_s)
287
286
  end
288
287
 
289
288
  # Fees are unique contract_id in each month
@@ -6,7 +6,6 @@ require 'yaml'
6
6
  require 'pathname'
7
7
  require 'bigdecimal'
8
8
  require 'luca_support/code'
9
- require 'luca_support/config'
10
9
  require 'luca_support/mail'
11
10
  require 'luca_deal/contract'
12
11
  require 'luca_record'
@@ -69,9 +68,9 @@ module LucaDeal
69
68
 
70
69
  mail = Mail.new
71
70
  mail.to = dat.dig('customer', 'to') if mode.nil?
72
- mail.subject = CONFIG.dig('invoice', 'mail_subject') || 'Your Invoice is available'
71
+ mail.subject = LucaRecord::CONST.config.dig('invoice', 'mail_subject') || 'Your Invoice is available'
73
72
  if mode == :preview
74
- mail.cc = CONFIG.dig('mail', 'preview') || CONFIG.dig('mail', 'from')
73
+ mail.cc = LucaRecord::CONST.config.dig('mail', 'preview') || LucaRecord::CONST.config.dig('mail', 'from')
75
74
  mail.subject = '[preview] ' + mail.subject
76
75
  end
77
76
  mail.text_part = Mail::Part.new(body: render_erb(search_template('invoice-mail.txt.erb')), charset: 'UTF-8')
@@ -284,7 +283,7 @@ module LucaDeal
284
283
  end
285
284
  @invoices = res.values
286
285
  end
287
- @company = CONFIG.dig('company', 'name')
286
+ @company = LucaRecord::CONST.config.dig('company', 'name')
288
287
  @legend = if mode == 'full'
289
288
  '[S] Settled, [P] Partially settled, [O] Overpaid'
290
289
  else
@@ -297,10 +296,10 @@ module LucaDeal
297
296
  end
298
297
 
299
298
  mail = Mail.new
300
- mail.to = CONFIG.dig('mail', 'preview') || CONFIG.dig('mail', 'from')
299
+ mail.to = LucaRecord::CONST.config.dig('mail', 'preview') || LucaRecord::CONST.config.dig('mail', 'from')
301
300
  mail.subject = 'Check monthly payment list'
302
301
  mail.html_part = Mail::Part.new(body: render_erb(search_template('monthly-payment-list.html.erb')), content_type: 'text/html; charset=UTF-8')
303
- LucaSupport::Mail.new(mail, PJDIR).deliver
302
+ LucaSupport::Mail.new(mail, LucaRecord::CONST.pjdir).deliver
304
303
  end
305
304
 
306
305
  def export_json
@@ -421,9 +420,9 @@ module LucaDeal
421
420
  end
422
421
 
423
422
  def deliver_one(invoice, path, mode: nil, attachment_type: nil)
424
- attachment_type ||= CONFIG.dig('invoice', 'attachment') || :html
423
+ attachment_type ||= LucaRecord::CONST.config.dig('invoice', 'attachment') || :html
425
424
  mail = compose_mail(invoice, mode: mode, attachment: attachment_type.to_sym)
426
- LucaSupport::Mail.new(mail, PJDIR).deliver
425
+ LucaSupport::Mail.new(mail, LucaRecord::CONST.pjdir).deliver
427
426
  self.class.add_status!(path, 'mail_delivered') if mode.nil?
428
427
  end
429
428
 
@@ -431,10 +430,10 @@ module LucaDeal
431
430
  __dir__
432
431
  end
433
432
 
434
- # TODO: load labels from CONFIG before country defaults
433
+ # TODO: load labels from LucaRecord::CONST.config before country defaults
435
434
  #
436
435
  def export_labels
437
- case CONFIG['country']
436
+ case LucaRecord::CONST.config['country']
438
437
  when 'jp'
439
438
  {
440
439
  debit: { items: '売掛金', tax: '売掛金' },
@@ -452,9 +451,9 @@ module LucaDeal
452
451
  #
453
452
  def set_company
454
453
  {}.tap do |h|
455
- h['name'] = CONFIG.dig('company', 'name')
456
- h['address'] = CONFIG.dig('company', 'address')
457
- h['address2'] = CONFIG.dig('company', 'address2')
454
+ h['name'] = LucaRecord::CONST.config.dig('company', 'name')
455
+ h['address'] = LucaRecord::CONST.config.dig('company', 'address')
456
+ h['address2'] = LucaRecord::CONST.config.dig('company', 'address2')
458
457
  end
459
458
  end
460
459
 
@@ -477,9 +476,9 @@ module LucaDeal
477
476
  # load Tax Rate from config.
478
477
  #
479
478
  def load_tax_rate(name)
480
- return 0 if CONFIG.dig('tax_rate', name).nil?
479
+ return 0 if LucaRecord::CONST.config.dig('tax_rate', name).nil?
481
480
 
482
- BigDecimal(take_current(CONFIG['tax_rate'], name).to_s)
481
+ BigDecimal(take_current(LucaRecord::CONST.config['tax_rate'], name).to_s)
483
482
  end
484
483
 
485
484
  def attachment_name(dat, type)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module LucaDeal
4
- VERSION = '0.5.0'
4
+ VERSION = '0.5.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lucadeal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuma Takahiro
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-20 00:00:00.000000000 Z
11
+ date: 2024-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucarecord
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.0
19
+ version: 0.7.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.6.0
26
+ version: 0.7.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -103,7 +103,7 @@ metadata:
103
103
  homepage_uri: https://github.com/chumaltd/luca/tree/master/lucadeal
104
104
  source_code_uri: https://github.com/chumaltd/luca/tree/master/lucadeal
105
105
  changelog_uri: https://github.com/chumaltd/luca/tree/master/lucadeal/CHANGELOG.md
106
- post_install_message:
106
+ post_install_message:
107
107
  rdoc_options: []
108
108
  require_paths:
109
109
  - lib
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  version: '0'
120
120
  requirements: []
121
121
  rubygems_version: 3.4.10
122
- signing_key:
122
+ signing_key:
123
123
  specification_version: 4
124
124
  summary: Deal with contracts
125
125
  test_files: []