toml-rb 0.3.0 → 0.3.3
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 +4 -4
- data/lib/toml/inline_table.rb +59 -4
- data/lib/toml/keyvalue.rb +26 -4
- data/lib/toml/parser.rb +0 -4
- data/test/example.toml +4 -0
- data/test/grammar_test.rb +7 -5
- data/test/toml_examples.rb +6 -0
- data/test/toml_test.rb +7 -0
- data/toml-rb.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 456e1b9091b137468a277e2b17c372d501c99f4c
|
|
4
|
+
data.tar.gz: 8bedf195ab7511437086ad6c1edb9c745a272580
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 53363a94a807d9c5c1ff595b2e2affc7f37bb624b3ff42218953cfb51bf6b3d0c13680af5d1ac9d15c6690ed14339825eb91e657946f4dd75816a6219a2147c8
|
|
7
|
+
data.tar.gz: e2992a3d295b23f51c20cc1a915499ea1997f63b15cbd2c8645d1e0d3bd0df4d913b9a4ccd4da5d13915822fdbdda22078941cfe0b7981792be9fc46411e6caf
|
data/lib/toml/inline_table.rb
CHANGED
|
@@ -1,8 +1,63 @@
|
|
|
1
|
+
module TOML
|
|
2
|
+
class InlineTable
|
|
3
|
+
attr_reader :symbolize_keys
|
|
4
|
+
|
|
5
|
+
def initialize(keyvalue_pairs)
|
|
6
|
+
@pairs = keyvalue_pairs
|
|
7
|
+
@symbolize_keys = false
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def value(symbolize_keys = false)
|
|
11
|
+
if @symbolize_keys = symbolize_keys
|
|
12
|
+
tuple = ->(kv) { [kv.key.to_sym, visit_value(kv.value)] }
|
|
13
|
+
else
|
|
14
|
+
tuple = ->(kv) { [kv.key, visit_value(kv.value)] }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
Hash[@pairs.map(&tuple)]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def visit_inline_table(inline_table)
|
|
21
|
+
result = {}
|
|
22
|
+
|
|
23
|
+
inline_table.value(@symbolize_keys).each do |k, v|
|
|
24
|
+
result[key k] = visit_value v
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
result
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def accept_visitor(keyvalue)
|
|
31
|
+
keyvalue.visit_inline_table self
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def visit_value(a_value)
|
|
37
|
+
return a_value unless a_value.respond_to? :accept_visitor
|
|
38
|
+
|
|
39
|
+
a_value.accept_visitor self
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def key(a_key)
|
|
43
|
+
symbolize_keys ? a_key.to_sym : a_key
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class InlineTableArray
|
|
48
|
+
def initialize(inline_tables)
|
|
49
|
+
@inline_tables = inline_tables
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def value(symbolize_keys = false)
|
|
53
|
+
@inline_tables.map { |it| it.value(symbolize_keys) }
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
1
58
|
module InlineTable
|
|
2
59
|
def value
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Hash[keyvalue_pairs.map { |kv| [kv.key, kv.value] }]
|
|
60
|
+
TOML::InlineTable.new captures[:keyvalue].map(&:value)
|
|
6
61
|
end
|
|
7
62
|
end
|
|
8
63
|
|
|
@@ -10,6 +65,6 @@ module InlineTableArray
|
|
|
10
65
|
def value
|
|
11
66
|
tables = captures[:hash_array].map { |x| x.captures[:inline_table] }
|
|
12
67
|
|
|
13
|
-
tables.flatten.map(&:value)
|
|
68
|
+
TOML::InlineTableArray.new tables.flatten.map(&:value)
|
|
14
69
|
end
|
|
15
70
|
end
|
data/lib/toml/keyvalue.rb
CHANGED
|
@@ -2,21 +2,43 @@ module TOML
|
|
|
2
2
|
class ValueOverwriteError < StandardError; end
|
|
3
3
|
|
|
4
4
|
class Keyvalue
|
|
5
|
-
attr_reader :
|
|
5
|
+
attr_reader :value, :symbolize_keys
|
|
6
6
|
|
|
7
7
|
def initialize(key, value)
|
|
8
|
-
@key, @value = key, value
|
|
8
|
+
@key, @value, @symbolize_keys = key, value, false
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def assign(hash, symbolize_keys = false)
|
|
12
|
-
|
|
12
|
+
@symbolize_keys = symbolize_keys
|
|
13
13
|
fail ValueOverwriteError if hash[key]
|
|
14
|
-
hash[key] = @value
|
|
14
|
+
hash[key] = visit_value @value
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def visit_inline_table(inline_table)
|
|
18
|
+
result = {}
|
|
19
|
+
|
|
20
|
+
inline_table.value(@symbolize_keys).each do |k, v|
|
|
21
|
+
result[key k] = visit_value v
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
result
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def key(a_key = @key)
|
|
28
|
+
symbolize_keys ? a_key.to_sym : a_key
|
|
15
29
|
end
|
|
16
30
|
|
|
17
31
|
def accept_visitor(parser)
|
|
18
32
|
parser.visit_keyvalue self
|
|
19
33
|
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def visit_value(a_value)
|
|
38
|
+
return a_value unless a_value.respond_to? :accept_visitor
|
|
39
|
+
|
|
40
|
+
a_value.accept_visitor self
|
|
41
|
+
end
|
|
20
42
|
end
|
|
21
43
|
end
|
|
22
44
|
|
data/lib/toml/parser.rb
CHANGED
data/test/example.toml
CHANGED
data/test/grammar_test.rb
CHANGED
|
@@ -146,7 +146,8 @@ class GrammarTest < Test::Unit::TestCase
|
|
|
146
146
|
assert_equal([%w(hey TOML), [2, 4]], match.value)
|
|
147
147
|
|
|
148
148
|
match = Document.parse('[ { one = 1 }, { two = 2, three = 3} ]',
|
|
149
|
-
root: :inline_table_array)
|
|
149
|
+
root: :inline_table_array).value
|
|
150
|
+
|
|
150
151
|
assert_equal([{ 'one' => 1 }, { 'two' => 2, 'three' => 3 }], match.value)
|
|
151
152
|
end
|
|
152
153
|
|
|
@@ -177,13 +178,14 @@ class GrammarTest < Test::Unit::TestCase
|
|
|
177
178
|
|
|
178
179
|
def test_inline_table
|
|
179
180
|
match = Document.parse('{ }', root: :inline_table)
|
|
180
|
-
assert_equal({}, match.value)
|
|
181
|
+
assert_equal({}, match.value.value)
|
|
181
182
|
|
|
182
183
|
match = Document.parse('{ simple = true, params = 2 }', root: :inline_table)
|
|
183
|
-
assert_equal({ 'simple' => true, 'params' => 2 }, match.value)
|
|
184
|
+
assert_equal({ 'simple' => true, 'params' => 2 }, match.value.value)
|
|
184
185
|
|
|
185
|
-
match = Document.parse('{ nest = { hard = true } }', root: :inline_table)
|
|
186
|
-
assert_equal({ 'nest' => { 'hard' => true } }, match.value)
|
|
186
|
+
match = Document.parse('{ nest = { really = { hard = true } } }', root: :inline_table)
|
|
187
|
+
assert_equal({ 'nest' => { 'really' => { 'hard' => true } } }, match.value.value)
|
|
188
|
+
assert_equal({ nest: { really: { hard: true } } }, match.value.value(true))
|
|
187
189
|
end
|
|
188
190
|
|
|
189
191
|
private
|
data/test/toml_examples.rb
CHANGED
data/test/toml_test.rb
CHANGED
data/toml-rb.gemspec
CHANGED
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.3.
|
|
4
|
+
version: 0.3.3
|
|
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: 2015-
|
|
12
|
+
date: 2015-04-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: citrus
|