marty 1.0.33 → 1.0.34

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: 7f81ea6f27f1cb8c9671b8e4dc1c6d32ab3e782e
4
- data.tar.gz: 839a0aa364eb2a4991d3b49bbb729e63c620ea45
3
+ metadata.gz: 751328c7a7c786984962edb15f66a8aa2fa680ce
4
+ data.tar.gz: 08d5426a9b837d2f4da1f759c6e27c0a9f7c1c5a
5
5
  SHA512:
6
- metadata.gz: a2bde0eae1e81e2189f3d5d53c88a25d6c317f40fe46309a0b330f0fdb71c77414230bd62a211f98f348c20807985b167c8a8bf38e9e8ce8a0b7105630c1060f
7
- data.tar.gz: 3b49c4026098a1ff32e15c8684096fd8fe786361dafca179ce60eeb793fc1166fbd91fd7193d4c7b39fc479269bf16ca0d99d93751fac61feb1755323b702e4e
6
+ metadata.gz: af123dfccdbd3a075eb489979afa78ffd21bbcfd3615ddcc6b5f764be76d61394e1aab0d853f35f17c327effd9298f0c293c946962ea52fdec764e137dd57713
7
+ data.tar.gz: 40ab7f6dfa2987c2c580a3c5cd4dd0f6baee3b48eb3225572c4ce17dfa6d58df591fe74db745daf421b8e511eff2df0e1fbf47c865daa28114a24c382a2be66d
@@ -22,7 +22,7 @@ class Marty::ConfigView < Marty::Grid
22
22
  end
23
23
  def my_jsonb_pretty_getter
24
24
  lambda { |r| v = Marty::Config[r.key]
25
- v && JSON.pretty_generate(v) || '' }
25
+ v && (JSON.pretty_generate(v) rescue v.to_json) || '' }
26
26
  end
27
27
 
28
28
  def my_jsonb_setter
@@ -83,10 +83,16 @@ class Marty::RpcController < ActionController::Base
83
83
  :errors_as_objects => true,
84
84
  :version => Marty::JsonSchema::RAW_URI }
85
85
  to_append = {"\$schema" => Marty::JsonSchema::RAW_URI}
86
- schemas.each do |attr, schema|
87
- err = JSON::Validator.fully_validate(schema.merge(to_append), params, opt)
88
- validation_error[attr] = err.map{ |e| e[:message] } if err.size > 0
89
- err_count += err.size
86
+ schemas.each do |attr, sch|
87
+ begin
88
+ er = JSON::Validator.fully_validate(sch.merge(to_append), params, opt)
89
+ rescue NameError
90
+ return {error: "Unrecognized PgEnum for attribute #{attr}"}
91
+ rescue => ex
92
+ return {error: ex.message}
93
+ end
94
+ validation_error[attr] = er.map{ |e| e[:message] } if er.size > 0
95
+ err_count += er.size
90
96
  end
91
97
  end
92
98
  return {error: "Error(s) validating: #{validation_error}"} if err_count > 0
@@ -46,7 +46,7 @@ class Marty::DataConversion
46
46
  end
47
47
  when :string, :text, :enum
48
48
  v
49
- when :enum_array
49
+ when :enum_array, :string_array, :integer_array
50
50
  "'{#{v}}'"
51
51
  when :integer
52
52
  v.to_i
@@ -19,31 +19,16 @@ module Marty
19
19
  end
20
20
  end
21
21
 
22
- class DateTimeFormatAttribute < JSON::Schema::Attribute
23
- def self.validate(curr_schema, data, frag, processor, validator, options={})
24
- begin
25
- DateTime.parse(data).in_time_zone(Rails.configuration.time_zone)
26
- rescue
27
- msg = "#{self.class.name} error: Can't parse '#{data}' into a DateTime"
28
- validation_error( processor,
29
- msg,
30
- frag,
31
- curr_schema,
32
- self,
33
- options[:record_errors])
34
- end
35
- end
36
- end
37
-
38
22
  class JsonSchema < JSON::Schema::Draft4
39
23
  RAW_URI = "http://json-schema.org/marty-draft/schema#"
40
24
 
41
25
  def initialize
42
26
  super
43
27
  @attributes["pg_enum"] = PgEnumAttribute
44
- @attributes["datetime_format"] = DateTimeFormatAttribute
45
- @uri = JSON::Util::URI.parse(RAW_URI)
46
- @names = ["marty-draft", RAW_URI]
28
+ @formats["date-time"] = JSON::Schema::DateTimeFormat
29
+ @formats["date"] = JSON::Schema::DateFormat
30
+ @uri = JSON::Util::URI.parse(RAW_URI)
31
+ @names = ["marty-draft", RAW_URI]
47
32
  end
48
33
 
49
34
  JSON::Validator.register_validator(self.new)
@@ -1,3 +1,3 @@
1
1
  module Marty
2
- VERSION = "1.0.33"
2
+ VERSION = "1.0.34"
3
3
  end
@@ -62,6 +62,24 @@ A:
62
62
  else 9
63
63
  eof
64
64
 
65
+ sample_script6 = <<eof
66
+ A:
67
+ b =?
68
+ res = b + 1
69
+ eof
70
+
71
+ sample_script7 = <<eof
72
+ A:
73
+ b =?
74
+ res = b
75
+ eof
76
+
77
+ sample_script8 = <<eof
78
+ A:
79
+ b =?
80
+ res = 123
81
+ eof
82
+
65
83
  script3_schema = <<eof
66
84
  A:
67
85
  pc = { "properties : {
@@ -97,6 +115,30 @@ A:
97
115
  }
98
116
  eof
99
117
 
118
+ script6_schema = <<eof
119
+ A:
120
+ res = { "properties" : {
121
+ "b" : { "type" : "float" },
122
+ }
123
+ }
124
+ eof
125
+
126
+ script7_schema = <<eof
127
+ A:
128
+ res = { "properties" : {
129
+ "b" : { "pg_enum" : "NonExistantEnum" },
130
+ }
131
+ }
132
+ eof
133
+
134
+ script8_schema = <<eof
135
+ A:
136
+ res = { "properties" : {
137
+ "b" : { "pg_enum" : "Gemini::MiDurationType" },
138
+ }
139
+ }
140
+ eof
141
+
100
142
 
101
143
  describe Marty::RpcController do
102
144
  before(:each) {
@@ -117,9 +159,15 @@ describe Marty::RpcController do
117
159
  "M3" => sample_script3,
118
160
  "M4" => sample_script4,
119
161
  "M5" => sample_script5,
162
+ "M6" => sample_script6,
163
+ "M7" => sample_script7,
164
+ "M8" => sample_script8,
120
165
  "M3Schemas" => script3_schema,
121
166
  "M4Schemas" => script4_schema,
122
167
  "M5Schemas" => script5_schema,
168
+ "M6Schemas" => script6_schema,
169
+ "M7Schemas" => script7_schema,
170
+ "M8Schemas" => script8_schema,
123
171
  }, Date.today + 1.minute)
124
172
 
125
173
  @p1 = Marty::Posting.do_create("BASE", Date.today + 2.minute, 'a comment')
@@ -370,7 +418,7 @@ describe Marty::RpcController do
370
418
  expect(response.body).to eq("a,b\r\n123,456\r\n789,101112\r\n")
371
419
  end
372
420
 
