paymium 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5706b4c947cafd84f95f3a346b094af2422c0d59
4
+ data.tar.gz: 36fc8e2eb461d4f75cd7410a4949a08a3d4c636c
5
+ SHA512:
6
+ metadata.gz: 073d60640008402cdd82691b3958274f98b9cf8132a9cef45cc82c6763d03f4193d564238451732826098e3a12ab4710c56a6aea138544a424a45a3cb09b7d4c
7
+ data.tar.gz: 63e1e16c67d0f08e1597f775e8b4cb24ab94148ccb6ec79adf82583c3f0511a33dc6b64a502f9159159a6a85263a982d6ed04cdcb07efca55ef3d88c73e6e6b8
data/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # Paymium ruby client [![Build Status](https://secure.travis-ci.org/Paymium/paymium_gem.png?branch=master)](http://travis-ci.org/Paymium/paymium_gem) [![Coverage Status](https://img.shields.io/coveralls/Paymium/paymium_gem.svg)](https://coveralls.io/r/Paymium/paymium_gem?branch=master) [![Gem Version](https://badge.fury.io/rb/paymium_gem.svg)](http://badge.fury.io/rb/paymium_gem)
2
+
3
+ Simple ruby wrapper for the [Paymium API](https://github.com/Paymium/api-documentation).
4
+
5
+ ## Usage
6
+
7
+ ```ruby
8
+ paymium = Paymium::Api::Client.new({
9
+ host: 'https://paymium.com/api/v1',
10
+ key: '<api token>',
11
+ secret: '<api secret>'
12
+ })
13
+
14
+ paymium.get('/data/EUR/ticker')
15
+
16
+ paymium.get('/user')
17
+ ````
18
+
data/bin/paymium ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift File.join(File.dirname(__FILE__), '../lib')
3
+
4
+ require 'paymium'
5
+
6
+ puts "Paymium API wrapper v#{Paymium::VERSION}"
7
+ puts "This executable doesn't do anything yet"
8
+
data/lib/paymium.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'oj'
2
+
3
+ Oj.default_options = {
4
+ bigdecimal_load: true,
5
+ bigdecimal_as_decimal: true,
6
+ mode: :compat
7
+ }
8
+
9
+ require 'paymium/client'
10
+ require 'paymium/version'
11
+
@@ -0,0 +1,76 @@
1
+ require 'net/http'
2
+ require 'openssl'
3
+ require 'base64'
4
+
5
+ module Paymium
6
+ class Client
7
+
8
+ def initialize config = {}
9
+ @config = HashWithIndifferentAccess.new config
10
+ @host = URI.parse @config.delete(:host)
11
+ end
12
+
13
+ def get path, params = {}, &block
14
+ uri = uri_from_path(path)
15
+ uri.query = URI.encode_www_form params unless params.empty?
16
+ request Net::HTTP::Get.new(uri), &block
17
+ end
18
+
19
+ def post path, params = {}, &block
20
+ req = Net::HTTP::Post.new(uri_from_path(path))
21
+ req.body = Oj.dump(params)
22
+ request req, &block
23
+ end
24
+
25
+ def delete path, params = {}, &block
26
+ uri = uri_from_path(path)
27
+ uri.query = URI.encode_www_form params unless params.empty?
28
+ request Net::HTTP::Delete.new(uri), &block
29
+ end
30
+
31
+ private
32
+
33
+ def set_header_fields req
34
+ key = @config[:key]
35
+ nonce = (Time.now.to_f * 10**6).to_i
36
+ data = [nonce, req.uri.to_s, req.body].compact.join
37
+ sig = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @config[:secret], data).strip
38
+ req.add_field "Api-Key", key
39
+ req.add_field "Api-Nonce", nonce
40
+ req.add_field "Api-Signature", sig
41
+ req
42
+ end
43
+
44
+ def uri_from_path path
45
+ uri = @host.dup
46
+ uri.path = "#{@host.path}/#{path}".gsub('//','/')
47
+ uri
48
+ end
49
+
50
+ def request req, &block
51
+ req.content_type = 'application/json'
52
+ set_header_fields(req) if @config[:key].present? and @config[:secret].present?
53
+ Net::HTTP.start(@host.host, @host.port, :use_ssl => @host.scheme == 'https') do |http|
54
+ resp = http.request req
55
+ handle_response resp, &block
56
+ end
57
+ end
58
+
59
+ #todo use Oj to parse response to handle big decimal
60
+ def handle_response resp, &block
61
+ if resp.class < Net::HTTPSuccess
62
+ resp = Oj.load(resp.body)
63
+ block.nil? ? resp : block.call(resp)
64
+ else
65
+ if resp.content_type == 'application/json'
66
+ raise Error, [resp.message, Oj.load(resp.body)['errors']]
67
+ else
68
+ raise Error, resp.message
69
+ end
70
+ end
71
+ end
72
+
73
+ class Error < RuntimeError; end
74
+
75
+ end
76
+ end
@@ -0,0 +1,3 @@
1
+ module Paymium
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paymium
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Nicolas PAPON
8
+ - David FRANCOIS
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-10-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: oj
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '2'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '2'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '3'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: simplecov
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 0.10.0
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.10.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: yard
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: coveralls
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '0.7'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: '0.7'
98
+ description: The client handles authentication and enables users to directly issue
99
+ requests to the Paymium API
100
+ email:
101
+ - nicolas.papon@paymium.com
102
+ - david.francois@paymium.com
103
+ executables:
104
+ - paymium
105
+ extensions: []
106
+ extra_rdoc_files: []
107
+ files:
108
+ - README.md
109
+ - bin/paymium
110
+ - lib/paymium.rb
111
+ - lib/paymium/client.rb
112
+ - lib/paymium/version.rb
113
+ homepage: https://paymium.com
114
+ licenses:
115
+ - MIT
116
+ metadata: {}
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project:
133
+ rubygems_version: 2.4.2
134
+ signing_key:
135
+ specification_version: 4
136
+ summary: Paymium API client
137
+ test_files: []
138
+ has_rdoc: