Class: FaaApra::Service

Inherits:
Object
  • Object
show all
Defined in:
lib/faa_apra/service.rb

Overview

Service to interact with FAA’s Aeronautic Product Release API (APRA) external-api.faa.gov/apra

This service provides access to FAA aeronautical chart publication download endpoints including Coded Instrument Flight Procedures, Digital Enroute Charts, Terminal Procedures, and more.

Constant Summary collapse

BASE_URL =
"https://external-api.faa.gov/apra"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client_id = nil, client_secret = nil) ⇒ Service

Initialize the service with FAA API credentials

Parameters:

  • client_id (String) (defaults to: nil)

    FAA API client ID

  • client_secret (String) (defaults to: nil)

    FAA API client secret

Raises:

  • (ArgumentError)


21
22
23
24
25
26
27
# File 'lib/faa_apra/service.rb', line 21

def initialize(client_id = nil, client_secret = nil)
  @client_id = client_id || ENV['FAA_APRA_CLIENT_ID']
  @client_secret = client_secret || ENV['FAA_APRA_CLIENT_SECRET']
  
  raise ArgumentError, "FAA APRA client_id is required" unless @client_id
  raise ArgumentError, "FAA APRA client_secret is required" unless @client_secret
end

Instance Attribute Details

#client_idObject (readonly)

Returns the value of attribute client_id.



16
17
18
# File 'lib/faa_apra/service.rb', line 16

def client_id
  @client_id
end

#client_secretObject (readonly)

Returns the value of attribute client_secret.



16
17
18
# File 'lib/faa_apra/service.rb', line 16

def client_secret
  @client_secret
end

Instance Method Details

#cifp_chart(edition: 'current') ⇒ Hash

Get CIFP chart download link

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

Returns:

  • (Hash)

    CIFP release data



36
37
38
39
# File 'lib/faa_apra/service.rb', line 36

def cifp_chart(edition: 'current')
  validate_edition(edition)
  get("/cifp/chart", { edition: edition })
end

#cifp_info(edition: 'current') ⇒ Hash

Get CIFP edition date and edition number

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

Returns:

  • (Hash)

    CIFP edition information



44
45
46
47
# File 'lib/faa_apra/service.rb', line 44

def cifp_info(edition: 'current')
  validate_edition(edition)
  get("/cifp/info", { edition: edition })
end

#ddof_chartHash

Get Daily Digital Obstacle File download link

Returns:

  • (Hash)

    DDOF release data



55
56
57
# File 'lib/faa_apra/service.rb', line 55

def ddof_chart
  get("/ddof/chart")
end

#ddof_infoHash

Get Daily Digital Obstacle File edition information

Returns:

  • (Hash)

    DDOF edition information



61
62
63
# File 'lib/faa_apra/service.rb', line 61

def ddof_info
  get("/ddof/info")
end

#dec_chart(edition: 'current') ⇒ Hash

Get Digital Enroute Chart download link

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

Returns:

  • (Hash)

    DEC release data



72
73
74
75
# File 'lib/faa_apra/service.rb', line 72

def dec_chart(edition: 'current')
  validate_edition(edition)
  get("/dec/chart", { edition: edition })
end

#dec_info(edition: 'current') ⇒ Hash

Get DEC edition date and edition number

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

Returns:

  • (Hash)

    DEC edition information



80
81
82
83
# File 'lib/faa_apra/service.rb', line 80

def dec_info(edition: 'current')
  validate_edition(edition)
  get("/dec/info", { edition: edition })
end

#dtpp_chart(edition: 'current', area: 'US', format: 'all') ⇒ Hash

Get Terminal Procedure Publication chart download information

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • area (String) (defaults to: 'US')

    geographic area, ‘US’ or state name (default: ‘US’)

  • format (String) (defaults to: 'all')

    ‘all’, ‘changes’, or ‘xml’ format (default: ‘all’)

Returns:

  • (Hash)

    TPP release data



94
95
96
97
98
99
100
101
102
103
# File 'lib/faa_apra/service.rb', line 94

def dtpp_chart(edition: 'current', area: 'US', format: 'all')
  validate_edition(edition)
  validate_format(format, %w[all changes xml])
  
  get("/dtpp/chart", { 
    edition: edition,
    area: area,
    format: format
  })
end

#dtpp_info(edition: 'current', area: 'US') ⇒ Hash

Get Terminal Procedure Publication chart edition information

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • area (String) (defaults to: 'US')

    geographic area, ‘US’ or state name (default: ‘US’)

Returns:

  • (Hash)

    TPP edition information



109
110
111
112
113
114
115
116
# File 'lib/faa_apra/service.rb', line 109

def dtpp_info(edition: 'current', area: 'US')
  validate_edition(edition)
  
  get("/dtpp/info", {
    edition: edition,
    area: area
  })
end

#grand_canyon_chart(edition: 'current', format: 'pdf') ⇒ Hash

