marty 1.0.33 → 1.0.34

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: 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