toml-rb 0.3.0 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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