mobilepay 1.1.5 → 1.3.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.
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