marty 1.0.35 → 1.0.36

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: 3adb3fc7a00a1b5f8821771a2105ae9e2788d2af
4
- data.tar.gz: 7e9faa47b3d14a1df9dab85c206031ec4dd0452f
3
+ metadata.gz: 3ee1b4758299664b9d0140ae70dcd1b2c0dddc5e
4
+ data.tar.gz: 865b7a125ce0321f3ca674936ab74023daa6c6a9
5
5
  SHA512:
6
- metadata.gz: 7ac9b7eb9d94c4fd78ab1869b6ebf8bde560a4d66f59a91e0c98c53a901b45ff3f745515a0e71dc7dc5839eb483b177e84fd82536b1b2d78b3dde3bb794c3f4f
7
- data.tar.gz: 1f82684f46cea8a2ffc0a91dfe503c1d255c3c61c0cd44c6fa4d03c025c5373308cfd93bee258163630d6e77a0b1a7fde9be72a4c6e956b29037796d499dac7a
6
+ metadata.gz: 1a3bce72d9bd0f1b5f9aa1f92bfca51385163be1b669fee56ef7faf71e0ea45919b3573f056bfb81ff07d8176e095f1c61c8dd0e067186573004686ad6fb05e1
7
+ data.tar.gz: 3ebfdc6cd512712555ad8f329cf2d8d5f3a1655618cc95b5db5f2b75fdec1f8cb2d0e547252410eb7217a0b5eff6b08f81469983094dcd1fee9a8aa0f95f2c4c
@@ -13,7 +13,9 @@ class Marty::ApiConfigView < Marty::Grid
13
13
  :node,
14
14
  :attr,
15
15
  :logged,
16
- :validated,
16
+ :input_validated,
17
+ :output_validated,
18
+ :strict_validate,
17
19
  :created_at,
18
20
  :updated_at,
19
21
  ]
@@ -47,11 +49,11 @@ class Marty::ApiConfigView < Marty::Grid
47
49
  c.setter = lambda { |r, v| r.send("#{a}=", v.blank? ? nil : v) }
48
50
  end
49
51
  end
50
- attribute :logged do |c|
51
- c.width = 100
52
- end
53
- attribute :validated do |c|
54
- c.width = 110
52
+ [:logged, :input_validated, :output_validated, :strict_validate].each do
53
+ |a|
54
+ attribute a do |c|
55
+ c.width = 110
56
+ end
55
57
  end
56
58
  [:created_at, :updated_at].each do |a|
57
59
  attribute a do |c|
@@ -64,7 +66,9 @@ class Marty::ApiConfigView < Marty::Grid
64
66
  :node,
65
67
  :attr,
66
68
  :logged,
67
- :validated,
69
+ :input_validated,
70
+ :output_validated,
71
+ :strict_validate,
68
72
  ]
69
73
  end
70
74
 
@@ -28,7 +28,7 @@ class Marty::RpcController < ActionController::Base
28
28
  attrs.zip(result)
29
29
  rescue => e
30
30
  use_message = e.message == 'No such script' ?
31
- 'Schema not defined' : 'Problem with schema'
31
+ 'Schema not defined' : 'Problem with schema: ' + e.message
32
32
  raise "Schema error for #{sname}/#{node} "\
33
33
  "attrs=#{attrs.join(',')}: #{use_message}"
34
34
  end
@@ -64,32 +64,36 @@ class Marty::RpcController < ActionController::Base
64
64
 
65
65
  return {error: "Malformed params"} unless params.is_a?(Hash)
66
66
 
67
- need_validate, need_log = [], []
67
+ need_input_validate, need_output_validate, strict_validate, need_log =
68
+ [], [], [], []
68
69
  Marty::ApiConfig.multi_lookup(sname, node, attrs).each do
69
- |attr, log, validate, id|
70
- need_validate << attr if validate
70
+ |attr, log, input_validate, output_validate, strict, id|
71
+ need_input_validate << attr if input_validate
72
+ need_output_validate << attr + "_" if output_validate
73
+ strict_validate << attr if strict
71
74
  need_log << id if log
72
75
  end
73
76
 
77
+ opt = { :validate_schema => true,
78
+ :errors_as_objects => true,
79
+ :version => Marty::JsonSchema::RAW_URI }
80
+ to_append = {"\$schema" => Marty::JsonSchema::RAW_URI}
81
+
74
82
  validation_error = {}
75
83
  err_count = 0
76
- if need_validate.present?
84
+ if need_input_validate.present?
77
85
  begin
78
- schemas = get_schemas(tag, sname, node, need_validate)
86
+ schemas = get_schemas(tag, sname, node, need_input_validate)
79
87
  rescue => e
80
88
  return {error: e.message}
81
89
  end
82
- opt = { :validate_schema => true,
83
- :errors_as_objects => true,
84
- :version => Marty::JsonSchema::RAW_URI }
85
- to_append = {"\$schema" => Marty::JsonSchema::RAW_URI}
86
90
  schemas.each do |attr, sch|
87
91
  begin
88
92
  er = JSON::Validator.fully_validate(sch.merge(to_append), params, opt)
89
93
  rescue NameError
90
94
  return {error: "Unrecognized PgEnum for attribute #{attr}"}
91
95
  rescue => ex
92
- return {error: ex.message}
96
+ return {error: "#{attr}: #{ex.message}"}
93
97
  end
94
98
  validation_error[attr] = er.map{ |e| e[:message] } if er.size > 0
95
99
  err_count += er.size
@@ -116,8 +120,42 @@ class Marty::RpcController < ActionController::Base
116
120
  result = engine.background_eval(node, params, attrs)
117
121
  return retval = {"job_id" => result.__promise__.id}
118
122
  end
119
-
120
123
  res = engine.evaluate_attrs(node, attrs, params)
124
+
125
+ validation_error = {}
126
+ err_count = 0
127
+ if need_output_validate.present?
128
+ begin
129
+ schemas = get_schemas(tag, sname, node, need_output_validate)
130
+ rescue => e
131
+ return {error: e.message}
132
+ end
133
+ pairs = attrs.zip(res)
134
+ pairs.zip(schemas).each do |(attr, res), (_, sch)|
135
+ begin
136
+ er = JSON::Validator.fully_validate(sch.merge(to_append), res, opt)
137
+ rescue NameError
138
+ return {error: "Unrecognized PgEnum for attribute #{attr}"}
139
+ rescue => ex
140
+ return {error: "#{attr}: #{ex.message}"}
141
+ end
142
+ validation_error[attr] = er.map{ |e| e[:message] } if er.size > 0
143
+ err_count += er.size
144
+ end
145
+ if err_count > 0
146
+ res = pairs.map do |attr, res|
147
+ is_strict = strict_validate.include?(attr)
148
+ the_error = validation_error[attr]
149
+
150
+ Marty::Logger.error("API #{sname}:#{node}.#{attr}",
151
+ {error: the_error,
152
+ data: res}) if the_error
153
+ is_strict && the_error ?
154
+ {error: "Error(s) validating: #{the_error}"} : res
155
+ end
156
+ end
157
+ end
158
+
121
159
  return retval = (attrs_atom ? res.first : res)
122
160
  rescue => exc
123
161
  err_msg = Delorean::Engine.grok_runtime_exception(exc).symbolize_keys
@@ -6,7 +6,8 @@ class Marty::ApiConfig < Marty::Base
6
6
  "AND (attr IS NULL OR attr = ?)",
7
7
  script, node, attr]).
8
8
  order('node nulls last, attr nulls last').
9
- pluck(:logged, :validated, :id)
9
+ pluck(:logged, :input_validated, :output_validated, :strict_validate,
10
+ :id)
10
11
  res.first
11
12
  end
