Sipp
A simple wrapper to decode SIPP/ACRISS car codes.
Installation
Add this line to your application's Gemfile:
gem 'sipp'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sipp
Usage
code = SIPP::Code.new 'CCMN'
code.to_s # "Compact - 2/4 Door - Manual Unspecified Drive - Unspecified Fuel/Power Without Air"
code.category.to_s # Compact
code.type.to_s # 2/4 Door
code.transmission_drive.to_s # Manual Unspecified Drive
code.transmission.to_s # Manual
code.drive.to_s # Unspecified Drive
code.transmission_manual? # true
code.transmission_auto? # false
code.fuel_ac.to_s # Unspecified Fuel/Power Without Air
code.fuel.to_s # Unspecified Fuel/Power
code.ac.to_s # No Air
code.ac? # false
If the code is invalid, it will return nil
on all checks.
If only some of the letters are valid, it will translate them:
code = SIPP::Code.new '**DR'
code.valid? # false
code.to_s # #N/A - #N/A - Auto AWD - Unspecified Fuel/Power With Air
Calling code.validate!
will throw validation errors with exceptions.
#as_json
A convenient hash that lists car capabilities.
SIPP::Code.new('CCDD').as_json
{
category: :compact,
type: :two_four_door,
transmission: :auto,
drive: :awd,
fuel: :diesel,
ac: :air,
code: "CCDD"
}
I18n
NOTE: a simpler version without i18n is kept in v.1.4
, you can use it as gem 'sipp', git: 'https://github.com/austerlitz/sipp.git', tag: 'v1.4'
For more flexibility methods like category
, drive
etc. return a simple
Wrapper object to provide either symbol or an i18n-sed string.
Thus, when #to_s
is implied, it will return a translated message.
For use in code or elsewhere, use #to_sym
:
if :diesel == code.fuel.to_sym
puts 'This car has a diesel engine'
end
This seems to be not an elegant solution. If you have any ideas on improving it, please make a pull request.
You can override existing or add your own translations an put them under the
sipp
scope:
ua:
sipp:
category:
mini: міні
type:
convertible: кабріолет
transmission:
manual: МКПП
auto: АКПП
Inverted
A very early beta. But beta than nothin'
It's also able to generate a SIPP code from car capabilities.
The capabilities are expected in the same format as produced by #as_json
.
If something invalid is supplied it generates '*'
.
SIPP::Inverted.generate({ category: :compact, type: :two_four_door, transmission: :manual, drive: :unspecified, fuel: :petrol, ac: :air})
# => 'CCMV'
SIPP::Inverted.generate({ category: :compact, type: :two_four_door, fuel: :petrol, ac: :air })
# => 'CC*V'
Extended
Works most similar to Inverted but produces a more consistent approach to encoding car capabilities.
Generates an Extended-SIPP code from capabilities provided and translates capabilities list into an Extended-SIPP code.
Should be tried and discussed.
Generating an e-sipp code from capabilities:
SIPP::Extended.generate({
category: :compact,
type: :two_three_door,
transmission: :manual,
drive: :front,
fuel: :petrol,
ac: :air,
doors: 2,
seats: 2,
bags_big: 3,
bags_small: 4,
}) # => 'CBMFPA2234'
And capabilities from a code, just like a usual SIPP:
SIPP::Extended.new('CBMFPN2234').as_json
{
category: :compact,
type: :two_three_door,
transmission: :manual,
drive: :front,
fuel: :petrol,
ac: :no_air,
doors: 2,
seats: 2,
bags_big: 3,
bags_small: 4,
}
Puts :unspecified
if cannot decode a capability:
SIPP::Extended.new('CCMFDA55').as_json
{
category: :compact,
type: :two_four_door,
transmission: :manual,
drive: :front,
fuel: :diesel,
ac: :air,
doors: 5,
seats: 5,
bags_big: :unspecified,
bags_small: :unspecified,
}
TODO
- add i18n helpers or redo strings into symbols to be i18n-sed
- add SIPP code generation from car capabilities
- add input validation of some kind?
- add Extended SIPP codes
- add more adequate tests
- add query methods for common checks (like
.diesel?
etc) - add pseudo codes
- add van codes
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
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.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/austerlitz/sipp. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the Sipp project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.