toml-rb 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/init.rb +15 -0
- data/lib/toml.rb +20 -0
- data/lib/toml/dumper.rb +43 -0
- data/lib/toml/grammars/document.citrus +1 -1
- data/lib/toml/grammars/helper.citrus +6 -2
- data/test/dumper_test.rb +58 -0
- data/test/example.toml +0 -3
- data/test/toml_test.rb +5 -2
- data/toml-rb.gemspec +3 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ODJhZWQzOTUxMzkwMDc3ODIxYzM0Zjg4ZTMwODU3YjY2NmM2Y2E4Mg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NGQ4MmM2NDE2MmY3NGNhODM2ZDBiYmE5MmQ4YTk0MzZlYTU4ZjY3Zg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MWNjN2JhYTBhMDQ0ZDgzMDU1ZjVkMWQzY2Y2MDE0MmRjNmZiOGUwZjFkNzA2
|
10
|
+
M2RhMTBhMjgyMjQwMTE5ZmJlMzZjYmI1MzRjZTNiYWU3MzE4NjY4YmQzOWVh
|
11
|
+
ZDkzZTYxNjhhY2EwNzQ5YzQ2NzdmYjYzYTMwYmU0Y2E0OTVjZTg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjA1MWEwMWY2YzA5OTNkYWE2MjFjNDNiNWY2ZmYyZGI5ZWM1Y2FhOTA1MGI2
|
14
|
+
M2I5ZjkxZmI1MTRjMzkxOGEyYmEyYzc4MGM0OTI1N2MyMjM2ZjJlYTU4MGQ4
|
15
|
+
OWQxYWJlZDhkNTVmYzBkNWE0OTFjMTAzMjFmYThiNGVhZjY2NzY=
|
data/init.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'citrus'
|
2
|
+
|
3
|
+
ROOT = File.dirname(File.expand_path(__FILE__))
|
4
|
+
|
5
|
+
require "#{ROOT}/lib/toml/string"
|
6
|
+
require "#{ROOT}/lib/toml/keyvalue"
|
7
|
+
require "#{ROOT}/lib/toml/keygroup"
|
8
|
+
require "#{ROOT}/lib/toml/parser"
|
9
|
+
require "#{ROOT}/lib/toml/dumper"
|
10
|
+
|
11
|
+
Citrus.load "#{ROOT}/lib/toml/grammars/helper.citrus"
|
12
|
+
Citrus.load "#{ROOT}/lib/toml/grammars/primitive.citrus"
|
13
|
+
Citrus.load "#{ROOT}/lib/toml/grammars/array.citrus"
|
14
|
+
Citrus.load "#{ROOT}/lib/toml/grammars/document.citrus"
|
15
|
+
|
data/lib/toml.rb
CHANGED
@@ -53,4 +53,24 @@ module TOML
|
|
53
53
|
def self.load_file(path, options = {})
|
54
54
|
TOML.parse(File.read(path), options)
|
55
55
|
end
|
56
|
+
|
57
|
+
|
58
|
+
# Public: Returns a *TOML* string from a Ruby Hash.
|
59
|
+
#
|
60
|
+
# hash - Ruby Hash to be dumped into *TOML*
|
61
|
+
#
|
62
|
+
#
|
63
|
+
# Examples
|
64
|
+
#
|
65
|
+
# TOML.dump({title: "TOML dump"})
|
66
|
+
# # => TODO:
|
67
|
+
#
|
68
|
+
# TOML.parse('title = "TOML parser"')
|
69
|
+
# # =>
|
70
|
+
#
|
71
|
+
#
|
72
|
+
# Returns a TOML string representing the hash.
|
73
|
+
def self.dump(hash)
|
74
|
+
Dumper.new(hash)
|
75
|
+
end
|
56
76
|
end
|
data/lib/toml/dumper.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module TOML
|
2
|
+
class Dumper
|
3
|
+
attr_reader :toml_str
|
4
|
+
|
5
|
+
def initialize(hash)
|
6
|
+
@toml_str = ""
|
7
|
+
|
8
|
+
visit(hash, '')
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def visit(hash, prefix)
|
14
|
+
nested_pairs = []
|
15
|
+
simple_pairs = []
|
16
|
+
|
17
|
+
hash.keys.sort.each do |key|
|
18
|
+
val = hash[key]
|
19
|
+
(val.is_a?(Hash) ? nested_pairs : simple_pairs) << [key, val]
|
20
|
+
end
|
21
|
+
|
22
|
+
@toml_str += "[#{prefix}]\n" unless prefix.empty? || simple_pairs.empty?
|
23
|
+
|
24
|
+
# First add simple pairs, under the prefix
|
25
|
+
simple_pairs.each do |pair|
|
26
|
+
@toml_str << "#{pair[0].to_s} = #{to_toml(pair[1])}\n"
|
27
|
+
end
|
28
|
+
|
29
|
+
nested_pairs.each do |pair|
|
30
|
+
visit(pair[1], prefix.empty? ? pair[0].to_s : [prefix, pair[0]].join('.'))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_toml(obj)
|
35
|
+
case
|
36
|
+
when obj.is_a?(Time)
|
37
|
+
obj.strftime('%Y-%m-%dT%H:%M:%SZ')
|
38
|
+
else
|
39
|
+
obj.inspect
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
grammar Helper
|
2
2
|
rule comment
|
3
|
-
(space? "#" (~
|
3
|
+
(space? "#" (~line_break)* line_break?) { nil }
|
4
4
|
end
|
5
5
|
|
6
6
|
rule space
|
@@ -8,6 +8,10 @@ grammar Helper
|
|
8
8
|
end
|
9
9
|
|
10
10
|
rule indent
|
11
|
-
[ \t\n]*
|
11
|
+
[ \t\r\n]*
|
12
|
+
end
|
13
|
+
|
14
|
+
rule line_break
|
15
|
+
"\n" | "\r\n"
|
12
16
|
end
|
13
17
|
end
|
data/test/dumper_test.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class DumperTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_dump_empty
|
6
|
+
dumped = TOML.dump({})
|
7
|
+
assert_equal('', dumped.toml_str)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_dump_types
|
11
|
+
dumped = TOML.dump(string: %q(TOML "dump"))
|
12
|
+
assert_equal("string = \"TOML \\\"dump\\\"\"\n", dumped.toml_str)
|
13
|
+
|
14
|
+
dumped = TOML.dump(float: -13.24)
|
15
|
+
assert_equal("float = -13.24\n", dumped.toml_str)
|
16
|
+
|
17
|
+
dumped = TOML.dump(int: 1234)
|
18
|
+
assert_equal("int = 1234\n", dumped.toml_str)
|
19
|
+
|
20
|
+
dumped = TOML.dump(true: true)
|
21
|
+
assert_equal("true = true\n", dumped.toml_str)
|
22
|
+
|
23
|
+
dumped = TOML.dump(false: false)
|
24
|
+
assert_equal("false = false\n", dumped.toml_str)
|
25
|
+
|
26
|
+
dumped = TOML.dump(array: [1,2,3])
|
27
|
+
assert_equal("array = [1, 2, 3]\n", dumped.toml_str)
|
28
|
+
|
29
|
+
dumped = TOML.dump(array: [[1,2], ["weird", "one"]])
|
30
|
+
assert_equal("array = [[1, 2], [\"weird\", \"one\"]]\n", dumped.toml_str)
|
31
|
+
|
32
|
+
dumped = TOML.dump(datetime: Time.utc(1986,8,28,15,15))
|
33
|
+
assert_equal("datetime = 1986-08-28T15:15:00Z\n", dumped.toml_str)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_dump_nested_attributes
|
37
|
+
hash = {nested: {hash: { deep: true}}}
|
38
|
+
dumped = TOML.dump(hash)
|
39
|
+
assert_equal("[nested.hash]\ndeep = true\n",
|
40
|
+
dumped.toml_str)
|
41
|
+
|
42
|
+
hash[:nested].merge!(other: 12)
|
43
|
+
dumped = TOML.dump(hash)
|
44
|
+
assert_equal("[nested]\nother = 12\n[nested.hash]\ndeep = true\n",
|
45
|
+
dumped.toml_str)
|
46
|
+
|
47
|
+
hash[:nested].merge!(nest: {again: 'it never ends'})
|
48
|
+
dumped = TOML.dump(hash)
|
49
|
+
toml = "[nested]\n" +
|
50
|
+
"other = 12\n" +
|
51
|
+
"[nested.hash]\n" +
|
52
|
+
"deep = true\n" +
|
53
|
+
"[nested.nest]\n" +
|
54
|
+
"again = \"it never ends\"\n"
|
55
|
+
|
56
|
+
assert_equal(toml, dumped.toml_str)
|
57
|
+
end
|
58
|
+
end
|
data/test/example.toml
CHANGED
data/test/toml_test.rb
CHANGED
@@ -23,7 +23,6 @@ class TomlTest < Test::Unit::TestCase
|
|
23
23
|
},
|
24
24
|
|
25
25
|
"servers" => {
|
26
|
-
"amount" => 2,
|
27
26
|
"alpha" => {
|
28
27
|
"ip" => "10.0.0.1",
|
29
28
|
"dc" => "eqdc10"
|
@@ -88,7 +87,6 @@ class TomlTest < Test::Unit::TestCase
|
|
88
87
|
},
|
89
88
|
|
90
89
|
servers: {
|
91
|
-
amount: 2,
|
92
90
|
alpha: {
|
93
91
|
ip: "10.0.0.1",
|
94
92
|
dc: "eqdc10"
|
@@ -107,4 +105,9 @@ class TomlTest < Test::Unit::TestCase
|
|
107
105
|
|
108
106
|
assert_equal(hash, parsed)
|
109
107
|
end
|
108
|
+
|
109
|
+
def test_line_break
|
110
|
+
parsed = TOML.parse("hello = 'world'\r\nline_break = true")
|
111
|
+
assert_equal({'hello' => 'world', 'line_break' => true}, parsed)
|
112
|
+
end
|
110
113
|
end
|
data/toml-rb.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'toml-rb'
|
3
|
-
s.version = '0.1.
|
3
|
+
s.version = '0.1.2'
|
4
4
|
s.date = Time.now.strftime('%Y-%m-%d')
|
5
5
|
s.summary = "TOML parser in ruby, for ruby."
|
6
6
|
s.description = "A TOML parser using Citrus parsing library. Formerly known as 'toml_parser-ruby'. "
|
@@ -15,7 +15,8 @@ Gem::Specification.new do |s|
|
|
15
15
|
"lib/**/*.rb",
|
16
16
|
"lib/**/*.citrus",
|
17
17
|
"*.gemspec",
|
18
|
-
"test/*.*"
|
18
|
+
"test/*.*",
|
19
|
+
"init.rb"
|
19
20
|
]
|
20
21
|
|
21
22
|
s.add_dependency "citrus"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toml-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emiliano Mancuso
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: citrus
|
@@ -35,6 +35,7 @@ extra_rdoc_files: []
|
|
35
35
|
files:
|
36
36
|
- README.md
|
37
37
|
- Rakefile
|
38
|
+
- lib/toml/dumper.rb
|
38
39
|
- lib/toml/keygroup.rb
|
39
40
|
- lib/toml/keyvalue.rb
|
40
41
|
- lib/toml/parser.rb
|
@@ -46,11 +47,13 @@ files:
|
|
46
47
|
- lib/toml/grammars/primitive.citrus
|
47
48
|
- toml-rb.gemspec
|
48
49
|
- toml_parser-ruby.gemspec
|
50
|
+
- test/dumper_test.rb
|
49
51
|
- test/example.toml
|
50
52
|
- test/grammar_test.rb
|
51
53
|
- test/hard_example.toml
|
52
54
|
- test/helper.rb
|
53
55
|
- test/toml_test.rb
|
56
|
+
- init.rb
|
54
57
|
homepage: http://github.com/eMancu/toml-rb
|
55
58
|
licenses:
|
56
59
|
- MIT
|