lib/toml-rb.rb
require "citrus"
require_relative "toml-rb/errors"
require_relative "toml-rb/array"
require_relative "toml-rb/string"
require_relative "toml-rb/datetime"
require_relative "toml-rb/table"
require_relative "toml-rb/table_array"
require_relative "toml-rb/inline_table"
require_relative "toml-rb/keyvalue"
require_relative "toml-rb/parser"
require_relative "toml-rb/dumper"
File.dirname(File.expand_path(__FILE__)).tap do |root|
Citrus.load "#{root}/toml-rb/grammars/helper.citrus"
Citrus.load "#{root}/toml-rb/grammars/primitive.citrus"
Citrus.load "#{root}/toml-rb/grammars/array.citrus"
Citrus.load "#{root}/toml-rb/grammars/document.citrus"
end
module TomlRB
# Public: Returns a hash from *TomlRB* content.
#
# content - TomlRB string to be parsed.
# :symbolize_keys - true | false (default: false).
#
#
# Examples
#
# TomlRB.parse('[group]')
# # => {"group"=>{}}
#
# TomlRB.parse('title = "TomlRB parser"')
# # => {"title"=>"TomlRB parser"}
#
# TomlRB.parse('[group]', symbolize_keys: true)
# # => {group: {}}
#
# TomlRB.parse('title = "TomlRB parser"', symbolize_keys: true)
# # => {title: "TomlRB parser"}
#
#
# Returns a Ruby hash representation of the content according to TomlRB spec.
# Raises ValueOverwriteError if a key is overwritten.
# Raises ParseError if the content has invalid TomlRB.
def self.parse(content, symbolize_keys: false)
Parser.new(content, symbolize_keys: symbolize_keys).hash
end
# Public: Returns a hash from a *TomlRB* file.
#
# path - TomlRB File path
# :symbolize_keys - true|false (optional).
#
#
# Examples
#
# TomlRB.load_file('/tmp/simple.toml')
# # => {"group"=>{}}
#
# TomlRB.load_file('/tmp/simple.toml', symbolize_keys: true)
# # => {group: {}}
#
#
# Returns a Ruby hash representation of the content.
# Raises ValueOverwriteError if a key is overwritten.
# Raises ParseError if the content has invalid TomlRB.
# Raises Errno::ENOENT if the file cannot be found.
# Raises Errno::EACCES if the file cannot be accessed.
def self.load_file(path, symbolize_keys: false)
TomlRB.parse(File.read(path), symbolize_keys: symbolize_keys)
end
# Public: Returns a *TomlRB* string from a Ruby Hash.
#
# hash - Ruby Hash to be dumped into *TomlRB*
#
#
# Examples
#
# TomlRB.dump(title: 'TomlRB dump')
# # => "simple = true\n"
#
# hash = {
# "title"=>"wow!",
# "awesome"=> {
# "you"=>true,
# "others"=>false
# }
# }
#
# TomlRB.dump(hash)
# # => "title = \"wow!\"\n[awesome]\nothers = false\nyou = true\n"
#
#
# Returns a TomlRB string representing the hash.
def self.dump(hash)
Dumper.new(hash).toml_str
end
end