# LensProtocol
A Ruby parser and builder for the OMA protocol (a.k.a. Data Communication Standard) that was developed by the Lens Processing & Technology Division of The Vision Council for interconnection of optical laboratory equipment.
Furthermore, it allows you to generate a SVG representation of the tracing datasets.
[![Build Status](https://app.travis-ci.com/eeng/lens_protocol.svg?branch=master)](https://app.travis-ci.com/eeng/lens_protocol)
## Installation
```ruby
gem 'lens_protocol'
```
## Usage
### Parsing an OMA file
```ruby
require 'lens_protocol'
message = LensProtocol::OMA.parse(File.read('examples/oma/R360_1.oma'))
message.value_of('SPH') # => [1.25, -0.5]
```
### Generating an OMA file
```ruby
message = LensProtocol::OMA.generate(
'JOB' => 42,
'SPH' => [1.25, -0.5]
)
puts message
# =>
# JOB=42
# SPH=1.25;-0.50
```
### Generating the Tracing SVG
The `message.to_svg` method returns an array of SVG strings, one for each side, which can be used directly in an ERB template, like this:
```html
<% message.to_svg.map do |svg| %>
<%= svg %>
<% end %>
```
And it should look like this:
![Sample Image](examples/images/R360_1.png)
To customize the styles, please check out [the provided sample stylesheet](examples/public/styles.css).
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` or `guard` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
There's also a Sinatra app which allows you visualize the generated SVG. To start the server do `bundle exec ruby examples/svg.rb` and go to `http://localhost:4567/`
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 tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/eeng/lens_protocol. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## Code of Conduct
Everyone interacting in the LensProtocol project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/eeng/lens_protocol/blob/master/CODE_OF_CONDUCT.md).