nestedtext 1.2.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,19 +4,14 @@ require "word_wrap"
4
4
  require "word_wrap/core_ext"
5
5
 
6
6
  require "nestedtext/constants"
7
+ require "nestedtext/error"
7
8
 
8
9
  module NestedText
9
- # Top level error for clients to rescue on.
10
- class Error < StandardError
11
- private_class_method :new
12
- end
13
-
14
10
  module Errors
15
11
  class InternalError < Error
16
- public_class_method :new # Prevent clients from instansiating.
12
+ public_class_method :new # Prevent users from instansiating.
17
13
  end
18
14
 
19
- # TODO: rename all Subclasses to ParseXError, just like for Dump
20
15
  class ParseError < InternalError
21
16
  attr_reader :lineno, :colno, :message_raw
22
17
 
@@ -54,68 +49,68 @@ module NestedText
54
49
  end
55
50
  end
56
51
 
57
- class LineTagUnknown < ParseError
52
+ class ParseLineTagUnknownError < ParseError
58
53
  def initialize(line, tag)
59
54
  super(line, line.indentation, "The Line tag #{tag} is not among the allowed ones #{Line::ALLOWED_LINE_TAGS}")
60
55
  end
61
56
  end
62
57
 
63
- class LineTagNotDetected < ParseError
58
+ class ParseLineTagNotDetectedError < ParseError
64
59
  def initialize(line)
65
60
  super(line, line.indentation, "unrecognized line.")
66
61
  end
67
62
  end
68
63
 
69
- class LineTypeExpectedListItem < ParseError
64
+ class ParseLineTypeExpectedListItemError < ParseError
70
65
  def initialize(line)
71
66
  super(line, line.indentation, "expected list item.")
72
67
  end
73
68
  end
74
69
 
75
- class MultilineKeyNoValue < ParseError
70
+ class ParseMultilineKeyNoValueError < ParseError
76
71
  def initialize(line)
77
72
  super(line, line.indentation, "multiline key requires a value.")
78
73
  end
79
74
  end
80
75
 
81
- class InlineDictSyntaxError < ParseError
76
+ class ParseInlineDictSyntaxError < ParseError
82
77
  def initialize(line, colno, wrong_char)
83
78
  super(line, line.indentation + colno, "expected ‘,’ or ‘}’, found ‘#{wrong_char}’.")
84
79
  end
85
80
  end
86
81
 
87
- class InlineDictKeySyntaxError < ParseError
82
+ class ParseInlineDictKeySyntaxError < ParseError
88
83
  def initialize(line, colno, wrong_char)
89
84
  super(line, line.indentation + colno, "expected ‘:’, found ‘#{wrong_char}’.")
90
85
  end
91
86
  end
92
87
 
93
- class InlineMissingValue < ParseError
88
+ class ParseInlineMissingValueError < ParseError
94
89
  def initialize(line, colno)
95
90
  super(line, line.indentation + colno, "expected value.")
96
91
  end
97
92
  end
98
93
 
99
- class InlineListSyntaxError < ParseError
94
+ class ParseInlineListSyntaxError < ParseError
100
95
  def initialize(line, colno, wrong_char)
101
96
  super(line, line.indentation + colno, "expected ‘,’ or ‘]’, found ‘#{wrong_char}’.")
102
97
  end
103
98
  end
104
99
 
105
- class InlineNoClosingDelimiter < ParseError
100
+ class ParseInlineNoClosingDelimiterError < ParseError
106
101
  def initialize(line, colno)
107
102
  super(line, line.indentation + colno, "line ended without closing delimiter.")
108
103
  end
109
104
  end
110
105
 
111
- class InlineExtraCharactersAfterDelimiter < ParseError
106
+ class ParseInlineExtraCharactersAfterDelimiterError < ParseError
112
107
  def initialize(line, colno, extra_chars)
113
108
  character_str = extra_chars.length > 1 ? "characters" : "character"
114
109
  super(line, line.indentation + colno, "extra #{character_str} after closing delimiter: ‘#{extra_chars}’.")
115
110
  end