12
13
  def self.multi_lookup(script, node, attrs)
@@ -0,0 +1,9 @@
1
+ class AddApiConfigsValidateResult < ActiveRecord::Migration
2
+ def change
3
+ rename_column :marty_api_configs, :validated, :input_validated
4
+ add_column :marty_api_configs, :output_validated, :boolean, null: false,
5
+ default: false
6
+ add_column :marty_api_configs, :strict_validate, :boolean, null: false,
7
+ default: false
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "1.0.35"
2
+ VERSION = "1.0.36"
3
3
  end
@@ -47,7 +47,7 @@ A: M3::A
47
47
  g = e * 5 + f
48
48
  h = f + 1
49
49
  ptest = p * 10
50
- result = [{"a": 123, "b": 456}, {"a": 789, "b": 101112}]
50
+ result = [{"a": p, "b": 456}, {"a": 789, "b": p}]
51
51
  eof
52
52
 
53
53
  sample_script5 = <<eof
@@ -60,6 +60,8 @@ A:
60
60
  else if f == "Orange"
61
61
  then 2
62
62
  else 9
63
+ result = [{"a": "str", "b": 456}, {"a": 789, "b": "str"}]
64
+ result2 = [{"a": "str", "b": 456}, {"a": 789, "b": "str"}]
63
65
  eof
64
66
 
65
67
  sample_script6 = <<eof
@@ -80,6 +82,13 @@ A:
80
82
  res = 123
81
83
  eof
82
84
 
85
+ sample_script9 = <<eof
86
+ A:
87
+ b =?
88
+ res = b + 1
89
+ result = [{"a": 1, "b": res}, {"a": 789, "b": res}]
90
+ eof
91
+
83
92
  script3_schema = <<eof
84
93
  A:
85
94
  pc = { "properties : {
@@ -94,6 +103,7 @@ A:
94
103
  "p" : { "type" : "integer" },
95
104
  }
96
105
  }
106
+ d_ = { "type" : "integer" }
97
107
 
98
108
  g = { "properties" : {
99
109
  "e" : { "type" : "integer" },
@@ -101,10 +111,29 @@ A:
101
111
  }
102
112
  }
103
113
 
114
+ g_ = { "type" : "integer" }
115
+
104
116
  lc = { "properties" : {
105
117
  "p" : { "type" : "integer" },
106
118
  }
107
119
  }
120
+
121
+ result = { "properties" : {
122
+ "p" : { "type" : "integer" },
123
+ }
124
+ }
125
+
126
+ result_ = {
127
+ "type": "array",
128
+ "minItems": 1,
129
+ "items": {
130
+ "type": "object",
131
+ "properties": {
132
+ "a": { "type" : "integer" },
133
+ "b": { "type" : "integer" }
134
+ }
135
+ }
136
+ }
108
137
  eof
109
138
 
110
139
  script5_schema = <<eof
@@ -113,6 +142,39 @@ A:
113
142
  "f" : { "pg_enum" : "FruitsEnum" },
114
143
  }
115
144
  }
145
+
146
+ result = { "properties" : {
147
+ "f" : { "pg_enum" : "FruitsEnum" },
148
+ }
149
+ }
150
+
151
+ result_ = { "type": "array",
152
+ "minItems": 1,
153
+ "items": {
154
+ "type": "object",
155
+ "properties": {
156
+ "a": { "type" : "integer" },
157
+ "b": { "type" : "string" }
158
+ }
159
+ }
160
+ }
161
+
162
+ result2 = { "properties" : {
163
+ "f" : { "pg_enum" : "FruitsEnum" },
164
+ }
165
+ }
166
+
167
+ result2_ = { "type": "array",
168
+ "minItems": 1,
169
+ "items": {
170
+ "type": "object",
171
+ "properties": {
172
+ "a": { "type" : "integer" },
173
+ "b": { "type" : "string" }
174
+ }
175
+ }
176
+ }
177
+
116
178
  eof
117
179
 
118
180
  script6_schema = <<eof
@@ -139,6 +201,31 @@ A:
139
201
  }
140
202
  eof
141
203
 
204
+ script9_schema = <<eof
205
+ A:
206
+ res = { "properties" : {
207
+ "b" : { "type" : "number" },
208
+ }
209
+ }
210
+
211
+ result = { "properties" : {
212
+ "b" : { "type" : "number" },
213
+ }
214
+ }
215
+
216
+ result_ = { "type": "array",
217
+ "minItems": 1,
218
+ "items": {
219
+ "type": "object",
220
+ "properties": {
221
+ "a": { "type" : "integer" },
222
+ "b": { "type" : "integer" },
223
+ "c": { "type" : "string" }
224
+ },
225
+ "required" : ["a", "b", "c"]
226
+ }
227
+ }
228
+ eof
142
229
 
143
230
  describe Marty::RpcController do
144
231
  before(:each) {
@@ -162,12 +249,14 @@ describe Marty::RpcController do
162
249
  "M6" => sample_script6,
163
250
  "M7" => sample_script7,
164
251
  "M8" => sample_script8,
252
+ "M9" => sample_script9,
165
253
  "M3Schemas" => script3_schema,
166
254
  "M4Schemas" => script4_schema,
167
255
  "M5Schemas" => script5_schema,
168
256
  "M6Schemas" => script6_schema,
169
257
  "M7Schemas" => script7_schema,
170
258
  "M8Schemas" => script8_schema,
259
+ "M9Schemas" => script9_schema,
171
260
  }, Date.today + 1.minute)
172
261
 
173
262
  @p1 = Marty::Posting.do_create("BASE", Date.today + 2.minute, 'a comment')
@@ -415,7 +504,7 @@ describe Marty::RpcController do
415
504
  attrs: ["result"].to_json,
416
505
  }
417
506
  # puts 'Z'*40, request.inspect
418
- expect(response.body).to eq("a,b\r\n123,456\r\n789,101112\r\n")
507
+ expect(response.body).to eq("a,b\r\n10,456\r\n789,10\r\n")
419
508
  end
420
509
 
421
510
  it "returns an error message on missing schema script (csv)" do
@@ -423,7 +512,7 @@ describe Marty::RpcController do
423
512
  node: "A",
424
513
  attr: nil,
425
514
  logged: false,
426
- validated: true)
515
+ input_validated: true)
427
516
  attrs = ["b"].to_json
428
517
  params = {"a" => 5}.to_json
429
518
  get 'evaluate', {
@@ -442,7 +531,7 @@ describe Marty::RpcController do
442
531
  node: "A",
443
532
  attr: nil,
444
533
  logged: false,
445
- validated: true)
534
+ input_validated: true)
446
535
  attrs = ["b"].to_json
447
536
  params = {"a" => 5}.to_json
448
537
  get 'evaluate', {
@@ -464,7 +553,7 @@ describe Marty::RpcController do
464
553
  node: "A",
465
554
  attr: nil,
466
555
  logged: false,
467
- validated: true)
556
+ input_validated: true)
468
557
  attrs = ["h"].to_json
469
558
  params = {"f" => 5}.to_json
470
559
  get 'evaluate', {
@@ -474,8 +563,8 @@ describe Marty::RpcController do
474
563
  attrs: attrs,
475
564
  params: params
476
565
  }
477
- expect = "Schema error for M4/A attrs=h: Problem with schema\r\n"
478
- expect(response.body).to eq("error,#{expect}")
566
+ expect = "Schema error for M4/A attrs=h: Problem with schema"
567
+ expect(response.body).to include("error,#{expect}")
479
568
  end
480
569
 
481
570
  it "returns an error message on invalid schema" do
@@ -483,7 +572,7 @@ describe Marty::RpcController do
483
572
  node: "A",
484
573
  attr: nil,
