hamburglar 0.1.3 → 0.1.4

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 258377c2c9186334f0110e0568eb1e05068c4bbd
4
+ data.tar.gz: 9ee62c41ee572421a46c829c144f2e6e5757bc68
5
+ SHA512:
6
+ metadata.gz: e70ff22a7b8c6846a0d8bb4a9e0348659447d18fae4175f89035f54fecbedd88f96542ebda3351aa78531122a792a36bd152a898286f55225c163df752d8c0cb
7
+ data.tar.gz: 9150c6a7b8e1341177d24744f75674267fa70c38b6500a4c9b61f4257706c3977c5429068eeb0ddb9fddaafc694c4fa9c3aaaa72c2d3d7352bcb23aa9bedea56
@@ -1,17 +1,9 @@
1
- require 'net/https'
2
- require 'cgi'
3
-
4
1
  module Hamburglar
5
2
  module Gateways
6
3
  # Hamburglar::Gateways::Base is the main class that handles sending API
7
4
  # requests to upstream providers. All other gateways should inherit from
8
5
  # this class
9
6
  class Base
10
-
11
- # A regex for matching URLs with http or https
12
- # This will be used to verify API urls
13
- URL_REGEX = /https?:\/\/[\S]+/
14
-
15
7
  # The parameters for the API request
16
8
  attr_reader :params
17
9
 
@@ -32,15 +24,6 @@ module Hamburglar
32
24
  @response = {}
33
25
  end
34
26
 
35
- # Get or set the API URL for the gateway
36
- def self.set_api_url(url = '')
37
- if url.match URL_REGEX
38
- @api_url = url
39
- else
40
- raise Hamburglar::InvalidURL, url
41
- end
42
- end
43
-
44
27
  # Set required parameters for an API call
45
28
  def self.set_required_params(*params)
46
29
  @required_params = params
@@ -76,51 +59,10 @@ module Hamburglar
76
59
  validate || raise(Hamburglar::InvalidRequest)
77
60
  end
78
61
 
79
- # Submit a request upstream to generate a fraud report
62
+ # Subclasses need to implement this.
80
63
  def submit
81
- return false unless valid?
82
- url = "#{self.class.api_url}?#{query_string}"
83
- if res = fetch(url)
84
- @response = parse_response(res.body)
85
- end
86
- end
87
-
88
- private
89
-
90
- # Formats @params into a query string for an HTTP GET request
91
- def query_string
92
- @params.map { |key, val| "#{key}=#{CGI.escape(val.to_s)}" }.join('&')
64
+ raise NotImplementedError
93
65
  end
94
-
95
- # Parses raw data returned from an API call
96
- #
97
- # This method should be overwritten by any API subclasses that
98
- # return data in a different format
99
- #
100
- # Returns [Hash]
101
- def parse_response(raw = '')
102
- data = raw.to_s.split(';').map do |line|
103
- key, val = line.split('=')
104
- if key.to_s != "" && val.to_s != ""
105
- [key.to_sym, val]
106
- else
107
- next
108
- end
109
- end
110
- Hash[data]
111
- end
112
-
113
- # Performs a GET request on the given URI, redirects if needed
114
- def fetch(uri_str, limit = 10)
115
- # You should choose better exception.
116
- raise ArgumentError, 'HTTP redirect too deep' if limit == 0
117
- Faraday.new(:url => uri_str, :ssl => {:verify => true, :ca_file => File.expand_path('../../../cacert.pem', __FILE__)}) do |c|
118
- c.response :raise_error
119
- c.response :follow_redirects, :limit => limit
120
- c.adapter :net_http
121
- end.get
122
- end
123
-
124
66
  end
125
67
  end
126
68
  end
@@ -1,15 +1,57 @@
1
+ require 'faraday_middleware/response_middleware'
2
+
1
3
  module Hamburglar
2
4
  module Gateways
3
5
  # The MaxMind module contains classes for working
4
6
  # with MaxMind's minFraud and Telephone Verification APIs
5
7
  module MaxMind