Get Grand Canyon VFR Chart download link

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • format (String) (defaults to: 'pdf')

    ‘tiff’ or ‘pdf’ format (default: ‘pdf’)

Returns:

  • (Hash)

    Grand Canyon VFR Chart release data



160
161
162
163
164
165
# File 'lib/faa_apra/service.rb', line 160

def grand_canyon_chart(edition: 'current', format: 'pdf')
  validate_edition(edition)
  validate_format(format, %w[tiff pdf])
  
  get("/grandcanyon/chart", { edition: edition, format: format })
end

#grand_canyon_info(edition: 'current', format: 'pdf') ⇒ Hash

Get Grand Canyon VFR Chart edition information

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • format (String) (defaults to: 'pdf')

    ‘tiff’ or ‘pdf’ format (default: ‘pdf’)

Returns:

  • (Hash)

    Grand Canyon VFR Chart edition information



171
172
173
174
175
176
# File 'lib/faa_apra/service.rb', line 171

def grand_canyon_info(edition: 'current', format: 'pdf')
  validate_edition(edition)
  validate_format(format, %w[tiff pdf])
  
  get("/grandcanyon/info", { edition: edition, format: format })
end

#ifr_enroute_chart(edition: 'current', geoname: nil, altitude:, format: 'pdf') ⇒ Hash

Get IFR Enroute Chart download link

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • geoname (String) (defaults to: nil)

    geographic name of the chart

  • altitude (String)

    ‘high’ or ‘low’ altitude (required)

  • format (String) (defaults to: 'pdf')

    ‘tiff’ or ‘pdf’ format (default: ‘pdf’)

Returns:

  • (Hash)

    IFR Enroute Chart release data



188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/faa_apra/service.rb', line 188

def ifr_enroute_chart(edition: 'current', geoname: nil, altitude:, format: 'pdf')
  validate_edition(edition)
  validate_altitude(altitude)
  validate_format(format, %w[tiff pdf])
  
  params = { 
    edition: edition,
    altitude: altitude.downcase,
    format: format
  }
  params[:geoname] = geoname if geoname
  
  get("/ifr/enroute/chart", params)
end

#ifr_enroute_info(edition: 'current', geoname: nil, altitude:, format: 'pdf') ⇒ Hash

Get IFR Enroute Chart edition information

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • geoname (String) (defaults to: nil)

    geographic name of the chart

  • altitude (String)

    ‘high’ or ‘low’ altitude (required)

  • format (String) (defaults to: 'pdf')

    ‘tiff’ or ‘pdf’ format (default: ‘pdf’)

Returns:

  • (Hash)

    IFR Enroute Chart edition information



209
210
211
212
213
214
215
216
217
218
219
220
221
222
# File 'lib/faa_apra/service.rb', line 209

def ifr_enroute_info(edition: 'current', geoname: nil, altitude:, format: 'pdf')
  validate_edition(edition)
  validate_altitude(altitude)
  validate_format(format, %w[tiff pdf])
  
  params = {
    edition: edition,
    altitude: altitude.downcase,
    format: format
  }
  params[:geoname] = geoname if geoname
  
  get("/ifr/enroute/info", params)
end

#sectional_chart(edition: 'current', geoname: nil, format: 'pdf') ⇒ Hash

Get Sectional Chart download link

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • geoname (String) (defaults to: nil)

    geographic name of the sectional chart

  • format (String) (defaults to: 'pdf')

    ‘tiff’ or ‘pdf’ format (default: ‘pdf’)

Returns:

  • (Hash)

    Sectional Chart release data



127
128
129
130
131
132
133
134
135
# File 'lib/faa_apra/service.rb', line 127

def sectional_chart(edition: 'current', geoname: nil, format: 'pdf')
  validate_edition(edition)
  validate_format(format, %w[tiff pdf])
  
  params = { edition: edition, format: format }
  params[:geoname] = geoname if geoname
  
  get("/sectional/chart", params)
end

#sectional_info(edition: 'current', geoname: nil, format: 'pdf') ⇒ Hash

Get Sectional Chart edition information

Parameters:

  • edition (String) (defaults to: 'current')

    ‘current’ or ‘next’ edition (default: ‘current’)

  • geoname (String) (defaults to: nil)

    geographic name of the sectional chart

  • format (String) (defaults to: 'pdf')

    ‘tiff’ or ‘pdf’ format (default: ‘pdf’)

Returns:

  • (Hash)

    Sectional Chart edition information



142
143
144
145
146
147
148
149
150
# File 'lib/faa_apra/service.rb', line 142

def sectional_info(edition: 'current', geoname: nil, format: 'pdf')
  validate_edition(edition)
  validate_format(format, %w[tiff pdf])
  
  params = { edition: edition, format: format }
  params[:geoname] = geoname if geoname
  
  get("/sectional/info", params)
end