tarakanbg/notams

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Notams

A ruby gem for retrieving the currently active NOTAMs for an airport or a region.
Supports multiple airports/regions in one request. Pulls data from
[FAA](http://www.faa.gov/) website. Depends on `nokogiri` for the heavy lifting.

[![Build Status](https://secure.travis-ci.org/tarakanbg/notams.png?branch=master)](http://travis-ci.org/tarakanbg/notams)
[![Gemnasium](https://gemnasium.com/tarakanbg/notams.png?travis)](https://gemnasium.com/tarakanbg/notams)
[![Gem Version](https://badge.fury.io/rb/notams.png)](http://badge.fury.io/rb/notams)
[![Code Climate](https://codeclimate.com/github/tarakanbg/notams.png)](https://codeclimate.com/github/tarakanbg/notams)

## Requirements

[Ruby 1.9.3](http://www.ruby-lang.org/en/downloads/) or higher | **Supports Ruby 2.0!**


## Installation

Add this line to your application's Gemfile:

    gem 'notams'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install notams

## Usage

### Easy mode

The `.notams` method can be applied to any string literal or variable,
representing a valid ICAO code of an airport or FIR, or a comma-separated list
of airports/regions. It will return an array, containing all the **currently
active** NOTAMs for your selection. You can loop through the array to display or
parse individual notams. I figured this would be the most common use case. For
advanced usage and possible customizations [see below](#advanced-usage).

```ruby
icao = "lowi"
icao.notams # => returns an array containing all NOTAMs for Innsbruck airport

"lowi".notams # => same as above

icao = "lqsa,lqsb"
icao.notams # => returns an array containing all NOTAMs for Sarajevo Airport
            #    and Bosnia and Herzegovina FIR
```

### Advanced usage

The `.notams` method can be customized by passing an optional hash of arguments.

The `:objects => true` option will cause the `.notams` method to return an array
of notam **objects** instead of strings. Thus each notam is parsed and
encapuslated in an instance of the `Notam` class and exposes a number of
**attributes**:

```ruby
icao = "lqsa"
icao.notams(:objects => true) # => returns an array of notam objects

notam = icao.notams.first # => returns the first notam as an object

# Notam object attributes

notam.raw       # => returns the raw (unprocessed) notam as a string
notam.icao      # => returns the icao code of the airport or area, covered by the notam;
                #    useful when iterating over multiple notams, covering a collection of airports or areas
notam.message   # => returns the actual information message of the notam as a string
```

### Example Ruby on Rails implementation

Here's a possible scenario of using this gem in a Ruby on Rails application.
Verbosity is kept on purpose for clarity.

**In your controller:**
```ruby
def action

 # We define the airpots and/or areas that we're interested in.
 # In this case this is Sarajevo Airport and the entire Bosnia & Herzegovina FIR

 icao = "lqsa, lqsb"

 # Now we want to pull all the latest notams for both these areas.
 # We also want to pull them as objects, so that we can process their attributes
 # separately in our views. We're assigning the result to the @notams instance
 # variable which we will use in our views

 @notams = icao.notams(:objects => true)

end
```

**In your view (HAML is used for clarity):**

```haml
// We could play with the attributes individually if we need to:
- for notam in @notams
  %li
   = notam.icao
   = notam.message

// Or we could just loop through the raw notams:
- for notam in @notams
  %li= notam.raw
```

## Changelog

### v. 0.2.0 27 February 2013

* Ruby 2.0 support
* dependencies update
* classes refactored

### v. 0.1.0 28 July 2012

* added optional arguments customization to the `.notams` method (see [Advanced Usage](#advanced-usage))
* code refactored into classes for flexibility


## Contributing

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Added some feature'`)
4. Make sure all tests pass!
5. Push to the branch (`git push origin my-new-feature`)
6. Create new Pull Request


## Credits

Copyright © 2013 [Svilen Vassilev](http://svilen.rubystudio.net)

*If you find my work useful or time-saving, you can endorse it or buy me a cup of coffee:*

[![endorse](http://api.coderwall.com/svilenv/endorsecount.png)](http://coderwall.com/svilenv)
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5FR7AQA4PLD8A)

Released under the [MIT LICENSE](https://github.com/tarakanbg/notams/blob/master/LICENSE)