8
+ class Base < ::Hamburglar::Gateways::Base
9
+ # Parses a MaxMind text response to a hash.
10
+ class ResponseParser < ::FaradayMiddleware::ResponseMiddleware
11
+ define_parser do |body|
12
+ unless body.strip.empty?
13
+ # MaxMind returns the response encoded with ISO-8859-1, so we normalize
14
+ # it to UTF-8.
15
+ # http://dev.maxmind.com/minfraud/#Output
16
+ body = body.force_encoding("ISO-8859-1").encode("UTF-8").split(';')
17
+
18
+ body.each_with_object({}) do |line, hash|
19
+ key, val = line.split('=')
20
+
21
+ if key.to_s != "" && val.to_s != ""
22
+ hash[key.to_sym] = val
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ Faraday.register_middleware :response,
30
+ maxmind: ::Hamburglar::Gateways::MaxMind::Base::ResponseParser
31
+
32
+ # Submit a request upstream to generate a fraud report
33
+ def submit
34
+ if valid?
35
+ @response = Faraday.new(:url => self.class::API_URL, ssl: {
36
+ verify: true, ca_file: File.expand_path('../../../cacert.pem', __FILE__)
37
+ }) do |c|
38
+ c.request :url_encoded
39
+ c.response :raise_error
40
+ c.response :follow_redirects, :limit => 10
41
+ c.response :maxmind
42
+ c.adapter :net_http
43
+ end.post(self.class::API_PATH, @params).body
44
+ end
45
+ end
46
+ end
47
+
6
48
  # The MinFraud class handles fraud verification
7
49
  # through MaxMind's minFraud API.
8
50
  #
9
51
  # See: http://www.maxmind.com/app/ccv
10
52
  class MinFraud < Base
11
- # The MaxMind API URL
12
- set_api_url "https://minfraud2.maxmind.com/app/ccv2r"
53
+ API_URL = "https://minfraud2.maxmind.com"
54
+ API_PATH = "/app/ccv2r"
13
55
 
14
56
  # Required parameters for a minFraud API call
15
57
  set_required_params :i, :city, :region, :postal, :country, :license_key
@@ -25,8 +67,8 @@ module Hamburglar
25
67
  #
26
68
  # See: http://www.maxmind.com/app/telephone_api
27
69
  class TelephoneVerification < Base
28
- # The MaxMind Telephone Verification API URL
29
- set_api_url "https://www.maxmind.com/app/telephone_http"
70
+ API_URL = "https://www.maxmind.com"
71
+ API_PATH = "/app/telephone_http"
30
72
 
31
73
  # Required parameters for a Telephone Verification API call
32
74
  set_required_params :l, :phone
@@ -36,7 +78,6 @@ module Hamburglar
36
78
  self.params[:l] = self.params.delete(:license_key) if self.params[:license_key]
37
79
  end
38
80
  end
39
-
40
81
  end
41
82
  end
42
83
  end
@@ -1,3 +1,3 @@
1
1
  module Hamburglar
2
- VERSION = Version = '0.1.3'
2
+ VERSION = Version = '0.1.4'
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hamburglar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
5
- prerelease:
4
+ version: 0.1.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Joshua Priddle
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-08 00:00:00.000000000 Z
11
+ date: 2013-07-31 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: faraday
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: faraday_middleware
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: fakeweb
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: vcr
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -117,37 +104,38 @@ files:
117
104
  - Rakefile
118
105
  - README.markdown
119
106
  - lib/cacert.pem
120
- - lib/hamburglar/config.rb
121
- - lib/hamburglar/errors.rb
107
+ - lib/hamburglar/gateways.rb
122
108
  - lib/hamburglar/gateways/base.rb
123
109
  - lib/hamburglar/gateways/max_mind.rb
124
- - lib/hamburglar/gateways.rb
110
+ - lib/hamburglar/errors.rb
125
111
  - lib/hamburglar/report.rb
112
+ - lib/hamburglar/config.rb
126
113
  - lib/hamburglar/version.rb
127
114
  - lib/hamburglar.rb
128
115
  homepage: https://github.com/site5/hamburglar
129
- licenses: []
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
130
119
  post_install_message:
131
120
  rdoc_options:
132
121
  - --charset=UTF-8
133
122
  require_paths:
134
123
  - lib
135
124
  required_ruby_version: !ruby/object:Gem::Requirement
136
- none: false
137
125
  requirements:
138
- - - ! '>='
126
+ - - '>='
139
127
  - !ruby/object:Gem::Version
140
128
  version: '0'
141
129
  required_rubygems_version: !ruby/object:Gem::Requirement
142
- none: false
143
130
  requirements:
144
- - - ! '>='
131
+ - - '>='
145
132
  - !ruby/object:Gem::Version
146
133
  version: '0'
147
134
  requirements: []
148
135
  rubyforge_project:
149
- rubygems_version: 1.8.23
136
+ rubygems_version: 2.0.2
150
137
  signing_key:
151
- specification_version: 3
138
+ specification_version: 4
152
139
  summary: Hamburglar helps you prevent fraudulent orders
153
140
  test_files: []
141
+ has_rdoc: