toml 0.1.1 → 0.1.2

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: f7dffac109d3fafa90f89cbf3c39b07d893f0bce
4
- data.tar.gz: 3d107b903f762187ed3b795dd6828c288b508fe8
3
+ metadata.gz: 765d0d79f39516761562706d4d93ec02642434e4
4
+ data.tar.gz: 73b7cdcec4d5723fd366bdf3aca4376b7b55f542
5
5
  SHA512:
6
- metadata.gz: e827c155662fe2a6da3a75406894293631b6e739ebe791a01729e395617aef886cbe43979fa28052730c3c40950e2ed5b855b3e873df7bfb1ea4f85ae7c6f0d5
7
- data.tar.gz: 31f8a9d0caa27dbf2322c5c99c34245f60f5c24839e49fe3390589000ff7ac7e50d7b153207e8331680450b9a535c40cb7aa25b3cbdb8679e83e8a7011f6881a
6
+ metadata.gz: ceb6c2569ca6ea3ed8df7afc0ff0b3a820870d4484cde54443bb422bbe24c19b5ab783e34cce67074e50e85293651fe90339c2b16a8ce7f3c6b79567460f3307
7
+ data.tar.gz: a3b725ef82c13108d43b37f81d9880c2feff37e15f4c4c4d48b73ea2dd3ca88174d51642db10f2f2f7c099069f734ffb2a0adfb35fda11d19aaef7e2c2ec03bd
@@ -0,0 +1,11 @@
1
+ ## 0.1.2 / 2014-10-16
2
+
3
+ - Add support for `CR` and `CRLF` newlines (#13)
4
+ - Add support for generating TOML from Ruby `Hash`es (#36)
5
+ - Add a script interface for @BurntSushi's `toml-test` utility (#38)
6
+
7
+ ## 0.1.1 / 2014-02-17
8
+
9
+ - Add license to gemspec (#26)
10
+ - Loosen `multi_json` dependency version specified (#27)
11
+ - `Generator` should print empty hash tables but not keys without values (#28)
@@ -3,6 +3,7 @@ $:.unshift(File.dirname(__FILE__))
3
3
  require 'time'
4
4
  require 'parslet'
5
5
 
6
+ require 'toml/version'
6
7
  require 'toml/key'
7
8
  require 'toml/table'
8
9
  require 'toml/parslet'
@@ -14,8 +15,6 @@ require 'toml/generator'
14
15
  # require 'toml/monkey_patch
15
16
 
16
17
  module TOML
17
- VERSION = '0.1.1'
18
-
19
18
  def self.load(content)
20
19
  Parser.new(content).parsed
21
20
  end
@@ -8,10 +8,8 @@ module TOML
8
8
  # used by TOML.
9
9
  self.class.inject!
10
10
 
11
- @body = ""
12
11
  @doc = doc
13
-
14
- visit(@doc)
12
+ @body = doc.to_toml
15
13
 
16
14
  return @body
17
15
  end
@@ -27,51 +25,5 @@ module TOML
27
25
  require 'toml/monkey_patch'
28
26
  @@injected = true
29
27
  end
30
-
31
- def visit(hash, path = "")
32
- hash_pairs = [] # Sub-hashes
33
- other_pairs = []
34
-
35
- hash.keys.sort.each do |key|
36
- val = hash[key]
37
- # TODO: Refactor for other hash-likes (OrderedHash)
38
- if val.is_a? Hash
39
- hash_pairs << [key, val]
40
- else
41
- other_pairs << [key, val]
42
- end
43
- end
44
-
45
- # Handle all the key-values
46
- if !path.empty? && !other_pairs.empty?
47
- @body += "[#{path}]\n"
48
- end
49
- other_pairs.each do |pair|
50
- key, val = pair
51
- if key.include? '.'
52
- raise SyntaxError, "Periods are not allowed in keys (failed on key: #{key.inspect})"
53
- end
54
- unless val.nil?
55
- @body += "#{key} = #{format(val)}\n"
56
- end
57
- end
58
- @body += "\n" unless other_pairs.empty?
59
-
60
- # Then deal with sub-hashes
61
- hash_pairs.each do |pair|
62
- key, hash = pair
63
- if hash.empty?
64
- @body += "[#{path.empty? ? key : [path, key].join(".")}]\n"
65
- else
66
- visit(hash, (path.empty? ? key : [path, key].join(".")))
67
- end
68
- end
69
- end#visit
70
-
71
- # Returns the value formatted for TOML.
72
- def format(val)
73
- val.to_toml
74
- end
75
-
76
28
  end#Generator
77
29
  end#TOML
@@ -1,26 +1,87 @@
1
1
  # Adds to_toml methods to base Ruby classes used by the generator.
2
+ class Object
3
+ def toml_table?
4
+ self.kind_of?(Hash)
5
+ end
6
+ def toml_table_array?
7
+ self.kind_of?(Array) && self.first.toml_table?
8
+ end
9
+ end
10
+ class Hash
11
+ def to_toml(path = "")
12
+ return "" if self.empty?
13
+
14
+ tables = {}
15
+ values = {}
16
+ self.keys.sort.each do |key|
17
+ val = self[key]
18
+ if val.kind_of?(NilClass)
19
+ next
20
+ elsif val.toml_table? || val.toml_table_array?
21
+ tables[key] = val
22
+ else
23
+ values[key] = val
24
+ end
25
+ end
26
+
27
+ toml = ""
28
+ values.each do |key, val|
29
+ toml << "#{key} = #{val.to_toml(key)}\n"
30
+ end
31
+
32
+ tables.each do |key, val|
33
+ key = "#{path}.#{key}" unless path.empty?
34
+ toml_val = val.to_toml(key)
35
+ unless toml_val.empty?
36
+ if val.toml_table?
37
+ non_table_vals = val.values.reject do |v|
38
+ v.toml_table? || v.toml_table_array?
39
+ end
40
+
41
+ # Only add the table key if there are non table values.
42
+ if non_table_vals.length > 0
43
+ toml << "\n[#{key}]\n"
44
+ end
45
+ end
46
+ toml << toml_val
47
+ end
48
+ end
49
+
50
+ toml
51
+ end
52
+ end
53
+ class Array
54
+ def to_toml(path = "")
55
+ unless self.map(&:class).uniq.length == 1
56
+ raise "All array values must be the same type"
57
+ end
58
+
59
+ if self.first.toml_table?
60
+ toml = ""
61
+ self.each do |val|
62
+ toml << "\n[[#{path}]]\n"
63
+ toml << val.to_toml(path)
64
+ end
65
+ return toml
66
+ else
67
+ "[" + self.map {|v| v.to_toml(path) }.join(",") + "]"
68
+ end
69
+ end
70
+ end
2
71
  class TrueClass
3
- def to_toml; "true"; end
72
+ def to_toml(path = ""); "true"; end
4
73
  end
5
74
  class FalseClass
6
- def to_toml; "false"; end
75
+ def to_toml(path = ""); "false"; end
7
76
  end
8
77
  class String
9
- def to_toml; self.inspect; end
78
+ def to_toml(path = ""); self.inspect; end
10
79
  end
11
80
  class Numeric
12
- def to_toml; self.to_s; end
13
- end
14
- class Array
15
- def to_toml
16
- unless self.map(&:class).uniq.length < 2
17
- raise "All array values must be the same type"
18
- end
19
- "[" + self.map {|v| v.to_toml }.join(",") + "]"
20
- end
81
+ def to_toml(path = ""); self.to_s; end
21
82
  end
22
83
  class DateTime
23
- def to_toml
84
+ def to_toml(path = "")
24
85
  self.to_time.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
25
86
  end
26
87
  end
@@ -39,13 +39,13 @@ module TOML
39
39
  space >> key.as(:key) >>
40
40
  space >> str("=") >>
41
41
  space >> value.as(:value) >>
42
- space >> comment.maybe >> str("\n") >> all_space
42
+ space >> comment.maybe >> newline >> all_space
43
43
  }
44
44
  rule(:table) {
45
45
  space >> str("[") >>
46
46
  table_name.as(:table) >>
47
47
  str("]") >>
48
- space >> comment.maybe >> str("\n") >> all_space
48
+ space >> comment.maybe >> newline >> all_space
49
49
  }
50
50
  rule(:table_array) {
51
51
  space >> str("[[") >>
@@ -57,11 +57,12 @@ module TOML
57
57
  rule(:key) { match["^. \t\\]"].repeat(1) }
58
58
  rule(:table_name) { key.as(:key) >> (str(".") >> key.as(:key)).repeat }
59
59
 
60
- rule(:comment_line) { comment >> str("\n") >> all_space }
60
+ rule(:comment_line) { comment >> newline >> all_space }
61
61
  rule(:comment) { str("#") >> match["^\n"].repeat }
62
62
 
63
63
  rule(:space) { match[" \t"].repeat }
64
64
  rule(:all_space) { match[" \t\r\n"].repeat }
65
+ rule(:newline) { str("\r").maybe >> str("\n") | str("\r") >> str("\n").maybe }
65
66
 
66
67
  rule(:string) {
67
68
  str('"') >> (
@@ -0,0 +1,3 @@
1
+ module TOML
2
+ VERSION = '0.1.2'
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy McAnally
@@ -9,34 +9,34 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-17 00:00:00.000000000 Z
12
+ date: 2014-10-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - ~>
18
+ - - "~>"
19
19
  - !ruby/object:Gem::Version
20
20
  version: 1.5.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: 1.5.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  description: Parse your TOML, seriously.
@@ -46,11 +46,11 @@ extensions: []
46
46
  extra_rdoc_files:
47
47
  - README.md
48
48
  - LICENSE
49
+ - CHANGELOG.md
49
50
  files:
50
- - Gemfile
51
+ - CHANGELOG.md
51
52
  - LICENSE
52
53
  - README.md
53
- - Rakefile
54
54
  - lib/toml.rb
55
55
  - lib/toml/generator.rb
56
56
  - lib/toml/key.rb
@@ -59,47 +59,30 @@ files:
59
59
  - lib/toml/parslet.rb
60
60
  - lib/toml/table.rb
61
61
  - lib/toml/transformer.rb
62
- - script/bootstrap
63
- - script/cibuild
64
- - script/console
65
- - test/empty.toml
66
- - test/hard_example.toml
67
- - test/spec.toml
68
- - test/test_empty.rb
69
- - test/test_generator.rb
70
- - test/test_parser.rb
71
- - test/test_parser_hard.rb
72
- - test/test_table_arrays.rb
73
- - test/tmp.rb
74
- - toml.gemspec
62
+ - lib/toml/version.rb
75
63
  homepage: http://github.com/jm/toml
76
64
  licenses:
77
65
  - MIT
78
66
  metadata: {}
79
67
  post_install_message:
80
68
  rdoc_options:
81
- - --charset=UTF-8
69
+ - "--charset=UTF-8"
82
70
  require_paths:
83
71
  - lib
84
72
  required_ruby_version: !ruby/object:Gem::Requirement
85
73
  requirements:
86
- - - '>='
74
+ - - ">="
87
75
  - !ruby/object:Gem::Version
88
76
  version: '0'
89
77
  required_rubygems_version: !ruby/object:Gem::Requirement
90
78
  requirements:
91
- - - '>='
79
+ - - ">="
92
80
  - !ruby/object:Gem::Version
93
81
  version: '0'
94
82
  requirements: []
95
83
  rubyforge_project:
96
- rubygems_version: 2.0.14
84
+ rubygems_version: 2.2.2
97
85
  signing_key:
98
86
  specification_version: 2
99
87
  summary: Parse your TOML.
100
- test_files:
101
- - test/test_empty.rb
102
- - test/test_generator.rb
103
- - test/test_parser.rb
104
- - test/test_parser_hard.rb
105
- - test/test_table_arrays.rb
88
+ test_files: []
data/Gemfile DELETED
@@ -1,11 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in toml.gemspec
4
- gemspec
5
-
6
- group :test do
7
- gem 'multi_json', '~> 1.7'
8
- gem 'minitest'
9
- gem 'simplecov', :require => false
10
- gem 'simplecov-gem-adapter', :require => false
11
- end
data/Rakefile DELETED
@@ -1,170 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'date'
4
-
5
- #############################################################################
6
- #
7
- # Helper functions
8
- #
9
- #############################################################################
10
-
11
- def name
12
- @name ||= Dir['*.gemspec'].first.split('.').first
13
- end
14
-
15
- def version
16
- line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
17
- line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
18
- end
19
-
20
- def date
21
- Date.today.to_s
22
- end
23
-
24
- def rubyforge_project
25
- name
26
- end
27
-
28
- def gemspec_file
29
- "#{name}.gemspec"
30
- end
31
-
32
- def gem_file
33
- "#{name}-#{version}.gem"
34
- end
35
-
36
- def replace_header(head, header_name)
37
- head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
38
- end
39
-
40
- #############################################################################
41
- #
42
- # Standard tasks
43
- #
44
- #############################################################################
45
-
46
- task :default => :test
47
-
48
- # require 'rake/testtask'
49
- # Rake::TestTask.new(:test) do |test|
50
- # test.libs << 'lib' << 'test'
51
- # test.pattern = 'test/**/test_*.rb'
52
- # test.verbose = true
53
- # end
54
- task :test do
55
- Dir['./test/**/test_*.rb'].each {|f| require f }
56
- end
57
-
58
- desc "Generate RCov test coverage and open in your browser"
59
- task :coverage do
60
- if RUBY_VERSION =~ /^1\./
61
- require 'rubygems'
62
- require 'bundler'
63
- Bundler.setup(:test)
64
- require 'simplecov'
65
- require 'simplecov-gem-adapter'
66
-
67
- sh "rm -fr coverage"
68
- SimpleCov.command_name 'Unit Tests'
69
- SimpleCov.start 'gem'
70
- Rake::Task[:test].invoke
71
- SimpleCov.at_exit do
72
- SimpleCov.result.format!
73
- sh "open coverage/index.html"
74
- end
75
- else
76
- require 'rcov'
77
- sh "rm -fr coverage"
78
- sh "rcov test/test_*.rb"
79
- sh "open coverage/index.html"
80
- end
81
- end
82
-
83
- require 'rdoc/task'
84
- Rake::RDocTask.new do |rdoc|
85
- rdoc.rdoc_dir = 'rdoc'
86
- rdoc.title = "#{name} #{version}"
87
- rdoc.rdoc_files.include('README*')
88
- rdoc.rdoc_files.include('lib/**/*.rb')
89
- end
90
-
91
- desc "Open an irb session preloaded with this library"
92
- task :console do
93
- sh "irb -rubygems -r ./lib/#{name}.rb"
94
- end
95
-
96
- #############################################################################
97
- #
98
- # Custom tasks (add your own tasks here)
99
- #
100
- #############################################################################
101
-
102
-
103
-
104
- #############################################################################
105
- #
106
- # Packaging tasks
107
- #
108
- #############################################################################
109
-
110
- desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
111
- task :release => :build do
112
- unless `git branch` =~ /^\* master$/
113
- puts "You must be on the master branch to release!"
114
- exit!
115
- end
116
- sh "git commit --allow-empty -a -m 'Release #{version}'"
117
- sh "git tag v#{version}"
118
- sh "git push origin master"
119
- sh "git push origin v#{version}"
120
- sh "gem push pkg/#{name}-#{version}.gem"
121
- end
122
-
123
- desc "Build #{gem_file} into the pkg directory"
124
- task :build => :gemspec do
125
- sh "mkdir -p pkg"
126
- sh "gem build #{gemspec_file}"
127
- sh "mv #{gem_file} pkg"
128
- end
129
-
130
- desc "Generate #{gemspec_file}"
131
- task :gemspec => :validate do
132
- # read spec file and split out manifest section
133
- spec = File.read(gemspec_file)
134
- head, manifest, tail = spec.split(" # = MANIFEST =\n")
135
-
136
- # replace name version and date
137
- replace_header(head, :name)
138
- replace_header(head, :version)
139
- replace_header(head, :date)
140
- #comment this out if your rubyforge_project has a different name
141
- replace_header(head, :rubyforge_project)
142
-
143
- # determine file list from git ls-files
144
- files = `git ls-files`.
145
- split("\n").
146
- sort.
147
- reject { |file| file =~ /^\./ }.
148
- reject { |file| file =~ /^(rdoc|pkg)/ }.
149
- map { |file| " #{file}" }.
150
- join("\n")
151
-
152
- # piece file back together and write
153
- manifest = " s.files = %w[\n#{files}\n ]\n"
154
- spec = [head, manifest, tail].join(" # = MANIFEST =\n")
155
- File.open(gemspec_file, 'w') { |io| io.write(spec) }
156
- puts "Updated #{gemspec_file}"
157
- end
158
-
159
- desc "Validate #{gemspec_file}"
160
- task :validate do
161
- libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
162
- unless libfiles.empty?
163
- puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
164
- exit!
165
- end
166
- unless Dir['VERSION*'].empty?
167
- puts "A `VERSION` file at root level violates Gem best practices."
168
- exit!
169
- end
170
- end
@@ -1,3 +0,0 @@
1
- #! /bin/bash
2
-
3
- bundle install
@@ -1,3 +0,0 @@
1
- #! /bin/bash
2
-
3
- bundle exec rake test
@@ -1,3 +0,0 @@
1
- #! /bin/bash
2
-
3
- irb -r ./lib/toml.rb
File without changes
@@ -1,33 +0,0 @@
1
- # Test file for TOML
2
- # Only this one tries to emulate a TOML file written by a user of the kind of parser writers probably hate
3
- # This part you'll really hate
4
-
5
- [the]
6
- test_string = "You'll hate me after this - #" # " Annoying, isn't it?
7
-
8
- [the.hard]
9
- test_array = [ "] ", " # "] # ] There you go, parse this!
10
- test_array2 = [ "Test #11 ]proved that", "Experiment #9 was a success" ]
11
- # You didn't think it'd as easy as chucking out the last #, did you?
12
- another_test_string = " Same thing, but with a string #"
13
- harder_test_string = " And when \"'s are in the string, along with # \"" # "and comments are there too"
14
- # Things will get harder
15
-
16
- [the.hard.bit#]
17
- what? = "You don't think some user won't do that?"
18
- multi_line_array = [
19
- "]",
20
- # ] Oh yes I did
21
- ]
22
-
23
- # Each of the following keygroups/key value pairs should produce an error. Uncomment to them to test
24
-
25
- #[error] if you didn't catch this, your parser is broken
26
- #string = "Anything other than tabs, spaces and newline after a keygroup or key value pair has ended should produce an error unless it is a comment" like this
27
- #array = [
28
- # "This might most likely happen in multiline arrays",
29
- # Like here,
30
- # "or here,
31
- # and here"
32
- # ] End of array comment, forgot the #
33
- #number = 3.14 pi <--again forgot the #
@@ -1,81 +0,0 @@
1
- # Comment
2
-
3
- # Booleans
4
- true = true
5
- false = false
6
-
7
- [strings]
8
- # String
9
- string = "string\n\t\"string"
10
- empty = ""
11
-
12
- [ints]
13
- simple = 42
14
- negative = -42
15
-
16
- [floats]
17
- pi = 3.14159
18
- negative = -10.0
19
-
20
- [datetimes]
21
- # DateTime
22
- simple = 1979-05-27T07:32:00Z
23
-
24
- # Keygroups
25
- [a.b.c]
26
- d = "test"
27
-
28
- [e]
29
- f = "test"
30
-
31
- # Post line comment
32
- [comments]
33
- on = "a line" # with markup
34
-
35
- # Multi-line arrays
36
- [arrays]
37
- # Simple array
38
- simple = [1, 2, 3]
39
-
40
- # Nested array
41
- nested = [[1, 2], [3]]
42
-
43
- # Empty array
44
- empty = []
45
-
46
- # Multiline empty
47
- multiline_empty = [
48
- ]
49
-
50
- # Multiline empty with comment
51
- multiline_empty_comment = [
52
- # You look nice today
53
- ]
54
-
55
- # Multiline array
56
- multiline = [
57
- 1,
58
- 2,
59
- 3
60
- ]
61
-
62
- # Multiline array
63
- multiline_trailing_comma = [
64
- 1,
65
- 2,
66
- 3,
67
- ]
68
-
69
- # With comments
70
- multiline_comments = [ # 0
71
- 1, # 1
72
- 2, # 2
73
- 3 # 3
74
- ]
75
-
76
- multi = ["lines", "are",
77
- "super", "cool", "lol",
78
- "amirite"]
79
-
80
- # Uneven spacing
81
- uneven = [1, 2, 3, 4, 5 ]
@@ -1,18 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- require 'toml'
5
- require 'minitest/autorun'
6
-
7
- class TestEmpty < MiniTest::Test
8
-
9
- def setup
10
- filepath = File.join(File.dirname(__FILE__), "empty.toml")
11
- @doc = TOML::Parser.new(File.read(filepath)).parsed
12
- end
13
-
14
- def test_empty
15
- assert_equal ({}), @doc, "Empty document parsed incorrectly"
16
- end
17
-
18
- end
@@ -1,45 +0,0 @@
1
-
2
- require 'rubygems'
3
- require 'bundler/setup'
4
-
5
- require 'toml'
6
- require 'minitest/autorun'
7
-
8
- class TestGenerator < MiniTest::Test
9
- def setup
10
- @doc = {
11
- "integer" => 1,
12
- "float" => 3.14159,
13
- "true" => true,
14
- "false" => false,
15
- "string" => "hi",
16
- "array" => [[1], [2], [3]],
17
- "key" => {
18
- "group" => {
19
- "value" => "lol"
20
- },
21
- "nil_table" => {}
22
- },
23
- "date" => DateTime.now,
24
- "nil" => nil
25
- }
26
-
27
- end
28
-
29
- def test_generator
30
- doc = @doc.clone
31
- body = TOML::Generator.new(doc).body
32
-
33
- doc_parsed = TOML::Parser.new(body).parsed
34
-
35
- # Extracting dates since Ruby's DateTime equality testing sucks.
36
- original_date = doc.delete "date"
37
- parsed_date = doc_parsed.delete "date"
38
-
39
- # removing the nil value
40
- remove_nil = doc.delete "nil"
41
-
42
- assert_equal doc, doc_parsed
43
- assert_equal original_date.to_time.to_s, parsed_date.to_time.to_s
44
- end
45
- end
@@ -1,91 +0,0 @@
1
-
2
- require 'rubygems'
3
- require 'bundler/setup'
4
-
5
- require 'toml'
6
- require 'minitest/autorun'
7
-
8
- class TestParser < MiniTest::Test
9
- def setup
10
- filepath = File.join(File.dirname(__FILE__), 'spec.toml')
11
- @doc = TOML::Parser.new(File.read(filepath)).parsed
12
- end
13
-
14
- def test_string
15
- assert_equal "string\n\t\"string", @doc["strings"]["string"]
16
- assert_equal "", @doc["strings"]["empty"]
17
- end
18
-
19
- def test_integer
20
- assert_equal 42, @doc["ints"]["simple"]
21
- end
22
-
23
- def test_negative_integer
24
- assert_equal -42, @doc["ints"]["negative"]
25
- end
26
-
27
- def test_float
28
- assert_equal 3.14159, @doc["floats"]["pi"]
29
- end
30
-
31
- def test_negative_float
32
- assert_equal -10.0, @doc["floats"]["negative"]
33
- end
34
-
35
- def test_datetime
36
- assert_equal DateTime.iso8601("1979-05-27T07:32:00Z"), @doc["datetimes"]["simple"]
37
- end
38
-
39
- def test_booleans
40
- assert_equal true, @doc["true"]
41
- assert_equal false, @doc["false"]
42
- end
43
-
44
- def test_simple_array
45
- assert_equal [1, 2, 3], @doc["arrays"]["simple"]
46
- end
47
-
48
- def test_nested_array
49
- assert_equal [[1, 2], [3]], @doc["arrays"]["nested"]
50
- end
51
-
52
- def test_empty_array
53
- assert_equal [], @doc["arrays"]["empty"]
54
- end
55
-
56
- def test_empty_multiline_array
57
- assert_equal [], @doc["arrays"]["multiline_empty"]
58
- end
59
-
60
- def test_empty_multiline_array_with_comment
61
- assert_equal [], @doc["arrays"]["multiline_empty_comment"]
62
- end
63
-
64
- def test_multiline_arrays
65
- assert_equal ["lines", "are", "super", "cool", "lol", "amirite"], @doc["arrays"]["multi"]
66
- end
67
-
68
- def test_multiline_array
69
- assert_equal @doc["arrays"]["multiline"], [1, 2, 3]
70
- end
71
-
72
- def test_multiline_array_with_trailing_comma
73
- assert_equal @doc["arrays"]["multiline_trailing_comma"], [1, 2, 3]
74
- end
75
-
76
- def test_multiline_array_with_comments
77
- assert_equal @doc["arrays"]["multiline_comments"], [1, 2, 3]
78
- end
79
-
80
- def test_simple_keygroup
81
- assert_equal "test", @doc["e"]["f"]
82
- end
83
-
84
- def test_nested_keygroup
85
- assert_equal "test", @doc["a"]["b"]["c"]["d"]
86
- end
87
-
88
- def test_inline_comment
89
- assert_equal "a line", @doc["comments"]["on"]
90
- end
91
- end
@@ -1,16 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'toml'
4
- require 'minitest/autorun'
5
-
6
- class TestParserHardExample < MiniTest::Test
7
- def setup
8
- filepath = File.join(File.dirname(__FILE__), 'hard_example.toml')
9
- # @doc = TOML::Parser.new(File.read(filepath)).parsed
10
- @doc = TOML.load_file(filepath)
11
- end
12
-
13
- def test_the_test_string
14
- assert_equal @doc["the"]["test_string"], "You'll hate me after this - #"
15
- end
16
- end
@@ -1,42 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- require 'toml'
4
- require 'minitest/autorun'
5
-
6
- class TestParserTableArrays < MiniTest::Test
7
- def setup
8
- doc = '
9
- [[fruit]]
10
- name = "apple"
11
-
12
- [fruit.physical]
13
- color = "red"
14
- shape = "round"
15
-
16
- [[fruit.variety]]
17
- name = "red delicious"
18
-
19
- [[fruit.variety]]
20
- name = "granny smith"
21
-
22
- [[fruit]]
23
- name = "banana"
24
-
25
- [[fruit.variety]]
26
- name = "plantain"
27
- '
28
- @doc = TOML.load(doc)
29
- #require 'pp'
30
- #PP.pp @doc
31
- end
32
-
33
- def test_doc
34
- assert_equal @doc, {
35
- "fruit"=>
36
- [{"name"=>"apple",
37
- "physical"=>{"color"=>"red", "shape"=>"round"},
38
- "variety"=>[{"name"=>"red delicious"}, {"name"=>"granny smith"}]},
39
- {"name"=>"banana", "variety"=>[{"name"=>"plantain"}]}]
40
- }
41
- end
42
- end
@@ -1,25 +0,0 @@
1
-
2
- require 'rubygems'
3
- require 'bundler/setup'
4
-
5
- require 'toml'
6
-
7
- doc = "
8
- a = [true, false]
9
- "
10
-
11
- puts TOML.load(doc).inspect
12
-
13
- # puts TOML.load("a = [[[[1]]]]")["a"].inspect
14
- # puts "[[[[1]]]] <- expected"
15
- #
16
- # puts TOML.load("a = [1]")["a"].inspect
17
- # puts "[1] <- expected"
18
- #
19
- # puts TOML.load("a = [1, 2, 3]")["a"].inspect
20
- # puts "[1, 2, 3] <- expected"
21
- #
22
- # puts TOML.load("a = [[[1], 2], 3]")["a"].inspect
23
- # puts "[[[1], 2], 3] <- expected"
24
- #
25
- # puts TOML.load("a = [[]]")["a"].inspect
@@ -1,81 +0,0 @@
1
- ## This is the rakegem gemspec template. Make sure you read and understand
2
- ## all of the comments. Some sections require modification, and others can
3
- ## be deleted if you don't need them. Once you understand the contents of
4
- ## this file, feel free to delete any comments that begin with two hash marks.
5
- ## You can find comprehensive Gem::Specification documentation, at
6
- ## http://docs.rubygems.org/read/chapter/20
7
- Gem::Specification.new do |s|
8
- s.specification_version = 2 if s.respond_to? :specification_version=
9
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
- s.rubygems_version = '1.3.5'
11
-
12
- ## Leave these as is they will be modified for you by the rake gemspec task.
13
- ## If your rubyforge_project name is different, then edit it and comment out
14
- ## the sub! line in the Rakefile
15
- s.name = 'toml'
16
- s.version = '0.1.1'
17
- s.date = '2014-02-17'
18
-
19
- ## Make sure your summary is short. The description may be as long
20
- ## as you like.
21
- s.summary = "Parse your TOML."
22
- s.description = "Parse your TOML, seriously."
23
-
24
- ## List the primary authors. If there are a bunch of authors, it's probably
25
- ## better to set the email to an email list or something. If you don't have
26
- ## a custom homepage, consider using your GitHub URL or the like.
27
- s.authors = ["Jeremy McAnally", "Dirk Gadsden"]
28
- s.email = 'jeremy@github.com'
29
- s.homepage = 'http://github.com/jm/toml'
30
- s.license = 'MIT'
31
-
32
- ## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
33
- ## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
34
- s.require_paths = %w[lib]
35
-
36
- ## Specify any RDoc options here. You'll want to add your README and
37
- ## LICENSE files to the extra_rdoc_files list.
38
- s.rdoc_options = ["--charset=UTF-8"]
39
- s.extra_rdoc_files = %w[README.md LICENSE]
40
-
41
- s.add_dependency "parslet", "~> 1.5.0"
42
-
43
- s.add_development_dependency "rake"
44
-
45
- ## Leave this section as-is. It will be automatically generated from the
46
- ## contents of your Git repository via the gemspec task. DO NOT REMOVE
47
- ## THE MANIFEST COMMENTS, they are used as delimiters by the task.
48
- # = MANIFEST =
49
- s.files = %w[
50
- Gemfile
51
- LICENSE
52
- README.md
53
- Rakefile
54
- lib/toml.rb
55
- lib/toml/generator.rb
56
- lib/toml/key.rb
57
- lib/toml/monkey_patch.rb
58
- lib/toml/parser.rb
59
- lib/toml/parslet.rb
60
- lib/toml/table.rb
61
- lib/toml/transformer.rb
62
- script/bootstrap
63
- script/cibuild
64
- script/console
65
- test/empty.toml
66
- test/hard_example.toml
67
- test/spec.toml
68
- test/test_empty.rb
69
- test/test_generator.rb
70
- test/test_parser.rb
71
- test/test_parser_hard.rb
72
- test/test_table_arrays.rb
73
- test/tmp.rb
74
- toml.gemspec
75
- ]
76
- # = MANIFEST =
77
-
78
- ## Test files will be grabbed from the file list. Make sure the path glob
79
- ## matches what you actually use.
80
- s.test_files = s.files.select { |path| path =~ /^test\/test_.*\.rb/ }
81
- end