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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96d1418bd3c05ff024f0f3d8e478d9f5e8e2b3f69b05f900ae7c25306fd43d44
4
- data.tar.gz: d3f96d79ced6d329da2a79888a99cc7ecf4bc15ae1b4f8c13e2c776895265040
3
+ metadata.gz: dc1ef9028362bec363c1c645759524173618697fc1a0ce52cfb87539c5ecc2b1
4
+ data.tar.gz: 50654905eb23b1f07571cbe96bb30d223320ea65f82779e2a3a7990bf5af4bfe
5
5
  SHA512:
6
- metadata.gz: 48c2d8cb20973d02cbb00117244c9820046da27d91f91bf96d4167749b8fd3b5fc8061e8782ec66d97036c6b1d0f99d37c309484198603837cbd381739809796
7
- data.tar.gz: 8a5c1273e9615eb168fa5a3aa6a2fa14f072c07044ca689720ede647b7ee54ac0bc3052800bbd56590130c0e38cac10705a0f944ef9adf88153de5004f1ff91c
6
+ metadata.gz: c4ada42f23bfc80478b5bff58d03b166c221bfc7d054153f8f079a6b4869eb319a0d6051826a05df53b6053dcf0e3b08cc133524a9a2e5085ece452ad1fdfa8b
7
+ data.tar.gz: '0029a33dfd7313028d146748039acd2d38683cb5b25b6ec8916e3097e79c129a9281381423bac354c888c74336a63a2b33ced5697fee1c83bd383da301bdc510'
data/.yardopts ADDED
@@ -0,0 +1,2 @@
1
+ --markup=markdown
2
+ --markup-provider=redcarpet
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  ## [Unreleased]
2
2
 
3
- ## [0.1.0] - 2025-10-14
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
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/taler`. To experiment with that code, run `bin/console` for an interactive prompt.
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
- bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
9
+ gem install taler # or
10
+ bundle add taler
13
11
  ```
14
12
 
15
- If bundler is not being used to manage dependencies, install the gem by executing:
13
+ ## Usage
14
+
15
+ ```rb
16
+ require "taler"
16
17
 
17
- ```bash
18
- gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
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
- ## Usage
42
+ Read more in the official documentation:
22
43
 
23
- TODO: Write usage instructions here
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. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
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
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
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 at https://github.com/[USERNAME]/taler.
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
- def create_order(amount, summary, fulfillment_url)
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
- payload = {
23
- order: {
24
- amount: amount,
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
- def get(url, token = auth_token)
45
- headers = {
46
- "Authorization" => "Bearer #{token}",
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
- def request(url, token: auth_token, payload: nil)
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}",
@@ -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
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Taler
4
- VERSION = "0.1.0"
4
+ # @return [String]
5
+ VERSION = "0.3.0"
5
6
  end
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
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end
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.1.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.1.0
184
+ version: 3.3.0
42
185
  required_rubygems_version: !ruby/object:Gem::Requirement
43
186
  requirements:
44
187
  - - ">="