toml_parser-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MGMzYmMxNTY5OTM0ZjZhM2QzZDk4YzFiZGFhZmJjMjJmMDY2MjE2ZQ==
5
+ data.tar.gz: !binary |-
6
+ MDUxMzllYTE4MzA0ZmNlYTcxNjdlMjUzYzU3ZDQ3NjgyMGUwODgzNA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ OGU1NmI3N2Q1ZjNiMWVjZDA3ZDUzZDk3MzhiYTgxYmFjYTVhMWI0MWE3MjRh
10
+ MzRjOGIxNDkxMGY3MGIxZGJlZGU0NTE0NmQxZjM0NWVhZDgxMGU5NGQzNjk1
11
+ ZWNhNGIzNGE2MTlkM2ZkMzZhY2ZiY2NmZjgwMjFjNmNjMWUwYWU=
12
+ data.tar.gz: !binary |-
13
+ NzkyNzcwODgyNDY4YzEyN2RjODk2MTUyZjllODc3ZTlhMGI0OTUwODFlZDU2
14
+ YzA2NWM3MDg1MGMwMjM0MWI2NTlhNTlkYzk2ZDkzNzNhNDI2Yjg0OGU3MmEx
15
+ YWUxY2E4NzRjMTAyNWExZTU2MTE0NDMxZjQ3NTU1NDZlY2QzMDg=
@@ -0,0 +1,72 @@
1
+ toml-rb
2
+ =======
3
+
4
+ Formerly known as __toml_parser-ruby__.
5
+
6
+ A [TOML](https://github.com/mojombo/toml) parser using [Citrus](http://mjijackson.com/citrus/example.html) library.
7
+
8
+
9
+ Installation
10
+ ------------
11
+
12
+ $ gem install toml-rb
13
+
14
+ Usage
15
+ -----
16
+
17
+ ```ruby
18
+ require 'toml'
19
+
20
+ # From a file!
21
+ path = File.join(File.dirname(__FILE__), 'path', 'to', 'file')
22
+ TOML.load_file(path)
23
+
24
+ # From a stream!
25
+ stream = <<-EOS
26
+ title = "wow!"
27
+
28
+ [awesome]
29
+ you = true
30
+ others = false
31
+ EOS
32
+ TOML.parse(stream)
33
+
34
+ # You want symbols as your keys? No problem!
35
+ TOML.load_file(path, symbolize_keys: true)
36
+ # Works the same for TOML.parse
37
+ ```
38
+
39
+ Contributing
40
+ ------------
41
+
42
+ 1. Fork it
43
+ 2. Bundle it `$ dep install` (install [dep](https://github.com/cyx/dep) if you don't have it)
44
+ 3. Create your feature branch `git checkout -b my-new-feature`
45
+ 4. Add tests and commit your changes `git commit -am 'Add some feature'`
46
+ 5. Run tests `$ rake`
47
+ 6. Push the branch `git push origin my-new-feature`
48
+ 7. Create new Pull Request
49
+
50
+ License
51
+ -------
52
+
53
+ MIT License
54
+
55
+ Permission is hereby granted, free of charge, to any person obtaining
56
+ a copy of this software and associated documentation files (the
57
+ "Software"), to deal in the Software without restriction, including
58
+ without limitation the rights to use, copy, modify, merge, publish,
59
+ distribute, sublicense, and/or sell copies of the Software, and to
60
+ permit persons to whom the Software is furnished to do so, subject to
61
+ the following conditions:
62
+
63
+ The above copyright notice and this permission notice shall be
64
+ included in all copies or substantial portions of the Software.
65
+
66
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
67
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
68
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
69
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
70
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
71
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
72
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,6 @@
1
+ task :test do
2
+ Dir["test/*_test.rb"].each { |file| load file }
3
+ end
4
+
5
+ task :default => :test
6
+
@@ -0,0 +1,56 @@
1
+ require_relative "../init"
2
+
3
+ module TOML
4
+
5
+ # Public: Returns a hash from *TOML* content.
6
+ #
7
+ # content - TOML string to be parsed.
8
+ # options - The Hash options used to refine the parser (default: {}):
9
+ # :symbolize_keys - true|false (optional).
10
+ #
11
+ #
12
+ # Examples
13
+ #
14
+ # TOML.parse('[group]')
15
+ # # => {"group"=>{}}
16
+ #
17
+ # TOML.parse('title = "TOML parser"')
18
+ # # => {"title"=>"TOML parser"}
19
+ #
20
+ # TOML.parse('[group]', symbolize_keys: true)
21
+ # # => {group: {}}
22
+ #
23
+ # TOML.parse('title = "TOML parser"', symbolize_keys: true)
24
+ # # => {title: "TOML parser"}
25
+ #
26
+ #
27
+ # Returns a Ruby hash representation of the content according to TOML spec.
28
+ # Raises ValueOverwriteError if a key is overwritten
29
+ def self.parse(content, options = {})
30
+ Parser.new(content, options).hash
31
+ end
32
+
33
+ # Public: Returns a hash from a *TOML* file.
34
+ #
35
+ # path - TOML File path
36
+ # options - The Hash options used to refine the parser (default: {}):
37
+ # :symbolize_keys - true|false (optional).
38
+ #
39
+ #
40
+ # Examples
41
+ #
42
+ # TOML.load_file('/tmp/simple.toml')
43
+ # # => {"group"=>{}}
44
+ #
45
+ # TOML.load_file('/tmp/simple.toml', symbolize_keys: true)
46
+ # # => {group: {}}
47
+ #
48
+ #
49
+ # Returns a Ruby hash representation of the content.
50
+ # Raises ValueOverwriteError if a key is overwritten
51
+ # Raises Errno::ENOENT if the file cannot be found.
52
+ # Raises Errno::EACCES if the file cannot be accessed.
53
+ def self.load_file(path, options = {})
54
+ TOML.parse(File.read(path), options)
55
+ end
56
+ end
@@ -0,0 +1,24 @@
1
+ module TOML
2
+ class Keygroup
3
+ def initialize(nested_keys)
4
+ @nested_keys = nested_keys
5
+ end
6
+
7
+ def navigate_keys(hash, symbolize_keys = false)
8
+ @nested_keys.each do |key|
9
+ key = symbolize_keys ? key.to_sym : key
10
+ hash[key] = {} unless hash[key]
11
+ hash = hash[key]
12
+ end
13
+
14
+ hash
15
+ end
16
+ end
17
+ end
18
+
19
+ # Used in toml.citrus
20
+ module Keygroup
21
+ def value
22
+ TOML::Keygroup.new(nested_keys.to_s.split("."))
23
+ end
24
+ end
@@ -0,0 +1,23 @@
1
+ module TOML
2
+ class ValueOverwriteError < StandardError; end
3
+
4
+ class Keyvalue
5
+ def initialize(key, value)
6
+ @key, @value = key, value
7
+ end
8
+
9
+ def assign(hash, symbolize_keys = false)
10
+ raise ValueOverwriteError if hash[@key]
11
+
12
+ key = symbolize_keys ? @key.to_sym : @key
13
+ hash[key] = @value
14
+ end
15
+ end
16
+ end
17
+
18
+ # Used in toml.citrus
19
+ module Keyvalue
20
+ def value
21
+ TOML::Keyvalue.new(key.value, v.value)
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ module TOML
2
+ class Parser
3
+ attr_reader :hash
4
+
5
+ def initialize(content, options = {})
6
+ @hash = {}
7
+ @current = @hash
8
+
9
+ parsed = Document.parse(content)
10
+ parsed.matches.map(&:value).compact.each do |match|
11
+ if match.is_a? Keygroup
12
+ @current = match.navigate_keys(@hash, options[:symbolize_keys])
13
+ elsif match.is_a? Keyvalue
14
+ match.assign(@current, options[:symbolize_keys])
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ # Used in primitive.citrus
2
+ module TomlString
3
+ def value
4
+ aux = first.value
5
+ s = 0
6
+ o = []
7
+ while s < aux.length
8
+ if aux[s] == "\\"
9
+ s += 1
10
+ case aux[s]
11
+ when "t" then o << "\t"
12
+ when "n" then o << "\n"
13
+ when "\\" then o << "\\"
14
+ when '"' then o << '"'
15
+ when "r" then o << "\r"
16
+ when "0" then o << "\0"
17
+ else
18
+ o << '\\' << aux[s]
19
+ end
20
+ else
21
+ o << aux[s]
22
+ end
23
+ s += 1
24
+ end
25
+ o[1...-1].join
26
+ end
27
+ end
@@ -0,0 +1,38 @@
1
+ # This is a TOML document. Boom.
2
+
3
+ title = "TOML Example"
4
+
5
+ [owner]
6
+ name = "Tom Preston-Werner"
7
+ organization = "GitHub"
8
+ bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
9
+ dob = 1979-05-27T07:32:00Z # First class dates? Why not?
10
+
11
+ [database]
12
+ server = "192.168.1.1"
13
+ ports = [ 8001, 8001, 8002 ]
14
+ connection_max = 5000
15
+ enabled = true
16
+
17
+ [servers]
18
+
19
+ # You can indent as you please. Tabs or spaces. TOML don't care.
20
+ [servers.alpha]
21
+ ip = "10.0.0.1"
22
+ dc = "eqdc10"
23
+
24
+ [servers.beta]
25
+ ip = "10.0.0.2"
26
+ dc = "eqdc10"
27
+
28
+ [servers]
29
+ amount = 2
30
+
31
+ [clients]
32
+ data = [ ["gamma", "delta"], [1, 2] ]
33
+
34
+ # Line breaks are OK when inside arrays
35
+ hosts = [
36
+ "alpha",
37
+ "omega"
38
+ ]
@@ -0,0 +1,121 @@
1
+ require_relative "helper"
2
+
3
+ class GrammarTest < Test::Unit::TestCase
4
+
5
+ def test_comment
6
+ match = Document.parse(" # A comment", root: :comment)
7
+ assert_equal(nil, match.value)
8
+ end
9
+
10
+ def test_keygroup
11
+ indentation_alternatives_for('[akey]') do |str|
12
+ match = Document.parse(str, root: :keygroup)
13
+ assert_equal(TOML::Keygroup, match.value.class)
14
+ assert_equal(['akey'], match.value.instance_variable_get("@nested_keys"))
15
+ end
16
+
17
+ match = Document.parse('[owner.emancu]', root: :keygroup)
18
+ assert_equal(['owner', 'emancu'], match.value.instance_variable_get("@nested_keys"))
19
+ end
20
+
21
+ def test_keyvalue
22
+ indentation_alternatives_for('key = "value"') do |str|
23
+ match = Document.parse(str, root: :keyvalue)
24
+ assert_equal(TOML::Keyvalue, match.value.class)
25
+
26
+ keyvalue = match.value
27
+ assert_equal('key', keyvalue.instance_variable_get("@key"))
28
+ assert_equal('value', keyvalue.instance_variable_get("@value"))
29
+ end
30
+ end
31
+
32
+ def test_string
33
+ match = Document.parse('"TOML-Example, should work."', root: :string)
34
+ assert_equal("TOML-Example, should work.", match.value)
35
+ end
36
+
37
+ def test_special_characters
38
+ match = Document.parse('"\0 \" \t \n \r"', root: :string)
39
+ assert_equal("\0 \" \t \n \r", match.value)
40
+
41
+ match = Document.parse('"C:\\Documents\\virus.exe"', root: :string)
42
+ assert_equal("C:\\Documents\\virus.exe", match.value)
43
+ end
44
+
45
+ def test_bool
46
+ match = Document.parse('true', root: :bool)
47
+ assert_equal(true, match.value)
48
+
49
+ match = Document.parse('false', root: :bool)
50
+ assert_equal(false, match.value)
51
+ end
52
+
53
+ def test_integer
54
+ match = Document.parse('26', root: :number)
55
+ assert_equal(26, match.value)
56
+ end
57
+
58
+ def test_float
59
+ match = Document.parse('1.69', root: :number)
60
+ assert_equal(1.69, match.value)
61
+ end
62
+
63
+ def test_signed_numbers
64
+ match = Document.parse('+26', root: :number)
65
+ assert_equal(26, match.value)
66
+
67
+ match = Document.parse('-26', root: :number)
68
+ assert_equal(-26, match.value)
69
+
70
+ match = Document.parse('1.69', root: :number)
71
+ assert_equal(1.69, match.value)
72
+
73
+ match = Document.parse('-1.69', root: :number)
74
+ assert_equal(-1.69, match.value)
75
+ end
76
+
77
+ def test_expressions_with_comments
78
+ match = Document.parse('[shouldwork] # with comment', root: :keygroup)
79
+ assert_equal(['shouldwork'], match.value.instance_variable_get("@nested_keys"))
80
+
81
+ match = Document.parse('works = true # with comment', root: :keyvalue).value
82
+ assert_equal("works", match.instance_variable_get("@key"))
83
+ assert_equal(true, match.instance_variable_get("@value"))
84
+ end
85
+
86
+ def test_array
87
+ match = Document.parse('[]', root: :array)
88
+ assert_equal([], match.value)
89
+
90
+ match = Document.parse('[ 2, 4]', root: :array)
91
+ assert_equal([2,4], match.value)
92
+
93
+ match = Document.parse('[ 2.4, 4.72]', root: :array)
94
+ assert_equal([2.4,4.72], match.value)
95
+
96
+ match = Document.parse('[ "hey", "TOML"]', root: :array)
97
+ assert_equal(["hey","TOML"], match.value)
98
+
99
+ match = Document.parse('[ ["hey", "TOML"], [2,4] ]', root: :array)
100
+ assert_equal([["hey","TOML"], [2,4]], match.value)
101
+
102
+ multiline_array = "[ \"hey\",\n \"ho\",\n\t \"lets\", \"go\",\n ]"
103
+ match = Document.parse(multiline_array, root: :array)
104
+ assert_equal(["hey", "ho", "lets", "go"], match.value)
105
+ end
106
+
107
+ def test_datetime
108
+ match = Document.parse('1986-08-28T15:15:00Z', root: :datetime)
109
+ assert_equal(Time.utc(1986,8,28,15,15), match.value)
110
+ end
111
+
112
+ private
113
+
114
+ # Creates all the alternatives of valid indentations to test
115
+ def indentation_alternatives_for(str)
116
+ [str, " #{str}", "\t#{str}", "\t\t#{str}"].each do |alternative|
117
+ yield(alternative)
118
+ end
119
+ end
120
+ end
121
+
@@ -0,0 +1,23 @@
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
@@ -0,0 +1,2 @@
1
+ require "test/unit"
2
+ require_relative "../lib/toml"
@@ -0,0 +1,110 @@
1
+ require_relative 'helper'
2
+
3
+ class TomlTest < Test::Unit::TestCase
4
+ def test_file
5
+ path = File.join(File.dirname(__FILE__), 'example.toml')
6
+ parsed = TOML.load_file(path)
7
+
8
+ hash = {
9
+ "title" => "TOML Example",
10
+
11
+ "owner" => {
12
+ "name" => "Tom Preston-Werner",
13
+ "organization" => "GitHub",
14
+ "bio" => "GitHub Cofounder & CEO\nLikes tater tots and beer.",
15
+ "dob" => Time.utc(1979,05,27,07,32,00)
16
+ },
17
+
18
+ "database" => {
19
+ "server" => "192.168.1.1",
20
+ "ports" => [ 8001, 8001, 8002 ],
21
+ "connection_max" => 5000,
22
+ "enabled" => true
23
+ },
24
+
25
+ "servers" => {
26
+ "amount" => 2,
27
+ "alpha" => {
28
+ "ip" => "10.0.0.1",
29
+ "dc" => "eqdc10"
30
+ },
31
+ "beta" => {
32
+ "ip" => "10.0.0.2",
33
+ "dc" => "eqdc10"
34
+ }
35
+ },
36
+
37
+ "clients" => {
38
+ "data" => [["gamma", "delta"], [1, 2]],
39
+ "hosts" => ["alpha", "omega"]
40
+ }
41
+ }
42
+
43
+ assert_equal(hash, parsed)
44
+ end
45
+
46
+ def test_hard_example
47
+ path = File.join(File.dirname(__FILE__), 'hard_example.toml')
48
+ parsed = TOML.load_file(path)
49
+
50
+ hash = {
51
+ "the" => {
52
+ "test_string" => "You'll hate me after this - #",
53
+ "hard" => {
54
+ "test_array" => [ "] ", " # "],
55
+ "test_array2" => [ "Test #11 ]proved that", "Experiment #9 was a success" ],
56
+ "another_test_string" => " Same thing, but with a string #",
57
+ "harder_test_string" => " And when \"'s are in the string, along with # \"",
58
+ "bit#" => {
59
+ "what?" => "You don't think some user won't do that?",
60
+ "multi_line_array" => [ "]" ]
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ assert_equal(hash, parsed)
67
+ end
68
+
69
+ def test_symbolize_keys
70
+ path = File.join(File.dirname(__FILE__), 'example.toml')
71
+ parsed = TOML.load_file(path, symbolize_keys: true)
72
+
73
+ hash = {
74
+ title: "TOML Example",
75
+
76
+ owner: {
77
+ name: "Tom Preston-Werner",
78
+ organization: "GitHub",
79
+ bio: "GitHub Cofounder & CEO\nLikes tater tots and beer.",
80
+ dob: Time.utc(1979,05,27,07,32,00)
81
+ },
82
+
83
+ database: {
84
+ server: "192.168.1.1",
85
+ ports: [ 8001, 8001, 8002 ],
86
+ connection_max: 5000,
87
+ enabled: true
88
+ },
89
+
90
+ servers: {
91
+ amount: 2,
92
+ alpha: {
93
+ ip: "10.0.0.1",
94
+ dc: "eqdc10"
95
+ },
96
+ beta: {
97
+ ip: "10.0.0.2",
98
+ dc: "eqdc10"
99
+ }
100
+ },
101
+
102
+ clients: {
103
+ data: [["gamma", "delta"], [1, 2]],
104
+ hosts: ["alpha", "omega"]
105
+ }
106
+ }
107
+
108
+ assert_equal(hash, parsed)
109
+ end
110
+ end
@@ -0,0 +1,22 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'toml-rb'
3
+ s.version = '0.1.0'
4
+ s.date = Time.now.strftime('%Y-%m-%d')
5
+ s.summary = "TOML parser in ruby, for ruby."
6
+ s.description = "A TOML parser using Citrus parsing library. Formerly known as 'toml_parser-ruby'. "
7
+ s.authors = ["Emiliano Mancuso", "Lucas Tolchinsky"]
8
+ s.email = ['emiliano.mancuso@gmail.com', 'lucas.tolchinsky@gmail.com']
9
+ s.homepage = 'http://github.com/eMancu/toml-rb'
10
+ s.license = "MIT"
11
+
12
+ s.files = Dir[
13
+ "README.md",
14
+ "Rakefile",
15
+ "lib/**/*.rb",
16
+ "lib/**/*.citrus",
17
+ "*.gemspec",
18
+ "test/*.*"
19
+ ]
20
+
21
+ s.add_dependency "citrus"
22
+ end
@@ -0,0 +1,28 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'toml_parser-ruby'
3
+ s.version = '0.1.0'
4
+ s.date = Time.now.strftime('%Y-%m-%d')
5
+ s.summary = "TOML parser in ruby, for ruby."
6
+ s.description = "DEPRECATED by 'toml-rb' gem.\n A TOML parser using Citrus parsing library"
7
+ s.authors = ["Emiliano Mancuso"]
8
+ s.email = 'emiliano.mancuso@gmail.com'
9
+ s.homepage = 'http://github.com/eMancu/toml_parser-ruby'
10
+ s.license = "MIT"
11
+
12
+ s.files = Dir[
13
+ "README.md",
14
+ "Rakefile",
15
+ "lib/**/*.rb",
16
+ "*.gemspec",
17
+ "test/*.*"
18
+ ]
19
+
20
+ s.add_dependency "citrus"
21
+
22
+
23
+ s.post_install_message = <<-MESSAGE
24
+ ! The 'toml_parser-ruby' gem has been deprecated and has been replaced by 'toml-rb'.
25
+ ! See: https://rubygems.org/gems/toml-rb
26
+ ! And: https://github.com/eMancu/toml-rb
27
+ MESSAGE
28
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: toml_parser-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Emiliano Mancuso
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: citrus
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: ! "DEPRECATED by 'toml-rb' gem.\n A TOML parser using Citrus parsing
28
+ library"
29
+ email: emiliano.mancuso@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - Rakefile
36
+ - lib/toml/keygroup.rb
37
+ - lib/toml/keyvalue.rb
38
+ - lib/toml/parser.rb
39
+ - lib/toml/string.rb
40
+ - lib/toml.rb
41
+ - toml-rb.gemspec
42
+ - toml_parser-ruby.gemspec
43
+ - test/example.toml
44
+ - test/grammar_test.rb
45
+ - test/hard_example.toml
46
+ - test/helper.rb
47
+ - test/toml_test.rb
48
+ homepage: http://github.com/eMancu/toml_parser-ruby
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message: ! " ! The 'toml_parser-ruby' gem has been deprecated and
53
+ has been replaced by 'toml-rb'.\n ! See: https://rubygems.org/gems/toml-rb\n
54
+ \ ! And: https://github.com/eMancu/toml-rb\n"
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 2.0.3
71
+ signing_key:
72
+ specification_version: 4
73
+ summary: TOML parser in ruby, for ruby.
74
+ test_files: []