Project

fini

0.0
No commit activity in last 3 years
No release in over 3 years
Fini is an ini-parser optimized for performance.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

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.