373
- it "returns an error message on missing schema script" do
421
+ it "returns an error message on missing schema script (csv)" do
374
422
  Marty::ApiConfig.create!(script: "M1",
375
423
  node: "A",
376
424
  attr: nil,
@@ -389,6 +437,28 @@ describe Marty::RpcController do
389
437
  expect(response.body).to eq("error,#{expect}")
390
438
  end
391
439
 
440
+ it "returns an error message on missing schema script (json)" do
441
+ Marty::ApiConfig.create!(script: "M1",
442
+ node: "A",
443
+ attr: nil,
444
+ logged: false,
445
+ validated: true)
446
+ attrs = ["b"].to_json
447
+ params = {"a" => 5}.to_json
448
+ get 'evaluate', {
449
+ format: :json,
450
+ script: "M1",
451
+ node: "A",
452
+ attrs: attrs,
453
+ params: params
454
+ }
455
+ expect = "Schema error for M1/A attrs=b: Schema not defined"
456
+ res_hsh = JSON.parse(response.body)
457
+ expect(res_hsh.keys.size).to eq(1)
458
+ expect(res_hsh.keys[0]).to eq("error")
459
+ expect(res_hsh.values[0]).to eq(expect)
460
+ end
461
+
392
462
  it "returns an error message on missing attributes in schema script" do
393
463
  Marty::ApiConfig.create!(script: "M4",
394
464
  node: "A",
@@ -491,6 +561,30 @@ describe Marty::RpcController do
491
561
  expect(response.body).to eq("9\r\n9\r\n")
492
562
  end
493
563
 
564
+ it "catches JSON::Validator exceptions" do
565
+ Marty::ApiConfig.create!(script: "M6",
566
+ node: "A",
567
+ attr: nil,
568
+ logged: false,
569
+ validated: true)
570
+ attrs = ["res"].to_json
571
+ params = {"b" => 5.22}.to_json
572
+ get 'evaluate', {
573
+ format: :json,
574
+ script: "M6",
575
+ node: "A",
576
+ attrs: attrs,
577
+ params: params
578
+ }
579
+ expect = 'The property \'#/properties/b/type\' of type string '\
580
+ 'did not match one or more of the required schemas'
581
+ res_hsh = JSON.parse(response.body)
582
+ expect(res_hsh.keys.size).to eq(1)
583
+ expect(res_hsh.keys[0]).to eq("error")
584
+ expect(res_hsh.values[0]).to eq(expect)
585
+ end
586
+
587
+
494
588
  class FruitsEnum
495
589
  VALUES=Set['Apple', 'Banana', 'Orange']
496
590
  end
@@ -532,6 +626,47 @@ describe Marty::RpcController do
532
626
  expect(response.body).to include(expect)
533
627
  end
534
628
 
629
+ it "validates schema with a non-existant enum" do
630
+ Marty::ApiConfig.create!(script: "M7",
631
+ node: "A",
632
+ attr: nil,
633
+ logged: false,
634
+ validated: true)
635
+ attrs = ["res"].to_json
636
+ params = {"b" => "MemberOfANonExistantEnum"}.to_json
637
+ get 'evaluate', {
638
+ format: :json,
639
+ script: "M7",
640
+ node: "A",
641
+ attrs: attrs,
642
+ params: params
643
+ }
644
+ expect = "Unrecognized PgEnum for attribute res"
645
+ res_hsh = JSON.parse(response.body)
646
+ expect(res_hsh.keys.size).to eq(1)
647
+ expect(res_hsh.keys[0]).to eq("error")
648
+ expect(res_hsh.values[0]).to include(expect)
649
+ end
650
+
651
+ it "validates pgenum with capitalization issues" do
652
+ Marty::ApiConfig.create!(script: "M8",
653
+ node: "A",
654
+ attr: nil,
655
+ logged: false,
656
+ validated: true)
657
+ skip "pending until a solution is found that handles "\
658
+ "autoload issues involving constantize"
659
+ attrs = ["res"].to_json
660
+ params = {"b" => "Annual"}.to_json
661
+ get 'evaluate', {
662
+ format: :json,
663
+ script: "M8",
664
+ node: "A",
665
+ attrs: attrs,
666
+ params: params
667
+ }
668
+ end
669
+
535
670
  it "should log good req" do
536
671
  Marty::ApiConfig.create!(script: "M3",
537
672
  node: "A",
@@ -0,0 +1,12 @@
1
+ class Gemini::MIDurationType < ActiveRecord::Base
2
+ extend Marty::PgEnum
3
+
4
+ VALUES = Set["Annual",
5
+ "NotApplicable",
6
+ "Other",
7
+ "PeriodicMonthly",
8
+ "SingleLifeOfLoan",
9
+ "SingleSpecific",
10
+ "SplitPremium"]
11
+
12
+ end
@@ -0,0 +1,8 @@
1
+ class AddMiscArraysToLp < ActiveRecord::Migration
2
+ def change
3
+ add_column :gemini_loan_programs, :test_int_array, :integer,
4
+ array: true, null: true
5
+ add_column :gemini_loan_programs, :test_string_array, :string,
6
+ array: true, null: true
7
+ end
8
+ end
@@ -53,16 +53,17 @@ Conv Fixed 30 2.250 1.123 2.345 12 2012
53
53
  EOF
54
54
 
55
55
  loan_programs =<<EOF
56
- name amortization_type mortgage_type streamline_type high_balance_indicator state_array
57
- Conv Fixed 30 Year Fixed Conventional Not Streamlined false
58
- Conv Fixed 30 Year HB Fixed Conventional Not Streamlined true TN
59
- Conv Fixed 30 Year DURP <=80 Fixed Conventional DURP false TN,CT
60
- Conv Fixed 30 Year DURP <=80 HB Fixed Conventional DURP true "CA,NY"
56
+ name amortization_type mortgage_type streamline_type high_balance_indicator state_array test_int_array test_string_array
57
+ Conv Fixed 30 Year Fixed Conventional Not Streamlined false 1 foo
58
+ Conv Fixed 30 Year HB Fixed Conventional Not Streamlined true TN "1,2" foo,bar
59
+ Conv Fixed 30 Year DURP <=80 Fixed Conventional DURP false TN,CT 1,2,3 "foo,bar"
60
+ Conv Fixed 30 Year DURP <=80 HB Fixed Conventional DURP true "CA,NY" foo,hi mom
61
61
  EOF
62
62
 
63
63
  loan_programs_comma =<<EOF
64
- name,amortization_type,mortgage_type,state_array,streamline_type,high_balance_indicator
65
- FHA Fixed 15 Year,Fixed,FHA,"FL,NV,ME",Not Streamlined,false
64
+ name,amortization_type,mortgage_type,state_array,test_string_array,streamline_type,high_balance_indicator
65
+ FHA Fixed 15 Year,Fixed,FHA,"FL,NV,ME","ABC,DEF",Not Streamlined,false
66
+ FHA Fixed 100 Year,Fixed,FHA,"FL,NV,ME","XYZ,""hi mom""",Not Streamlined,false
66
67
  EOF
67
68
 
68
69
  fannie_bup4 =<<EOF
@@ -347,16 +348,24 @@ EOF
347
348
  end
348
349
  end
349
350
 
350
- it "should load enum array types" do
351
+ it "should load array types" do
351
352
  Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs)
352
353
  Marty::DataImporter.do_import(Gemini::LoanProgram, loan_programs_comma,
353
354
  'infinity', nil, nil, ',')
354
- lpset = Gemini::LoanProgram.all.pluck(:name, :state_array).to_set
355
- expect(lpset).to eq([["Conv Fixed 30 Year", nil],
356
- ["Conv Fixed 30 Year HB", ["TN"]],
357
- ["Conv Fixed 30 Year DURP <=80", ["TN", "CT"]],
358
- ["Conv Fixed 30 Year DURP <=80 HB", ["CA","NY"]],
359
- ["FHA Fixed 15 Year", ["FL","NV","ME"]]
355
+ lpset = Gemini::LoanProgram.all.pluck(:name, :state_array,
356
+ :test_int_array,
357
+ :test_string_array).to_set
358
+ expect(lpset).to eq([["Conv Fixed 30 Year", nil, [1], ['foo']],
359
+ ["Conv Fixed 30 Year HB", ["TN"], [1, 2],
360
+ ['foo', 'bar']],
361
+ ["Conv Fixed 30 Year DURP <=80", ["TN", "CT"],
362
+ [1, 2, 3], ['foo', 'bar']],
363
+ ["Conv Fixed 30 Year DURP <=80 HB", ["CA", "NY"],
364
+ nil, ['foo', 'hi mom']],
365
+ ["FHA Fixed 15 Year", ["FL","NV","ME"], nil,
366
+ ['ABC', 'DEF']],
367
+ ["FHA Fixed 100 Year", ["FL","NV","ME"], nil,
368
+ ['XYZ', 'hi mom']]
360
369
  ].to_set)
361
370
 
362
371
  end
@@ -98,64 +98,135 @@ module Marty
98
98
  expect(JSON::Validator.validate(pg_schema_req, data)).to be false
99
99
  end
100
100
 
101
- dt_schema_opt = {
101
+ ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
102
+ ### Date Format ###
103
+ ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
104
+
105
+ date_schema_opt = {
102
106
  "$schema" => "http://json-schema.org/marty-draft/schema#",
103
107
  "properties" => {
104
108
  "a" => {
105
- "datetime_format" => ""
109
+ "type" => "string",
110
+ "format" => "date"
106
111
  }
107
112
  }
108
113
  }
109
114
 
115
+ it "returns true on a properly formatted date" do
116
+ data = {"a" => '2017-05-22'}
117
+ expect(JSON::Validator.validate(date_schema_opt, data)).to be true
118
+ end
119
+
120
+ it "vacuously returns true on a field not validated" do
121
+ data = {"b" => 'Today is May 22nd'}
122
+ expect(JSON::Validator.validate(date_schema_opt, data)).to be true
123
+ end
124
+
125
+ it "returns false on an improperly formatted date" do
126
+ data = {"a" => '2017-05-32'}
127
+ expect(JSON::Validator.validate(date_schema_opt, data)).to be false
128
+ end
129
+
130
+ it "returns false on an properly formatted datetime" do
131
+ data = {"a" => '2017-05-22T14:51:44Z'}
132
+ expect(JSON::Validator.validate(date_schema_opt, data)).to be false
133
+ end
134
+
135
+ it "returns true when an optional date is not supplied" do
136
+ data = {}
137
+ expect(JSON::Validator.validate(date_schema_opt, data)).to be true
138
+ end
139
+
140
+ it "returns false when a nil date is passed even when date is optional" do
141
+ data = {"a" => nil}
142
+ expect(JSON::Validator.validate(date_schema_opt, data)).to be false
143
+ end
144
+
145
+ date_schema_req = {
146
+ "$schema" => "http://json-schema.org/marty-draft/schema#",
147
+ "required" => ["a"],
148
+ "properties" => {
149
+ "a" => {
150
+ "type" => "string",
151
+ "format" => "date"
152
+ }
153
+ }
154
+ }
155
+
156
+ it "returns false when a required date field is not supplied" do
157
+ data = {}
158
+ expect(JSON::Validator.validate(date_schema_req, data)).to be false
159
+ end
160
+
161
+ it "returns false when a nil date is passed when date is required" do
162
+ data = {"a" => nil}
163
+ expect(JSON::Validator.validate(date_schema_req, data)).to be false
164
+ end
165
+
110
166
  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
111
167
  ### DateTime Format ###
112
168
  ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
113
169
 
170
+ datetime_schema_opt = {
171
+ "$schema" => "http://json-schema.org/marty-draft/schema#",
172
+ "properties" => {
173
+ "a" => {
174
+ "type" => "string",
175
+ "format" => "date-time"
176
+ }
177
+ }
178
+ }
179
+
114
180
  it "returns true on a properly formatted datetime" do
115
181
  data = {"a" => '2017-05-22T14:51:44Z'}
116
- expect(JSON::Validator.validate(dt_schema_opt, data)).to be true
182
+ expect(JSON::Validator.validate(datetime_schema_opt, data)).to be true
117
183
  end
118
184
 
119
185
  it "vacuously returns true on a field not validated" do
120
186
  data = {"b" => 'Today is May 22nd'}
121
- expect(JSON::Validator.validate(dt_schema_opt, data)).to be true
187
+ expect(JSON::Validator.validate(datetime_schema_opt, data)).to be true
122
188
  end
123
189
 
124
190
  it "returns false on an improperly formatted datetime" do
125
191
  data = {"a" => '2017-30-22T14:51:44Z'}
126
- expect(JSON::Validator.validate(dt_schema_opt, data)).to be false
192
+ expect(JSON::Validator.validate(datetime_schema_opt, data)).to be false
127
193
  end
128
194
 
129
195
  it "returns true when an opt field is not supplied" do
130
196
  data = {}
131
- expect(JSON::Validator.validate(dt_schema_opt, data)).to be true
197
+ expect(JSON::Validator.validate(datetime_schema_opt, data)).to be true
132
198
  end
133
199
 
134
200
  it "returns false when a nil dt is passed even when dt is opt" do
135
201
  data = {"a" => nil}
136
- expect(JSON::Validator.validate(dt_schema_opt, data)).to be false
202
+ expect(JSON::Validator.validate(datetime_schema_opt, data)).to be false
137
203
  end
138
204
 
139
- dt_schema_req = {
205
+ datetime_schema_req = {
140
206
  "$schema" => "http://json-schema.org/marty-draft/schema#",
141
207
  "required" => ["a"],
142
208
  "properties" => {
143
209
  "a" => {
144
- "datetime_format" => ""
210
+ "type" => "string",
211
+ "format" => "date-time"
145
212
  }
146
213
  }
147
214
  }
148
215
 
149
216
  it "returns false when a required field is not supplied" do
150
217
  data = {}
151
- expect(JSON::Validator.validate(dt_schema_req, data)).to be false
218
+ expect(JSON::Validator.validate(datetime_schema_req, data)).to be false
152
219
  end
153
220
 
154
221
  it "returns false when a nil dt is passed when dt is required" do
155
222
  data = {"a" => nil}
156
- expect(JSON::Validator.validate(dt_schema_req, data)).to be false
223
+ expect(JSON::Validator.validate(datetime_schema_req, data)).to be false
157
224
  end
158
225
 
226
+ ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
227
+ ### PgEnum & DateTime Format ###
228
+ ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
229
+
159
230
  pg_dt_schema = {
160
231
  "$schema" => "http://json-schema.org/marty-draft/schema#",
161
232
  "properties" => {
@@ -163,15 +234,12 @@ module Marty
163
234
  "pg_enum" => "MammalEnum"
164
235
  },
165
236
  "b" => {
166
- "datetime_format" => ""
237
+ "type" => "string",
238
+ "format" => "date-time"
167
239
  },
168
240
  }
169
241
  }
170
242
 
171
- ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
172
- ### PgEnum & DateTime Format ###
173
- ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ###
174
-
175
243
  it "validates both pg_enum and dt format when both are correct" do
176
244
  data = {"a" => 'Dog', "b" => '2017-05-22T14:51:44Z'}
177
245
  expect(JSON::Validator.validate(pg_dt_schema, data)).to be true
@@ -199,7 +267,8 @@ module Marty
199
267
  "pg_enum" => "MammalEnum"
200
268
  },
201
269
  "b" => {
202
- "datetime_format" => ""
270
+ "type" => "string",
271
+ "format" => "date-time"
203
272
  },
204
273
  "c" => {
205
274
  "type" => "integer"
@@ -225,7 +294,8 @@ module Marty
225
294
  "pg_enum" => "MammalEnum"
226
295
  },
227
296
  "b" => {
228
- "datetime_format" => ""
297
+ "type" => "string",
298
+ "format" => "date-time"
229
299
  },
230
300
  "c" => {
231
301
  "type" => "integer"
@@ -246,7 +316,8 @@ module Marty
246
316
  "pg_enum" => "MammalEnum"
247
317
  },
248
318
  "b" => {
249
- "datetime_format" => ""
319
+ "type" => "string",
320
+ "format" => "date-time"
250
321
  },
251
322
  "c" => {
252
323
  "pg_enum" => "ElectronicsEnum"
@@ -285,7 +356,8 @@ module Marty
285
356
  "pg_enum" => "MammalEnum"
286
357
  },
287
358
  "b" => {
288
- "datetime_format" => ""
359
+ "type" => "string",
360
+ "format" => "date-time"
289
361
  },
290
362
  "c" => {
291
363
  "pg_enum" => "ElectronicsEnum"
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.33
4
+ version: 1.0.34
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-07-13 00:00:00.000000000 Z
17
+ date: 2017-07-26 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: pg
@@ -537,6 +537,7 @@ files:
537
537
  - spec/dummy/app/models/gemini/head_version.rb
538
538
  - spec/dummy/app/models/gemini/helper.rb
539
539
  - spec/dummy/app/models/gemini/loan_program.rb
540
+ - spec/dummy/app/models/gemini/mi_duration_type.rb
540
541
  - spec/dummy/app/models/gemini/mortgage_type.rb
541
542
  - spec/dummy/app/models/gemini/simple.rb
542
543
  - spec/dummy/app/models/gemini/state.rb
@@ -571,6 +572,7 @@ files:
571
572
  - spec/dummy/db/migrate/20160100000038_create_gemini_states.rb
572
573
  - spec/dummy/db/migrate/20160923183516_add_bulk_pricing_event_ops.rb
573
574
  - spec/dummy/db/migrate/20170706081300_add_state_array_to_lp.rb
575
+ - spec/dummy/db/migrate/20170725160000_add_misc_arrays_to_lp.rb
574
576
  - spec/dummy/db/seeds.rb
575
577
  - spec/dummy/delorean/blame_report.dl
576
578
  - spec/dummy/delorean/data_report.dl