marty 1.0.35 → 1.0.36

Sign up to get free protection for your applications and to get access to all the features.
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