taler 0.1.0 → 0.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 +4 -4
- data/.yardopts +2 -0
- data/CHANGELOG.md +18 -1
- data/README.md +44 -14
- data/lib/taler/client.rb +52 -18
- data/lib/taler/order.rb +104 -0
- data/lib/taler/version.rb +2 -1
- data/lib/taler.rb +3 -0
- data/sig/taler.rbs +146 -2
- metadata +146 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dc1ef9028362bec363c1c645759524173618697fc1a0ce52cfb87539c5ecc2b1
|
|
4
|
+
data.tar.gz: 50654905eb23b1f07571cbe96bb30d223320ea65f82779e2a3a7990bf5af4bfe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c4ada42f23bfc80478b5bff58d03b166c221bfc7d054153f8f079a6b4869eb319a0d6051826a05df53b6053dcf0e3b08cc133524a9a2e5085ece452ad1fdfa8b
|
|
7
|
+
data.tar.gz: '0029a33dfd7313028d146748039acd2d38683cb5b25b6ec8916e3097e79c129a9281381423bac354c888c74336a63a2b33ced5697fee1c83bd383da301bdc510'
|
data/.yardopts
ADDED
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
-
## [0.
|
|
3
|
+
## [0.3.0] - 2026-02-24
|
|
4
|
+
|
|
5
|
+
- Update docs and rbs file.
|
|
6
|
+
- Custom methods `Taler::Order#to_s` and `#inspect`.
|
|
7
|
+
- Replaced deprecated password auth with access token.
|
|
8
|
+
|
|
9
|
+
## [0.2.0] - 2026-02-02
|
|
10
|
+
|
|
11
|
+
- Add `Taler::Order` as an easier interface.
|
|
12
|
+
- Add method to refund orders.
|
|
13
|
+
- Add option for fulfillment message instead of fulfillment URL.
|
|
14
|
+
- Add documentation with yard.
|
|
15
|
+
|
|
16
|
+
## [0.1.0] - 2026-01-19
|
|
17
|
+
|
|
18
|
+
- Add `Taler::Client` to create access token and orders. Fetch orders.
|
|
19
|
+
|
|
20
|
+
## [0.0.0] - 2025-10-14
|
|
4
21
|
|
|
5
22
|
- Initial release generated by bundler. Nothing to see yet.
|
data/README.md
CHANGED
|
@@ -1,33 +1,63 @@
|
|
|
1
1
|
# GNU Taler payment API for Ruby
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The Taler library let's you interact with a Taler merchant backend API to
|
|
4
|
+
take payments.
|
|
4
5
|
|
|
5
6
|
## Installation
|
|
6
7
|
|
|
7
|
-
TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
|
|
8
|
-
|
|
9
|
-
Install the gem and add to the application's Gemfile by executing:
|
|
10
|
-
|
|
11
8
|
```bash
|
|
12
|
-
|
|
9
|
+
gem install taler # or
|
|
10
|
+
bundle add taler
|
|
13
11
|
```
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```rb
|
|
16
|
+
require "taler"
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
backend_url = "https://backend.demo.taler.net/instances/sandbox"
|
|
19
|
+
backend_password = "sandbox"
|
|
20
|
+
|
|
21
|
+
order = Taler::Order.new(backend_url:, password:)
|
|
22
|
+
order.create(
|
|
23
|
+
amount: "KUDOS:4",
|
|
24
|
+
summary: "Order total",
|
|
25
|
+
fulfillment_message: "Thank you!"
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
puts "Pay at: #{order.status_url}"
|
|
29
|
+
|
|
30
|
+
while order.fetch("order_status") == "unpaid"
|
|
31
|
+
sleep 1
|
|
32
|
+
order.reload
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if order.fetch("order_status") == "paid"
|
|
36
|
+
puts "Great. All paid."
|
|
37
|
+
else
|
|
38
|
+
puts "Sorry, the order is #{order.fetch("order_status")}. Try again."
|
|
39
|
+
end
|
|
19
40
|
```
|
|
20
41
|
|
|
21
|
-
|
|
42
|
+
Read more in the official documentation:
|
|
22
43
|
|
|
23
|
-
|
|
44
|
+
- https://rubydoc.info/gems/taler
|
|
24
45
|
|
|
25
46
|
## Development
|
|
26
47
|
|
|
27
|
-
After checking out the repo, run `bin/setup` to install dependencies.
|
|
48
|
+
After checking out the repo, run `bin/setup` to install dependencies.
|
|
49
|
+
Then, run `rake` to run the tests.
|
|
50
|
+
You can also run `bin/console` for an interactive prompt.
|
|
51
|
+
|
|
52
|
+
## Release
|
|
28
53
|
|
|
29
|
-
|
|
54
|
+
- Update the version number in `lib/taler/version.rb`.
|
|
55
|
+
- Update the `CHANGELOG.md` file.
|
|
56
|
+
- Run `bundle update`.
|
|
57
|
+
- Commit.
|
|
58
|
+
- Run `bundle exec rake release` to build, tag and push the gem.
|
|
30
59
|
|
|
31
60
|
## Contributing
|
|
32
61
|
|
|
33
|
-
Bug reports and pull requests are welcome on GitHub
|
|
62
|
+
Bug reports and pull requests are welcome on GitHub
|
|
63
|
+
at https://github.com/openfoodfoundation/taler-ruby.
|
data/lib/taler/client.rb
CHANGED
|
@@ -4,54 +4,88 @@ require "json"
|
|
|
4
4
|
require "net/http"
|
|
5
5
|
|
|
6
6
|
module Taler
|
|
7
|
+
# Access the GNU Taler merchant backend API.
|
|
8
|
+
#
|
|
9
|
+
# See: https://docs.taler.net/core/api-merchant.html
|
|
7
10
|
class Client
|
|
11
|
+
# @param backend_url [String] e.g. `"https://backend.demo.taler.net/instances/sandbox"`
|
|
12
|
+
# @param password [String]
|
|
8
13
|
def initialize(backend_url, password)
|
|
9
14
|
@backend_url = backend_url
|
|
10
15
|
@password = password
|
|
11
16
|
end
|
|
12
17
|
|
|
18
|
+
# Obtain an access token to authenticate all other API calls.
|
|
19
|
+
#
|
|
20
|
+
# @return [String]
|
|
13
21
|
def request_token
|
|
14
22
|
url = "#{@backend_url}/private/token"
|
|
15
23
|
payload = {scope: "write"}
|
|
16
|
-
result = request(url, payload:)
|
|
24
|
+
result = request(url, token: auth_token, payload:)
|
|
17
25
|
result.fetch("token")
|
|
18
26
|
end
|
|
19
27
|
|
|
20
|
-
|
|
28
|
+
# @param amount [String] e.g. "KUDOS:200"
|
|
29
|
+
# @param summary [String] A description of the order displayed to the user.
|
|
30
|
+
# @param fulfillment_url [String] The user is redirected to this URL after
|
|
31
|
+
# payment. The order status page also links here.
|
|
32
|
+
# @param fulfillment_message [String] Text to display to the user after
|
|
33
|
+
# payment.
|
|
34
|
+
# @return [Hash] The resonse from the backend, usually just containing an
|
|
35
|
+
# order id, e.g. `{order_id: "xxxxx"}`
|
|
36
|
+
def create_order(amount:, summary:, fulfillment_url: nil, fulfillment_message: nil)
|
|
21
37
|
url = "#{@backend_url}/private/orders"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
summary: summary,
|
|
26
|
-
fulfillment_url: fulfillment_url
|
|
27
|
-
},
|
|
28
|
-
create_token: false
|
|
38
|
+
order = {
|
|
39
|
+
amount: amount,
|
|
40
|
+
summary: summary
|
|
29
41
|
}
|
|
42
|
+
order[:fulfillment_url] = fulfillment_url unless fulfillment_url.nil?
|
|
43
|
+
order[:fulfillment_message] = fulfillment_message unless fulfillment_message.nil?
|
|
44
|
+
payload = {order:, create_token: false}
|
|
30
45
|
request(url, payload:)
|
|
31
46
|
end
|
|
32
47
|
|
|
48
|
+
# @param order_id [String]
|
|
49
|
+
# @return [String]
|
|
50
|
+
def order_status_url(order_id)
|
|
51
|
+
"#{@backend_url}/orders/#{order_id}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @param order_id [String]
|
|
55
|
+
# @return [Hash] The order status returned by the backend.
|
|
33
56
|
def fetch_order(order_id)
|
|
34
57
|
url = "#{@backend_url}/private/orders/#{order_id}"
|
|
35
58
|
request(url)
|
|
36
59
|
end
|
|
37
60
|
|
|
61
|
+
# @param order_id [String]
|
|
62
|
+
# @param refund [String] The amount with currency.
|
|
63
|
+
# @param reason [String] Why are you refunding?
|
|
64
|
+
#
|
|
65
|
+
# @return [Hash] Response from the merchant backend.
|
|
66
|
+
def refund_order(order_id, refund:, reason:)
|
|
67
|
+
url = "#{@backend_url}/private/orders/#{order_id}/refund"
|
|
68
|
+
payload = {refund:, reason:}
|
|
69
|
+
request(url, payload:)
|
|
70
|
+
end
|
|
71
|
+
|
|
38
72
|
private
|
|
39
73
|
|
|
74
|
+
# @return [String]
|
|
40
75
|
def auth_token
|
|
41
76
|
"secret-token:#{@password}"
|
|
42
77
|
end
|
|
43
78
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"Accept" => "application/json",
|
|
48
|
-
"User-Agent" => "Taler Ruby"
|
|
49
|
-
}
|
|
50
|
-
response = Net::HTTP.get(URI(url), headers)
|
|
51
|
-
JSON.parse(response)
|
|
79
|
+
# @return [String]
|
|
80
|
+
def access_token
|
|
81
|
+
@access_token ||= request_token
|
|
52
82
|
end
|
|
53
83
|
|
|
54
|
-
|
|
84
|
+
# @param url [String]
|
|
85
|
+
# @param token [String]
|
|
86
|
+
# @param payload [Hash]
|
|
87
|
+
# @return [String]
|
|
88
|
+
def request(url, token: access_token, payload: nil)
|
|
55
89
|
uri = URI(url)
|
|
56
90
|
headers = {
|
|
57
91
|
"Authorization" => "Bearer #{token}",
|
data/lib/taler/order.rb
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Taler
|
|
4
|
+
# Order representation with convenient access to the merchant API.
|
|
5
|
+
class Order
|
|
6
|
+
# Connect an Order to the Taler merchant backend.
|
|
7
|
+
#
|
|
8
|
+
# @param backend_url [String] e.g. `"https://backend.demo.taler.net/instances/sandbox"`
|
|
9
|
+
# @param password [String] e.g. `"sandbox"`
|
|
10
|
+
# @param id [String] The order id of an existing order.
|
|
11
|
+
# @example Connect to the official demo backend
|
|
12
|
+
# Taler::Order.new(
|
|
13
|
+
# backend_url: "https://backend.demo.taler.net/instances/sandbox",
|
|
14
|
+
# password: "sandbox"
|
|
15
|
+
# )
|
|
16
|
+
def initialize(backend_url:, password:, id: nil)
|
|
17
|
+
@client = Client.new(backend_url, password)
|
|
18
|
+
@id = id
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Create a new order record ready to take a payment.
|
|
22
|
+
#
|
|
23
|
+
# @param amount [String] e.g. "KUDOS:200"
|
|
24
|
+
# @param summary [String] A description of the order displayed to the user.
|
|
25
|
+
# @param fulfillment_url [String] The user is redirected to this URL after
|
|
26
|
+
# payment. The order status page also links here.
|
|
27
|
+
# @param fulfillment_message [String] Text to display to the user after
|
|
28
|
+
# payment.
|
|
29
|
+
# @return [String] The id of the new order.
|
|
30
|
+
def create(amount:, summary:, fulfillment_url: nil, fulfillment_message: nil)
|
|
31
|
+
response = @client.create_order(
|
|
32
|
+
amount:, summary:, fulfillment_url:, fulfillment_message:
|
|
33
|
+
)
|
|
34
|
+
@id = response.fetch("order_id")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# The page where the customer can pay or accept a refund,
|
|
38
|
+
# depending on the state of the order.
|
|
39
|
+
#
|
|
40
|
+
# The merchant backend opens the Taler plugin or app if it can.
|
|
41
|
+
# Otherwise it shows a QR code to scan in the app and provides
|
|
42
|
+
# installation instructions.
|
|
43
|
+
#
|
|
44
|
+
# @return [String]
|
|
45
|
+
def status_url
|
|
46
|
+
@client.order_status_url(@id)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Access order status fields.
|
|
50
|
+
#
|
|
51
|
+
# It queries the backend if it hasn't done that already.
|
|
52
|
+
# Call {#reload} beforehand to get the latest status from the backend.
|
|
53
|
+
#
|
|
54
|
+
# @param key [String] A field in the order status response of the backend,
|
|
55
|
+
# e.g. `order_status`.
|
|
56
|
+
# @return [String,true,false] The value of the field.
|
|
57
|
+
# Any simple type supported by JSON.
|
|
58
|
+
# @example
|
|
59
|
+
# fetch("order_status") #=> "unpaid"
|
|
60
|
+
def fetch(key)
|
|
61
|
+
reload unless @status
|
|
62
|
+
@status.fetch(key)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Query the latest order information from the backend.
|
|
66
|
+
#
|
|
67
|
+
# If you called {#fetch} in the past and are expecting updates from
|
|
68
|
+
# user interaction, you want to call this.
|
|
69
|
+
#
|
|
70
|
+
# @return [Hash] The order status returned by the backend.
|
|
71
|
+
def reload
|
|
72
|
+
@status = @client.fetch_order(@id)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Issue a refund request for this order.
|
|
76
|
+
#
|
|
77
|
+
# @param refund [String] The amount with currency.
|
|
78
|
+
# @param reason [String] Why are you refunding?
|
|
79
|
+
#
|
|
80
|
+
# @return [Hash] Response from the merchant backend.
|
|
81
|
+
def refund(refund:, reason:)
|
|
82
|
+
@client.refund_order(@id, refund:, reason:)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# @return [String]
|
|
86
|
+
def inspect
|
|
87
|
+
status = @status.to_h.slice(*%w[
|
|
88
|
+
order_status
|
|
89
|
+
deposit_total
|
|
90
|
+
wired
|
|
91
|
+
refunded
|
|
92
|
+
refund_pending
|
|
93
|
+
refund_amount
|
|
94
|
+
])
|
|
95
|
+
"#<#{self.class.name} #{status_url} #{status.inspect}>"
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# @return [String]
|
|
99
|
+
def to_s
|
|
100
|
+
status = @status.to_h.slice("order_status", "refunded")
|
|
101
|
+
"#<#{self.class.name} #{status_url} #{status.inspect}>"
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
data/lib/taler/version.rb
CHANGED
data/lib/taler.rb
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "taler/client"
|
|
4
|
+
require_relative "taler/order"
|
|
4
5
|
require_relative "taler/version"
|
|
5
6
|
|
|
7
|
+
# GNU Taler payment system interface
|
|
6
8
|
module Taler
|
|
9
|
+
# Base error class for errors raised in this module
|
|
7
10
|
class Error < StandardError; end
|
|
8
11
|
end
|
data/sig/taler.rbs
CHANGED
|
@@ -1,4 +1,148 @@
|
|
|
1
|
+
# GNU Taler payment system interface
|
|
1
2
|
module Taler
|
|
2
3
|
VERSION: String
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
# Base error class for errors raised in this module
|
|
6
|
+
class Error < StandardError
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Order representation with convenient access to the merchant API.
|
|
10
|
+
class Order
|
|
11
|
+
# Connect an Order to the Taler merchant backend.
|
|
12
|
+
#
|
|
13
|
+
# _@param_ `backend_url` — e.g. `"https://backend.demo.taler.net/instances/sandbox"`
|
|
14
|
+
#
|
|
15
|
+
# _@param_ `password` — e.g. `"sandbox"`
|
|
16
|
+
#
|
|
17
|
+
# _@param_ `id` — The order id of an existing order.
|
|
18
|
+
#
|
|
19
|
+
# Connect to the official demo backend
|
|
20
|
+
# ```ruby
|
|
21
|
+
# Taler::Order.new(
|
|
22
|
+
# backend_url: "https://backend.demo.taler.net/instances/sandbox",
|
|
23
|
+
# password: "sandbox"
|
|
24
|
+
# )
|
|
25
|
+
# ```
|
|
26
|
+
def initialize: (backend_url: String, password: String, ?id: String?) -> void
|
|
27
|
+
|
|
28
|
+
# Create a new order record ready to take a payment.
|
|
29
|
+
#
|
|
30
|
+
# _@param_ `amount` — e.g. "KUDOS:200"
|
|
31
|
+
#
|
|
32
|
+
# _@param_ `summary` — A description of the order displayed to the user.
|
|
33
|
+
#
|
|
34
|
+
# _@param_ `fulfillment_url` — The user is redirected to this URL after payment. The order status page also links here.
|
|
35
|
+
#
|
|
36
|
+
# _@param_ `fulfillment_message` — Text to display to the user after payment.
|
|
37
|
+
#
|
|
38
|
+
# _@return_ — The id of the new order.
|
|
39
|
+
def create: (
|
|
40
|
+
amount: String,
|
|
41
|
+
summary: String,
|
|
42
|
+
?fulfillment_url: String?,
|
|
43
|
+
?fulfillment_message: String?
|
|
44
|
+
) -> String
|
|
45
|
+
|
|
46
|
+
# The page where the customer can pay or accept a refund,
|
|
47
|
+
# depending on the state of the order.
|
|
48
|
+
#
|
|
49
|
+
# The merchant backend opens the Taler plugin or app if it can.
|
|
50
|
+
# Otherwise it shows a QR code to scan in the app and provides
|
|
51
|
+
# installation instructions.
|
|
52
|
+
def status_url: () -> String
|
|
53
|
+
|
|
54
|
+
# Access order status fields.
|
|
55
|
+
#
|
|
56
|
+
# It queries the backend if it hasn't done that already.
|
|
57
|
+
# Call {#reload} beforehand to get the latest status from the backend.
|
|
58
|
+
#
|
|
59
|
+
# _@param_ `key` — A field in the order status response of the backend, e.g. `order_status`.
|
|
60
|
+
#
|
|
61
|
+
# _@return_ — The value of the field.
|
|
62
|
+
# Any simple type supported by JSON.
|
|
63
|
+
#
|
|
64
|
+
# ```ruby
|
|
65
|
+
# fetch("order_status") #=> "unpaid"
|
|
66
|
+
# ```
|
|
67
|
+
def fetch: (String key) -> (String | bool)
|
|
68
|
+
|
|
69
|
+
# Query the latest order information from the backend.
|
|
70
|
+
#
|
|
71
|
+
# If you called {#fetch} in the past and are expecting updates from
|
|
72
|
+
# user interaction, you want to call this.
|
|
73
|
+
#
|
|
74
|
+
# _@return_ — The order status returned by the backend.
|
|
75
|
+
def reload: () -> ::Hash[untyped, untyped]
|
|
76
|
+
|
|
77
|
+
# Issue a refund request for this order.
|
|
78
|
+
#
|
|
79
|
+
# _@param_ `refund` — The amount with currency.
|
|
80
|
+
#
|
|
81
|
+
# _@param_ `reason` — Why are you refunding?
|
|
82
|
+
#
|
|
83
|
+
# _@return_ — Response from the merchant backend.
|
|
84
|
+
def refund: (refund: String, reason: String) -> ::Hash[untyped, untyped]
|
|
85
|
+
|
|
86
|
+
def inspect: () -> String
|
|
87
|
+
|
|
88
|
+
def to_s: () -> String
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Access the GNU Taler merchant backend API.
|
|
92
|
+
#
|
|
93
|
+
# See: https://docs.taler.net/core/api-merchant.html
|
|
94
|
+
class Client
|
|
95
|
+
# _@param_ `backend_url` — e.g. `"https://backend.demo.taler.net/instances/sandbox"`
|
|
96
|
+
#
|
|
97
|
+
# _@param_ `password`
|
|
98
|
+
def initialize: (String backend_url, String password) -> void
|
|
99
|
+
|
|
100
|
+
# Obtain an access token to authenticate all other API calls.
|
|
101
|
+
def request_token: () -> String
|
|
102
|
+
|
|
103
|
+
# _@param_ `amount` — e.g. "KUDOS:200"
|
|
104
|
+
#
|
|
105
|
+
# _@param_ `summary` — A description of the order displayed to the user.
|
|
106
|
+
#
|
|
107
|
+
# _@param_ `fulfillment_url` — The user is redirected to this URL after payment. The order status page also links here.
|
|
108
|
+
#
|
|
109
|
+
# _@param_ `fulfillment_message` — Text to display to the user after payment.
|
|
110
|
+
#
|
|
111
|
+
# _@return_ — The resonse from the backend, usually just containing an
|
|
112
|
+
# order id, e.g. `{order_id: "xxxxx"}`
|
|
113
|
+
def create_order: (
|
|
114
|
+
amount: String,
|
|
115
|
+
summary: String,
|
|
116
|
+
?fulfillment_url: String?,
|
|
117
|
+
?fulfillment_message: String?
|
|
118
|
+
) -> ::Hash[untyped, untyped]
|
|
119
|
+
|
|
120
|
+
# _@param_ `order_id`
|
|
121
|
+
def order_status_url: (String order_id) -> String
|
|
122
|
+
|
|
123
|
+
# _@param_ `order_id`
|
|
124
|
+
#
|
|
125
|
+
# _@return_ — The order status returned by the backend.
|
|
126
|
+
def fetch_order: (String order_id) -> ::Hash[untyped, untyped]
|
|
127
|
+
|
|
128
|
+
# _@param_ `order_id`
|
|
129
|
+
#
|
|
130
|
+
# _@param_ `refund` — The amount with currency.
|
|
131
|
+
#
|
|
132
|
+
# _@param_ `reason` — Why are you refunding?
|
|
133
|
+
#
|
|
134
|
+
# _@return_ — Response from the merchant backend.
|
|
135
|
+
def refund_order: (String order_id, refund: String, reason: String) -> ::Hash[untyped, untyped]
|
|
136
|
+
|
|
137
|
+
def auth_token: () -> String
|
|
138
|
+
|
|
139
|
+
def access_token: () -> String
|
|
140
|
+
|
|
141
|
+
# _@param_ `url`
|
|
142
|
+
#
|
|
143
|
+
# _@param_ `token`
|
|
144
|
+
#
|
|
145
|
+
# _@param_ `payload`
|
|
146
|
+
def request: (String url, ?token: String, ?payload: ::Hash[untyped, untyped]?) -> String
|
|
147
|
+
end
|
|
148
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,155 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: taler
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Maikel Linke
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
-
dependencies:
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: irb
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rake
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :development
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: guard-rspec
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rspec
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: vcr
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :development
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: webmock
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: '0'
|
|
89
|
+
type: :development
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: '0'
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: standard
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: yard
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - ">="
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '0'
|
|
117
|
+
type: :development
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - ">="
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '0'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: redcarpet
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - ">="
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0'
|
|
131
|
+
type: :development
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - ">="
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '0'
|
|
138
|
+
- !ruby/object:Gem::Dependency
|
|
139
|
+
name: sord
|
|
140
|
+
requirement: !ruby/object:Gem::Requirement
|
|
141
|
+
requirements:
|
|
142
|
+
- - ">="
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: '0'
|
|
145
|
+
type: :development
|
|
146
|
+
prerelease: false
|
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - ">="
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '0'
|
|
152
|
+
description: Create and refund orders through the Taler merchant backend API.
|
|
12
153
|
email:
|
|
13
154
|
- maikel@email.org.au
|
|
14
155
|
executables: []
|
|
@@ -17,12 +158,14 @@ extra_rdoc_files: []
|
|
|
17
158
|
files:
|
|
18
159
|
- ".rspec"
|
|
19
160
|
- ".standard.yml"
|
|
161
|
+
- ".yardopts"
|
|
20
162
|
- CHANGELOG.md
|
|
21
163
|
- LICENSE
|
|
22
164
|
- README.md
|
|
23
165
|
- Rakefile
|
|
24
166
|
- lib/taler.rb
|
|
25
167
|
- lib/taler/client.rb
|
|
168
|
+
- lib/taler/order.rb
|
|
26
169
|
- lib/taler/version.rb
|
|
27
170
|
- sig/taler.rbs
|
|
28
171
|
homepage: https://github.com/openfoodfoundation/taler-ruby
|
|
@@ -38,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
38
181
|
requirements:
|
|
39
182
|
- - ">="
|
|
40
183
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: 3.
|
|
184
|
+
version: 3.3.0
|
|
42
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
186
|
requirements:
|
|
44
187
|
- - ">="
|