toml-rb 2.0.0 → 2.1.1

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
  SHA256:
3
- metadata.gz: 0e2a2f012c91d9664b1c1656ed84aa47e1011223a2d7bad0504fe809cf71a7ea
4
- data.tar.gz: 7db3fb54e407e205089396c79cd2f418ed54ffd88ad3d5b03e404132f2ec9756
3
+ metadata.gz: ea53f790d0b22319d57007c11b9d585bce92d0cbd1f97a7340fec49d03804271
4
+ data.tar.gz: 1e2e02260452b5dbd94eeeb9268116e64fed6d7f974b99f853d2cdd28cbd8fa7
5
5
  SHA512:
6
- metadata.gz: 56ae22471a087c85acd872a7f7f354c4cdf0c430654d8bdfc277911015a94312960e22b82f79f7f772f62d0e73a8bb3faab8f2b7b7cc688a75343ea5fbef9fa9
7
- data.tar.gz: 72d80c5c8713fd40d50e9863d3ea684c0999c991c050a4db0ba49f9a9db5fe0c6f373646b4256ca62127be54626582ba15ac2e492da0930103f9d62dbf4681dc
6
+ metadata.gz: aaad1b4cd6379c6b1a66ce385b442d3fa1c068b985ba374d6c526bbd441b0c1fd4014c12eec523b2ca745b00d43e943c470fef3fcd79c132cc76882f4c2f87c2
7
+ data.tar.gz: e979b29743c71fe8ebb48afcbe1bc70129ed8a5f8df911bf812663af9983f4fee31388b2b4d030df0b8413b26832815d313c080b9c3e3d9e362414d47f9904bd
data/README.md CHANGED
@@ -1,14 +1,17 @@
1
+ ![TOML Logo](https://github.com/toml-lang/toml/blob/master/logos/toml-100.png)
2
+
3
+
1
4
  toml-rb
2
5
  =======
3
6
 
4
7
  [![Gem Version](https://badge.fury.io/rb/toml-rb.svg)](http://badge.fury.io/rb/toml-rb)
5
- [![Build Status](https://travis-ci.org/emancu/toml-rb.svg)](https://travis-ci.org/emancu/toml-rb)
8
+ [![Build Status](https://github.com/emancu/toml-rb/actions/workflows/ruby.yml/badge.svg)](https://github.com/emancu/toml-rb/actions/workflows/ruby.yml)
6
9
  [![Code Climate](https://codeclimate.com/github/emancu/toml-rb/badges/gpa.svg)](https://codeclimate.com/github/emancu/toml-rb)
7
10
  [![RubyGem](https://img.shields.io/gem/dt/toml-rb.svg)](https://rubygems.org/gems/toml-rb)
8
11
 
9
12
  A [TOML](https://github.com/toml-lang/toml) parser using [Citrus](http://mjackson.github.io/citrus) library.
10
13
 
11
- TOML specs supported: `0.4.0`
14
+ TOML specs supported: `0.5.0`
12
15
 
13
16
  Installation
14
17
  ------------
data/lib/toml-rb/array.rb CHANGED
@@ -2,7 +2,7 @@ module TomlRB
2
2
  module ArrayParser
3
3
  def value
4
4
  elements = captures[:array_elements].first
5
- return elements ? elements.value : []
5
+ elements ? elements.value : []
6
6
  end
7
7
  end
8
8
  end
@@ -14,7 +14,7 @@ module TomlRB
14
14
  def value
15
15
  year, mon, day = captures[:date_skeleton].first.value
16
16
  hour, min, sec, sec_frac = captures[:time_skeleton].first.value
17
- usec = sec_frac.to_s.ljust(6, '0')
17
+ usec = sec_frac.to_s.ljust(6, "0")
18
18
 
19
19
  Time.local(year, mon, day, hour, min, sec, usec)
20
20
  end
@@ -23,16 +23,16 @@ module TomlRB
23
23
  module LocalDateParser
24
24
  def value
25
25
  year, mon, day = captures[:date_skeleton].first.value
26
- Time.local(year,mon,day)
26
+ Time.local(year, mon, day)
27
27
  end
28
28
  end
29
29
 
30
30
  module LocalTimeParser
31
31
  def value
32
32
  hour, min, sec, sec_frac = captures[:time_skeleton].first.value
33
- usec = sec_frac.to_s.ljust(6, '0')
33
+ usec = sec_frac.to_s.ljust(6, "0")
34
34
 
35
35
  Time.at(3600 * hour.to_i + 60 * min.to_i + sec.to_i, usec.to_i)
36
36
  end
37
37
  end
38
- end
38
+ end
@@ -1,11 +1,13 @@
1
- require 'date'
1
+ # frozen_string_literal: true
2
+
3
+ require "date"
2
4
 
3
5
  module TomlRB
4
6
  class Dumper
5
7
  attr_reader :toml_str
6
8
 
7
9
  def initialize(hash)
8
- @toml_str = ''
10
+ @toml_str = ""
9
11
 
10
12
  visit(hash, [])
11
13
  end
@@ -53,7 +55,7 @@ module TomlRB
53
55
  def dump_simple_pairs(simple_pairs)
54
56
  simple_pairs.each do |key, val|
55
57
  key = quote_key(key) unless bare_key? key
56
- @toml_str << "#{key} = #{to_toml(val)}\n"
58
+ @toml_str += "#{key} = #{to_toml(val)}\n"
57
59
  end
58
60
  end
59
61
 
@@ -80,21 +82,21 @@ module TomlRB
80
82
  end
81
83
 
82
84
  def print_prefix(prefix, extra_brackets = false)
83
- new_prefix = prefix.join('.')
84
- new_prefix = '[' + new_prefix + ']' if extra_brackets
85
+ new_prefix = prefix.join(".")
86
+ new_prefix = "[" + new_prefix + "]" if extra_brackets
85
87
 
86
88
  @toml_str += "[" + new_prefix + "]\n"
87
89
  end
88
90
 
89
91
  def to_toml(obj)
90
92
  if obj.is_a?(Time) || obj.is_a?(DateTime)
91
- obj.strftime('%Y-%m-%dT%H:%M:%SZ')
93
+ obj.strftime("%Y-%m-%dT%H:%M:%SZ")
92
94
  elsif obj.is_a?(Date)
93
- obj.strftime('%Y-%m-%d')
95
+ obj.strftime("%Y-%m-%d")
94
96
  elsif obj.is_a? Regexp
95
97
  obj.inspect.inspect
96
98
  elsif obj.is_a? String
97
- obj.inspect.gsub(/\\(#[@{])/, '\1')
99
+ obj.inspect.gsub(/\\(#[$@{])/, '\1')
98
100
  else
99
101
  obj.inspect
100
102
  end
@@ -15,7 +15,7 @@ grammar TomlRB::Document
15
15
  end
16
16
 
17
17
  rule keyvalue
18
- (stripped_key '=' space? v:(toml_values) comment?) <TomlRB::KeyvalueParser>
18
+ (stripped_key '=' space? v:(toml_values) comment? space) <TomlRB::KeyvalueParser>
19
19
  end
20
20
 
21
21
  rule inline_table
@@ -12,6 +12,6 @@ grammar TomlRB::Helper
12
12
  end
13
13
 
14
14
  rule line_break
15
- (space? "\n" | space? "\r\n") { nil }
15
+ (space "\n" space | space "\r\n" space) { nil }
16
16
  end
17
17
  end
@@ -8,7 +8,7 @@ module TomlRB
8
8
  value keyvalue.symbolize_keys
9
9
  end
10
10
 
11
- def value(symbolize_keys=false)
11
+ def value(symbolize_keys = false)
12
12
  result = {}
13
13
  @pairs.each do |kv|
14
14
  update = kv.assign({}, [], symbolize_keys)
@@ -14,12 +14,12 @@ module TomlRB
14
14
  @symbolize_keys = symbolize_keys
15
15
  dotted_keys_str = @dotted_keys.join(".")
16
16
  keys = symbolize_keys ? @dotted_keys.map(&:to_sym) : @dotted_keys
17
- update = keys.reverse.inject(visit_value @value) { |k1, k2| { k2 => k1 } }
17
+ update = keys.reverse.inject(visit_value(@value)) { |k1, k2| {k2 => k1} }
18
18
 
19
19
  if @value.is_a?(InlineTable)
20
20
  fully_defined_keys << dotted_keys_str
21
21
  hash.merge!(update) { |key, _, _| fail ValueOverwriteError.new(key) }
22
- elsif fully_defined_keys.find{|k| update.dig(*k)}
22
+ elsif fully_defined_keys.find { |k| update.dig(*k) }
23
23
  hash.merge!(update) { |key, _, _| fail ValueOverwriteError.new(key) }
24
24
  else
25
25
  dotted_key_merge(hash, update)
@@ -48,6 +48,7 @@ module TomlRB
48
48
  a_value.accept_visitor self
49
49
  end
50
50
  end
51
+
51
52
  # Used in document.citrus
52
53
  module KeyvalueParser
53
54
  def value
@@ -2,12 +2,12 @@ module TomlRB
2
2
  class Parser
3
3
  attr_reader :hash
4
4
 
5
- def initialize(content, options = {})
5
+ def initialize(content, symbolize_keys: false)
6
6
  @hash = {}
7
7
  @visited_keys = []
8
8
  @fully_defined_keys = []
9
9
  @current = @hash
10
- @symbolize_keys = options[:symbolize_keys]
10
+ @symbolize_keys = symbolize_keys
11
11
 
12
12
  begin
13
13
  parsed = TomlRB::Document.parse(content)
@@ -2,14 +2,14 @@ module TomlRB
2
2
  # Used in primitive.citrus
3
3
  module BasicString
4
4
  SPECIAL_CHARS = {
5
- '\\0' => "\0",
6
- '\\t' => "\t",
7
- '\\b' => "\b",
8
- '\\f' => "\f",
9
- '\\n' => "\n",
10
- '\\r' => "\r",
11
- '\\"' => '"',
12
- '\\\\' => '\\'
5
+ "\\0" => "\0",
6
+ "\\t" => "\t",
7
+ "\\b" => "\b",
8
+ "\\f" => "\f",
9
+ "\\n" => "\n",
10
+ "\\r" => "\r",
11
+ '\\"' => '"',
12
+ "\\\\" => "\\"
13
13
  }.freeze
14
14
 
15
15
  def value
@@ -21,7 +21,7 @@ module TomlRB
21
21
  # Replace the unicode escaped characters with the corresponding character
22
22
  # e.g. \u03B4 => ?
23
23
  def self.decode_unicode(str)
24
- [str[2..-1].to_i(16)].pack('U')
24
+ [str[2..-1].to_i(16)].pack("U")
25
25
  end
26
26
 
27
27
  def self.transform_escaped_chars(str)
@@ -29,7 +29,7 @@ module TomlRB
29
29
  if m.size == 2
30
30
  SPECIAL_CHARS[m] || parse_error(m)
31
31
  else
32
- decode_unicode(m).force_encoding('UTF-8')
32
+ decode_unicode(m).force_encoding("UTF-8")
33
33
  end
34
34
  end
35
35
  end
@@ -47,11 +47,11 @@ module TomlRB
47
47
 
48
48
  module MultilineString
49
49
  def value
50
- return '' if captures[:text].empty?
50
+ return "" if captures[:text].empty?
51
51
  aux = captures[:text].first.value
52
52
 
53
53
  # Remove spaces on multilined Singleline strings
54
- aux.gsub!(/\\\r?\n[\n\t\r ]*/, '')
54
+ aux.gsub!(/\\\r?\n[\n\t\r ]*/, "")
55
55
 
56
56
  TomlRB::BasicString.transform_escaped_chars aux
57
57
  end
@@ -59,10 +59,10 @@ module TomlRB
59
59
 
60
60
  module MultilineLiteral
61
61
  def value
62
- return '' if captures[:text].empty?
62
+ return "" if captures[:text].empty?
63
63
  aux = captures[:text].first.value
64
64
 
65
- aux.gsub(/\\\r?\n[\n\t\r ]*/, '')
65
+ aux.gsub(/\\\r?\n[\n\t\r ]*/, "")
66
66
  end
67
67
  end
68
68
  end
data/lib/toml-rb/table.rb CHANGED
@@ -18,18 +18,20 @@ module TomlRB
18
18
  current
19
19
  end
20
20
 
21
- # Fail if the key was already defined with a ValueOverwriteError
22
- def ensure_key_not_defined(visited_keys)
23
- fail ValueOverwriteError.new(full_key) if visited_keys.include?(full_key)
24
- visited_keys << full_key
25
- end
26
-
27
21
  def accept_visitor(parser)
28
22
  parser.visit_table self
29
23
  end
30
24
 
31
25
  def full_key
32
- @dotted_keys.join('.')
26
+ @dotted_keys.join(".")
27
+ end
28
+
29
+ private
30
+
31
+ # Fail if the key was already defined with a ValueOverwriteError
32
+ def ensure_key_not_defined(visited_keys)
33
+ fail ValueOverwriteError.new(full_key) if visited_keys.include?(full_key)
34
+ visited_keys << full_key
33
35
  end
34
36
  end
35
37
 
@@ -5,7 +5,7 @@ module TomlRB
5
5
  end
6
6
 
7
7
  def navigate_keys(hash, symbolize_keys = false)
8
- current = hash
8
+ current = hash
9
9
  keys = symbolize_keys ? @dotted_keys.map(&:to_sym) : @dotted_keys
10
10
  last_key = keys.pop
11
11
 
@@ -24,7 +24,7 @@ module TomlRB
24
24
  # Define Table Array
25
25
  if current[last_key].is_a? Hash
26
26
  fail TomlRB::ParseError,
27
- "#{last_key} was defined as hash but is now redefined as a table!"
27
+ "#{last_key} was defined as hash but is now redefined as a table!"
28
28
  end
29
29
  current[last_key] = [] unless current[last_key]
30
30
  current[last_key] << {}
@@ -37,7 +37,7 @@ module TomlRB
37
37
  end
38
38
 
39
39
  def full_key
40
- @dotted_keys.join('.')
40
+ @dotted_keys.join(".")
41
41
  end
42
42
  end
43
43
 
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TomlRB
4
+ VERSION = "2.1.1"
5
+ end
data/lib/toml-rb.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'citrus'
1
+ require "citrus"
2
2
 
3
3
  require_relative "toml-rb/errors"
4
4
  require_relative "toml-rb/array"
@@ -11,18 +11,18 @@ require_relative "toml-rb/keyvalue"
11
11
  require_relative "toml-rb/parser"
12
12
  require_relative "toml-rb/dumper"
13
13
 
14
- ROOT = File.dirname(File.expand_path(__FILE__))
15
- Citrus.load "#{ROOT}/toml-rb/grammars/helper.citrus"
16
- Citrus.load "#{ROOT}/toml-rb/grammars/primitive.citrus"
17
- Citrus.load "#{ROOT}/toml-rb/grammars/array.citrus"
18
- Citrus.load "#{ROOT}/toml-rb/grammars/document.citrus"
14
+ File.dirname(File.expand_path(__FILE__)).tap do |root|
15
+ Citrus.load "#{root}/toml-rb/grammars/helper.citrus"
16
+ Citrus.load "#{root}/toml-rb/grammars/primitive.citrus"
17
+ Citrus.load "#{root}/toml-rb/grammars/array.citrus"
18
+ Citrus.load "#{root}/toml-rb/grammars/document.citrus"
19
+ end
19
20
 
20
21
  module TomlRB
21
22
  # Public: Returns a hash from *TomlRB* content.
22
23
  #
23
- # content - TomlRB string to be parsed.
24
- # options - The Hash options used to refine the parser (default: {}):
25
- # :symbolize_keys - true|false (optional).
24
+ # content - TomlRB string to be parsed.
25
+ # :symbolize_keys - true | false (default: false).
26
26
  #
27
27
  #
28
28
  # Examples
@@ -43,15 +43,14 @@ module TomlRB
43
43
  # Returns a Ruby hash representation of the content according to TomlRB spec.
44
44
  # Raises ValueOverwriteError if a key is overwritten.
45
45
  # Raises ParseError if the content has invalid TomlRB.
46
- def self.parse(content, options = {})
47
- Parser.new(content, options).hash
46
+ def self.parse(content, symbolize_keys: false)
47
+ Parser.new(content, symbolize_keys: symbolize_keys).hash
48
48
  end
49
49
 
50
50
  # Public: Returns a hash from a *TomlRB* file.
51
51
  #
52
- # path - TomlRB File path
53
- # options - The Hash options used to refine the parser (default: {}):
54
- # :symbolize_keys - true|false (optional).
52
+ # path - TomlRB File path
53
+ # :symbolize_keys - true|false (optional).
55
54
  #
56
55
  #
57
56
  # Examples
@@ -68,8 +67,8 @@ module TomlRB
68
67
  # Raises ParseError if the content has invalid TomlRB.
69
68
  # Raises Errno::ENOENT if the file cannot be found.
70
69
  # Raises Errno::EACCES if the file cannot be accessed.
71
- def self.load_file(path, options = {})
72
- TomlRB.parse(File.read(path), options)
70
+ def self.load_file(path, symbolize_keys: false)
71
+ TomlRB.parse(File.read(path), symbolize_keys: symbolize_keys)
73
72
  end
74
73
 
75
74
  # Public: Returns a *TomlRB* string from a Ruby Hash.
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: 2.0.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emiliano Mancuso
@@ -9,28 +9,70 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-10-25 00:00:00.000000000 Z
12
+ date: 2022-01-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: citrus
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ">"
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: '3.0'
21
- - - "~>"
21
+ - - ">"
22
22
  - !ruby/object:Gem::Version
23
23
  version: '3.0'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
+ - - "~>"
29
+ - !ruby/object:Gem::Version
30
+ version: '3.0'
28
31
  - - ">"
29
32
  - !ruby/object:Gem::Version
30
33
  version: '3.0'
34
+ - !ruby/object:Gem::Dependency
35
+ name: minitest
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
31
38
  - - "~>"
32
39
  - !ruby/object:Gem::Version
33
- version: '3.0'
40
+ version: '5.7'
41
+ type: :development
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.7'
48
+ - !ruby/object:Gem::Dependency
49
+ name: standard
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.4'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.4'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
34
76
  description: 'A Toml parser using Citrus parsing library. '
35
77
  email:
36
78
  - emiliano.mancuso@gmail.com
@@ -56,6 +98,7 @@ files:
56
98
  - lib/toml-rb/string.rb
57
99
  - lib/toml-rb/table.rb
58
100
  - lib/toml-rb/table_array.rb
101
+ - lib/toml-rb/version.rb
59
102
  homepage: https://github.com/emancu/toml-rb
60
103
  licenses:
61
104
  - MIT
@@ -75,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
118
  - !ruby/object:Gem::Version
76
119
  version: '0'
77
120
  requirements: []
78
- rubygems_version: 3.0.3
121
+ rubygems_version: 3.2.9
79
122
  signing_key:
80
123
  specification_version: 4
81
124
  summary: Toml parser in ruby, for ruby.