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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d7c6222b73b280deabe97bc55a0eee9224412f76
4
- data.tar.gz: b48c90b9abef1ab81ffb5051be7a575ed9b6383f
3
+ metadata.gz: 456e1b9091b137468a277e2b17c372d501c99f4c
4
+ data.tar.gz: 8bedf195ab7511437086ad6c1edb9c745a272580
5
5
  SHA512:
6
- metadata.gz: 0bfb79b2cd16c3291d315d94d52be611d581c6a2e7eaca967f9d838af3fc56250f377ebbf2126a11e1153318fe642b16479c2895dcc75366274c8c3ef7623c07
7
- data.tar.gz: 236b967fa06c531cf2a50cca3ea22a69ea4ae9bad978ceba75fd43c381c32b7b49b10796f7c150c9d96dede5decd2c36f6c7c3b1e0332c34a2d24b906199cc55
6
+ metadata.gz: 53363a94a807d9c5c1ff595b2e2affc7f37bb624b3ff42218953cfb51bf6b3d0c13680af5d1ac9d15c6690ed14339825eb91e657946f4dd75816a6219a2147c8
7
+ data.tar.gz: e2992a3d295b23f51c20cc1a915499ea1997f63b15cbd2c8645d1e0d3bd0df4d913b9a4ccd4da5d13915822fdbdda22078941cfe0b7981792be9fc46411e6caf
@@ -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
- keyvalue_pairs = captures[:keyvalue].map(&:value)
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
@@ -2,21 +2,43 @@ module TOML
2
2
  class ValueOverwriteError < StandardError; end
3
3
 
4
4
  class Keyvalue
5
- attr_reader :key, :value
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
- key = symbolize_keys ? @key.to_sym : @key
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
 
@@ -30,9 +30,5 @@ module TOML
30
30
  def visit_keyvalue(keyvalue)
31
31
  keyvalue.assign @current, @symbolize_keys
32
32
  end
33
-
34
- def visit_inline_table(inline_table)
35
- inline_table.assign @current, @symbolize_keys
36
- end
37
33
  end
38
34
  end
@@ -33,3 +33,7 @@ hosts = [
33
33
  "alpha",
34
34
  "omega"
35
35
  ]
36
+
37
+ [amqp]
38
+ exchange = {durable = true, auto_delete = false}
39
+
@@ -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
@@ -156,6 +156,12 @@ class TomlExamples
156
156
  'clients' => {
157
157
  'data' => [%w(gamma delta), [1, 2]],
158
158
  'hosts' => %w(alpha omega)
159
+ },
160
+ 'amqp' => {
161
+ 'exchange' => {
162
+ 'durable' => true,
163
+ 'auto_delete' => false
164
+ }
159
165
  }
160
166
  }
161
167
  end
@@ -67,6 +67,13 @@ class TomlTest < Test::Unit::TestCase
67
67
  clients: {
68
68
  data: [%w(gamma delta), [1, 2]],
69
69
  hosts: %w(alpha omega)
70
+ },
71
+
72
+ amqp: {
73
+ exchange: {
74
+ durable: true,
75
+ auto_delete: false
76
+ }
70
77
  }
71
78
  }
72
79
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'toml-rb'
3
- s.version = '0.3.0'
3
+ s.version = '0.3.3'
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. '
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.0
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-02-19 00:00:00.000000000 Z
12
+ date: 2015-04-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: citrus