485
574
  logged: false,
486
- validated: true)
575
+ input_validated: true)
487
576
  attrs = ["pc"].to_json
488
577
  params = {"p" => 5}.to_json
489
578
  get 'evaluate', {
@@ -493,7 +582,8 @@ describe Marty::RpcController do
493
582
  attrs: attrs,
494
583
  params: params
495
584
  }
496
- expect = "Schema error for M3/A attrs=pc: Problem with schema\r\n"
585
+ expect = "Schema error for M3/A attrs=pc: Problem with schema: "\
586
+ "syntax error M3Schemas:2\r\n"
497
587
  expect(response.body).to eq("error,#{expect}")
498
588
  end
499
589
 
@@ -502,7 +592,7 @@ describe Marty::RpcController do
502
592
  node: "A",
503
593
  attr: nil,
504
594
  logged: false,
505
- validated: true)
595
+ input_validated: true)
506
596
  attrs = ["d"].to_json
507
597
  params = {"p" => "132"}.to_json
508
598
  get 'evaluate', {
@@ -522,7 +612,8 @@ describe Marty::RpcController do
522
612
  node: "A",
523
613
  attr: nil,
524
614
  logged: false,
525
- validated: true)
615
+ input_validated: true,
616
+ output_validated: true)
526
617
  attrs = ["d", "g"].to_json
527
618
  params = {"p" => "132", "e" => "55", "f"=>"16"}.to_json
528
619
  get 'evaluate', {
@@ -531,7 +622,7 @@ describe Marty::RpcController do
531
622
  node: "A",
532
623
  attrs: attrs,
533
624
  params: params
534
- }
625
+ }
535
626
  expect = '""d""=>[""The property \'#/p\' of type string did not '\
536
627
  'match the following type: integer'
537
628
  expect(response.body).to include(expect)
@@ -543,12 +634,125 @@ describe Marty::RpcController do
543
634
  expect(response.body).to include(expect)
544
635
  end
545
636
 