116
111
  end
117
112
 
118
- class InvalidIndentation < ParseError
113
+ class ParseInvalidIndentationError < ParseError
119
114
  def initialize(line, ind_exp)
120
115
  prev_line = line.prev
121
116
  if prev_line.nil? && ind_exp == 0
@@ -137,19 +132,19 @@ module NestedText
137
132
  end
138
133
  end
139
134
 
140
- class LineTypeNotExpected < ParseError
135
+ class ParseLineTypeNotExpectedError < ParseError
141
136
  def initialize(line, type_exps, type_act)
142
137
  super(line, line.indentation, "The current line was detected to be #{type_act}, but we expected to see any of [#{type_exps.join(", ")}] here.")
143
138
  end
144
139
  end
145
140
 
146
- class LineTypeExpectedDictItem < ParseError
141
+ class ParseLineTypeExpectedDictItemError < ParseError
147
142
  def initialize(line)
148
143
  super(line, line.indentation, "expected dictionary item.")
149
144
  end
150
145
  end
151
146
 
152
- class InvalidIndentationChar < ParseError
147
+ class ParseInvalidIndentationCharError < ParseError
153
148
  def initialize(line)
154
149
  printable_char = line.content[0].dump.gsub(/"/, "")
155
150
 
@@ -165,19 +160,19 @@ module NestedText
165
160
  end
166
161
  end
167
162
 
168
- class DictDuplicateKey < ParseError
163
+ class ParseDictDuplicateKeyError < ParseError
169
164
  def initialize(line)
170
165
  super(line, line.indentation, "duplicate key: #{line.attribs["key"]}.")
171
166
  end
172
167
  end
173
168
 
174
- class ParseCustomClassNotFound < ParseError
169
+ class ParseCustomClassNotFoundError < ParseError
175
170
  def initialize(line, class_name)
176
171
  super(line, line.indentation, "Detected an encode custom class #{class_name} however we can't find it, so it can't be deserialzied.")
177
172
  end
178
173
  end
179
174
 
180
- class ParseCustomClassNoCreateMethod < ParseError
175
+ class ParseCustomClassNoCreateMethodError < ParseError
181
176
  def initialize(line, class_name)
182
177
  super(line, line.indentation, "Detected an encode custom class #{class_name} but it does not have a #nt_create method, so it can't be deserialzied.")
183
178
  end
@@ -185,13 +180,13 @@ module NestedText
185
180
 
186
181
  class AssertionError < InternalError; end
187
182
 
188
- class LineScannerIsEmpty < AssertionError
183
+ class AssertionLineScannerIsEmptyError < AssertionError
189
184
  def initialize
190
185
  super("There is no more input to consume. You should have checked this with #empty? before calling.")
191
186
  end
192
187
  end
193
188
 
194
- class InlineScannerIsEmpty < AssertionError
189
+ class AssertionInlineScannerIsEmptyError < AssertionError
195
190
  def initialize
196
191
  super("There is no more input to consume. You should have checked this with #empty? before calling.")
197
192
  end
@@ -216,13 +211,13 @@ module NestedText
216
211
  end
217
212
  end
218
213
 
219
- class DumpCyclicReferencesDetected < DumpError
214
+ class DumpCyclicReferencesDetectedError < DumpError
220
215
  def initialize(culprit)
221
216
  super(culprit, "cyclic reference found: cannot be dumped.")
222
217
  end
223
218
  end
224
219
 
225
- class DumpHashKeyStrictString < DumpError
220
+ class DumpHashKeyStrictStringError < DumpError
226
221
  def initialize(obj)
227
222
  super(obj, "keys must be strings.")
228
223
  end
@@ -230,9 +225,9 @@ module NestedText
230
225
 
231
226
  def self.raise_unrecognized_line(line)
232
227
  # [[:space:]] include all Unicode spaces e.g. non-breakable space which \s does not.
233
- raise InvalidIndentationChar, line if line.content.chr =~ /[[:space:]]/
228
+ raise ParseInvalidIndentationCharError, line if line.content.chr =~ /[[:space:]]/
234
229
 
235
- raise LineTagNotDetected, line
230
+ raise ParseLineTagNotDetectedError, line
236
231
  end
237
232
 
238
233
  class UnsupportedTopLevelTypeError < InternalError
@@ -247,19 +242,19 @@ module NestedText
247
242
  end
248
243
  end
249
244
 
250
- class TopLevelTypeMismatchParsedType < InternalError
245
+ class TopLevelTypeMismatchParsedTypeError < InternalError
251
246
  def initialize(class_exp, class_act)
252
247
  super("The requested top level class #{class_exp.name} is not the same as the actual parsed top level class #{class_act}.")
253
248
  end
254
249
  end
255
250
 
256
- class DumpBadIO < InternalError
251
+ class DumpBadIOError < InternalError
257
252
  def initialize(io)
258
253
  super("When giving the io argument, it must be of type IO (respond to #write, #fsync). Given: #{io.class.name}")
259
254
  end
260
255
  end
261
256
 
262
- class DumpFileBadPath < InternalError
257
+ class DumpFileBadPathError < InternalError
263
258
  def initialize(path)
264
259
  super("Must supply a string to a file path that can be written to. Given: #{path}")
265
260
  end
@@ -2,11 +2,12 @@
2
2
 
3
3
  require "stringio"
4
4
 
5
- require "nestedtext/errors"
5
+ require "nestedtext/errors_internal"
6
6
  require "nestedtext/scanners"
7
7
  require "nestedtext/constants"
8
8
 
9
9
  module NestedText
10
+ # A LL(1) recursive descent parser for NT.
10
11
  class Parser
11
12
  def self.assert_valid_top_level_type(top_class)
12
13
  unless !top_class.nil? && top_class.is_a?(Class) && TOP_LEVEL_TYPES.map(&:object_id).include?(top_class.object_id)
@@ -14,8 +15,7 @@ module NestedText
14
15
  end
15
16
  end
16
17
 
17
- # TODO: document that caller is responsible for closing IO after done with Parser.
18
- def initialize(io, top_class, strict: true)
18
+ def initialize(io, top_class, strict: false)
19
19
  assert_valid_input_type io
20
20
  Parser.assert_valid_top_level_type(top_class)
21
21
  @top_class = top_class
@@ -32,13 +32,13 @@ module NestedText
32
32
  !result.nil? && ![Hash, Array, String].include?(result.class) && @strict
33
33
  when Hash.object_id
34
34
  result = {} if result.nil?
35
- raise Errors::TopLevelTypeMismatchParsedType.new(@top_class, result) unless result.instance_of?(Hash)
35
+ raise Errors::TopLevelTypeMismatchParsedTypeError.new(@top_class, result) unless result.instance_of?(Hash)
36
36
  when Array.object_id
37
37
  result = [] if result.nil?
38
- raise Errors::TopLevelTypeMismatchParsedType.new(@top_class, result) unless result.instance_of?(Array)
38
+ raise Errors::TopLevelTypeMismatchParsedTypeError.new(@top_class, result) unless result.instance_of?(Array)
39
39
  when String.object_id
40
40
  result = "" if result.nil?
41
- raise Errors::TopLevelTypeMismatchParsedType.new(@top_class, result) unless result.instance_of?(String)
41
+ raise Errors::TopLevelTypeMismatchParsedTypeError.new(@top_class, result) unless result.instance_of?(String)
42
42
  else
43
43
  raise Errors::UnsupportedTopLevelTypeError, @top_class
44
44
  end
@@ -80,8 +80,8 @@ module NestedText
80
80
  line = @line_scanner.read_next
81
81
 
82
82
  Errors.raise_unrecognized_line(line) if line.tag == :unrecognized
83
- raise Errors::LineTypeExpectedListItem, line unless line.tag == :list_item
84
- raise Errors::InvalidIndentation.new(line, indentation) if line.indentation != indentation
83
+ raise Errors::ParseLineTypeExpectedListItemError, line unless line.tag == :list_item
84
+ raise Errors::ParseInvalidIndentationError.new(line, indentation) if line.indentation != indentation
85
85
 
86
86
  value = line.attribs["value"]
87
87
  if value.nil?
@@ -104,8 +104,8 @@ module NestedText
104
104
  line = @line_scanner.read_next
105
105
  first_line = line if first_line.nil?
106
106
  Errors.raise_unrecognized_line(line) if line.tag == :unrecognized
107
- raise Errors::InvalidIndentation.new(line, indentation) if line.indentation != indentation
108
- raise Errors::LineTypeExpectedDictItem, line unless %i[dict_item key_item].include? line.tag
107
+ raise Errors::ParseInvalidIndentationError.new(line, indentation) if line.indentation != indentation
108
+ raise Errors::ParseLineTypeExpectedDictItemError, line unless %i[dict_item key_item].include? line.tag
109
109
 
110
110
  value = nil
111
111
  key = nil
@@ -129,14 +129,14 @@ module NestedText
129
129
  value = ""
130
130
  else
131
131
  unless exp_types.member?(@line_scanner.peek.tag)
132
- raise Errors::LineTypeNotExpected.new(line, exp_types, line.tag)
132
+ raise Errors::ParseLineTypeNotExpectedError.new(line, exp_types, line.tag)
133
133
  end
134
- raise Errors::MultilineKeyNoValue, line unless @line_scanner.peek.indentation > indentation
134
+ raise Errors::ParseMultilineKeyNoValueError, line unless @line_scanner.peek.indentation > indentation
135
135
 
136
136
  value = parse_any(@line_scanner.peek.indentation)
137
137
  end
138
138
  end
139
- raise Errors::DictDuplicateKey, line if result.key? key
139
+ raise Errors::ParseDictDuplicateKeyError, line if result.key? key
140
140
 
141
141
  result[key] = value
142
142
  end
@@ -147,12 +147,12 @@ module NestedText
147
147
  begin
148
148
  clazz = class_name == "nil" ? NilClass : Object.const_get(class_name, false)
149
149
  rescue NameError
150
- raise Errors::ParseCustomClassNotFound.new(first_line, class_name)
150
+ raise Errors::ParseCustomClassNotFoundError.new(first_line, class_name)
151
151
  end
152
152
  if clazz.respond_to? :nt_create
153
153
  result = clazz.nt_create(result["data"])
154
154
  else
155
- raise Errors::ParseCustomClassNoCreateMethod.new(first_line, class_name)
155
+ raise Errors::ParseCustomClassNoCreateMethodError.new(first_line, class_name)
156
156
  end
157
157
  end
158
158
 
@@ -163,8 +163,8 @@ module NestedText
163
163
  result = []
164
164
  while !@line_scanner.peek.nil? && @line_scanner.peek.indentation >= indentation
165
165
  line = @line_scanner.read_next
166
- raise Errors::InvalidIndentation.new(line, indentation) if line.indentation != indentation
167
- raise Errors::LineTypeNotExpected.new(line, %i[string_item], line.tag) unless line.tag == :string_item
166
+ raise Errors::ParseInvalidIndentationError.new(line, indentation) if line.indentation != indentation
167
+ raise Errors::ParseLineTypeNotExpectedError.new(line, %i[string_item], line.tag) unless line.tag == :string_item
168
168
 
169
169
  value = line.attribs["value"]
170
170
  result << value
@@ -178,16 +178,16 @@ module NestedText
178
178
  key << @inline_scanner.read_next
179
179
  end
180
180
  if @inline_scanner.empty?
181
- raise Errors::InlineNoClosingDelimiter.new(@inline_scanner.line,
182
- @inline_scanner.pos)
181
+ raise Errors::ParseInlineNoClosingDelimiterError.new(@inline_scanner.line,
182
+ @inline_scanner.pos)
183
183
  end
184
184
 
185
185
  last_char = @inline_scanner.read_next
186
186
  if last_char == "}" && key.empty?
187
- raise Errors::InlineMissingValue.new(@inline_scanner.line, @inline_scanner.pos - 1)
187
+ raise Errors::ParseInlineMissingValueError.new(@inline_scanner.line, @inline_scanner.pos - 1)
188
188
  end
189
189
  unless last_char == ":"
190
- raise Errors::InlineDictKeySyntaxError.new(@inline_scanner.line, @inline_scanner.pos - 1, last_char)
190
+ raise Errors::ParseInlineDictKeySyntaxError.new(@inline_scanner.line, @inline_scanner.pos - 1, last_char)
191
191
  end
192
192
 
193
193
  key.join.strip
@@ -214,13 +214,13 @@ module NestedText
214
214
  break unless @inline_scanner.peek == ","
215
215
  end
216
216
  if @inline_scanner.empty?
217
- raise Errors::InlineNoClosingDelimiter.new(@inline_scanner.line,
218
- @inline_scanner.pos)
217
+ raise Errors::ParseInlineNoClosingDelimiterError.new(@inline_scanner.line,
218
+ @inline_scanner.pos)
219
219
  end
220
220
  last_char = @inline_scanner.read_next
221
221
  unless last_char == "}"
222
- raise Errors::InlineDictSyntaxError.new(@inline_scanner.line, @inline_scanner.pos - 1,
223
- last_char)
222
+ raise Errors::ParseInlineDictSyntaxError.new(@inline_scanner.line, @inline_scanner.pos - 1,
223
+ last_char)
224
224
  end
225
225
 
226
226
  when "["
@@ -235,17 +235,17 @@ module NestedText
235
235
  break unless @inline_scanner.peek == ","
236
236
  end
237
237
  if @inline_scanner.empty?
238
- raise Errors::InlineNoClosingDelimiter.new(@inline_scanner.line,
239
- @inline_scanner.pos)
238
+ raise Errors::ParseInlineNoClosingDelimiterError.new(@inline_scanner.line,
239
+ @inline_scanner.pos)
240
240
  end
241
241
  last_char = @inline_scanner.read_next
242
242
 
243
243
  if last_char != "]"
244
244
  if result[-1] == ""
245
- raise Errors::InlineMissingValue.new(@inline_scanner.line, @inline_scanner.pos - 1)
245
+ raise Errors::ParseInlineMissingValueError.new(@inline_scanner.line, @inline_scanner.pos - 1)
246
246
  else
247
- raise Errors::InlineListSyntaxError.new(@inline_scanner.line, @inline_scanner.pos - 1,
248
- last_char)
247
+ raise Errors::ParseInlineListSyntaxError.new(@inline_scanner.line, @inline_scanner.pos - 1,
248
+ last_char)
249
249
  end
250
250
  end
251
251
  else # Inline string
@@ -264,8 +264,8 @@ module NestedText
264
264
  @inline_scanner = InlineScanner.new(@line_scanner.read_next)
265
265
  result = parse_inline
266
266
  unless @inline_scanner.empty?
267
- raise Errors::InlineExtraCharactersAfterDelimiter.new(@inline_scanner.line, @inline_scanner.pos,
268
- @inline_scanner.remaining)
267
+ raise Errors::ParseInlineExtraCharactersAfterDelimiterError.new(@inline_scanner.line, @inline_scanner.pos,
268
+ @inline_scanner.remaining)
269
269
  end
270
270
  unless result.is_a? Hash
271
271
  raise Errors::AssertionError,
@@ -279,8 +279,8 @@ module NestedText
279
279
  @inline_scanner = InlineScanner.new(@line_scanner.read_next)
280
280
  result = parse_inline
281
281
  unless @inline_scanner.empty?
282
- raise Errors::InlineExtraCharactersAfterDelimiter.new(@inline_scanner.line, @inline_scanner.pos,
283
- @inline_scanner.remaining)
282
+ raise Errors::ParseInlineExtraCharactersAfterDelimiterError.new(@inline_scanner.line, @inline_scanner.pos,
283
+ @inline_scanner.remaining)
284
284
  end
285
285
  unless result.is_a? Array
286
286
  raise Errors::AssertionError,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "nestedtext/errors"
3
+ require "nestedtext/errors_internal"
4
4
 
5
5
  module NestedText
6
6
  class LineScanner
@@ -15,7 +15,7 @@ module NestedText
15
15
  end
16
16
 
17
17
  def read_next
18
- raise Errors::LineScannerIsEmpty if empty?
18
+ raise Errors::AssertionLineScannerIsEmptyError if empty?
19
19
 
20
20
  line = @next_line
21
21
  prepare_next_line
@@ -59,7 +59,7 @@ module NestedText
59
59
  end
60
60
 
61
61
  def read_next
62
- raise Errors::InlineScannerIsEmpty if empty?
62
+ raise Errors::AssertionInlineScannerIsEmptyError if empty?
63
63
 
64
64
  @pos += 1
65
65
  @line.content[@pos - 1]
@@ -108,7 +108,7 @@ module NestedText
108
108
 
109
109
  def tag=(tag)
110
110
  @tag = tag
111
- raise Errors::LineTagUnknown.new(self, tag) unless ALLOWED_LINE_TAGS.include?(@tag)
111
+ raise Errors::ParseLineTagUnknownError.new(self, tag) unless ALLOWED_LINE_TAGS.include?(@tag)
112
112
  end
113
113
 
114
114
  def to_s
@@ -147,7 +147,6 @@ module NestedText
147
147
  elsif @content[0] == "{"
148
148
  self.tag = :inline_dict
149
149
  elsif @content[0] == "["
150
- # TODO: merge path of inline dict and list and just set :inline?
151
150
  self.tag = :inline_list
152
151
  elsif @content =~ PATTERN_DICT_ITEM
153
152
  self.tag = :dict_item
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NestedText
4
- VERSION = "1.2.0"
4
+ # The version of this library.
5
+ VERSION = "3.0.0"
5
6
  end
data/lib/nestedtext.rb CHANGED
@@ -1,9 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "nestedtext/encode"
4
- require_relative "nestedtext/decode"
5
3
  require_relative "nestedtext/core_ext"
4
+ require_relative "nestedtext/decode"
5
+ require_relative "nestedtext/encode"
6
+ require_relative "nestedtext/encode_helpers"
7
+ require_relative "nestedtext/error"
6
8
  require_relative "nestedtext/version"
7
9
 
10
+ ##
11
+ # = NestedText
12
+ # The main module in this library to use.
13
+ #
14
+ # See README.md for documentation on Types, Strict Mode and Custom Classes.
8
15
  module NestedText
9
16
  end
data/nestedtext.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Erik Westrup"]
9
9
  spec.email = ["erik.westrup@gmail.com"]
10
10
 
11
- spec.summary = "A ruby library implementation for the human friendly data format NestedText (https://nestedtext.org/)"
12
- spec.description = "A ruby library implementation for the human friendly data format NestedText (https://nestedtext.org/). There is support for decoding a NestedText file or string to Ruby data structures, as well as encoding Ruby objects to a NestedText file or string. Furthermore there is support for serialization and deserialization of custom classes. Support for v3.2.1 of the data format will all official tests passing."
11
+ spec.summary = "A ruby library for the human friendly data format NestedText (https://nestedtext.org/)"
12
+ spec.description = "A ruby library for the human friendly data format NestedText (https://nestedtext.org/). There is support for decoding a NestedText file or string to Ruby data structures, as well as encoding Ruby objects to a NestedText file or string. Furthermore there is support for serialization and deserialization of custom classes. Support for v3.2.1 of the data format will all official tests passing."
13
13
  spec.homepage = "https://github.com/erikw/nestedtext-ruby/"
14
14
  spec.license = "MIT"
15
15
  spec.required_ruby_version = [">= 3.0", "< 4"]
@@ -25,8 +25,8 @@ Gem::Specification.new do |spec|
25
25
  }
26
26
 
27
27
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
28
- `git ls-files -z`.split("\x0").reject do |f|
29
- f.match(%r{\A(?:test/|script/|\.github/|\.gitmodules|Rakefile|TODO\.txt|\.codeclimate\.yml|\.vimlocal|\.simplecov)})
28
+ `git ls-files -z`.split("\x0").select do |f|
29
+ f.match(%r{\A(?:lib/|CHANGELOG.md|CONTRIBUTING.md|LICENSE.txt|README.md|SECURITY.md|nestedtext.gemspec)})
30
30
  end
31
31
  end
32
32
  spec.require_paths = ["lib"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nestedtext
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Westrup
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-25 00:00:00.000000000 Z
11
+ date: 2022-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: warning
@@ -38,26 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
- description: A ruby library implementation for the human friendly data format NestedText
42
- (https://nestedtext.org/). There is support for decoding a NestedText file or string
43
- to Ruby data structures, as well as encoding Ruby objects to a NestedText file or
44
- string. Furthermore there is support for serialization and deserialization of custom
45
- classes. Support for v3.2.1 of the data format will all official tests passing.
41
+ description: A ruby library for the human friendly data format NestedText (https://nestedtext.org/).
42
+ There is support for decoding a NestedText file or string to Ruby data structures,
43
+ as well as encoding Ruby objects to a NestedText file or string. Furthermore there
44
+ is support for serialization and deserialization of custom classes. Support for
45
+ v3.2.1 of the data format will all official tests passing.
46
46
  email:
47
47
  - erik.westrup@gmail.com
48
48
  executables: []
49
49
  extensions: []
50
50
  extra_rdoc_files: []
51
51
  files:
52
- - ".editorconfig"
53
- - ".gitignore"
54
- - ".rubocop.yml"
55
- - ".ruby-version"
56
52
  - CHANGELOG.md
57
53
  - CONTRIBUTING.md
58
- - Gemfile
59
54
  - LICENSE.txt
60
- - OSSMETADATA
61
55
  - README.md
62
56
  - SECURITY.md
63
57
  - lib/nestedtext.rb
@@ -68,7 +62,8 @@ files:
68
62
  - lib/nestedtext/dumper.rb
69
63
  - lib/nestedtext/encode.rb
70
64
  - lib/nestedtext/encode_helpers.rb
71
- - lib/nestedtext/errors.rb
65
+ - lib/nestedtext/error.rb
66
+ - lib/nestedtext/errors_internal.rb
72
67
  - lib/nestedtext/parser.rb
73
68
  - lib/nestedtext/scanners.rb
74
69
  - lib/nestedtext/version.rb
@@ -99,6 +94,5 @@ requirements: []
99
94
  rubygems_version: 3.3.3
100
95
  signing_key:
101
96
  specification_version: 4
102
- summary: A ruby library implementation for the human friendly data format NestedText
103
- (https://nestedtext.org/)
97
+ summary: A ruby library for the human friendly data format NestedText (https://nestedtext.org/)
104
98
  test_files: []
data/.editorconfig DELETED
@@ -1,24 +0,0 @@
1
- # Modified version of https://github.com/ruby/ruby/blob/master/.editorconfig
2
-
3
- root = true
4
-
5
- [*]
6
- end_of_line = lf
7
- indent_size = 4
8
- indent_style = space
9
- insert_final_newline = true
10
- tab_width = 4
11
- trim_trailing_whitespace = true
12
-
13
- [*.rb]
14
- indent_size = 2
15
-
16
- [*.gemspec]
17
- indent_size = 2
18
-
19
- [*.yml]
20
- indent_size = 2
21
-
22
- [test/nestedtext/encode_test.rb]
23
- # So we can test trailing whitespace strings.
24
- trim_trailing_whitespace = unset
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- # Contrary to ruby apps, ruby gems should not check in Gemfile.lock.
2
- # Reference: https://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
3
- /Gemfile.lock
4
-
5
- # Bundle local config
6
- /.bundle/
7
-
8
- # Package gem from $(rake install)
9
- /pkg/
10
- # When built from $(gem build *.gemspec)
11
- /*.gem
12
-
13
- # minitest
14
- /test/html_reports/
15
- /test/reports/
16
-
17
- # simplecov
18
- /coverage/
19
-
20
- # byebug
21
- /.byebug_history