flight_radar 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +1 -1
- data/.rubocop.yml +3 -15
- data/.yardopts +1 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +9 -1
- data/README.md +135 -131
- data/Rakefile +3 -3
- data/flight_radar.gemspec +16 -18
- data/lib/flight_radar/core.rb +36 -30
- data/lib/flight_radar/flight.rb +98 -73
- data/lib/flight_radar/request.rb +80 -38
- data/lib/flight_radar.rb +67 -35
- metadata +4 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a90f6971658d712566667b5602acbc862430ae4b97e0ed7286846dbe5e107066
|
4
|
+
data.tar.gz: ee9dafc558f2c91303c5ecaa55a65de73be55c0f656a62b5528b8b0da0e93b93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 880969b6f309af65e1de1bba3a0a2f715ae2a1035a8b45b19872935862a86b9e633fa5256e7daa9b9e989af0d58eeae11149f339944b045e8a9ed137167f223c
|
7
|
+
data.tar.gz: ede6e35686c08e885dcc3760c531beffbde7c61a473eea060cb6d2f95c89b2268b3b78e36e8cd88be391298d7a30061036fa3a0d8372be7dd8e8d0a49064484a
|
data/.github/workflows/ruby.yml
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,16 +1,4 @@
|
|
1
1
|
AllCops:
|
2
|
-
TargetRubyVersion: 2
|
3
|
-
|
4
|
-
|
5
|
-
Enabled: true
|
6
|
-
EnforcedStyle: double_quotes
|
7
|
-
|
8
|
-
Style/StringLiteralsInInterpolation:
|
9
|
-
Enabled: true
|
10
|
-
EnforcedStyle: double_quotes
|
11
|
-
|
12
|
-
Layout/LineLength:
|
13
|
-
Max: 120
|
14
|
-
|
15
|
-
Layout/EndOfLine:
|
16
|
-
Enabled: False
|
2
|
+
TargetRubyVersion: 3.2
|
3
|
+
NewCops: enable
|
4
|
+
SuggestExtensions: false
|
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
source
|
3
|
+
source 'https://rubygems.org'
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in flight_radar.gemspec
|
6
6
|
gemspec
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem 'rake'
|
10
|
+
gem 'redcarpet'
|
11
|
+
gem 'rspec'
|
12
|
+
gem 'rubocop'
|
13
|
+
gem 'yard'
|
14
|
+
end
|
data/README.md
CHANGED
@@ -3,6 +3,24 @@
|
|
3
3
|
|
4
4
|
**Fetch aircraft data from Flightradar24.**
|
5
5
|
|
6
|
+
# Table of Contents
|
7
|
+
- [Installation](#installation)
|
8
|
+
- [Usage](#usage)
|
9
|
+
- [Airlines](#airlines)
|
10
|
+
- [Airport](#airport)
|
11
|
+
- [Zones](#zones)
|
12
|
+
- [Flights](#flights)
|
13
|
+
- [Flight Details](#flight-details)
|
14
|
+
- [Flights by Airline](#flights-by-airline)
|
15
|
+
- [Flights by Bounds](#flights-by-bounds)
|
16
|
+
- [Airline Logo](#airline-logo)
|
17
|
+
- [Country Flag](#country-flag)
|
18
|
+
- [Development](#development)
|
19
|
+
- [Contributing](#contributing)
|
20
|
+
- [License](#license)
|
21
|
+
- [Code of Conduct](#code-of-conduct)
|
22
|
+
|
23
|
+
|
6
24
|
## Installation
|
7
25
|
|
8
26
|
Add this line to your application's Gemfile:
|
@@ -26,194 +44,177 @@ Or install it yourself as:
|
|
26
44
|
```ruby
|
27
45
|
FlightRadar.airlines
|
28
46
|
```
|
47
|
+
|
29
48
|
**Sample response:**
|
49
|
+
|
30
50
|
```ruby
|
31
51
|
[
|
32
52
|
{"Name"=>"21 Air", "Code"=>"2I", "ICAO"=>"CSB"},
|
33
53
|
{"Name"=>"25Only Aviation", "Code"=>"", "ICAO"=>"ONY"},
|
34
54
|
{"Name"=>"40-Mile Air", "Code"=>"Q5", "ICAO"=>"MLA"},
|
35
|
-
|
55
|
+
# ...
|
36
56
|
]
|
37
57
|
```
|
58
|
+
|
38
59
|
### Airport
|
60
|
+
|
39
61
|
```ruby
|
40
62
|
airport = "LAX"
|
41
63
|
FlightRadar.airport(airport)
|
42
64
|
```
|
65
|
+
|
43
66
|
**Sample response:**
|
67
|
+
|
44
68
|
```ruby
|
45
69
|
{
|
46
|
-
"details"
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
},
|
52
|
-
"position""=>"{
|
53
|
-
"latitude"=>51.721882,
|
54
|
-
"longitude"=>19.39813,
|
55
|
-
"altitude"=>604,
|
56
|
-
"country""=>"{
|
57
|
-
"id""=>nil",
|
58
|
-
"name""=>""Poland",
|
59
|
-
"code""=>""POL"
|
70
|
+
"details" => {
|
71
|
+
"name" => "Lodz Wladyslaw Reymont Airport",
|
72
|
+
"code" => {
|
73
|
+
"iata" => "LCJ",
|
74
|
+
"icao" => "EPLL"
|
60
75
|
},
|
61
|
-
"
|
62
|
-
"
|
63
|
-
|
64
|
-
|
65
|
-
|
76
|
+
"position" => {
|
77
|
+
"latitude" => 51.721882,
|
78
|
+
"longitude" => 19.39813,
|
79
|
+
"altitude" => 604,
|
80
|
+
"country" => {
|
81
|
+
"id" => nil,
|
82
|
+
"name" => "Poland",
|
83
|
+
"code" => "POL"
|
84
|
+
},
|
85
|
+
"region" => {
|
86
|
+
"city" => "Lodz"
|
87
|
+
}
|
88
|
+
},
|
89
|
+
# ...
|
66
90
|
}
|
67
91
|
}
|
68
92
|
```
|
69
93
|
|
70
|
-
### Airports
|
71
|
-
```ruby
|
72
|
-
airport = "LAX"
|
73
|
-
FlightRadar.airports
|
74
|
-
```
|
75
|
-
**Sample response:**
|
76
|
-
```ruby
|
77
|
-
[
|
78
|
-
{
|
79
|
-
"name""=>""A Coruna Airport",
|
80
|
-
"iata""=>""LCG",
|
81
|
-
"icao""=>""LECO",
|
82
|
-
"lat"=>43.302059,
|
83
|
-
"lon"=>-8.37725,
|
84
|
-
"country""=>""Spain",
|
85
|
-
"alt"=>326
|
86
|
-
},
|
87
|
-
{
|
88
|
-
"name""=>""Aachen Merzbruck Airport",
|
89
|
-
"iata""=>""AAH",
|
90
|
-
"icao""=>""EDKA",
|
91
|
-
"lat"=>50.823051,
|
92
|
-
"lon"=>6.186111,
|
93
|
-
"country""=>""Germany",
|
94
|
-
"alt"=>623
|
95
|
-
},
|
96
|
-
...
|
97
|
-
]
|
98
|
-
```
|
99
|
-
|
100
94
|
### Zones
|
95
|
+
|
101
96
|
```ruby
|
102
97
|
FlightRadar.zones
|
103
98
|
```
|
99
|
+
|
104
100
|
**Sample response:**
|
105
101
|
```ruby
|
106
102
|
{
|
107
|
-
"europe"
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
}
|
103
|
+
"europe" => {
|
104
|
+
"tl_y" => 72.57,
|
105
|
+
"tl_x" => -16.96,
|
106
|
+
"br_y" => 33.57,
|
107
|
+
"br_x" => 53.05,
|
108
|
+
"subzones" => {
|
109
|
+
"poland" => {
|
110
|
+
"tl_y" => 56.86,
|
111
|
+
"tl_x" => 11.06,
|
112
|
+
"br_y" => 48.22,
|
113
|
+
"br_x" => 28.26
|
114
|
+
},
|
115
|
+
"germany" => {
|
116
|
+
"tl_y" => 57.92,
|
117
|
+
"tl_x" => 1.81,
|
118
|
+
"br_y" => 45.81,
|
119
|
+
"br_x" => 16.83
|
120
|
+
},
|
121
|
+
# ...
|
127
122
|
}
|
123
|
+
}
|
128
124
|
}
|
129
125
|
```
|
130
126
|
|
131
127
|
### Flights
|
128
|
+
|
132
129
|
```ruby
|
133
130
|
FlightRadar.flights
|
134
131
|
```
|
135
132
|
|
136
133
|
**Sample response:**
|
134
|
+
|
137
135
|
```ruby
|
138
136
|
[
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
137
|
+
"<(GRND) - Altitude: 0 - Ground Speed: 146 - Heading: 146>",
|
138
|
+
"<(DRON) TEST4A - Altitude: 374 - Ground Speed: 1 - Heading: 1>",
|
139
|
+
"<(GLID) STM32 - Altitude: 2290 - Ground Speed: 1 - Heading: 1>",
|
140
|
+
"<() - Altitude: 508 - Ground Speed: 7 - Heading: 7>",
|
141
|
+
"<(B763) N142FE - Altitude: 0 - Ground Speed: 0 - Heading: 0>",
|
142
|
+
"<(GRND) - Altitude: 0 - Ground Speed: 278 - Heading: 278>",
|
143
|
+
"<(GLID) OM-2709 - Altitude: 1236 - Ground Speed: 1 - Heading: 1>",
|
144
|
+
"<(B763) N196FE - Altitude: 0 - Ground Speed: 0 - Heading: 0>",
|
145
|
+
"<(B77L) N869FD - Altitude: 0 - Ground Speed: 0 - Heading: 0>",
|
146
|
+
"<(B763) N111FE - Altitude: 0 - Ground Speed: 0 - Heading: 0>",
|
147
|
+
"<(B763) N193FE - Altitude: 0 - Ground Speed: 0 - Heading: 0>",
|
148
|
+
# ...
|
151
149
|
]
|
152
150
|
```
|
153
151
|
|
154
|
-
|
155
|
-
|
156
152
|
### Flight Details
|
153
|
+
|
157
154
|
```ruby
|
158
155
|
flight_id = FlightRadar.flights.sample.id
|
159
156
|
FlightRadar.flight_details(flight_id)
|
160
157
|
```
|
161
158
|
|
162
159
|
**Sample response:**
|
160
|
+
|
163
161
|
```ruby
|
164
162
|
{
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
163
|
+
"identification" => {
|
164
|
+
"id" => "2aaadc48",
|
165
|
+
"row" => 5175915984,
|
166
|
+
"number" => {
|
167
|
+
"default" => "F980",
|
168
|
+
"alternative" => nil
|
169
|
+
},
|
170
|
+
"callsign" => "FFT80"
|
171
|
+
},
|
172
|
+
"status" => {
|
173
|
+
"live" => true,
|
174
|
+
"text" => "Estimated- 14:01",
|
175
|
+
"icon" => "green",
|
176
|
+
"estimated" => nil,
|
177
|
+
"ambiguous" => false,
|
178
|
+
"generic" => {
|
179
|
+
"status" => {
|
180
|
+
"text" => "estimated",
|
181
|
+
"color" => "green",
|
182
|
+
"type" => "arrival"
|
171
183
|
},
|
172
|
-
"
|
173
|
-
|
174
|
-
|
175
|
-
"live""=>true",
|
176
|
-
"text""=>""Estimated- 14:01",
|
177
|
-
"icon""=>""green",
|
178
|
-
"estimated""=>nil",
|
179
|
-
"ambiguous""=>false",
|
180
|
-
"generic""=>"{
|
181
|
-
"status""=>"{
|
182
|
-
"text""=>""estimated",
|
183
|
-
"color""=>""green",
|
184
|
-
"type""=>""arrival"
|
185
|
-
},
|
186
|
-
"eventTime""=>"{
|
187
|
-
"utc"=>1643652087,
|
188
|
-
"local"=>1643637687
|
189
|
-
}
|
184
|
+
"eventTime" => {
|
185
|
+
"utc" => 1643652087,
|
186
|
+
"local" => 1643637687
|
190
187
|
}
|
191
|
-
|
192
|
-
|
188
|
+
}
|
189
|
+
},
|
190
|
+
# ...
|
193
191
|
}
|
194
192
|
```
|
195
193
|
|
196
194
|
### Flights by airline
|
195
|
+
|
197
196
|
```ruby
|
198
197
|
airline = "LOT"
|
199
198
|
FlightRadar.flights(airline: airline)
|
200
199
|
```
|
201
200
|
|
202
201
|
**Sample response:**
|
202
|
+
|
203
203
|
```ruby
|
204
204
|
[
|
205
|
-
"<(B789) SP-LSG - Altitude
|
206
|
-
"<(B788) SP-LRA - Altitude
|
207
|
-
"<(B788) SP-LRB - Altitude
|
208
|
-
"<(E195) SP-LNF - Altitude
|
209
|
-
"<(B38M) SP-LVF - Altitude
|
210
|
-
"<(E195) SP-LNB - Altitude
|
211
|
-
"<(B789) SP-LSF - Altitude
|
212
|
-
|
205
|
+
"<(B789) SP-LSG - Altitude: 39992 - Ground Speed: 451 - Heading: 451>",
|
206
|
+
"<(B788) SP-LRA - Altitude: 38975 - Ground Speed: 537 - Heading: 537>",
|
207
|
+
"<(B788) SP-LRB - Altitude: 38000 - Ground Speed: 463 - Heading: 463>",
|
208
|
+
"<(E195) SP-LNF - Altitude: 31675 - Ground Speed: 420 - Heading: 420>",
|
209
|
+
"<(B38M) SP-LVF - Altitude: 38000 - Ground Speed: 460 - Heading: 460>",
|
210
|
+
"<(E195) SP-LNB - Altitude: 22475 - Ground Speed: 366 - Heading: 366>",
|
211
|
+
"<(B789) SP-LSF - Altitude: 36000 - Ground Speed: 440 - Heading: 440>",
|
212
|
+
# ...
|
213
213
|
]
|
214
214
|
```
|
215
215
|
|
216
216
|
### Flights by bounds
|
217
|
+
|
217
218
|
```ruby
|
218
219
|
zone = FlightRadar.zones["oceania"]
|
219
220
|
bounds = FlightRadar.bounds(zone)
|
@@ -221,46 +222,49 @@ FlightRadar.flights(bounds: bounds)
|
|
221
222
|
```
|
222
223
|
|
223
224
|
**Sample response:**
|
225
|
+
|
224
226
|
```ruby
|
225
227
|
[
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
228
|
+
"<(B788) VT-ANP - Altitude: 41000 - Ground Speed: 494 - Heading: 494>",
|
229
|
+
"<(B738) VT-AXZ - Altitude: 37000 - Ground Speed: 436 - Heading: 436>",
|
230
|
+
"<(B772) PH-BQA - Altitude: 32000 - Ground Speed: 496 - Heading: 496>",
|
231
|
+
"<(A388) 9V-SKS - Altitude: 33996 - Ground Speed: 498 - Heading: 498>",
|
232
|
+
"<(B77L) A7-BFY - Altitude: 32000 - Ground Speed: 478 - Heading: 478>",
|
233
|
+
"<(B78X) 9V-SCA - Altitude: 38996 - Ground Speed: 514 - Heading: 514>",
|
234
|
+
"<(B77W) A6-ENU - Altitude: 34000 - Ground Speed: 504 - Heading: 504>",
|
235
|
+
"<(A359) OH-LWF - Altitude: 40004 - Ground Speed: 476 - Heading: 476>",
|
236
|
+
# ...
|
235
237
|
]
|
236
238
|
```
|
237
239
|
|
238
240
|
|
239
241
|
### Airline logo
|
242
|
+
|
240
243
|
```ruby
|
241
244
|
iata = "TK"
|
242
245
|
icao = "THY"
|
243
|
-
FlightRadar.
|
246
|
+
FlightRadar.airline_logo(iata, icao)
|
244
247
|
```
|
245
248
|
|
246
249
|
**Sample response:**
|
250
|
+
|
247
251
|
```ruby
|
248
|
-
[
|
252
|
+
%w[https://cdn.flightradar24.com/assets/airlines/logotypes/TK_THY.png https://www.flightradar24.com/static/images/data/operators/THY_logo0.png]
|
249
253
|
```
|
250
254
|
|
251
255
|
|
252
256
|
### Country flag
|
257
|
+
|
253
258
|
```ruby
|
254
259
|
FlightRadar.country_flag("Poland")
|
255
260
|
```
|
256
261
|
|
257
262
|
**Sample response:**
|
263
|
+
|
258
264
|
```ruby
|
259
265
|
"https://www.flightradar24.com/static/images/data/flags-small/poland.gif"
|
260
266
|
```
|
261
267
|
|
262
|
-
|
263
|
-
|
264
268
|
## Development
|
265
269
|
|
266
270
|
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).
|
data/Rakefile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
5
|
|
6
6
|
RSpec::Core::RakeTask.new(:spec)
|
7
7
|
|
8
|
-
require
|
8
|
+
require 'rubocop/rake_task'
|
9
9
|
|
10
10
|
RuboCop::RakeTask.new
|
11
11
|
|
data/flight_radar.gemspec
CHANGED
@@ -1,33 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
|
-
spec.name =
|
5
|
-
spec.version =
|
6
|
-
spec.authors = [
|
7
|
-
spec.email = [
|
4
|
+
spec.name = 'flight_radar'
|
5
|
+
spec.version = '0.2.1'
|
6
|
+
spec.authors = ['Jakub Polak']
|
7
|
+
spec.email = ['jakub.polak.vz@gmail.com']
|
8
8
|
|
9
|
-
spec.summary =
|
10
|
-
spec.description =
|
11
|
-
spec.homepage =
|
12
|
-
spec.license =
|
13
|
-
spec.required_ruby_version =
|
9
|
+
spec.summary = 'Ruby gem for fetching aircraft data from Flightradar24'
|
10
|
+
spec.description = 'To use this API see more information at: https://www.flightradar24.com/terms-and-conditions'
|
11
|
+
spec.homepage = 'https://github.com/kupolak/flight_radar'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.required_ruby_version = '>= 3.2.0'
|
14
14
|
|
15
|
-
spec.metadata[
|
16
|
-
spec.metadata[
|
17
|
-
spec.metadata[
|
15
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
16
|
+
spec.metadata['source_code_uri'] = 'https://github.com/kupolak/flight_radar'
|
17
|
+
spec.metadata['changelog_uri'] = 'https://github.com/kupolak/flight_radar/blob/main/CHANGELOG.md'
|
18
18
|
|
19
19
|
# Specify which files should be added to the gem when it is released.
|
20
20
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
21
21
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
22
22
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
23
23
|
end
|
24
|
-
spec.bindir =
|
24
|
+
spec.bindir = 'exe'
|
25
25
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
26
|
-
spec.require_paths = [
|
26
|
+
spec.require_paths = ['lib']
|
27
27
|
|
28
|
-
spec.add_dependency
|
28
|
+
spec.add_dependency 'httparty', '~> 0.21.0'
|
29
29
|
|
30
|
-
spec.
|
31
|
-
spec.add_development_dependency "rspec", "~>3.12.0"
|
32
|
-
spec.add_development_dependency "rubocop", "~>1.59.0"
|
30
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
33
31
|
end
|
data/lib/flight_radar/core.rb
CHANGED
@@ -1,59 +1,65 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# The `Core` module contains constants related to FlightRadar API endpoints,
|
4
|
+
# URLs for various data sources, and headers used in HTTP requests.
|
3
5
|
module Core
|
4
|
-
API_FLIGHT_RADAR_BASE_URL =
|
5
|
-
CDN_FLIGHT_RADAR_BASE_URL =
|
6
|
-
FLIGHT_RADAR_BASE_URL =
|
7
|
-
DATA_LIVE_BASE_URL =
|
8
|
-
DATA_CLOUD_BASE_URL =
|
6
|
+
API_FLIGHT_RADAR_BASE_URL = 'https://api.flightradar24.com/common/v1'
|
7
|
+
CDN_FLIGHT_RADAR_BASE_URL = 'https://cdn.flightradar24.com'
|
8
|
+
FLIGHT_RADAR_BASE_URL = 'https://www.flightradar24.com'
|
9
|
+
DATA_LIVE_BASE_URL = 'https://data-live.flightradar24.com'
|
10
|
+
DATA_CLOUD_BASE_URL = 'https://data-cloud.flightradar24.com'
|
9
11
|
|
10
12
|
# User login URL.
|
11
|
-
USER_LOGIN_URL = "#{FLIGHT_RADAR_BASE_URL}/user/login"
|
12
|
-
USER_LOGOUT_URL = "#{FLIGHT_RADAR_BASE_URL}/user/logout"
|
13
|
+
USER_LOGIN_URL = "#{FLIGHT_RADAR_BASE_URL}/user/login".freeze
|
14
|
+
USER_LOGOUT_URL = "#{FLIGHT_RADAR_BASE_URL}/user/logout".freeze
|
13
15
|
|
14
16
|
# Most tracked data URL
|
15
|
-
MOST_TRACKED_URL = "#{FLIGHT_RADAR_BASE_URL}/flights/most-tracked"
|
17
|
+
MOST_TRACKED_URL = "#{FLIGHT_RADAR_BASE_URL}/flights/most-tracked".freeze
|
16
18
|
|
17
19
|
# Search data URL
|
18
|
-
SEARCH_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/v1/search/web/find?query={}&limit=50"
|
20
|
+
SEARCH_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/v1/search/web/find?query={}&limit=50".freeze
|
19
21
|
|
20
22
|
# Flights data URLs.
|
21
|
-
REAL_TIME_FLIGHT_TRACKER_DATA_URL = "#{DATA_CLOUD_BASE_URL}/zones/fcgi/feed.js"
|
22
|
-
FLIGHT_DATA_URL = "#{DATA_LIVE_BASE_URL}/clickhandler/?flight={}"
|
23
|
+
REAL_TIME_FLIGHT_TRACKER_DATA_URL = "#{DATA_CLOUD_BASE_URL}/zones/fcgi/feed.js".freeze
|
24
|
+
FLIGHT_DATA_URL = "#{DATA_LIVE_BASE_URL}/clickhandler/?flight={}".freeze
|
23
25
|
|
24
26
|
# Airports data URLs.
|
25
|
-
API_AIRPORT_DATA_URL = "#{API_FLIGHT_RADAR_BASE_URL}/airport.json"
|
26
|
-
AIRPORT_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/airports/traffic-stats/?airport="
|
27
|
-
AIRPORTS_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/_json/airports.php"
|
27
|
+
API_AIRPORT_DATA_URL = "#{API_FLIGHT_RADAR_BASE_URL}/airport.json".freeze
|
28
|
+
AIRPORT_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/airports/traffic-stats/?airport=".freeze
|
29
|
+
AIRPORTS_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/_json/airports.php".freeze
|
28
30
|
|
29
31
|
# Airlines data URL.
|
30
|
-
AIRLINES_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/_json/airlines.php"
|
32
|
+
AIRLINES_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/_json/airlines.php".freeze
|
31
33
|
|
32
34
|
# Zones data URL.
|
33
|
-
ZONES_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/js/zones.js.php"
|
35
|
+
ZONES_DATA_URL = "#{FLIGHT_RADAR_BASE_URL}/js/zones.js.php".freeze
|
34
36
|
|
35
37
|
# Country flag image URL.
|
36
|
-
COUNTRY_FLAG_URL = "#{FLIGHT_RADAR_BASE_URL}/static/images/data/flags-small/"
|
38
|
+
COUNTRY_FLAG_URL = "#{FLIGHT_RADAR_BASE_URL}/static/images/data/flags-small/".freeze
|
37
39
|
|
38
40
|
# Airline logo image URL.
|
39
|
-
AIRLINE_LOGO_URL = "#{CDN_FLIGHT_RADAR_BASE_URL}/assets/airlines/logotypes/"
|
40
|
-
ALTERNATIVE_AIRLINE_LOGO_URL = "#{FLIGHT_RADAR_BASE_URL}/static/images/data/operators/"
|
41
|
+
AIRLINE_LOGO_URL = "#{CDN_FLIGHT_RADAR_BASE_URL}/assets/airlines/logotypes/".freeze
|
42
|
+
ALTERNATIVE_AIRLINE_LOGO_URL = "#{FLIGHT_RADAR_BASE_URL}/static/images/data/operators/".freeze
|
41
43
|
|
44
|
+
# rubocop:disable Style/MutableConstant
|
42
45
|
HEADERS = {
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
46
|
+
'accept-encoding': 'gzip, br',
|
47
|
+
'accept-language': 'pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7',
|
48
|
+
'cache-control': 'max-age=0',
|
49
|
+
origin: FLIGHT_RADAR_BASE_URL.to_s,
|
50
|
+
referer: "#{FLIGHT_RADAR_BASE_URL}/",
|
51
|
+
'sec-fetch-dest': 'empty',
|
52
|
+
'sec-fetch-mode': 'cors',
|
53
|
+
'sec-fetch-site': 'same-site',
|
54
|
+
'user-agent': 'Mozilla/5.0 (Windows NT 6.1)
|
55
|
+
AppleWebKit/537.36 (KHTML, like Gecko)
|
56
|
+
Chrome/87.0.4280.88 Safari/537.36'
|
52
57
|
}
|
58
|
+
# rubocop:enable Style/MutableConstant
|
53
59
|
|
54
60
|
JSON_HEADERS = HEADERS
|
55
|
-
JSON_HEADERS[
|
61
|
+
JSON_HEADERS['accept'] = 'application/json'
|
56
62
|
|
57
63
|
IMAGE_HEADERS = HEADERS
|
58
|
-
IMAGE_HEADERS[
|
64
|
+
IMAGE_HEADERS['accept'] = 'image/gif, image/jpg, image/jpeg, image/png'
|
59
65
|
end
|
data/lib/flight_radar/flight.rb
CHANGED
@@ -1,73 +1,98 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@
|
21
|
-
@
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
26
|
-
@
|
27
|
-
@
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The `Flight` class represents information about a flight obtained from a data source.
|
4
|
+
# It provides methods to access and format various attributes related to the flight,
|
5
|
+
# such as altitude, ground speed, heading, and more.
|
6
|
+
class Flight
|
7
|
+
DEFAULT_TEXT = 'N/A'
|
8
|
+
|
9
|
+
# Accessor for the flight ID.
|
10
|
+
attr_accessor :id
|
11
|
+
|
12
|
+
# Initializes a new instance of the `Flight` class with the given flight ID and information.
|
13
|
+
#
|
14
|
+
# @param flight_id [String] The unique identifier for the flight.
|
15
|
+
# @param info [Array<String>] An array containing various information about the flight.
|
16
|
+
# The order of elements in the array is assumed to follow a specific pattern.
|
17
|
+
# (e.g., info[0] is ICAO 24-bit address, info[1] is latitude, info[2] is longitude, and so on.)
|
18
|
+
# rubocop:disable Metrics
|
19
|
+
def initialize(flight_id, info)
|
20
|
+
@id = flight_id
|
21
|
+
@icao_24bit = get_info(info[0])
|
22
|
+
@latitude = get_info(info[1])
|
23
|
+
@longitude = get_info(info[2])
|
24
|
+
@heading = get_info(info[3])
|
25
|
+
@altitude = get_info(info[4])
|
26
|
+
@ground_speed = get_info(info[5])
|
27
|
+
@squawk = get_info(info[6])
|
28
|
+
@aircraft_code = get_info(info[8])
|
29
|
+
@registration = get_info(info[9])
|
30
|
+
@time = get_info(info[10])
|
31
|
+
@origin_airport_iata = get_info(info[11])
|
32
|
+
@destination_airport_iata = get_info(info[12])
|
33
|
+
@number = get_info(info[13])
|
34
|
+
@airline_iata = get_info(info[13][0..1])
|
35
|
+
@on_ground = get_info(info[14])
|
36
|
+
@vertical_speed = get_info(info[15])
|
37
|
+
@callsign = get_info(info[16])
|
38
|
+
@airline_icao = get_info(info[18])
|
39
|
+
end
|
40
|
+
# rubocop:enable Metrics
|
41
|
+
|
42
|
+
# Returns a string representation of the `Flight` object.
|
43
|
+
#
|
44
|
+
# @return [String] A formatted string containing relevant information about the flight.
|
45
|
+
def to_s
|
46
|
+
"<(#{@aircraft_code}) #{@registration}
|
47
|
+
- Altitude: #{@altitude}
|
48
|
+
- Ground Speed: #{@ground_speed}
|
49
|
+
- Heading: #{@ground_speed}>"
|
50
|
+
end
|
51
|
+
|
52
|
+
# Returns a formatted string representing the altitude of the flight.
|
53
|
+
#
|
54
|
+
# @return [String] Formatted altitude string (e.g., "5000 ft").
|
55
|
+
def altitude
|
56
|
+
"#{@altitude} ft"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns a formatted string representing the flight level based on altitude.
|
60
|
+
#
|
61
|
+
# @return [String] Formatted flight level string (e.g., "FL350").
|
62
|
+
def flight_level
|
63
|
+
@altitude > 10_000 ? "#{@altitude[0..2]} FL" : altitude
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns a formatted string representing the ground speed of the flight.
|
67
|
+
#
|
68
|
+
# @return [String] Formatted ground speed string (e.g., "300 kts").
|
69
|
+
def ground_speed
|
70
|
+
speed = "#{@ground_speed} kt"
|
71
|
+
speed += 's' if @ground_speed > 1
|
72
|
+
speed
|
73
|
+
end
|
74
|
+
|
75
|
+
# Returns a formatted string representing the heading of the flight.
|
76
|
+
#
|
77
|
+
# @return [String] Formatted heading string (e.g., "120°").
|
78
|
+
def heading
|
79
|
+
"#{@heading}°"
|
80
|
+
end
|
81
|
+
|
82
|
+
# Returns a formatted string representing the vertical speed of the flight.
|
83
|
+
#
|
84
|
+
# @return [String] Formatted vertical speed string (e.g., "1000 fpm").
|
85
|
+
def vertical_speed
|
86
|
+
"#{@vertical_speed} fpm"
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
# Helper method to ensure that the information is not nil or the default text.
|
92
|
+
#
|
93
|
+
# @param info [String] The information to be validated.
|
94
|
+
# @return [String] The original information if it is not nil or the default text.
|
95
|
+
def get_info(info)
|
96
|
+
info && info != DEFAULT_TEXT ? info : DEFAULT_TEXT
|
97
|
+
end
|
98
|
+
end
|
data/lib/flight_radar/request.rb
CHANGED
@@ -1,38 +1,80 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require
|
4
|
-
|
5
|
-
# Request class
|
6
|
-
class Request
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
@
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
def
|
25
|
-
@response.
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'httparty'
|
4
|
+
|
5
|
+
# The `Request` class handles making HTTP requests using the HTTParty gem.
|
6
|
+
class Request
|
7
|
+
# Initializes a new instance of the `Request` class.
|
8
|
+
#
|
9
|
+
# @param url [String] The URL for the HTTP request.
|
10
|
+
# @param headers [Hash] (optional) The headers to include in the HTTP request.
|
11
|
+
# @param params [Hash] (optional) The parameters to include in the HTTP request.
|
12
|
+
def initialize(url, headers = {}, params = {})
|
13
|
+
@url = url
|
14
|
+
@params = params
|
15
|
+
@headers = headers
|
16
|
+
@lang = 'en'
|
17
|
+
|
18
|
+
@response = send_request(url, headers, params)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns the parsed content of the HTTP response.
|
22
|
+
#
|
23
|
+
# @return [Hash] The parsed content of the HTTP response.
|
24
|
+
def content
|
25
|
+
@response.parsed_response
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns the content type of the HTTP response.
|
29
|
+
#
|
30
|
+
# @return [String] The content type of the HTTP response.
|
31
|
+
def content_type
|
32
|
+
@response.content_type
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the status code of the HTTP response.
|
36
|
+
#
|
37
|
+
# @return [Integer] The status code of the HTTP response.
|
38
|
+
def status_code
|
39
|
+
@response.code
|
40
|
+
end
|
41
|
+
|
42
|
+
# Checks if the HTTP response code indicates success.
|
43
|
+
#
|
44
|
+
# @return [Boolean] Returns true if the response code is within the range 200 to 299 (inclusive), indicating success.
|
45
|
+
def success?
|
46
|
+
(200..299).include?(@response.code)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# Sends an HTTP GET request using the specified URL, headers, and parameters.
|
52
|
+
#
|
53
|
+
# @param url [String] The URL for the HTTP request.
|
54
|
+
# @param headers [Hash] The headers to include in the HTTP request.
|
55
|
+
# @param params [Hash] The parameters to include in the HTTP request.
|
56
|
+
# @return [HTTParty::Response] The HTTParty response object.
|
57
|
+
def send_request(url, headers, params)
|
58
|
+
full_url = build_full_url(url, params)
|
59
|
+
HTTParty.get(full_url, headers)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Builds the full URL by appending parameters to the base URL.
|
63
|
+
#
|
64
|
+
# @param url [String] The base URL.
|
65
|
+
# @param params [Hash] The parameters to include in the URL.
|
66
|
+
# @return [String] The full URL for the HTTP request.
|
67
|
+
def build_full_url(url, params)
|
68
|
+
return url unless params
|
69
|
+
|
70
|
+
"#{url}?#{params_to_string(params)}"
|
71
|
+
end
|
72
|
+
|
73
|
+
# Converts parameters to a query string.
|
74
|
+
#
|
75
|
+
# @param params [Hash] The parameters to convert.
|
76
|
+
# @return [String] The query string representation of the parameters.
|
77
|
+
def params_to_string(params)
|
78
|
+
HTTParty::HashConversions.to_params(params)
|
79
|
+
end
|
80
|
+
end
|
data/lib/flight_radar.rb
CHANGED
@@ -1,89 +1,121 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
3
|
+
require_relative 'flight_radar/core'
|
4
|
+
require_relative 'flight_radar/request'
|
5
|
+
require_relative 'flight_radar/flight'
|
6
6
|
|
7
7
|
# FlightRadar module for sending requests to FlightRadar24 API
|
8
8
|
module FlightRadar
|
9
|
-
VERSION =
|
9
|
+
VERSION = '0.2.1'
|
10
10
|
|
11
11
|
module_function
|
12
12
|
|
13
|
+
# Default configuration parameters for FlightRadar requests.
|
13
14
|
@config = {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
15
|
+
faa: '1',
|
16
|
+
satellite: '1',
|
17
|
+
mlat: '1',
|
18
|
+
flarm: '1',
|
19
|
+
adsb: '1',
|
20
|
+
gnd: '1',
|
21
|
+
air: '1',
|
22
|
+
vehicles: '1',
|
23
|
+
estimated: '1',
|
24
|
+
maxage: '14400',
|
25
|
+
gliders: '1',
|
26
|
+
stats: '1',
|
27
|
+
limit: '5000'
|
27
28
|
}
|
28
29
|
|
30
|
+
# Retrieves a list of airlines.
|
31
|
+
#
|
32
|
+
# @return [Array] An array containing information about airlines.
|
29
33
|
def airlines
|
30
34
|
request = Request.new(Core::AIRLINES_DATA_URL, Core::JSON_HEADERS)
|
31
|
-
request.content[
|
35
|
+
request.content['rows']
|
32
36
|
end
|
33
37
|
|
38
|
+
# Retrieves airline logos based on IATA and ICAO codes.
|
39
|
+
#
|
40
|
+
# @param iata [String] The IATA code of the airline.
|
41
|
+
# @param icao [String] The ICAO code of the airline.
|
42
|
+
# @return [Array] An array containing URLs of airline logos.
|
34
43
|
def airline_logo(iata, icao)
|
35
44
|
first_logo_url = "#{Core::AIRLINE_LOGO_URL}#{iata}_#{icao}.png"
|
36
45
|
second_logo_url = "#{Core::ALTERNATIVE_AIRLINE_LOGO_URL}#{icao}_logo0.png"
|
37
46
|
|
38
|
-
#
|
47
|
+
# Check the availability of logos and return URLs.
|
39
48
|
result = []
|
40
49
|
first_request = Request.new(first_logo_url, Core::IMAGE_HEADERS)
|
41
50
|
second_request = Request.new(second_logo_url, Core::IMAGE_HEADERS)
|
42
|
-
result << first_logo_url if first_request.
|
43
|
-
result << second_logo_url if second_request.
|
44
|
-
|
51
|
+
result << first_logo_url if first_request.success?
|
52
|
+
result << second_logo_url if second_request.success?
|
53
|
+
result
|
45
54
|
end
|
46
55
|
|
56
|
+
# Retrieves traffic statistics for a specific airport.
|
57
|
+
#
|
58
|
+
# @param code [String] The code of the airport.
|
59
|
+
# @return [Hash] A hash containing traffic statistics for the specified airport.
|
47
60
|
def airport(code)
|
48
61
|
HTTParty.get("https://data-live.flightradar24.com/airports/traffic-stats/?airport=#{code}").parsed_response
|
49
62
|
end
|
50
63
|
|
64
|
+
# Retrieves a list of airports.
|
65
|
+
#
|
66
|
+
# @return [Array] An array containing information about airports.
|
51
67
|
def airports
|
52
68
|
request = Request.new(Core::AIRPORTS_DATA_URL, Core::JSON_HEADERS)
|
53
|
-
request.content[
|
69
|
+
request.content['rows']
|
54
70
|
end
|
55
71
|
|
72
|
+
# Converts zone information into bounds string.
|
73
|
+
#
|
74
|
+
# @param zone [Hash] A hash containing zone information.
|
75
|
+
# @return [String] A string containing bounds information.
|
56
76
|
def bounds(zone)
|
57
|
-
"#{zone[
|
77
|
+
"#{zone['tl_y']},#{zone['br_y']},#{zone['tl_x']},#{zone['br_x']}"
|
58
78
|
end
|
59
79
|
|
80
|
+
# Retrieves the URL of a country flag based on the country name.
|
81
|
+
#
|
82
|
+
# @param country [String] The name of the country.
|
83
|
+
# @return [String] The URL of the country flag.
|
60
84
|
def country_flag(country)
|
61
|
-
"#{Core::COUNTRY_FLAG_URL}#{country.downcase.gsub(
|
85
|
+
"#{Core::COUNTRY_FLAG_URL}#{country.downcase.gsub(' ', '-')}.gif"
|
62
86
|
end
|
63
87
|
|
88
|
+
# Retrieves detailed information about a specific flight.
|
89
|
+
#
|
90
|
+
# @param flight_id [String] The ID of the flight.
|
91
|
+
# @return [Hash] A hash containing detailed information about the specified flight.
|
64
92
|
def flight_details(flight_id)
|
65
93
|
HTTParty.get("https://data-live.flightradar24.com/clickhandler/?flight=#{flight_id}").parsed_response
|
66
94
|
end
|
67
95
|
|
96
|
+
# Retrieves a list of flights based on specified parameters.
|
97
|
+
#
|
98
|
+
# @param params [Hash] (optional) Parameters for filtering flights.
|
99
|
+
# @return [Array] An array containing Flight objects.
|
68
100
|
def flights(params = {})
|
69
|
-
request_params = @config
|
101
|
+
request_params = @config.dup
|
70
102
|
request_params[:airline] = params[:airline] if params[:airline]
|
71
|
-
request_params[:bounds] = params[:bounds]
|
103
|
+
request_params[:bounds] = params[:bounds]&.gsub(',', '%2C')
|
104
|
+
|
105
|
+
response = Request.new(Core::REAL_TIME_FLIGHT_TRACKER_DATA_URL, Core::JSON_HEADERS, request_params).content
|
72
106
|
|
73
|
-
request = Request.new(Core::REAL_TIME_FLIGHT_TRACKER_DATA_URL, Core::JSON_HEADERS, request_params)
|
74
|
-
response = request.content
|
75
107
|
%w[full_count version stats].each { |k| response.delete(k) }
|
76
|
-
|
77
|
-
response.
|
78
|
-
flights.append(Flight.new(flight_id, flight_details))
|
79
|
-
end
|
80
|
-
flights
|
108
|
+
|
109
|
+
response.map { |flight_id, flight_details| Flight.new(flight_id, flight_details) }
|
81
110
|
end
|
82
111
|
|
112
|
+
# Retrieves information about flight tracking zones.
|
113
|
+
#
|
114
|
+
# @return [Hash] A hash containing information about flight tracking zones.
|
83
115
|
def zones
|
84
116
|
request = Request.new(Core::ZONES_DATA_URL, Core::JSON_HEADERS)
|
85
117
|
request = request.content
|
86
|
-
request.delete(
|
118
|
+
request.delete('version')
|
87
119
|
request
|
88
120
|
end
|
89
121
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flight_radar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakub Polak
|
@@ -24,48 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.21.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 13.1.0
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 13.1.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 3.12.0
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 3.12.0
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rubocop
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.59.0
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 1.59.0
|
69
27
|
description: 'To use this API see more information at: https://www.flightradar24.com/terms-and-conditions'
|
70
28
|
email:
|
71
29
|
- jakub.polak.vz@gmail.com
|
@@ -77,6 +35,7 @@ files:
|
|
77
35
|
- ".gitignore"
|
78
36
|
- ".rspec"
|
79
37
|
- ".rubocop.yml"
|
38
|
+
- ".yardopts"
|
80
39
|
- CHANGELOG.md
|
81
40
|
- CODE_OF_CONDUCT.md
|
82
41
|
- Gemfile
|
@@ -95,6 +54,7 @@ metadata:
|
|
95
54
|
homepage_uri: https://github.com/kupolak/flight_radar
|
96
55
|
source_code_uri: https://github.com/kupolak/flight_radar
|
97
56
|
changelog_uri: https://github.com/kupolak/flight_radar/blob/main/CHANGELOG.md
|
57
|
+
rubygems_mfa_required: 'true'
|
98
58
|
post_install_message:
|
99
59
|
rdoc_options: []
|
100
60
|
require_paths:
|
@@ -103,7 +63,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
63
|
requirements:
|
104
64
|
- - ">="
|
105
65
|
- !ruby/object:Gem::Version
|
106
|
-
version: 2.
|
66
|
+
version: 3.2.0
|
107
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
68
|
requirements:
|
109
69
|
- - ">="
|