duffel_api 0.0.1.pre.dev → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []