instant_quote 1.7.16 → 1.7.17

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
  SHA256:
3
- metadata.gz: acdaa446c571a459720043e39a83733934473faacdf7dba0064023a699374023
4
- data.tar.gz: ea26eea92d58bb78f67ce72f9674d44cfcf05fe32d2bff3fbfe5f4362d6c9a1b
3
+ metadata.gz: 19454a70498604788bc4110eadf6a962ff046275e71a0b8866ca36ade4ed4d44
4
+ data.tar.gz: 323ff981b6b9fdfca6d9ebfe3b4909d33e72da4d0040d07ae733593f026f2cc1
5
5
  SHA512:
6
- metadata.gz: 9c96040bbc39fb07d74b0cc35805a98323b45f150707b7d8231ec310db4045fe3413e62bca706efe7ef4baddbb8840b90ed6ee6829c85863c7674d50e98c848b
7
- data.tar.gz: 3f21e224c209f4ab9e9f1576f1a889684e8d05097760ca37f58c85ef07a41d3966e3a45332d4bf49a5a4e14c363eb0bf74e7eb4b93ce77eb1286a43b374d8951
6
+ metadata.gz: 37fb3af73715324f3524a81d486dde377ee0e252e61d1d7998e13bc316bbbeb8013681604cc7298d62398ee9443ee706c94a5bd9fd92449ff7a2cc6d32b5d2a3
7
+ data.tar.gz: a441fd8800d994fac3b58e24dcf91b393eeaac13b43d97d3674d01431ea7818bdc78d34efc11b6c72983077f2a4e230f3cea425b9097dbaaf8c2b8856ffc42f2
data/Gemfile CHANGED
@@ -10,3 +10,15 @@ source 'https://rubygems.org'
10
10
 
11
11
  # Specify your gem's dependencies in instant-quotes.gemspec
12
12
  gemspec
13
+
14
+ # Development dependencies
15
+ gem 'bundler', '~> 2.0'
16
+ gem 'dotenv'
17
+ gem 'pry-byebug'
18
+ gem 'rake', '~> 10.0'
19
+ gem 'rspec', '~> 3.0'
20
+ gem 'rubocop'
21
+ gem 'rubocop-rake'
22
+ gem 'rubocop-rspec'
23
+ gem 'simplecov'
24
+ gem 'webmock'
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- instant_quote (1.7.16)
4
+ instant_quote (1.7.17)
5
5
  activesupport
6
- capital_on_tap
7
- iwoca
6
+ capital_on_tap (~> 1.0.1)
7
+ iwoca (~> 1.1.0)
8
8
  money
9
9
  optimum
10
10
  phonelib
@@ -23,10 +23,9 @@ GEM
23
23
  public_suffix (>= 2.0.2, < 5.0)
24
24
  ast (2.4.2)
25
25
  byebug (11.1.3)
26
- capital_on_tap (1.0.0)
26
+ capital_on_tap (1.0.1)
27
27
  addressable
28
- faraday
29
- faraday_middleware
28
+ faraday (~> 2.7)
30
29
  multi_json
31
30
  rainbow
32
31
  coderay (1.1.3)
@@ -36,51 +35,28 @@ GEM
36
35
  diff-lcs (1.4.4)
37
36
  docile (1.3.5)
38
37
  dotenv (2.7.6)
39
- faraday (1.10.0)
40
- faraday-em_http (~> 1.0)
41
- faraday-em_synchrony (~> 1.0)
42
- faraday-excon (~> 1.1)
43
- faraday-httpclient (~> 1.0)
44
- faraday-multipart (~> 1.0)
45
- faraday-net_http (~> 1.0)
46
- faraday-net_http_persistent (~> 1.0)
47
- faraday-patron (~> 1.0)
48
- faraday-rack (~> 1.0)
49
- faraday-retry (~> 1.0)
38
+ faraday (2.7.8)
39
+ faraday-net_http (>= 2.0, < 3.1)
50
40
  ruby2_keywords (>= 0.0.4)
51
- faraday-em_http (1.0.0)
52
- faraday-em_synchrony (1.0.0)
53
- faraday-excon (1.1.0)
54
- faraday-httpclient (1.0.1)
55
- faraday-multipart (1.0.3)
56
- multipart-post (>= 1.2, < 3)
57
- faraday-net_http (1.0.1)
58
- faraday-net_http_persistent (1.2.0)
59
- faraday-patron (1.0.0)
60
- faraday-rack (1.0.0)
61
- faraday-retry (1.0.3)
62
- faraday_middleware (1.2.0)
63
- faraday (~> 1.0)
41
+ faraday-net_http (3.0.2)
64
42
  hashdiff (1.0.1)
65
43
  i18n (1.10.0)
66
44
  concurrent-ruby (~> 1.0)
67
- iwoca (1.0.0)
45
+ iwoca (1.1.0)
68
46
  addressable
69
- faraday
70
- faraday_middleware
71
- multi_json
47
+ faraday (~> 2.7)
48
+ json-schema
72
49
  rainbow
50
+ json-schema (2.8.1)
51
+ addressable (>= 2.4)
73
52
  method_source (1.0.0)
74
53
  minitest (5.15.0)
75
54
  money (6.16.0)
76
55
  i18n (>= 0.6.4, <= 2)
77
56
  multi_json (1.15.0)
78
- multipart-post (2.1.1)
79
- optimum (1.1.0)
57
+ optimum (1.1.1)
80
58
  addressable
81
- faraday
82
- faraday_middleware
83
- multi_json
59
+ faraday (~> 2.7)
84
60
  rainbow
85
61
  parallel (1.20.1)
86
62
  parser (3.0.0.0)
@@ -141,11 +117,9 @@ GEM
141
117
  addressable (>= 2.3.6)
142
118
  crack (>= 0.3.2)
143
119
  hashdiff (>= 0.4.0, < 2.0.0)
144
- youlend (1.1.3)
120
+ youlend (1.1.4)
145
121
  addressable
146
- faraday
147
- faraday_middleware
148
- multi_json
122
+ faraday (~> 2.7)
149
123
  rainbow
150
124
  zeitwerk (2.5.4)
151
125
 
@@ -166,4 +140,4 @@ DEPENDENCIES
166
140
  webmock
167
141
 
168
142
  BUNDLED WITH
169
- 2.3.4
143
+ 2.4.7
@@ -27,20 +27,9 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ['lib']
29
29
 
30
- spec.add_development_dependency 'bundler', '~> 2.0'
31
- spec.add_development_dependency 'dotenv'
32
- spec.add_development_dependency 'pry-byebug'
33
- spec.add_development_dependency 'rake', '~> 10.0'
34
- spec.add_development_dependency 'rspec', '~> 3.0'
35
- spec.add_development_dependency 'rubocop'
36
- spec.add_development_dependency 'rubocop-rake'
37
- spec.add_development_dependency 'rubocop-rspec'
38
- spec.add_development_dependency 'simplecov'
39
- spec.add_development_dependency 'webmock'
40
-
41
30
  spec.add_dependency 'activesupport'
42
- spec.add_dependency 'capital_on_tap'
43
- spec.add_dependency 'iwoca'
31
+ spec.add_dependency 'capital_on_tap', '~> 1.0.1'
32
+ spec.add_dependency 'iwoca', '~> 1.1.0'
44
33
  spec.add_dependency 'money'
45
34
  spec.add_dependency 'optimum'
46
35
  spec.add_dependency 'phonelib'
@@ -57,40 +57,45 @@ module InstantQuote
57
57
  }
58
58
  ]
59
59
 
60
- # Creates the iwoca customer and returns the state key from the response.
60
+ # Creates the iwoca customer and application and returns the customer_id from the response.
61
61
  def get_quote(params, _connection)
62
- response = ::Iwoca::Quote.create_customer(params)
62
+ response = ::Iwoca::Customer.create(data: params)
63
63
 
64
- return response.data[:state_key] if response.success?
64
+ raise_error(response) unless response.success?
65
+
66
+ customer_id = response.data[:customer_id]
67
+
68
+ # This returns an application_id but we can't store it since we don't have more than one
69
+ # external ID field. We shouldn't need it anyway.
70
+ ::Iwoca::Application.create(customer_id: response.data[:customer_id], data: params)
71
+
72
+ return customer_id if response.success?
65
73
 
66
74
  raise_error(response)
67
75
  end
68
76
 
69
- # Get the current status for the created customer.
70
- def get_status(state_key, _connection)
71
- response = ::Iwoca::Quote.credit_facility_status(state_key)
77
+ # Get the current status for the created application.
78
+ def get_status(customer_id, _connection)
79
+ status_response = ::Iwoca::Application.latest(customer_id: customer_id)
72
80
 
73
- raise_error(response) unless response.success?
81
+ raise_error(status_response) unless status_response.success?
74
82
 
75
- decision_parser.new(response.body)
83
+ # Get the offers for the application.
84
+ app_id = status_response.data[:application_id]
85
+ offers_response = ::Iwoca::Application.offers(application_id: app_id)
86
+
87
+ decision_parser.new({ status: status_response.data, offers: offers_response.data })
76
88
  end
77
89
 