637
+ context "output_validation" do
638
+ before(:all) do
639
+ @db = SQLite3::Database.new(Marty::Log.logfile)
640
+ end
641
+ before(:each) do
642
+ @logid = @db.execute('select max(id) from log').first.first || 0 rescue 0
643
+ end
644
+ after(:all) do
645
+ @db.close
646
+ end
647
+ it "validates output" do
648
+ Marty::ApiConfig.create!(script: "M4",
649
+ node: "A",
650
+ attr: nil,
651
+ logged: false,
652
+ input_validated: true,
653
+ output_validated: true)
654
+ attrs = ["d", "g", "result"].to_json
655
+ params = {"p" => 132, "e" => 55, "f"=>16}.to_json
656
+ get 'evaluate', {
657
+ format: :json,
658
+ script: "M4",
659
+ node: "A",
660
+ attrs: attrs,
661
+ params: params
662
+ }
663
+ res_hash = JSON.parse(response.body)
664
+ expect(res_hash).to eq([135,291,[{"a"=>132,"b"=>456},
665
+ {"a"=>789,"b"=>132}]])
666
+ logs = Marty::Log.where("id > #{@logid}").to_a
667
+ expect(logs.count).to eq(0)
668
+ end
669
+
670
+ it "validates output (bad type, with strict/non strict errors)" do
671
+ Marty::ApiConfig.create!(script: "M5",
672
+ node: "A",
673
+ attr: nil,
674
+ logged: false,
675
+ input_validated: true,
676
+ output_validated: true,
677
+ strict_validate: true)
678
+ Marty::ApiConfig.create!(script: "M5",
679
+ node: "A",
680
+ attr: "result2",
681
+ logged: false,
682
+ input_validated: true,
683
+ output_validated: true,
684
+ strict_validate: false)
685
+ attrs = ["result", "result2"].to_json
686
+ params = {"f" => "Banana"}.to_json
687
+ get 'evaluate', {
688
+ format: :json,
689
+ script: "M5",
690
+ node: "A",
691
+ attrs: attrs,
692
+ params: params
693
+ }
694
+ res_hash = JSON.parse(response.body)
695
+ expect(res_hash[0]).to include("error")
696
+ expect1 = "The property '#/0/b' of type integer did not match the "\
697
+ "following type: string"
698
+ expect2 = "The property '#/0/a' of type string did not match the "\
699
+ "following type: integer"
700
+ expect(res_hash[0]["error"]).to include(expect1)
701
+ expect(res_hash[0]["error"]).to include(expect2)
702
+
703
+ logs = Marty::Log.where("id > #{@logid}").to_a
704
+ expect(logs.count).to eq(2)
705
+ expect(logs[0].message).to eq("API M5:A.result")
706
+ expect(logs[1].message).to eq("API M5:A.result2")
707
+ logs.each do |ml|
708
+ expect(ml.details).to include(expect1)
709
+ expect(ml.details).to include(expect2)
710
+ expect(ml.details).to include(
711
+ ":data=>[{\"a\"=>\"str\", \"b\"=>456}, {\"a\"=>789, \"b\"=>\"str\"}]}")
712
+ end
713
+ end
714
+
715
+ it "validates output (missing item)" do
716
+ logid = @db.execute('select max(id) from log').first.first rescue 0
717
+ Marty::ApiConfig.create!(script: "M9",
718
+ node: "A",
719
+ attr: nil,
720
+ logged: false,
721
+ input_validated: true,
722
+ output_validated: true,
723
+ strict_validate: true)
724
+ attrs = ["result"].to_json
725
+ params = {"b" => 122}.to_json
726
+ get 'evaluate', {
727
+ format: :json,
728
+ script: "M9",
729
+ node: "A",
730
+ attrs: attrs,
731
+ params: params
732
+ }
733
+ res_hash = JSON.parse(response.body)
734
+ expect(res_hash[0]).to include("error")
735
+ expect1 = "The property '#/0' did not contain a required property of 'c'"
736
+ expect2 = "The property '#/1' did not contain a required property of 'c'"
737
+ expect(res_hash[0]["error"]).to include(expect1)
738
+ expect(res_hash[0]["error"]).to include(expect2)
739
+
740
+ logs = Marty::Log.where("id > #{@logid}").to_a
741
+ expect(logs.count).to eq(1)
742
+ expect(logs[0].message).to eq("API M9:A.result")
743
+ expect(logs[0].details).to include(expect1)
744
+ expect(logs[0].details).to include(expect2)
745
+ expect(logs[0].details).to include(
746
+ ":data=>[{\"a\"=>1, \"b\"=>123}, {\"a\"=>789, \"b\"=>123}]")
747
+ end
748
+ end
749
+
546
750
  it "validates schema" do
547
751
  Marty::ApiConfig.create!(script: "M4",
548
752
  node: "A",
549
753
  attr: nil,
550
754
  logged: false,
551
- validated: true)
755
+ input_validated: true)
552
756
  attrs = ["lc"].to_json
553
757
  params = {"p" => 5}.to_json
554
758
  get 'evaluate', {
@@ -566,7 +770,7 @@ describe Marty::RpcController do
566
770
  node: "A",
567
771
  attr: nil,
568
772
  logged: false,
569
- validated: true)
773
+ input_validated: true)
570
774
  attrs = ["res"].to_json
571
775
  params = {"b" => 5.22}.to_json
572
776
  get 'evaluate', {
@@ -576,7 +780,7 @@ describe Marty::RpcController do
576
780
  attrs: attrs,
577
781
  params: params
578
782
  }
579
- expect = 'The property \'#/properties/b/type\' of type string '\
783
+ expect = 'res: The property \'#/properties/b/type\' of type string '\
580
784
  'did not match one or more of the required schemas'
581
785
  res_hsh = JSON.parse(response.body)
