minfraud 1.1.0 → 1.2.0

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +46 -0
  3. data/.rubocop.yml +127 -0
  4. data/CHANGELOG.md +14 -0
  5. data/Gemfile +4 -2
  6. data/README.md +1 -1
  7. data/Rakefile +18 -3
  8. data/bin/console +4 -3
  9. data/lib/maxmind/geoip2/model/city.rb +3 -3
  10. data/lib/maxmind/geoip2/model/country.rb +5 -5
  11. data/lib/maxmind/geoip2/record/traits.rb +1 -1
  12. data/lib/minfraud.rb +29 -6
  13. data/lib/minfraud/assessments.rb +6 -2
  14. data/lib/minfraud/components/account.rb +2 -0
  15. data/lib/minfraud/components/addressable.rb +9 -7
  16. data/lib/minfraud/components/base.rb +6 -4
  17. data/lib/minfraud/components/billing.rb +2 -0
  18. data/lib/minfraud/components/credit_card.rb +4 -2
  19. data/lib/minfraud/components/custom_inputs.rb +2 -0
  20. data/lib/minfraud/components/device.rb +4 -2
  21. data/lib/minfraud/components/email.rb +2 -0
  22. data/lib/minfraud/components/event.rb +13 -11
  23. data/lib/minfraud/components/order.rb +3 -1
  24. data/lib/minfraud/components/payment.rb +14 -2
  25. data/lib/minfraud/components/report/transaction.rb +6 -6
  26. data/lib/minfraud/components/shipping.rb +2 -0
  27. data/lib/minfraud/components/shopping_cart.rb +4 -1
  28. data/lib/minfraud/components/shopping_cart_item.rb +2 -2
  29. data/lib/minfraud/enum.rb +6 -3
  30. data/lib/minfraud/error_handler.rb +15 -15
  31. data/lib/minfraud/errors.rb +2 -0
  32. data/lib/minfraud/http_service.rb +14 -4
  33. data/lib/minfraud/http_service/request.rb +3 -0
  34. data/lib/minfraud/http_service/response.rb +4 -2
  35. data/lib/minfraud/model/address.rb +4 -4
  36. data/lib/minfraud/model/credit_card.rb +7 -7
  37. data/lib/minfraud/model/device.rb +2 -2
  38. data/lib/minfraud/model/email.rb +4 -4
  39. data/lib/minfraud/model/error.rb +1 -1
  40. data/lib/minfraud/model/insights.rb +5 -5
  41. data/lib/minfraud/model/issuer.rb +3 -3
  42. data/lib/minfraud/model/score.rb +6 -6
  43. data/lib/minfraud/model/shipping_address.rb +1 -1
  44. data/lib/minfraud/model/subscores.rb +35 -16
  45. data/lib/minfraud/model/warning.rb +2 -2
  46. data/lib/minfraud/report.rb +5 -3
  47. data/lib/minfraud/resolver.rb +14 -12
  48. data/lib/minfraud/version.rb +3 -1
  49. data/minfraud.gemspec +4 -1
  50. metadata +18 -2
@@ -42,10 +42,10 @@ module Minfraud
42
42
  super(record)
43
43
 
44
44
  @distance_to_ip_location = get('distance_to_ip_location')
45
- @is_in_ip_country = get('is_in_ip_country')
46
- @is_postal_in_city = get('is_postal_in_city')
47
- @latitude = get('latitude')
48
- @longitude = get('longitude')
45
+ @is_in_ip_country = get('is_in_ip_country')
46
+ @is_postal_in_city = get('is_postal_in_city')
47
+ @latitude = get('latitude')
48
+ @longitude = get('longitude')
49
49
  end
50
50
  end
51
51
  end
@@ -59,16 +59,16 @@ module Minfraud
59
59
  def initialize(record)
60
60
  super(record)
61
61
 
62
- @brand = get('brand')
63
- @country = get('country')
64
- @is_business = get('is_business')
62
+ @brand = get('brand')
63
+ @country = get('country')
64
+ @is_business = get('is_business')
65
65
  @is_issued_in_billing_address_country = get(
66
66
  'is_issued_in_billing_address_country'
67
67
  )
