Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fini is a performance-optimized Ruby ini parser that supports strings, booleans, integers and floats.
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
spec
.gitignore
.yardopts
Gemfile
LICENSE.txt
README.md
Rakefile
fini.gemspec

README.md

Fini

Fini is a performance-optimized ini parser that supports strings, booleans, integers and floats.

Syntax for ini files

  • A section is marked with [section]
  • Key-value pairs are separated by an equals sign, eg. "key = value"
  • Quotations for strings are optional
  • Lines beginning with ; are comments
  • Literal "true" and "false" (without quotes) as the value will be converted to boolean
  • A number without a period will be converted into an integer
  • A number with one period will be converted into a float
  • Keys can be any arbitrary string as long as it doesn't contain an equals sign, and are kept as strings

Sections can also have sub-sections by appending the sub-section's name to the section with a period, eg: [section.subsection]

Subsections will be hashes in the section with the sub-section name as the key (symbol).

Sample ini content

A basic ini might look like this:

[section]
string = some text
boolean = true
number = 1

[section.subsection]
key = value

Installation

Add this line to your application's Gemfile:

gem 'fini'

And then execute:

$ bundle

Or install it yourself as:

$ gem install fini

Usage

The quickest way to use Fini is to invoke the module method parse:

require 'fini'

data = Fini.parse(ini)

The data variable will now contain an IniObject where each section is a method. If using the sample ini from above, you might access data like this:

data.section 'string'
# => "some text"

# Array notation works as well
data.section['string']
# => "some text"

You can also supply a default value as a second argument, which is nil by default:

data.section 'does not exist', 'none'
# => "none"

data.section 'does not exist'
# => nil

Subsections

Fini also supports subsections. Here's an ini file with a use case:

[server.testing]
database = foo
user = fooman
password = foopass

[server.staging]
database = stagefoo
user = foomanstage
password = foopassstage

Subsections are added as symbol keys to the section, and are just basic hashes from there on:

data.server[:testing]
# => {'database' => 'foo', 'user' => 'fooman', 'password' => 'foopass'}

data.server[:testing]['database']
# => "foo"

Instance usage

If an instance object is needed, Fini has Fini::Ini with the methods parse and load. load is a convenience method for loading an ini file instead of a string.

require 'fini'

parser = Fini::Ini.new
data = parser.parse(ini)

data2 = parser.load('path/to/ini.ini')

Planned features

  • An option to convert all keys to symbols
  • Support for escape characters in quoted strings
  • Support for symbol values

License

MIT license.

Something went wrong with that request. Please try again.