582
786
  expect(res_hsh.keys.size).to eq(1)
@@ -594,7 +798,7 @@ describe Marty::RpcController do
594
798
  node: "A",
595
799
  attr: nil,
596
800
  logged: false,
597
- validated: true)
801
+ input_validated: true)
598
802
  attrs = ["res"].to_json
599
803
  params = {"f" => "Banana"}.to_json
600
804
  get 'evaluate', {
@@ -612,7 +816,7 @@ describe Marty::RpcController do
612
816
  node: "A",
613
817
  attr: nil,
614
818
  logged: false,
615
- validated: true)
819
+ input_validated: true)
616
820
  attrs = ["res"].to_json
617
821
  params = {"f" => "Beans"}.to_json
618
822
  get 'evaluate', {
@@ -631,7 +835,7 @@ describe Marty::RpcController do
631
835
  node: "A",
632
836
  attr: nil,
633
837
  logged: false,
634
- validated: true)
838
+ input_validated: true)
635
839
  attrs = ["res"].to_json
636
840
  params = {"b" => "MemberOfANonExistantEnum"}.to_json
637
841
  get 'evaluate', {
@@ -653,7 +857,7 @@ describe Marty::RpcController do
653
857
  node: "A",
654
858
  attr: nil,
655
859
  logged: false,
656
- validated: true)
860
+ input_validated: true)
657
861
  skip "pending until a solution is found that handles "\
658
862
  "autoload issues involving constantize"
659
863
  attrs = ["res"].to_json
@@ -1 +1 @@
1
- ../extjs/icons/
1
+ spec/dummy/public/images/../extjs/icons/
@@ -1 +1 @@
1
- ../../../features/javascripts/
1
+ spec/dummy/spec/features/../../../features/javascripts/
@@ -18,6 +18,7 @@ feature 'logger view', js: true, capybara: true do
18
18
  before(:all) do
19
19
  self.use_transactional_fixtures = false
20
20
  @db = SQLite3::Database.new(Marty::Log.logfile)
21
+ @db.execute("delete from log")
21
22
 
22
23
  info_s = { info: 'message' }
23
24
  error_s = [1, 2, 3, { error: 'message' }]
@@ -8,9 +8,9 @@ module Marty
8
8
  end
9
9
  before(:each) do
10
10
  @db = SQLite3::Database.new(Marty::Log.logfile)
11
+ @db.execute "delete from log"
11
12
  end
12
13
  after(:each) do
13
- @db.execute "delete from log"
14
14
  @db.close
15
15
  end
16
16
  after(:all) do
@@ -104,6 +104,7 @@ module Marty
104
104
  save_clean_db(@clean_file)
105
105
  # transactional fixtures interfere with queueing jobs
106
106
  self.use_transactional_fixtures = false
107
+ Marty::Log.cleanup(0)
107
108
 
108
109
  # Needed here because shutting transactional fixtures off
109
110
  # means we lose the globally set user
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marty
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.35
4
+ version: 1.0.36
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2017-08-29 00:00:00.000000000 Z
17
+ date: 2017-09-11 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: pg
@@ -475,6 +475,7 @@ files:
475
475
  - db/migrate/202_add_completion_status_to_event.rb
476
476
  - db/migrate/300_create_marty_api_configs.rb
477
477
  - db/migrate/301_create_marty_api_log.rb
478
+ - db/migrate/302_add_api_configs_validate_result.rb
478
479
  - db/seeds.rb
479
480
  - delorean/script_report.dl
480
481
  - gemini_deprecations.md
@@ -1650,7 +1651,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1650
1651
  version: '0'
1651
1652
  requirements: []
1652
1653
  rubyforge_project:
1653
- rubygems_version: 2.5.2
1654
+ rubygems_version: 2.6.13
1654
1655
  signing_key:
1655
1656
  specification_version: 4
1656
1657
  summary: A framework for working with versioned data