68
- @is_prepaid = get('is_prepaid')
69
- @is_virtual = get('is_virtual')
70
- @issuer = Minfraud::Model::Issuer.new(get('issuer'))
71
- @type = get('type')
68
+ @is_prepaid = get('is_prepaid')
69
+ @is_virtual = get('is_virtual')
70
+ @issuer = Minfraud::Model::Issuer.new(get('issuer'))
71
+ @type = get('type')
72
72
  end
73
73
  end
74
74
  end
@@ -45,8 +45,8 @@ module Minfraud
45
45
  super(record)
46
46
 
47
47
  @confidence = get('confidence')
48
- @id = get('id')
49
- @last_seen = get('last_seen')
48
+ @id = get('id')
49
+ @last_seen = get('last_seen')
50
50
  @local_time = get('local_time')
51
51
  end
52
52
  end
@@ -43,11 +43,11 @@ module Minfraud
43
43
  def initialize(record)
44
44
  super(record)
45
45
 
46
- @domain = Minfraud::Model::EmailDomain.new(get('domain'))
47
- @first_seen = get('first_seen')
46
+ @domain = Minfraud::Model::EmailDomain.new(get('domain'))
47
+ @first_seen = get('first_seen')
48
48
  @is_disposable = get('is_disposable')
49
- @is_free = get('is_free')
50
- @is_high_risk = get('is_high_risk')
49
+ @is_free = get('is_free')
50
+ @is_high_risk = get('is_high_risk')
51
51
  end
52
52
  end
53
53
  end
@@ -20,7 +20,7 @@ module Minfraud
20
20
  def initialize(record)
21
21
  super(record)
22
22
 
23
- @code = get('code')
23
+ @code = get('code')
24
24
  @error = get('error')
25
25
  end
26
26
  end
@@ -52,13 +52,13 @@ module Minfraud
52
52
  def initialize(record, locales)
53
53
  super(record, locales)
54
54
 
