mobilepay 1.1.5 → 1.3.0

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
  SHA1:
3
- metadata.gz: 0ed8cd01478cd62cb2fff164d2462df436e134be
4
- data.tar.gz: 169b04892f82143102c62808e200024252243434
3
+ metadata.gz: 911b78597309b66a9038aeffb8eb9f51120d02b6
4
+ data.tar.gz: 210a253262c808ee88a804bda67eb27df0696594
5
5
  SHA512:
6
- metadata.gz: dabc279c9015995637acd75aea52edb3323935bb371323c4f4be839e0dc4da8c32f95a7afd000785fffd599833b164d8c04d58496e50af5e2ee506f5fa07fe73
7
- data.tar.gz: d698ae7044f46ec67efef4f26e5c57864aca4389ab32eb36bdf55ac671683e96ade54926f9fc667085e7068a945095da0081f4a2d14e396a2c2fdb87851b908f
6
+ metadata.gz: 654cf5c7761405cd849eca10ceeeb035d3a7ac644cd73b3408ed20967411a50915834fab738dade4f95d905234913d7ef669619a7655d934d53ddb1d090d4c93
7
+ data.tar.gz: 6cdc421f794cee4370551affcef507600ce29ac68963efd7676f03974d615d5f862ea33751996f94710811f58e2f5b0762b3ce7af3d44f64a0ca35f463b0e573
@@ -0,0 +1,46 @@
1
+ AllCops:
2
+ Exclude:
3
+ - bin/*
4
+
5
+ Metrics/AbcSize:
6
+ Enabled: false
7
+
8
+ Metrics/BlockLength:
9
+ Enabled: false
10
+
11
+ Metrics/ClassLength:
12
+ Enabled: false
13
+
14
+ Metrics/LineLength:
15
+ Enabled: false
16
+
17
+ Metrics/MethodLength:
18
+ Enabled: false
19
+
20
+ Metrics/ModuleLength:
21
+ Enabled: false
22
+
23
+ Metrics/CyclomaticComplexity:
24
+ Max: 20
25
+
26
+ Layout/IndentationWidth:
27
+ Width: 4
28
+
29
+ Layout/CaseIndentation:
30
+ EnforcedStyle: case
31
+ SupportedStyles:
32
+ - case
33
+ - end
34
+ IndentOneStep: true
35
+
36
+ Layout/AlignHash:
37
+ Enabled: false
38
+
39
+ Style/GuardClause:
40
+ Enabled: false
41
+
42
+ Style/FileName:
43
+ Enabled: false
44
+
45
+ Style/FormatStringToken:
46
+ EnforcedStyle: template
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
+
3
5
  group :test do
4
6
  gem 'rspec'
5
7
  gem 'webmock'
data/README.md CHANGED
@@ -7,7 +7,6 @@ Actions with payments in MobilePay system.
7
7
  Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'jose'
11
10
  gem 'mobilepay'
12
11
  ```
13
12
 
@@ -25,7 +24,7 @@ Or install it yourself as:
25
24
 
26
25
  ```ruby
27
26
  require 'mobilepay'
28
- security = Mobilepay::Security.new subscription_key: 'subscription_key'
27
+ security = Mobilepay::Security.new subscription_key: 'subscription_key', privatekey: 'key.pvk'
29
28
  ```
30
29
  merchant_id - Merchant ID, required
31
30
 
@@ -33,7 +32,6 @@ Or install it yourself as:
33
32
 
34
33
  ```ruby
35
34
  require 'mobilepay'
36
- require 'jose'
37
35
  client = Mobilepay::Client.new merchant_id: 'merchant_id', subscription_key: 'subscription_key', privatekey: 'key.pvk', test_mode: true
38
36
  ```
39
37
  subscription_key - Subscription Key for MobilePay, required
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -2,6 +2,7 @@ require_relative 'mobilepay/version'
2
2
  require_relative 'mobilepay/client'
3
3
  require_relative 'mobilepay/security'
4
4
 
5
+ # Top-level comment
5
6
  module Mobilepay
6
7
  class Failure < StandardError; end
7
8
  end
@@ -1,4 +1,4 @@
1
- require 'json'
1
+ require 'httparty'
2
2
  require_relative 'client/payment_status'
3
3
  require_relative 'client/payment_transactions'
4
4
  require_relative 'client/reservations'
@@ -9,7 +9,9 @@ require_relative 'requests'
9
9
  require_relative 'requests/generate_signature'
10
10
 
11
11
  module Mobilepay
12
+ # Clients requests
12
13
  class Client
14
+ include HTTParty
13
15
  include Mobilepay::Client::PaymentStatus
14
16
  include Mobilepay::Client::PaymentTransactions
15
17
  include Mobilepay::Client::Reservations
@@ -19,35 +21,20 @@ module Mobilepay
19
21
  include Mobilepay::Requests
20
22
  include Mobilepay::Requests::GenerateSignature
21
23
 
22
- attr_reader :merchant_id, :subscription_key, :privatekey, :test_mode, :base_uri
24
+ base_uri 'https://api.mobeco.dk/appswitch/api/v1'
25
+ format :json
26
+
27
+ attr_reader :privatekey, :headers, :merchant_id, :body
23
28
 
24
29
  def initialize(args = {})
25
- @merchant_id = args[:merchant_id] || ''
26
- @subscription_key = args[:subscription_key] || ''
27
30
  @privatekey = args[:privatekey]
28
- @test_mode = args[:test_mode] || false
29
- @base_uri = 'https://api.mobeco.dk/appswitch/api/v1'
30
- end
31
-
32
- private
33
-
34
- def call(req, address, args = {})
35
- response = case req
36
- when :get, :put, :delete then http_request(req, address, args)
37
- else raise Failure, 'Undefined type for call'
38
- end
39
- check_response(response)
40
- response
41
- end
42
-
43
- def check_response(response)
44
- if response.code != '200'
45
- error_message = response.body.empty? ? response.code : response.body
46
- raise Failure, error_message
47
- end
31
+ @headers = { 'Ocp-Apim-Subscription-Key' => args[:subscription_key], 'Content-Type' => 'application/json' }
32
+ @merchant_id = args[:merchant_id]
33
+ headers['Test-mode'] = 'true' if args[:test_mode] == true
34
+ @body = ''
48
35
  end
49
36
 
50
- def check_args(args)
37
+ private def check_args(args)
51
38
  args.each do |arg_name, value|
52
39
  if value.nil?
53
40
  raise Failure, "Invalid argument '#{arg_name}', must be string"
@@ -55,4 +42,4 @@ module Mobilepay
55
42
  end
56
43
  end
57
44
  end
58
- end
45
+ end
@@ -1,17 +1,15 @@
1
1
  module Mobilepay
2
2
  class Client
3
+ # Reservations_CancelReservation
3
4
  module CancelReservation
4
-
5
- # Reservations_CancelReservation
6
5
  # Cancels a specific reservation
7
6
  def cancel_reservation(args = {})
8
7
  check_args(order_id: args[:order_id])
9
- response = call(:delete, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '' })
10
- JSON.parse(response.body)
8
+ response = request(:delete, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}")
9
+ response.parsed_response
11
10
  rescue Failure => ex
12
11
  return { error: ex.message }
13
12
  end
14
-
15
13
  end
16
14
  end
17
- end
15
+ end
@@ -1,17 +1,16 @@
1
1
  module Mobilepay
2
2
  class Client
3
+ # Reservations_CaptureAmount
3
4
  module CaptureAmount
4
-
5
- # Reservations_CaptureAmount
6
5
  # Captures a previously reserved amount, either in full or partially
7
6
  def capture_amount(args = {})
8
7
  check_args(order_id: args[:order_id])
9
- response = call(:put, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: args[:body] || '' })
10
- JSON.parse(response.body)
8
+ @body = args[:body]
9
+ response = request(:put, "/reservations/merchants/#{merchant_id}/orders/#{args[:order_id]}")
10
+ response.parsed_response
11
11
  rescue Failure => ex
12
12
  return { error: ex.message }
13
13
  end
14
-
15
14
  end
16
15
  end
17
- end
16
+ end
@@ -1,17 +1,15 @@
1
1
  module Mobilepay
2
2
  class Client
3
+ # Merchants_GetPaymentStatus
3
4
  module PaymentStatus
4
-
5
- # Merchants_GetPaymentStatus
6
5
  # Gets the status of a given order
7
6
  def payment_status(args = {})
8
7
  check_args(order_id: args[:order_id])
9
- response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: '' })
10
- JSON.parse(response.body)
8
+ response = request(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}")
9
+ response.parsed_response
11
10
  rescue Failure => ex
12
11
  return { error: ex.message }
13
12
  end
14
-
15
13
  end
16
14
  end
17
- end
15
+ end
@@ -1,17 +1,15 @@
1
1
  module Mobilepay
2
2
  class Client
3
+ # Merchants_GetPaymentTransactions
3
4
  module PaymentTransactions
4
-
5
- # Merchants_GetPaymentTransactions
6
5
  # Gets the transactions for a given order
7
6
  def payment_transactions(args = {})
8
7
  check_args(order_id: args[:order_id])
9
- response = call(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}/transactions", { body: '' })
10
- JSON.parse(response.body)
8
+ response = request(:get, "/merchants/#{merchant_id}/orders/#{args[:order_id]}/transactions")
9
+ response.parsed_response
11
10
  rescue Failure => ex
12
11
  return { error: ex.message }
13
12
  end
14
-
15
13
  end
16
14
  end
17
- end
15
+ end
@@ -1,17 +1,16 @@
1
1
  module Mobilepay
2
2
  class Client
3
+ # Merchants_RefundAmount
3
4
  module RefundAmount
4
-
5
- # Merchants_RefundAmount
6
5
  # Refunds an amount to the customer based on an order id
7
6
  def refund_amount(args = {})
8
7
  check_args(order_id: args[:order_id])
9
- response = call(:put, "/merchants/#{merchant_id}/orders/#{args[:order_id]}", { body: args[:body] || '{}' })
10
- JSON.parse(response.body)
8
+ @body = args[:body]
9
+ response = request(:put, "/merchants/#{merchant_id}/orders/#{args[:order_id]}")
10
+ response.parsed_response
11
11
  rescue Failure => ex
12
12
  return { error: ex.message }
13
13
  end
14
-
15
14
  end
16
15
  end
17
- end
16
+ end
@@ -1,19 +1,17 @@
1
1
  module Mobilepay
2
2
  class Client
3
+ # Reservations_GetReservations
3
4
  module Reservations
4
-
5
- # Reservations_GetReservations
6
5
  # Get the reservations for a particular date/time interval, and alternatively also for a specific customer
7
6
  def reservations(args = {})
8
7
  check_args(datetime_from: args[:datetime_from], datetime_to: args[:datetime_to])
9
- address = "/reservations/merchants/#{merchant_id}/#{args[:datetime_from]}/#{args[:datetime_to]}"
10
- address += "?customerId=#{args[:customer_id]}" if args[:customer_id]
11
- response = call(:get, address, { body: '{}' })
12
- JSON.parse(response.body)
8
+ uri = "/reservations/merchants/#{merchant_id}/#{args[:datetime_from]}/#{args[:datetime_to]}"
9
+ uri += "?customerId=#{args[:customer_id]}" if args[:customer_id]
10
+ response = request(:get, uri)
11
+ response.parsed_response
13
12
  rescue Failure => ex
14
13
  return { error: ex.message }
15
14
  end
16
-
17
15
  end
18
16
  end
19
- end
17
+ end
@@ -1,37 +1,30 @@
1
- require 'net/http'
2
-
3
1
  module Mobilepay
2
+ # Common requests for classes
4
3
  module Requests
5
-
6
- private
7
-
8
- def http_request(req, address, args = {})
9
- uri = generate_uri(address)
10
- req = generate_request(req, uri)
11
- req = generate_headers(req, args[:body])
12
- Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
4
+ private def request(type, uri)
5
+ add_signature(uri)
6
+ response = send_request(type, uri)
7
+ check_response(response)
8
+ response
13
9
  end
14
10
 
15
- def generate_uri(address = '')
16
- URI("#{base_uri}#{address}")
11
+ private def add_signature(uri)
12
+ headers['AuthenticationSignature'] = generate_signature(uri)
17
13
  end
18
14
 
19
- def generate_request(req, uri)
20
- case req
21
- when :get then Net::HTTP::Get.new(uri)
22
- when :put then Net::HTTP::Put.new(uri)
23
- when :delete then Net::HTTP::Delete.new(uri)
15
+ private def send_request(type, uri)
16
+ case type
17
+ when :get then self.class.get(uri, query: {}, headers: headers)
18
+ when :put then self.class.put(uri, query: {}, headers: headers)
19
+ when :delete then self.class.delete(uri, query: {}, headers: headers)
24
20
  end
25
21
  end
26
22
 
27
- def generate_headers(req, body)
28
- req['Content-Type'] = 'application/json'
29
- req['Ocp-Apim-Subscription-Key'] = subscription_key
30
- req['AuthenticationSignature'] = generate_signature(req) unless privatekey.nil?
31
- req['Test-mode'] = test_mode if test_mode == true
32
- req.body = body
33
- req
23
+ private def check_response(response)
24
+ if response.code != 200
25
+ error_message = response.message.empty? ? response.code : response.message
26
+ raise Failure, error_message
27
+ end
34
28
  end
35
-
36
29
  end
37
- end
30
+ end
@@ -4,18 +4,16 @@ require 'jose'
4
4
 
5
5
  module Mobilepay
6
6
  module Requests
7
+ # Generate signature module
7
8
  module GenerateSignature
8
-
9
9
  # Generate Authentication Signature
10
- def generate_signature(request)
11
- payload = (request.uri.to_s + request.body.to_s).encode('UTF-8')
10
+ def generate_signature(uri)
11
+ payload = (Mobilepay::Client.base_uri + uri + body.to_s).encode('UTF-8')
12
12
  payload_sha1 = Digest::SHA1.digest(payload)
13
13
  payload_base64 = Base64.strict_encode64(payload_sha1)
14
-
15
14
  jwk = JOSE::JWK.from_pem_file(privatekey)
16
- JOSE::JWS.sign(jwk, payload_base64, { 'alg' => 'RS256', 'typ' => 'JWT' }).compact
15
+ JOSE::JWS.sign(jwk, payload_base64, 'alg' => 'RS256', 'typ' => 'JWT').compact
17
16
  end
18
-
19
17
  end
20
18
  end
21
- end
19
+ end
@@ -1,36 +1,25 @@
1
- require 'json'
1
+ require 'httparty'
2
2
  require_relative 'security/public_key'
3
3
  require_relative 'requests'
4
4
  require_relative 'requests/generate_signature'
5
5
 
6
6
  module Mobilepay
7
+ # Security requests
7
8
  class Security
9
+ include HTTParty
8
10
  include Mobilepay::Security::PublicKey
9
11
  include Mobilepay::Requests
10
12
  include Mobilepay::Requests::GenerateSignature
11
13
 
12
- attr_reader :subscription_key, :privatekey, :test_mode, :base_uri
14
+ base_uri 'https://api.mobeco.dk/merchantsecurity/api'
15
+ format :json
13
16
 
14
- def initialize(args = {})
15
- @subscription_key = args[:subscription_key] || ''
16
- @privatekey = nil
17
- @test_mode = false
18
- @base_uri = 'https://api.mobeco.dk/merchantsecurity/api'
19
- end
20
-
21
- private
17
+ attr_reader :privatekey, :headers, :body
22
18
 
23
- def call
24
- response = http_request(:get, '/publickey')
25
- check_response(response)
26
- response
27
- end
28
-
29
- def check_response(response)
30
- if response.code != '200'
31
- error_message = response.body.empty? ? response.code : JSON.parse(response.body)['message']
32
- raise Failure, error_message
33
- end
19
+ def initialize(args = {})
20
+ @privatekey = args[:privatekey]
21
+ @headers = { 'Ocp-Apim-Subscription-Key' => args[:subscription_key], 'Content-Type' => 'application/json' }
22
+ @body = ''
34
23
  end
35
24
  end
36
- end
25
+ end
@@ -1,16 +1,14 @@
1
1
  module Mobilepay
2
2
  class Security
3
+ # Security_PublicKey
3
4
  module PublicKey
4
-
5
- # Secutiry_PublicKey
6
- # Get MobilePay's public key to use when signing up new merchants
5
+ # Gets the public key
7
6
  def public_key
8
- response = call
9
- JSON.parse(response.body)
7
+ response = request(:get, '/publickey')
8
+ response.parsed_response
10
9
  rescue Failure => ex
11
10
  return { error: ex.message }
12
11
  end
13
-
14
12
  end
15
13
  end
16
- end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Mobilepay
2
- VERSION = '1.1.5'
2
+ VERSION = '1.3.0'.freeze
3
3
  end
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'mobilepay/version'
@@ -23,5 +24,7 @@ Gem::Specification.new do |spec|
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.14'
25
26
  spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'jose', '~> 1.1'
27
+ spec.add_development_dependency 'rubocop', '~> 0.49.1'
28
+ spec.add_dependency 'jose', '~> 1.1'
29
+ spec.add_dependency 'httparty', '~> 0.15'
27
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mobilepay
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JungleCoders
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-12-22 00:00:00.000000000 Z
12
+ date: 2017-12-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -39,6 +39,20 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rubocop
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.49.1
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.49.1
42
56
  - !ruby/object:Gem::Dependency
43
57
  name: jose
44
58
  requirement: !ruby/object:Gem::Requirement
@@ -46,13 +60,27 @@ dependencies:
46
60
  - - "~>"
47
61
  - !ruby/object:Gem::Version
48
62
  version: '1.1'
49
- type: :development
63
+ type: :runtime
50
64
  prerelease: false
51
65
  version_requirements: !ruby/object:Gem::Requirement
52
66
  requirements:
53
67
  - - "~>"
54
68
  - !ruby/object:Gem::Version
55
69
  version: '1.1'
70
+ - !ruby/object:Gem::Dependency
71
+ name: httparty
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '0.15'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '0.15'
56
84
  description: Actions with payments in MobilePay system
57
85
  email:
58
86
  - kortirso@gmail.com
@@ -62,6 +90,7 @@ extra_rdoc_files: []
62
90
  files:
63
91
  - ".gitignore"
64
92
  - ".rspec"
93
+ - ".rubocop.yml"
65
94
  - ".travis.yml"
66
95
  - Gemfile
67
96
  - LICENSE.txt