judopay 1.0.0.pre

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 (84) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +47 -0
  5. data/.yardopts +1 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +43 -0
  9. data/Rakefile +7 -0
  10. data/judopay.gemspec +37 -0
  11. data/lib/certs/rapidssl_ca.crt +64 -0
  12. data/lib/faraday/judo_mashify.rb +13 -0
  13. data/lib/faraday/raise_http_exception.rb +36 -0
  14. data/lib/judopay.rb +67 -0
  15. data/lib/judopay/api.rb +10 -0
  16. data/lib/judopay/connection.rb +67 -0
  17. data/lib/judopay/core_ext/hash.rb +29 -0
  18. data/lib/judopay/core_ext/string.rb +31 -0
  19. data/lib/judopay/error.rb +153 -0
  20. data/lib/judopay/mash.rb +7 -0
  21. data/lib/judopay/model.rb +109 -0
  22. data/lib/judopay/models/card_address.rb +11 -0
  23. data/lib/judopay/models/card_payment.rb +39 -0
  24. data/lib/judopay/models/card_preauth.rb +12 -0
  25. data/lib/judopay/models/collection.rb +16 -0
  26. data/lib/judopay/models/consumer_location.rb +8 -0
  27. data/lib/judopay/models/market/collection.rb +10 -0
  28. data/lib/judopay/models/market/payment.rb +10 -0
  29. data/lib/judopay/models/market/preauth.rb +10 -0
  30. data/lib/judopay/models/market/refund.rb +10 -0
  31. data/lib/judopay/models/market/transaction.rb +10 -0
  32. data/lib/judopay/models/payment.rb +8 -0
  33. data/lib/judopay/models/preauth.rb +8 -0
  34. data/lib/judopay/models/refund.rb +16 -0
  35. data/lib/judopay/models/token_payment.rb +30 -0
  36. data/lib/judopay/models/token_preauth.rb +10 -0
  37. data/lib/judopay/models/transaction.rb +8 -0
  38. data/lib/judopay/models/web_payments/payment.rb +24 -0
  39. data/lib/judopay/models/web_payments/preauth.rb +10 -0
  40. data/lib/judopay/models/web_payments/transaction.rb +19 -0
  41. data/lib/judopay/null_logger.rb +11 -0
  42. data/lib/judopay/request.rb +50 -0
  43. data/lib/judopay/response.rb +7 -0
  44. data/lib/judopay/serializer.rb +31 -0
  45. data/lib/judopay/version.rb +3 -0
  46. data/spec/factories.rb +103 -0
  47. data/spec/faraday/response_spec.rb +29 -0
  48. data/spec/fixtures/card_payments/create.json +22 -0
  49. data/spec/fixtures/card_payments/create_3dsecure.json +8 -0
  50. data/spec/fixtures/card_payments/create_bad_request.json +5 -0
  51. data/spec/fixtures/card_payments/create_declined.json +24 -0
  52. data/spec/fixtures/card_payments/validate.json +5 -0
  53. data/spec/fixtures/token_payments/create.json +22 -0
  54. data/spec/fixtures/transactions/all.json +238 -0
  55. data/spec/fixtures/transactions/find.json +23 -0
  56. data/spec/fixtures/transactions/find_not_found.json +5 -0
  57. data/spec/fixtures/web_payments/payments/create.json +4 -0
  58. data/spec/fixtures/web_payments/payments/find.json +39 -0
  59. data/spec/judopay/card_address_spec.rb +10 -0
  60. data/spec/judopay/card_payment_spec.rb +64 -0
  61. data/spec/judopay/card_preauth_spec.rb +35 -0
  62. data/spec/judopay/collection_spec.rb +26 -0
  63. data/spec/judopay/core_ext/hash_spec.rb +24 -0
  64. data/spec/judopay/core_ext/string_spec.rb +16 -0
  65. data/spec/judopay/error_spec.rb +49 -0
  66. data/spec/judopay/judopay_spec.rb +19 -0
  67. data/spec/judopay/market/collection_spec.rb +26 -0
  68. data/spec/judopay/market/payment_spec.rb +14 -0
  69. data/spec/judopay/market/preauth_spec.rb +14 -0
  70. data/spec/judopay/market/refund_spec.rb +26 -0
  71. data/spec/judopay/market/transaction_spec.rb +14 -0
  72. data/spec/judopay/payment_spec.rb +14 -0
  73. data/spec/judopay/preauth_spec.rb +14 -0
  74. data/spec/judopay/refund_spec.rb +26 -0
  75. data/spec/judopay/token_payment_spec.rb +22 -0
  76. data/spec/judopay/token_preauth_spec.rb +22 -0
  77. data/spec/judopay/transaction_spec.rb +51 -0
  78. data/spec/judopay/web_payments/payment_spec.rb +16 -0
  79. data/spec/judopay/web_payments/preauth_spec.rb +16 -0
  80. data/spec/judopay/web_payments/transaction_spec.rb +15 -0
  81. data/spec/spec_helper.rb +37 -0
  82. data/tutorials/judo_getting_started.md +74 -0
  83. data/tutorials/judo_making_a_payment.md +84 -0
  84. metadata +373 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ba2d46d3aa3dea80dba33739e877dc9c36b067dd
