Bini
A toolbox to help me rapidly build/deploy a cli. Filled with assumptions about how I think a CLI should behave.
Build Status
| master | |
| development |
Installation
To install:
% gem install bini
To use inside of an application, add this to the your gemfile:
% gem 'bini'
and run bundle to make it available:
% bundle
Usage
Bini is broken up into a few pieces, always include this first:
require 'bini'Optional components can be loaded like this:
require 'bini/config'
require 'bini/optparser'
require 'bini/log'Extensions
Savable
Make any hash savable. It saves the key/value pairs from the hash into a YAML file that can be loaded later. It manages permissions (optionally), can create a backup/save file, automatically save on changes.
To use it just include Bini::Extensions::Savable in the top of your class
class NewClass < Hash
include Bini::Exetensions::Savable
endNow when you create the new object, it will have access to a few addtional methods.
% obj.save
% obj.load
Are the main two, the other methods can be used but are typically called through those two. These secondary methods are:
% obj.backup
% obj.set_mode
Backup will create a backup file on the spot. This won't save the current hash, just copy the save file.
Set mode will set the mode stored in obj.options[:mode] on the file.
You can check if the obj needs to be saved with is_dirty?. This will
return true if you need to save and false if you do not.
To configure savable you create k/v pairs in it's options.
% obj.options[:backup] = true
Options is just anothr hash to contain the various settings cleanly.
- file: Filename to save the hash to.
- backup: Boolean, whether to produce a backup or not.
- mode: FixNum: mode to store it as: 0600, 0755, 0644 and so on.
- autosave: Boolean: Automatically save on changes.
Helpers
Sash
Sash is a class extended from hash with savable and a few extra features. You can add overrides (load values into the hash on creation), options at creation and autoload.
Overrides are just a way to set values on creation.
Additional Options
- autoload: Boolean: set to true to load the value of the config right on creation
API
Generated documentation is available via yard.
Examples and wiki coming if they are ever needed.
Design philosophy
If such a thing can be said.
- Whenever possible, sane defaults will be supplied.
- A minimum amount of configuration before execution.
- If it requires a large chunk of requires, put it in a sub gem.
- Speed is of the utmost importance.
- Whenever possible, use stuff out of the stdlib.
Contributing
I don't have rules here, more guidelines.
- Try to make the branch name clear, words like feature/issue/bug help.
- Tests.