55
- @billing_address = Minfraud::Model::BillingAddress.new(
55
+ @billing_address = Minfraud::Model::BillingAddress.new(
56
56
  get('billing_address')
57
57
  )
58
- @credit_card = Minfraud::Model::CreditCard.new(get('credit_card'))
59
- @device = Minfraud::Model::Device.new(get('device'))
60
- @email = Minfraud::Model::Email.new(get('email'))
61
- @ip_address = Minfraud::Model::IPAddress.new(get('ip_address'), locales)
58
+ @credit_card = Minfraud::Model::CreditCard.new(get('credit_card'))
59
+ @device = Minfraud::Model::Device.new(get('device'))
60
+ @email = Minfraud::Model::Email.new(get('email'))
61
+ @ip_address = Minfraud::Model::IPAddress.new(get('ip_address'), locales)
62
62
  @shipping_address = Minfraud::Model::ShippingAddress.new(
63
63
  get('shipping_address')
64
64
  )
@@ -39,9 +39,9 @@ module Minfraud
39
39
  def initialize(record)
40
40
  super(record)
41
41
 
42
- @name = get('name')
43
- @phone_number = get('phone_number')
44
- @matches_provided_name = get('matches_provided_name')
42
+ @name = get('name')
43
+ @phone_number = get('phone_number')
44
+ @matches_provided_name = get('matches_provided_name')
45
45
  @matches_provided_phone_number = get('matches_provided_phone_number')
46
46
  end
47
47
  end
@@ -58,13 +58,13 @@ module Minfraud
58
58
  def initialize(record, _locales)
59
59
  super(record)
60
60
 
61
- @disposition = Minfraud::Model::Disposition.new(get('disposition'))
62
- @funds_remaining = get('funds_remaining')
63
- @id = get('id')
64
- @ip_address = Minfraud::Model::ScoreIPAddress.new(get('ip_address'))
61
+ @disposition = Minfraud::Model::Disposition.new(get('disposition'))
62
+ @funds_remaining = get('funds_remaining')
63
+ @id = get('id')
64
+ @ip_address = Minfraud::Model::ScoreIPAddress.new(get('ip_address'))
65
65
  @queries_remaining = get('queries_remaining')
66
- @risk_score = get('risk_score')
67
- @warnings = []
66
+ @risk_score = get('risk_score')
67
+ @warnings = []
68
68
  if record && record.key?('warnings')
69
69
  record['warnings'].each do |w|
70
70
  @warnings << Minfraud::Model::Warning.new(w)
@@ -23,7 +23,7 @@ module Minfraud
23
23
  super(record)
24
24
 
25
25
  @distance_to_billing_address = get('distance_to_billing_address')
26
- @is_high_risk = get('is_high_risk')
26
+ @is_high_risk = get('is_high_risk')
27
27
  end
28
28
  end
29
29
  end
@@ -59,6 +59,11 @@ module Minfraud
59
59
  # @return [Float, nil]
60
60
  attr_reader :cvv_result
61
61
 
62
+ # The risk associated with the device. If present, this is a value in the
63
+ # range of 0.01 to 99.
64
+ # @return [Float, nil]
65
+ attr_reader :device
66
+
62
67
  # The risk associated with the particular email address. If present, this
63
68
  # is a value in the range 0.01 to 99.
64
69
  #
@@ -71,6 +76,12 @@ module Minfraud
71
76
  # @return [Float, nil]
72
77
  attr_reader :email_domain
73
78
 
79
+ # The risk associated with the email address local part (the part of
80
+ # the email address before the @ symbol). If present, this is a value
81
+ # in the range 0.01 to 99.
82
+ # @return [Float, nil]
83
+ attr_reader :email_local_part
84
+
74
85
  # The risk associated with the issuer ID number on the email domain. If
75
86
  # present, this is a value in the range 0.01 to 99.
76
87
  #
@@ -111,6 +122,11 @@ module Minfraud
111
122
  # @return [Float, nil]
112
123
  attr_reader :phone_number
113
124
 
125
+ # The risk associated with the shipping address. If present, this is a
126
+ # value in the range 0.01 to 99.
127
+ # @return [Float, nil]
128
+ attr_reader :shipping_address
129
+
114
130
  # The risk associated with the distance between the shipping address and
115
131
  # the IP location for the given IP address. If present, this is a value
116
132
  # in the range 0.01 to 99.
@@ -129,27 +145,30 @@ module Minfraud
129
145
  def initialize(record)
130
146
  super(record)
131
147
 
132
- @avs_result = get('avs_result')
133
- @billing_address = get('billing_address')
134
- @billing_address_distance_to_ip_location = get(
148
+ @avs_result = get('avs_result')
149
+ @billing_address = get('billing_address')
150
+ @billing_address_distance_to_ip_location = get(
135
151
  'billing_address_distance_to_ip_location'
136
152
  )
137
- @browser = get('browser')
138
- @chargeback = get('chargeback')
139
- @country = get('country')
140
- @country_mismatch = get('country_mismatch')
141
- @cvv_result = get('cvv_result')
142
- @email_address = get('email_address')
143
- @email_domain = get('email_domain')
144
- @email_tenure = get('email_tenure')
145
- @ip_tenure = get('ip_tenure')
146
- @issuer_id_number = get('issuer_id_number')
147
- @order_amount = get('order_amount')
148
- @phone_number = get('phone_number')
153
+ @browser = get('browser')
154
+ @chargeback = get('chargeback')
155
+ @country = get('country')
156
+ @country_mismatch = get('country_mismatch')
157
+ @cvv_result = get('cvv_result')
158
+ @device = get('device')
159
+ @email_address = get('email_address')
160
+ @email_domain = get('email_domain')
161
+ @email_local_part = get('email_local_part')
162
+ @email_tenure = get('email_tenure')
163
+ @ip_tenure = get('ip_tenure')
164
+ @issuer_id_number = get('issuer_id_number')
165
+ @order_amount = get('order_amount')
166
+ @phone_number = get('phone_number')
167
+ @shipping_address = get('shipping_address')
149
168
  @shipping_address_distance_to_ip_location = get(
150
169
  'shipping_address_distance_to_ip_location'
151
170
  )
152
- @time_of_day = get('time_of_day')
171
+ @time_of_day = get('time_of_day')
153
172
  end
154
173
  end
155
174
  end
@@ -54,8 +54,8 @@ module Minfraud
54
54
  def initialize(record)
55
55
  super(record)
56
56
 
57
- @code = get('code')
58
- @warning = get('warning')
57
+ @code = get('code')
58
+ @warning = get('warning')
59
59
  @input_pointer = get('input_pointer')
60
60
  end
61
61
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Minfraud
2
4
  class Report
3
5
  include ::Minfraud::HTTPService
@@ -20,13 +22,13 @@ module Minfraud
20
22
  raw = request.perform(verb: :post, endpoint: 'transactions/report', body: @transaction.to_json)
21
23
 
22
24
  response = ::Minfraud::HTTPService::Response.new(
23
- status: raw.status.to_i,
24
- body: raw.body,
25
+ status: raw.status.to_i,
26
+ body: raw.body,
25
27
  headers: raw.headers
26
28
  )
27
29
  ::Minfraud::ErrorHandler.examine(response)
28
30
 
29
- return nil
31
+ nil
30
32
  end
31
33
 
32
34
  # Creates memoized Minfraud::HTTPService::Request instance
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Minfraud
2
4
  module Resolver
3
5
  class << self
@@ -17,17 +19,17 @@ module Minfraud
17
19
 
18
20
  # Mapping between components & minFraud request keys
19
21
  MAPPING = {
20
- account: ::Minfraud::Components::Account,
21
- billing: ::Minfraud::Components::Billing,
22
- credit_card: ::Minfraud::Components::CreditCard,
23
- custom_inputs: ::Minfraud::Components::CustomInputs,
24
- device: ::Minfraud::Components::Device,
25
- email: ::Minfraud::Components::Email,
26
- event: ::Minfraud::Components::Event,
27
- order: ::Minfraud::Components::Order,
28
- payment: ::Minfraud::Components::Payment,
29
- shipping: ::Minfraud::Components::Shipping,
30
- shopping_cart: ::Minfraud::Components::ShoppingCart,
31
- }
22
+ account: ::Minfraud::Components::Account,
23
+ billing: ::Minfraud::Components::Billing,
24
+ credit_card: ::Minfraud::Components::CreditCard,
25
+ custom_inputs: ::Minfraud::Components::CustomInputs,
26
+ device: ::Minfraud::Components::Device,
27
+ email: ::Minfraud::Components::Email,
28
+ event: ::Minfraud::Components::Event,
29
+ order: ::Minfraud::Components::Order,
30
+ payment: ::Minfraud::Components::Payment,
31
+ shipping: ::Minfraud::Components::Shipping,
32
+ shopping_cart: ::Minfraud::Components::ShoppingCart,
33
+ }.freeze
32
34
  end
33
35
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Minfraud
2
- VERSION = '1.1.0'
4
+ VERSION = '1.2.0'
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path('lib', File.dirname(File.realpath(__FILE__)))
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
 
@@ -9,7 +11,7 @@ Gem::Specification.new do |spec|
9
11
  spec.authors = ['kushnir.yb']
10
12
  spec.email = ['support@maxmind.com']
11
13
 
12
- spec.summary = %q(Ruby interface to the MaxMind minFraud v2.0 API services)
14
+ spec.summary = 'Ruby interface to the MaxMind minFraud v2.0 API services'
13
15
  spec.homepage = 'https://github.com/maxmind/minfraud-api-ruby'
14
16
  spec.license = 'MIT'
15
17
 
@@ -26,4 +28,5 @@ Gem::Specification.new do |spec|
26
28
  spec.add_development_dependency 'bundler', '>= 1.16'
27
29
  spec.add_development_dependency 'rake'
28
30
  spec.add_development_dependency 'rspec', '~> 3.0'
31
+ spec.add_development_dependency 'rubocop'
29
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minfraud
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kushnir.yb
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-19 00:00:00.000000000 Z
11
+ date: 2020-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -92,6 +92,20 @@ dependencies:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '3.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rubocop
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
95
109
  description:
96
110
  email:
97
111
  - support@maxmind.com
@@ -99,8 +113,10 @@ executables: []
99
113
  extensions: []
100
114
  extra_rdoc_files: []
101
115
  files:
116
+ - ".github/workflows/test.yml"
102
117
  - ".gitignore"
103
118
  - ".rspec"
119
+ - ".rubocop.yml"
104
120
  - ".travis.yml"
105
121
  - CHANGELOG.md
106
122
  - CODE_OF_CONDUCT.md