4
+ data.tar.gz: 09b41cc8a321db7a5d1c3072ecbb408340bde1cc
5
+ SHA512:
6
+ metadata.gz: c7c37cc2a0c0c88f758afb3c139b89c87fe2feeca6b9b4b85558e80a83aae309ab4c80cdb80379f3766c4cc0e0e836b2baa72cd656c76de65bf5a7caf6f599d1
7
+ data.tar.gz: 5aa13ae6190a479d239462093c13f2f842abf825cbfd90f79a1b26e50187590a9b9c0ccbfeb444449d8aa92385e2366c15459edbda9b56c6eae91f3f928594a9
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+
19
+ log.txt
20
+
21
+ cmd.txt
22
+
23
+ output.txt
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -0,0 +1,47 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2014-06-26 17:06:45 +0100 using RuboCop version 0.23.0.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ # Offense count: 2
9
+ # Cop supports --auto-correct.
10
+ Lint/UnusedMethodArgument:
11
+ Enabled: false
12
+
13
+ # Offense count: 1
14
+ Style/CyclomaticComplexity:
15
+ Max: 10
16
+
17
+ # Offense count: 15
18
+ Style/Documentation:
19
+ Enabled: false
20
+
21
+ # Offense count: 18
22
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
23
+ Style/DotPosition:
24
+ Enabled: false
25
+
26
+ # Offense count: 73
27
+ # Cop supports --auto-correct.
28
+ # Configuration parameters: SupportedStyles.
29
+ Style/HashSyntax:
30
+ EnforcedStyle: hash_rockets
31
+
32
+ # Offense count: 18
33
+ Style/Lambda:
34
+ Enabled: false
35
+
36
+ # Offense count: 25
37
+ Style/LineLength:
38
+ Max: 138
39
+
40
+ # Offense count: 3
41
+ # Configuration parameters: CountComments.
42
+ Style/MethodLength:
43
+ Max: 32
44
+
45
+ # Offense count: 2
46
+ Style/RegexpLiteral:
47
+ MaxSlashes: 0
@@ -0,0 +1 @@
1
+ - README.md
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in judopay.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Judopay
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,43 @@
1
+ # Judopay
2
+
3
+ The Judopay gem supports Ruby 1.9.3 and above (including 2.0.x and 2.1.x).
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'judopay'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install judopay
18
+
19
+ ## Configuration
20
+
21
+ You configure the Judopay gem by passing a block. For example:
22
+
23
+ Judopay.configure do |config|
24
+ config.judo_id = 12345
25
+ end
26
+
27
+ ## Authentication
28
+ You can authenticate either with basic authentication by passing your login and password credentials or using an existing OAuth2 access token.
29
+
30
+ ### Basic authentication
31
+
32
+ Judopay.configure do |config|
33
+ config.judo_id = 12345
34
+ config.api_token = 'your-token'
35
+ config.api_secret = 'your-secret'
36
+ end
37
+
38
+ ### OAuth2 access token authentication
39
+
40
+ Judopay.configure do |config|
41
+ config.judo_id = 12345
42
+ config.oauth_access_token = 'your-oauth-token'
43
+ end
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
7
+ task :test => :spec
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'judopay/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'judopay'
8
+ spec.version = Judopay::VERSION
9
+ spec.authors = ['Chris Rosser']
10
+ spec.email = ['developersupport@judopay.com']
11
+ spec.summary = 'Ruby SDK wrapper for the Judopay REST API'
12
+ spec.description = ''
13
+ spec.homepage = 'http://www.judopay.com'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split("\n")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.required_ruby_version = '>= 1.9.3'
22
+ spec.add_development_dependency 'bundler'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'rspec'
25
+ spec.add_development_dependency 'yard'
26
+ spec.add_development_dependency 'yard-xml'
27
+ spec.add_development_dependency 'factory_girl'
28
+ spec.add_development_dependency 'rubocop'
29
+ spec.add_development_dependency 'webmock'
30
+ spec.add_dependency 'virtus', '=1.0.2'
31
+ spec.add_dependency 'httpclient', '=2.4.0'
32
+ spec.add_dependency 'activemodel', '=4.1.1'
33
+ spec.add_dependency 'faraday', '=0.9.0'
34
+ spec.add_dependency 'faraday_middleware', '=0.9.1'
35
+ spec.add_dependency 'rash', '=0.4.0'
36
+ spec.add_dependency 'addressable', '=2.3.6'
37
+ end
@@ -0,0 +1,64 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
3
+ MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
4
+ YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
5
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
6
+ R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
7
+ 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
8
+ fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
9
+ iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
10
+ 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
11
+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
12
+ MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
13
+ ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
14
+ uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
15
+ Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
16
+ tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
17
+ PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
18
+ hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
19
+ 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
20
+ -----END CERTIFICATE-----
21
+ -----BEGIN CERTIFICATE-----
22
+ MIID1TCCAr2gAwIBAgIDAjbRMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
23
+ MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
24
+ YWwgQ0EwHhcNMTAwMjE5MjI0NTA1WhcNMjAwMjE4MjI0NTA1WjA8MQswCQYDVQQG
25
+ EwJVUzEXMBUGA1UEChMOR2VvVHJ1c3QsIEluYy4xFDASBgNVBAMTC1JhcGlkU1NM
26
+ IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3H4Vsce2cy1rfa0
27
+ l6P7oeYLUF9QqjraD/w9KSRDxhApwfxVQHLuverfn7ZB9EhLyG7+T1cSi1v6kt1e
28
+ 6K3z8Buxe037z/3R5fjj3Of1c3/fAUnPjFbBvTfjW761T4uL8NpPx+PdVUdp3/Jb
29
+ ewdPPeWsIcHIHXro5/YPoar1b96oZU8QiZwD84l6pV4BcjPtqelaHnnzh8jfyMX8
30
+ N8iamte4dsywPuf95lTq319SQXhZV63xEtZ/vNWfcNMFbPqjfWdY3SZiHTGSDHl5
31
+ HI7PynvBZq+odEj7joLCniyZXHstXZu8W1eefDp6E63yoxhbK1kPzVw662gzxigd
32
+ gtFQiwIDAQABo4HZMIHWMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUa2k9ahhC
33
+ St2PAmU5/TUkhniRFjAwHwYDVR0jBBgwFoAUwHqYaI2J+6sFZAwRfap9ZbjKzE4w
34
+ EgYDVR0TAQH/BAgwBgEB/wIBADA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3Js
35
+ Lmdlb3RydXN0LmNvbS9jcmxzL2d0Z2xvYmFsLmNybDA0BggrBgEFBQcBAQQoMCYw
36
+ JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmdlb3RydXN0LmNvbTANBgkqhkiG9w0B
37
+ AQUFAAOCAQEAq7y8Cl0YlOPBscOoTFXWvrSY8e48HM3P8yQkXJYDJ1j8Nq6iL4/x
38
+ /torAsMzvcjdSCIrYA+lAxD9d/jQ7ZZnT/3qRyBwVNypDFV+4ZYlitm12ldKvo2O
39
+ SUNjpWxOJ4cl61tt/qJ/OCjgNqutOaWlYsS3XFgsql0BYKZiZ6PAx2Ij9OdsRu61
40
+ 04BqIhPSLT90T+qvjF+0OJzbrs6vhB6m9jRRWXnT43XcvNfzc9+S7NIgWW+c+5X4
41
+ knYYCnwPLKbK3opie9jzzl9ovY8+wXS7FXI6FoOpC+ZNmZzYV+yoAVHHb1c0XqtK
42
+ LEL2TxyJeN4mTvVvk0wVaydWTQBUbHq3tw==
43
+ -----END CERTIFICATE-----
44
+ -----BEGIN CERTIFICATE-----
45
+ MIIDfTCCAuagAwIBAgIDErvmMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
46
+ MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
47
+ aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDIwNTIxMDQwMDAwWhcNMTgwODIxMDQwMDAw
48
+ WjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
49
+ AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
50
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9m
51
+ OSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIu
52
+ T8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6c
53
+ JmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmR
54
+ Cw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5asz
55
+ PeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo4HwMIHtMB8GA1UdIwQYMBaAFEjm
56
+ aPkr0rKV10fYIyAQTzOYkJ/UMB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrM
57
+ TjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjA6BgNVHR8EMzAxMC+g
58
+ LaArhilodHRwOi8vY3JsLmdlb3RydXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDBO
59
+ BgNVHSAERzBFMEMGBFUdIAAwOzA5BggrBgEFBQcCARYtaHR0cHM6Ly93d3cuZ2Vv
60
+ dHJ1c3QuY29tL3Jlc291cmNlcy9yZXBvc2l0b3J5MA0GCSqGSIb3DQEBBQUAA4GB
61
+ AHbhEm5OSxYShjAGsoEIz/AIx8dxfmbuwu3UOx//8PDITtZDOLC5MH0Y0FWDomrL
62
+ NhGc6Ehmo21/uBPUR/6LWlxz/K7ZGzIZOKuXNBSqltLroxwUCEm2u+WR74M26x1W
63
+ b8ravHNjkOR/ez4iyz0H7V84dJzjA1BOoa+Y7mHyhD8S
64
+ -----END CERTIFICATE-----
@@ -0,0 +1,13 @@
1
+ require 'faraday_middleware/response/rashify'
2
+ require_relative '../judopay/mash'
3
+
4
+ # @private
5
+ module FaradayMiddleware
6
+ # Convert parsed response bodies to a Hashie::Rash if they are a Hash or Array
7
+ class JudoMashify < Rashify
8
+ dependency do
9
+ require 'rash'
10
+ self.mash_class = ::Judopay::Mash
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,36 @@
1
+ require 'faraday'
2
+ require_relative '../judopay/error'
3
+
4
+ # @private
5
+ module FaradayMiddleware
6
+ # Raise an appropriate exception for failure HTTP response codes
7
+ class RaiseHttpException < Faraday::Middleware
8
+ def call(env)
9
+ @app.call(env).on_complete do |response|
10
+ case response.status.to_i
11
+ when 400
12
+ fail Judopay::BadRequest, response
13
+ when 401, 403
14
+ fail Judopay::NotAuthorized, response
15
+ when 404
16
+ fail Judopay::NotFound, response
17
+ when 409
18
+ fail Judopay::Conflict, response
19
+ when 500
20
+ fail Judopay::InternalServerError, response
21
+ when 502
22
+ fail Judopay::BadGateway, response
23
+ when 503
24
+ fail Judopay::ServiceUnavailable, response
25
+ when 504
26
+ fail Judopay::GatewayTimeout, response
27
+ end
28
+ end
29
+ end
30
+
31
+ def initialize(app)
32
+ super app
33
+ @parser = nil
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,67 @@
1
+ require_relative 'judopay/version'
2
+ require_relative 'judopay/api'
3
+ require_relative 'judopay/response'
4
+ require_relative 'judopay/serializer'
5
+ require_relative 'judopay/error'
6
+ require_relative 'judopay/null_logger'
7
+
8
+ module Judopay
9
+ class << self
10
+ attr_accessor :configuration
11
+ end
12
+
13
+ # Configure the gem by passing a block
14
+ def self.configure
15
+ self.configuration ||= Configuration.new
16
+ yield(configuration) if block_given?
17
+ configure_endpoint_for_environment
18
+ end
19
+
20
+ # Record a new log message if a logger is configured
21
+ def self.log(log_level, message)
22
+ logger = self.configuration.logger
23
+ return unless logger.is_a?(Logger)
24
+ logger.progname = 'judopay'
25
+ logger.add(log_level) { message }
26
+ end
27
+
28
+ protected
29
+
30
+ # Based on the use_production flag, which endpoint should we use?
31
+ def self.configure_endpoint_for_environment
32
+ if self.configuration.use_production == true
33
+ self.configuration.endpoint_url = self.configuration.api_endpoints[:production]
34
+ else
35
+ self.configuration.endpoint_url = self.configuration.api_endpoints[:sandbox]
36
+ end
37
+ end
38
+
39
+ class Configuration
40
+ attr_accessor :api_version,
41
+ :api_token,
42
+ :api_secret,
43
+ :oauth_access_token,
44
+ :format,
45
+ :endpoint_url,
46
+ :user_agent,
47
+ :judo_id,
48
+ :logger,
49
+ :use_production
50
+
51
+ attr_reader :api_endpoints
52
+
53
+ # Set sensible configuration defaults
54
+ def initialize
55
+ @api_version = '4.0.0'
56
+ @format = 'json'
57
+ @use_production = false
58
+ @user_agent = 'Judopay Ruby SDK gem v' + Judopay::VERSION
59
+ @logger = Judopay::NullLogger.new
60
+ @api_endpoints = {
61
+ :sandbox => 'https://partnerapi.judopay-sandbox.com',
62
+ :production => 'https://production.local'
63
+ }.freeze
64
+ @endpoint_url = @api_endpoints[:sandbox]
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,10 @@
1
+ require File.expand_path('../connection', __FILE__)
2
+ require File.expand_path('../request', __FILE__)
3
+
4
+ module Judopay
5
+ # @private
6
+ class API
7
+ include Connection
8
+ include Request
9
+ end
10
+ end
@@ -0,0 +1,67 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'openssl'
4
+ require_relative '../faraday/raise_http_exception'
5
+ require_relative '../faraday/judo_mashify'
6
+
7
+ module Judopay
8
+ # @private
9
+ module Connection
10
+ private
11
+
12
+ def connection(raw = false)
13
+ options = {
14
+ :headers => request_headers,
15
+ :url => Judopay.configuration.endpoint_url,
16
+ :ssl => {
17
+ :ca_file => File.dirname(File.dirname(__FILE__)) + '/certs/rapidssl_ca.crt',
18
+ :cert_store => false,
19
+ :verify => true
20
+ }
21
+ }
22
+
23
+ connection = Faraday::Connection.new(options) do |faraday|
24
+ faraday.adapter :httpclient
25
+ faraday.use Faraday::Request::UrlEncoded
26
+ faraday.use Faraday::Response::Logger, Judopay.configuration.logger
27
+ faraday.use FaradayMiddleware::JudoMashify unless raw
28
+ unless raw
29
+ case Judopay.configuration.format.to_s
30
+ when 'json' then faraday.use Faraday::Response::ParseJson
31
+ end
32
+ end
33
+ faraday.use FaradayMiddleware::RaiseHttpException
34
+ end
35
+
36
+ # Authentication with basic auth if there is no OAuth2 access token
37
+ if Judopay.configuration.oauth_access_token.nil?
38
+ connection.basic_auth(
39
+ Judopay.configuration.api_token,
40
+ Judopay.configuration.api_secret
41
+ )
42
+ Judopay.log(Logger::DEBUG, 'Using HTTP basic auth')
43
+ end
44
+
45
+ connection
46
+ end
47
+
48
+ def request_headers
49
+ format = Judopay.configuration.format
50
+
51
+ headers = {
52
+ 'Accept' => "application/#{format}; charset=utf-8",
53
+ 'User-Agent' => Judopay.configuration.user_agent,
54
+ 'API-Version' => Judopay.configuration.api_version,
55
+ 'Content-Type' => 'application/json'
56
+ }
57
+
58
+ # Do we have an OAuth2 access token?
59
+ unless Judopay.configuration.oauth_access_token.nil?
60
+ headers['Authorization'] = 'Bearer ' + Judopay.configuration.oauth_access_token
61
+ Judopay.log(Logger::DEBUG, 'Using OAuth2 access token')
62
+ end
63
+
64
+ headers
65
+ end
66
+ end
67
+ end