78
- # Gets the URL for the given state key.
90
+ # Gets the URL for the given customer_id.
79
91
  def get_link(connection)
80
- state_key = connection.external_id
81
-
82
- response = ::Iwoca::Quote.login_link(state_key)
92
+ response = ::Iwoca::Customer.login_link(customer_id: connection.external_id)
83
93
 
84
94
  return response.data[:login_link] if response.success?
85
95
 
86
96
  raise_error(response)
87
97
  end
88
98
 
89
- def get_approval(state_key, _connection)
90
- response = ::Iwoca::Quote.approval(state_key)
91
- response.success?
92
- end
93
-
94
99
  private
95
100
 
96
101
  def decision_parser
@@ -7,13 +7,14 @@ module InstantQuote
7
7
  # be sent to the service you're integrating. You'll have access to `application` and `extra_info`
8
8
  # from the application's record.
9
9
  class ConnectionTranslator
10
- attr_accessor :application, :extra_info
10
+ attr_accessor :connection, :application, :extra_info
11
11
 
12
12
  def self.translate(connection)
13
13
  new(connection).translate
14
14
  end
15
15
 
16
16
  def initialize(connection)
17
+ @connection = connection
17
18
  @application = connection.finance_application
18
19
  @extra_info = ActiveSupport::HashWithIndifferentAccess.new(connection.extra_info)
19
20
  end
@@ -6,19 +6,15 @@ module InstantQuote
6
6
  def translate
7
7
  {
8
8
  data: {
9
- application: {
10
- company: company_information,
11
- people: [person_information],
12
- requested_products: {
13
- product_name => {
14
- approval: {
15
- amount: (application.amount_pennies / 100),
16
- duration: duration,
17
- detailed_purpose: application&.proceeds_purpose&.name
18
- }
19
- }
20
- }
21
- }
9
+ company: company_information,
10
+ people: [person_information],
11
+ requests: [
12
+ amount: (application.amount_pennies / 100),
13
+ duration: { amount: 12, unit: 'months' },
14
+ purpose: application&.proceeds_purpose&.name,
15
+ product_type: product_name,
16
+ urgency: 'asap'
17
+ ]
22
18
  }
23
19
  }
24
20
  end
@@ -26,11 +22,20 @@ module InstantQuote
26
22
  private
27
23
 
28
24
  def product_name
29
- :credit_facility
30
- end
31
-
32
- def duration
33
- 12
25
+ case connection.adapter
26
+ when 'iwoca'
27
+ 'flexi_loan'
28
+ when 'iwoca_cbils'
29
+ 'cbils'
30
+ when 'iwoca_revenue_based_loans'
31
+ 'revenue_based_loan'
32
+ when 'iwoca_flexi24'
33
+ 'flexi24'
34
+ when 'iwoca_recovery_loans'
35
+ 'recovery_loan'
36
+ else
37
+ 'flexi_loan'
38
+ end
34
39
  end
35
40
 
36
41
  # rubocop:disable Metrics/AbcSize
@@ -2,110 +2,177 @@
2
2
 
3
3
  module InstantQuote
4
4
  module DecisionParsers
5
- # Example response:
6
- #
7
- # { data:
8
- # {
9
- # balance: {
10
- # principal: 0.0, interest: 0.0, product_fees: 0.0, other_fees: 0.0, total: 0.0
11
- # },
12
- # latest_approval_request: { status: "no_decision_possible" },
13
- # approval_requirements: [
14
- # { type: "cc", status: "required" },
15
- # { type: "bus_cc", status: "required" },
16
- # { type: "dir_guarantor", status: "required" },
17
- # { type: "enhanced_security_check", status: "pending" }
18
- # ],
19
- # funding_requirements: [
20
- # { status: "required", type: "fraud" },
21
- # { type: "docs", status: "required" },
22
- # { type: "enhanced_security_check", status: "pending" }
23
- # ]
5
+ # Example status response:
6
+ #--------------------------------------------
7
+ # {
8
+ # status: "open",
9
+ # application_id: "0affceb4-1fbe-4b42-b027-5b1f340b34df",
10
+ # is_closed: false,
11
+ # requests: [
12
+ # {
13
+ # amount: 1500.0,
14
+ # duration: { unit: "months", amount: 12.0 },
15
+ # product_type: "flexi_loan",
16
+ # purpose: "equipment_purchase",
17
+ # detailed_purpose: nil,
18
+ # requested_cash_amount: nil,
19
+ # requested_lower_interest: false,
20
+ # urgency: "asap",
21
+ # suggested_product: {
22
+ # amount: 1500.0,
23
+ # duration: { unit: "days", amount: 365 },
24
+ # product_type: "flexi_loan"
25
+ # }
26
+ # }
27
+ # ],
28
+ # last_12_months_turnover: {
29
+ # amount: 70000,
30
+ # valid_from: "2019-08-24T14:15:22Z"
24
31
  # }
25
32
  # }
33
+ #
34
+ # Example offers response:
35
+ #--------------------------------------------
36
+ # {
37
+ # offers: [
38
+ # {
39
+ # product_type: "flexi_loan",
40
+ # duration: { unit: "days", amount: 365 },
41
+ # max_amount: 15000.0,
42
+ # is_suggested: true,
43
+ # offer_id: "14c9addf-b7bd-43bb-b8b0-6ad6b0b6397f",
44
+ # offer_type: "sample",
45
+ # timeout: "2023-07-29T00:00:00+0000",
46
+ # data_requirements: [
47
+ # {
48
+ # category: "personal_data",
49
+ # actions: [
50
+ # { name: "complete_personal_credit_check" },
51
+ # { name: "check_director_as_guarantor" },
52
+ # { name: "check_director_as_applicant" },
53
+ # { name: "check_directors_match_companies_house" }
54
+ # ]
55
+ # },
56
+ # {
57
+ # category: "company_data",
58
+ # actions: [
59
+ # { name: "complete_business_credit_check" }
60
+ # ]
61
+ # },
62
+ # {
63
+ # category: "enhanced_security_check",
64
+ # actions: [
65
+ # { name: "contact_iwoca" }
66
+ # ]
67
+ # }
68
+ # ],
69
+ # interest_rate: 0.03
70
+ # }
71
+ # ],
72
+ # offer_creation_status: "offers_available"
73
+ # }
26
74
  class Iwoca < DecisionParser
75
+ # Check the details on all the statuses here:
76
+ # https://iwoca.stoplight.io/docs/lapi-uk/3fc78424792f2-make-an-application
27
77
  STATUSES = {
28
- pending: 'pending',
29
- approved: 'approved',
78
+ funded: 'funded',
79
+ expired: 'expired',
80
+ talking_to_customer: 'talking_to_customer',
81
+ offered: 'offered',
30
82
  declined: 'declined',
31
- no_decision: 'no_decision_possible',
32
- not_defined: 'not_defined'
33
- }.freeze
34
-
35
- LOAN_STATES = {
36
- ongoing: 'ongoing',
37
- ended: 'ended',
38
- topup: 'topup',
39
- pending: 'pending',
40
- overdue: 'overdue',
41
- duetoday: 'duetoday'
83
+ deferred: 'deferred',
84
+ in_underwriting: 'in_underwriting',
85
+ awaiting_underwriter: 'awaiting_underwriter',
86
+ open: 'open',
87
+ action_required: 'action_required',
88
+ offer_revoked: 'offer_revoked',
89
+ customer_to_link_open_banking: 'customer_to_link_open_banking',
90
+ conditional_offer: 'conditional_offer',
91
+ offer_rejected: 'offer_rejected',
92
+ conditional_offer_criteria_met: 'conditional_offer_criteria_met',
93
+ not_defined: 'not_defined' # this is the default status, not a iwoca status
42
94
  }.freeze
43
95
 
44
- # iwoca sends an extra "data" key, that is removed here, to avoid having to do data[:data]
45
- # because it's silly :)
96
+ # The data object has two responses in two different keys:
97
+ # status - the response of the application status
98
+ # offers - the response of the available offers
46
99
  def initialize(data = {})
47
100
  @data = super
48
- @data = @data[:data] if @data.key?(:data)
101
+ @status = @data[:status] if @data.key?(:status)
102
+ @offers = @data[:offers] if @data.key?(:offers)
49
103
  end
50
104
 
51
105
  def pending?
52
- status == STATUSES[:not_defined]
106
+ status == STATUSES[:open]
53
107
  end
54
108
 
55
109
  def approved?
56
- status == STATUSES[:approved]
110
+ status_included?(status, %i[offered funded])
57
111
  end
58
112
 
59
113
  def declined?
60
- status == STATUSES[:declined]
114
+ status_included?(status, %i[declined offer_revoked offer_rejected])
61
115
  end
62
116
 
63
117
  def manual_review?
64
- status == STATUSES[:pending]
118
+ manual_review_statuses = %i[
119
+ deferred
120
+ action_required
121
+ talking_to_customer
122
+ ]
123
+
124
+ status_included?(status, manual_review_statuses)
65
125
  end
66
126
 
67
127
  def no_decision_possible?
68
- status == STATUSES[:no_decision]
128
+ status_included?(status, %i[expired])
69
129
  end
70
130
 
71
131
  def loan_started?
72
- data[:loan_status] == LOAN_STATES[:ongoing]
132
+ started_statuses = %i[
133
+ in_underwriting
134
+ awaiting_underwriter
135
+ talking_to_customer
136
+ customer_to_link_open_banking
137
+ ]
138
+
139
+ status_included?(status, started_statuses)
73
140
  end
74
141
 
75
142
  def amount
76
- amount_approved = status_hash.dig(:approved, :max_credit) || 0
143
+ amount_approved = suggested_product[:amount] || 0
77
144
 
78
145
  Money.new(amount_approved * 100).format
79
146
  end
80
147
 
81
148
  def credit_duration
82
- status_hash.dig(:approved, :duration)
83
- end
149
+ unit = suggested_product.dig(:duration, :unit)
150
+ amount = suggested_product.dig(:duration, :amount)
84
151
 
85
- def credit_interval
86
- status_hash.dig(:approved, :interval)
152
+ return { unit: unit, amount: amount }
87
153
  end
88
154
 
89
155
  def monthly_interest_rate
90
- rates = status_hash.dig(:approved, :rate_structures)
91
-
92
- return 0 unless rates&.any?
93
-
94
- rate_info = rates.first[:rates]&.first
95
-
96
- return 0 unless rate_info
97
-
98
- rate_info[:rate]
156
+ first_offer&.interest_rate
99
157
  end
100
158
 
101
159
  def status
102
- status_hash[:status] || STATUSES[:not_defined]
160
+ @status[:status] || STATUSES[:not_defined]
103
161
  end
104
162
 
105
163
  private
106
164
 
107
- def status_hash
108
- data[:approval_status] || data[:latest_approval_request] || {}
165
+ def suggested_product
166
+ @status[:requests]&.first&.dig(:suggested_product)
167
+ end
168
+
169
+ def first_offer
170
+ @offers.dig(:offers)&.first
171
+ end
172
+
173
+ def status_included?(status, status_keys)
174
+ statuses = status_keys.map { |key| STATUSES[key] }
175
+ statuses.include?(status)
109
176
  end
110
177
  end
111
178
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InstantQuote
4
- VERSION = '1.7.16'
4
+ VERSION = '1.7.17'
5
5
  end
metadata CHANGED
@@ -1,155 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instant_quote
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.16
4
+ version: 1.7.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - rikas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-21 00:00:00.000000000 Z
11
+ date: 2023-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '2.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '2.0'
27
- - !ruby/object:Gem::Dependency
28
- name: dotenv
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: pry-byebug
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '10.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '10.0'
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '3.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '3.0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-rake
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rubocop-rspec
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: simplecov
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: webmock
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
13
  - !ruby/object:Gem::Dependency
154
14
  name: activesupport
155
15
  requirement: !ruby/object:Gem::Requirement
@@ -168,30 +28,30 @@ dependencies:
168
28
  name: capital_on_tap
169
29
  requirement: !ruby/object:Gem::Requirement
170
30
  requirements:
171
- - - ">="
31
+ - - "~>"
172
32
  - !ruby/object:Gem::Version
173
- version: '0'
33
+ version: 1.0.1
174
34
  type: :runtime
175
35
  prerelease: false
176
36
  version_requirements: !ruby/object:Gem::Requirement
177
37
  requirements:
178
- - - ">="
38
+ - - "~>"
179
39
  - !ruby/object:Gem::Version
180
- version: '0'
40
+ version: 1.0.1
181
41
  - !ruby/object:Gem::Dependency
182
42
  name: iwoca
183
43
  requirement: !ruby/object:Gem::Requirement
184
44
  requirements:
185
- - - ">="
45
+ - - "~>"
186
46
  - !ruby/object:Gem::Version
187
- version: '0'
47
+ version: 1.1.0
188
48
  type: :runtime
189
49
  prerelease: false
190
50
  version_requirements: !ruby/object:Gem::Requirement
191
51
  requirements:
192
- - - ">="
52
+ - - "~>"
193
53
  - !ruby/object:Gem::Version
194
- version: '0'
54
+ version: 1.1.0
195
55
  - !ruby/object:Gem::Dependency
196
56
  name: money
197
57
  requirement: !ruby/object:Gem::Requirement
@@ -321,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
181
  - !ruby/object:Gem::Version
322
182
  version: '0'
323
183
  requirements: []
324
- rubygems_version: 3.0.6
184
+ rubygems_version: 3.2.3
325
185
  signing_key:
326
186
  specification_version: 4
327
187
  summary: Instant quote providers gem.