hamburglar 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: