duffel_api 0.0.1.pre.dev → 0.1.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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +82 -0
  3. data/.github/dependabot.yml +6 -0
  4. data/.gitignore +9 -0
  5. data/.rubocop.yml +9 -9
  6. data/CHANGELOG.md +1 -3
  7. data/CODE_OF_CONDUCT.md +1 -1
  8. data/Gemfile +10 -2
  9. data/LICENSE.txt +1 -1
  10. data/README.md +190 -33
  11. data/Rakefile +1 -3
  12. data/bin/console +7 -0
  13. data/bin/setup +2 -0
  14. data/duffel_api.gemspec +40 -0
  15. data/examples/book_and_change.rb +106 -0
  16. data/examples/book_with_seat.rb +91 -0
  17. data/examples/exploring_data.rb +43 -0
  18. data/examples/hold_and_pay_later.rb +82 -0
  19. data/examples/search_and_book.rb +91 -0
  20. data/lib/duffel_api/api_response.rb +17 -0
  21. data/lib/duffel_api/api_service.rb +37 -0
  22. data/lib/duffel_api/client.rb +87 -0
  23. data/lib/duffel_api/errors/airline_error.rb +8 -0
  24. data/lib/duffel_api/errors/api_error.rb +8 -0
  25. data/lib/duffel_api/errors/authentication_error.rb +8 -0
  26. data/lib/duffel_api/errors/error.rb +54 -0
  27. data/lib/duffel_api/errors/invalid_request_error.rb +8 -0
  28. data/lib/duffel_api/errors/invalid_state_error.rb +8 -0
  29. data/lib/duffel_api/errors/rate_limit_error.rb +8 -0
  30. data/lib/duffel_api/errors/validation_error.rb +8 -0
  31. data/lib/duffel_api/list_response.rb +27 -0
  32. data/lib/duffel_api/middlewares/raise_duffel_errors.rb +67 -0
  33. data/lib/duffel_api/paginator.rb +27 -0
  34. data/lib/duffel_api/request.rb +64 -0
  35. data/lib/duffel_api/resources/aircraft.rb +26 -0
  36. data/lib/duffel_api/resources/airline.rb +26 -0
  37. data/lib/duffel_api/resources/airport.rb +40 -0
  38. data/lib/duffel_api/resources/base_resource.rb +16 -0
  39. data/lib/duffel_api/resources/offer.rb +60 -0
  40. data/lib/duffel_api/resources/offer_passenger.rb +28 -0
  41. data/lib/duffel_api/resources/offer_request.rb +34 -0
  42. data/lib/duffel_api/resources/order.rb +58 -0
  43. data/lib/duffel_api/resources/order_cancellation.rb +34 -0
  44. data/lib/duffel_api/resources/order_change.rb +46 -0
  45. data/lib/duffel_api/resources/order_change_offer.rb +46 -0
  46. data/lib/duffel_api/resources/order_change_request.rb +30 -0
  47. data/lib/duffel_api/resources/payment.rb +26 -0
  48. data/lib/duffel_api/resources/payment_intent.rb +52 -0
  49. data/lib/duffel_api/resources/refund.rb +42 -0
  50. data/lib/duffel_api/resources/seat_map.rb +24 -0
  51. data/lib/duffel_api/resources/webhook.rb +32 -0
  52. data/lib/duffel_api/response.rb +45 -0
  53. data/lib/duffel_api/services/aircraft_service.rb +36 -0
  54. data/lib/duffel_api/services/airlines_service.rb +36 -0
  55. data/lib/duffel_api/services/airports_service.rb +36 -0
  56. data/lib/duffel_api/services/base_service.rb +29 -0
  57. data/lib/duffel_api/services/offer_passengers_service.rb +30 -0
  58. data/lib/duffel_api/services/offer_requests_service.rb +67 -0
  59. data/lib/duffel_api/services/offers_service.rb +36 -0
  60. data/lib/duffel_api/services/order_cancellations_service.rb +75 -0
  61. data/lib/duffel_api/services/order_change_offers_service.rb +36 -0
  62. data/lib/duffel_api/services/order_change_requests_service.rb +37 -0
  63. data/lib/duffel_api/services/order_changes_service.rb +56 -0
  64. data/lib/duffel_api/services/orders_service.rb +74 -0
  65. data/lib/duffel_api/services/payment_intents_service.rb +56 -0
  66. data/lib/duffel_api/services/payments_service.rb +26 -0
  67. data/lib/duffel_api/services/refunds_service.rb +36 -0
  68. data/lib/duffel_api/services/seat_maps_service.rb +19 -0
  69. data/lib/duffel_api/services/webhooks_service.rb +83 -0
  70. data/lib/duffel_api/version.rb +1 -1
  71. data/lib/duffel_api.rb +51 -4
  72. metadata +90 -12
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DuffelAPI
4
+ module Services
5
+ class PaymentsService < BaseService
6
+ def create(options = {})
7
+ path = "/air/payments"
8
+
9
+ params = options.delete(:params) || {}
10
+ options[:params] = {}
11
+ options[:params]["data"] = params
12
+
13
+ begin
14
+ response = make_request(:post, path, options)
15
+
16
+ # Response doesn't raise any errors until #body is called
17
+ response.tap(&:raw_body)
18
+ end
19
+
20
+ return if response.raw_body.nil?
21
+
22
+ Resources::Payment.new(unenvelope_body(response.parsed_body), response)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DuffelAPI
4
+ module Services
5
+ class RefundsService < BaseService
6
+ def create(options = {})
7
+ path = "/payments/refunds"
8
+
9
+ params = options.delete(:params) || {}
10
+ options[:params] = {}
11
+ options[:params]["data"] = params
12
+
13
+ begin
14
+ response = make_request(:post, path, options)
15
+
16
+ # Response doesn't raise any errors until #body is called
17
+ response.tap(&:raw_body)
18
+ end
19
+
20
+ return if response.raw_body.nil?
21
+
22
+ Resources::Refund.new(unenvelope_body(response.parsed_body), response)
23
+ end
24
+
25
+ def get(id, options = {})
26
+ path = substitute_url_pattern("/payments/refunds/:id", "id" => id)
27
+
28
+ response = make_request(:get, path, options)
29
+
30
+ return if response.raw_body.nil?
31
+
32
+ Resources::Refund.new(unenvelope_body(response.parsed_body), response)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DuffelAPI
4
+ module Services
5
+ class SeatMapsService < BaseService
6
+ def list(options = {})
7
+ path = "/air/seat_maps"
8
+
9
+ response = make_request(:get, path, options)
10
+
11
+ ListResponse.new(
12
+ response: response,
13
+ unenveloped_body: unenvelope_body(response.parsed_body),
14
+ resource_class: Resources::SeatMap,
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DuffelAPI
4
+ module Services
5
+ class WebhooksService < BaseService
6
+ class PingResult
7
+ attr_reader :api_response
8
+
9
+ def initialize(api_response)
10
+ @api_response = api_response
11
+ end
12
+
13
+ # If we return a `PingResult` rather than an error, then that means that the
14
+ # action was successful.
15
+ def succeeded
16
+ true
17
+ end
18
+ end
19
+
20
+ def create(options = {})
21
+ path = "/air/webhooks"
22
+
23
+ params = options.delete(:params) || {}
24
+ options[:params] = {}
25
+ options[:params]["data"] = params
26
+
27
+ begin
28
+ response = make_request(:post, path, options)
29
+
30
+ # Response doesn't raise any errors until #body is called
31
+ response.tap(&:raw_body)
32
+ end
33
+
34
+ return if response.raw_body.nil?
35
+
36
+ Resources::Webhook.new(unenvelope_body(response.parsed_body), response)
37
+ end
38
+
39
+ def update(id, options = {})
40
+ path = substitute_url_pattern("/air/webhooks/:id", "id" => id)
41
+
42
+ params = options.delete(:params) || {}
43
+ options[:params] = {}
44
+ options[:params]["data"] = params
45
+
46
+ begin
47
+ response = make_request(:patch, path, options)
48
+
49
+ # Response doesn't raise any errors until #body is called
50
+ response.tap(&:raw_body)
51
+ end
52
+
53
+ return if response.raw_body.nil?
54
+
55
+ Resources::Webhook.new(unenvelope_body(response.parsed_body), response)
56
+ end
57
+
58
+ def ping(id, options = {})
59
+ path = substitute_url_pattern("/air/webhooks/:id/actions/ping", "id" => id)
60
+
61
+ params = options.delete(:params) || {}
62
+ options[:params] = {}
63
+ options[:params]["data"] = params
64
+
65
+ begin
66
+ response = make_request(:post, path, options)
67
+
68
+ # Response doesn't raise any errors until #body is called
69
+ response.tap(&:raw_body)
70
+ end
71
+ rescue DuffelAPI::Errors::Error => e
72
+ # We expect this API call to *ALWAYS* lead to an error being raised since
73
+ # it returns a non-JSON 204 response even if it's successful. We just catch
74
+ # that and bubble it up in a nicer way.
75
+ if e.api_response.status_code == 204
76
+ PingResult.new(e.api_response)
77
+ else
78
+ raise e
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DuffelAPI
4
- VERSION = "0.0.1-dev"
4
+ VERSION = "0.1.0"
5
5
  end
data/lib/duffel_api.rb CHANGED
@@ -1,8 +1,55 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "duffel_api/version"
4
+ require_relative "duffel_api/errors/error"
5
+ require_relative "duffel_api/errors/airline_error"
6
+ require_relative "duffel_api/errors/api_error"
7
+ require_relative "duffel_api/errors/authentication_error"
8
+ require_relative "duffel_api/errors/invalid_request_error"
9
+ require_relative "duffel_api/errors/invalid_state_error"
10
+ require_relative "duffel_api/errors/rate_limit_error"
11
+ require_relative "duffel_api/errors/validation_error"
12
+ require_relative "duffel_api/middlewares/raise_duffel_errors"
13
+ require_relative "duffel_api/resources/base_resource"
14
+ require_relative "duffel_api/resources/aircraft"
15
+ require_relative "duffel_api/resources/airline"
16
+ require_relative "duffel_api/resources/airport"
17
+ require_relative "duffel_api/resources/offer"
18
+ require_relative "duffel_api/resources/offer_passenger"
19
+ require_relative "duffel_api/resources/offer_request"
20
+ require_relative "duffel_api/resources/order"
21
+ require_relative "duffel_api/resources/order_cancellation"
22
+ require_relative "duffel_api/resources/order_change"
23
+ require_relative "duffel_api/resources/order_change_offer"
24
+ require_relative "duffel_api/resources/order_change_request"
25
+ require_relative "duffel_api/resources/payment"
26
+ require_relative "duffel_api/resources/payment_intent"
27
+ require_relative "duffel_api/resources/refund"
28
+ require_relative "duffel_api/resources/seat_map"
29
+ require_relative "duffel_api/resources/webhook"
30
+ require_relative "duffel_api/paginator"
31
+ require_relative "duffel_api/services/base_service"
32
+ require_relative "duffel_api/services/aircraft_service"
33
+ require_relative "duffel_api/services/airlines_service"
34
+ require_relative "duffel_api/services/airports_service"
35
+ require_relative "duffel_api/services/offer_passengers_service"
36
+ require_relative "duffel_api/services/offer_requests_service"
37
+ require_relative "duffel_api/services/offers_service"
38
+ require_relative "duffel_api/services/order_cancellations_service"
39
+ require_relative "duffel_api/services/order_change_offers_service"
40
+ require_relative "duffel_api/services/order_change_requests_service"
41
+ require_relative "duffel_api/services/order_changes_service"
42
+ require_relative "duffel_api/services/orders_service"
43
+ require_relative "duffel_api/services/payment_intents_service"
44
+ require_relative "duffel_api/services/payments_service"
45
+ require_relative "duffel_api/services/refunds_service"
46
+ require_relative "duffel_api/services/seat_maps_service"
47
+ require_relative "duffel_api/services/webhooks_service"
48
+ require_relative "duffel_api/api_response"
49
+ require_relative "duffel_api/api_service"
50
+ require_relative "duffel_api/client"
51
+ require_relative "duffel_api/list_response"
52
+ require_relative "duffel_api/request"
53
+ require_relative "duffel_api/response"
4
54
 
5
- module DuffelAPI
6
- class Error < StandardError; end
7
- # Your code goes here...
8
- end
55
+ module DuffelAPI; end
metadata CHANGED
@@ -1,22 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duffel_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre.dev
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Duffel Technology Limited
7
+ - The Duffel team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-07 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Ruby client library for the Duffel API.
11
+ date: 2021-12-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.2
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.2
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
33
+ description:
14
34
  email:
15
35
  - help@duffel.com
16
36
  executables: []
17
37
  extensions: []
18
38
  extra_rdoc_files: []
19
39
  files:
40
+ - ".circleci/config.yml"
41
+ - ".github/dependabot.yml"
42
+ - ".gitignore"
20
43
  - ".rspec"
21
44
  - ".rubocop.yml"
22
45
  - CHANGELOG.md
@@ -27,14 +50,69 @@ files:
27
50
  - Rakefile
28
51
  - bin/console
29
52
  - bin/setup
53
+ - duffel_api.gemspec
54
+ - examples/book_and_change.rb
55
+ - examples/book_with_seat.rb
56
+ - examples/exploring_data.rb
57
+ - examples/hold_and_pay_later.rb
58
+ - examples/search_and_book.rb
30
59
  - lib/duffel_api.rb
60
+ - lib/duffel_api/api_response.rb
61
+ - lib/duffel_api/api_service.rb
62
+ - lib/duffel_api/client.rb
63
+ - lib/duffel_api/errors/airline_error.rb
64
+ - lib/duffel_api/errors/api_error.rb
65
+ - lib/duffel_api/errors/authentication_error.rb
66
+ - lib/duffel_api/errors/error.rb
67
+ - lib/duffel_api/errors/invalid_request_error.rb
68
+ - lib/duffel_api/errors/invalid_state_error.rb
69
+ - lib/duffel_api/errors/rate_limit_error.rb
70
+ - lib/duffel_api/errors/validation_error.rb
71
+ - lib/duffel_api/list_response.rb
72
+ - lib/duffel_api/middlewares/raise_duffel_errors.rb
73
+ - lib/duffel_api/paginator.rb
74
+ - lib/duffel_api/request.rb
75
+ - lib/duffel_api/resources/aircraft.rb
76
+ - lib/duffel_api/resources/airline.rb
77
+ - lib/duffel_api/resources/airport.rb
78
+ - lib/duffel_api/resources/base_resource.rb
79
+ - lib/duffel_api/resources/offer.rb
80
+ - lib/duffel_api/resources/offer_passenger.rb
81
+ - lib/duffel_api/resources/offer_request.rb
82
+ - lib/duffel_api/resources/order.rb
83
+ - lib/duffel_api/resources/order_cancellation.rb
84
+ - lib/duffel_api/resources/order_change.rb
85
+ - lib/duffel_api/resources/order_change_offer.rb
86
+ - lib/duffel_api/resources/order_change_request.rb
87
+ - lib/duffel_api/resources/payment.rb
88
+ - lib/duffel_api/resources/payment_intent.rb
89
+ - lib/duffel_api/resources/refund.rb
90
+ - lib/duffel_api/resources/seat_map.rb
91
+ - lib/duffel_api/resources/webhook.rb
92
+ - lib/duffel_api/response.rb
93
+ - lib/duffel_api/services/aircraft_service.rb
94
+ - lib/duffel_api/services/airlines_service.rb
95
+ - lib/duffel_api/services/airports_service.rb
96
+ - lib/duffel_api/services/base_service.rb
97
+ - lib/duffel_api/services/offer_passengers_service.rb
98
+ - lib/duffel_api/services/offer_requests_service.rb
99
+ - lib/duffel_api/services/offers_service.rb
100
+ - lib/duffel_api/services/order_cancellations_service.rb
101
+ - lib/duffel_api/services/order_change_offers_service.rb
102
+ - lib/duffel_api/services/order_change_requests_service.rb
103
+ - lib/duffel_api/services/order_changes_service.rb
104
+ - lib/duffel_api/services/orders_service.rb
105
+ - lib/duffel_api/services/payment_intents_service.rb
106
+ - lib/duffel_api/services/payments_service.rb
107
+ - lib/duffel_api/services/refunds_service.rb
108
+ - lib/duffel_api/services/seat_maps_service.rb
109
+ - lib/duffel_api/services/webhooks_service.rb
31
110
  - lib/duffel_api/version.rb
32
- homepage: https://duffel.com
111
+ homepage: https://github.com/duffelhq/duffel-api-ruby
33
112
  licenses:
34
113
  - MIT
35
114
  metadata:
36
- allowed_push_host: https://rubygems.org
37
- homepage_uri: https://duffel.com
115
+ rubygems_mfa_required: 'true'
38
116
  post_install_message:
39
117
  rdoc_options: []
40
118
  require_paths:
@@ -46,12 +124,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
46
124
  version: 2.6.0
47
125
  required_rubygems_version: !ruby/object:Gem::Requirement
48
126
  requirements:
49
- - - ">"
127
+ - - ">="
50
128
  - !ruby/object:Gem::Version
51
- version: 1.3.1
129
+ version: '0'
52
130
  requirements: []
53
- rubygems_version: 3.2.32
131
+ rubygems_version: 3.2.22
54
132
  signing_key:
55
133
  specification_version: 4
56
- summary: Ruby client library for the Duffel API.
134
+ summary: A Ruby client for interacting with the Duffel API
57
135
  test_files: []