figtree 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +20 -2
- data/MIT-LICENSE +21 -0
- data/README.md +24 -10
- data/figtree.gemspec +8 -4
- data/lib/figtree/ini_config.rb +2 -5
- data/lib/figtree/transformer.rb +31 -29
- data/lib/figtree/version.rb +1 -1
- data/lib/figtree.rb +20 -11
- data/spec/figtree/transformer_spec.rb +50 -10
- data/spec/figtree_spec.rb +32 -15
- data/spec/spec_helper.rb +6 -0
- data/spec/support/unparseable_settings.conf +4 -0
- data/spec/support/untransformable_settings.conf +2 -0
- metadata +51 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63e43d9d640143445c0baa5ce76f59f481866607
|
4
|
+
data.tar.gz: b4c3ccea33953ee1838e753143359692b4ffed8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f32e3781ea27fd6dbe637585e2d5da867f0f7a3dfe7650c5a10321ead9637760f083ef58aeece560d2146d7ca4aeb8093b061df3fc3374e9030b97766e2d91a
|
7
|
+
data.tar.gz: 91d3553cf4acbc18dfd38bdf687583cdfd77dc7ced185618c52d1ac04d87436059c63f792959a5a759a7468d3727d55f78d6344356c4fe6159e0d6c2c2c015d2
|
data/Gemfile.lock
CHANGED
@@ -2,15 +2,24 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
figtree (0.0.1)
|
5
|
-
parslet
|
5
|
+
parslet (~> 1.7)
|
6
|
+
wannabe_bool (~> 0.2)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
9
10
|
specs:
|
10
11
|
blankslate (3.1.3)
|
12
|
+
coderay (1.1.0)
|
11
13
|
diff-lcs (1.2.5)
|
14
|
+
docile (1.1.5)
|
15
|
+
json (1.8.3)
|
16
|
+
method_source (0.8.2)
|
12
17
|
parslet (1.7.1)
|
13
18
|
blankslate (>= 2.0, <= 4.0)
|
19
|
+
pry (0.10.1)
|
20
|
+
coderay (~> 1.1.0)
|
21
|
+
method_source (~> 0.8.1)
|
22
|
+
slop (~> 3.4)
|
14
23
|
rspec (3.3.0)
|
15
24
|
rspec-core (~> 3.3.0)
|
16
25
|
rspec-expectations (~> 3.3.0)
|
@@ -24,13 +33,22 @@ GEM
|
|
24
33
|
diff-lcs (>= 1.2.0, < 2.0)
|
25
34
|
rspec-support (~> 3.3.0)
|
26
35
|
rspec-support (3.3.0)
|
36
|
+
simplecov (0.10.0)
|
37
|
+
docile (~> 1.1.0)
|
38
|
+
json (~> 1.8)
|
39
|
+
simplecov-html (~> 0.10.0)
|
40
|
+
simplecov-html (0.10.0)
|
41
|
+
slop (3.6.0)
|
42
|
+
wannabe_bool (0.2.0)
|
27
43
|
|
28
44
|
PLATFORMS
|
29
45
|
ruby
|
30
46
|
|
31
47
|
DEPENDENCIES
|
32
48
|
figtree!
|
33
|
-
|
49
|
+
pry
|
50
|
+
rspec (~> 3.0, >= 3.0.0)
|
51
|
+
simplecov (~> 0.10)
|
34
52
|
|
35
53
|
BUNDLED WITH
|
36
54
|
1.10.6
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Alex Moore - Niemi
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
# Figtree
|
1
|
+
# Figtree 🌳
|
2
2
|
## about
|
3
|
-
A parser and transformer for loading `.ini` files into Ruby dot notation accessible objects. `.ini` is not a standardized format. But the parser and transformer are easy to extend, unlike regex. :)
|
3
|
+
A parser and transformer for loading `.ini` files into Ruby dot notation accessible objects. `.ini` is not a standardized format. But the parser and transformer are easy to extend, unlike regex. :) And it's at 100% LOC coverage.
|
4
|
+
|
5
|
+
If the `.ini` file is invalid, an error will be raised, with the line and char position of the error. If you extend this gem to have more rules, and one of those rules fails to transform, you will have an error raised.
|
4
6
|
|
5
7
|
## performance
|
6
8
|
A typical `.ini` file takes slightly less than 0.02s to be parsed, transformed, and loaded.
|
@@ -13,16 +15,28 @@ A typical `.ini` file takes slightly less than 0.02s to be parsed, transformed,
|
|
13
15
|
config = Figtree.load_config('spec/support/settings.conf')
|
14
16
|
config.common.basic_size_limit
|
15
17
|
=> 26214400
|
18
|
+
# also good
|
19
|
+
config[:common]["paid_users_size_limit"]
|
20
|
+
=> 2147483648
|
21
|
+
# also also good :)
|
22
|
+
config.common[:paid_users_size_limit]
|
23
|
+
=> 2147483648
|
24
|
+
# and overrides? we got overrides
|
25
|
+
overridden_config = Figtree.load_config('spec/support/settings.conf', [:production])
|
26
|
+
config.ftp.path
|
27
|
+
=> "/tmp/"
|
28
|
+
overridden_config.ftp.path
|
29
|
+
=> "/srv/var/tmp/"
|
16
30
|
|
17
|
-
|
18
|
-
|
31
|
+
## development
|
32
|
+
### installation
|
19
33
|
`bundle install`
|
20
34
|
|
21
|
-
|
35
|
+
### tests
|
22
36
|
`rspec spec/`
|
23
37
|
|
24
|
-
|
25
|
-
-
|
26
|
-
-
|
27
|
-
-
|
28
|
-
-
|
38
|
+
#### TODO
|
39
|
+
- give char/line position of transformer failures
|
40
|
+
- change method signature from Module.class_method to just IniConfig.new(IOObject) ?
|
41
|
+
- change override to be single symbol rather than array (do we ever need multiples?)
|
42
|
+
- refactor marked TODO listings in files (mostly refactoring to generic in Transformer)
|
data/figtree.gemspec
CHANGED
@@ -2,11 +2,12 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
2
2
|
require "figtree/version"
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.name
|
6
|
-
gem.version
|
7
|
-
gem.date
|
5
|
+
gem.name = 'figtree'
|
6
|
+
gem.version = Figtree::VERSION
|
7
|
+
gem.date = Date.today.to_s
|
8
|
+
gem.licenses = ['MIT']
|
8
9
|
|
9
|
-
gem.summary
|
10
|
+
gem.summary = "A parser and transformer for loading `.ini` files into Ruby dot notation accessible objects."
|
10
11
|
gem.description = "See README.md"
|
11
12
|
|
12
13
|
gem.authors = ['Alex Moore-Niemi']
|
@@ -14,7 +15,10 @@ Gem::Specification.new do |gem|
|
|
14
15
|
gem.homepage = 'https://github.com/mooreniemi/figtree'
|
15
16
|
|
16
17
|
gem.add_runtime_dependency 'parslet', '~> 1.7'
|
18
|
+
gem.add_runtime_dependency 'wannabe_bool', '~> 0.2'
|
17
19
|
gem.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
|
20
|
+
gem.add_development_dependency 'simplecov', '~> 0.10'
|
21
|
+
gem.add_development_dependency 'pry', '~> 0.10'
|
18
22
|
|
19
23
|
gem.files = `git ls-files`.split("\n")
|
20
24
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/figtree/ini_config.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
require 'ostruct'
|
2
2
|
module Figtree
|
3
3
|
class IniConfig < OpenStruct
|
4
|
-
|
5
|
-
|
6
|
-
# TODO then this class can be a shell
|
7
|
-
super(array.reduce({}, :merge))
|
8
|
-
end
|
4
|
+
end
|
5
|
+
class Subgroup < OpenStruct
|
9
6
|
end
|
10
7
|
end
|
data/lib/figtree/transformer.rb
CHANGED
@@ -1,64 +1,66 @@
|
|
1
1
|
require 'parslet'
|
2
2
|
require 'ostruct'
|
3
|
+
require 'wannabe_bool'
|
3
4
|
|
4
5
|
module Figtree
|
5
|
-
#
|
6
|
+
# a transformer takes a parsed, valid AST and applies rules, usually
|
7
|
+
# in a context free manner
|
6
8
|
class Transformer < Parslet::Transform
|
7
|
-
attr_accessor :overrides
|
8
|
-
|
9
|
-
def initialize(overrides = [], &block)
|
10
|
-
@overrides = overrides
|
11
|
-
super(&block)
|
12
|
-
end
|
13
|
-
|
14
9
|
# TODO these could largely be consolidated with some rearrangement
|
15
|
-
#
|
16
|
-
rule(:snake_case_key => simple(:key), :number =>
|
10
|
+
# these are all type conversions
|
11
|
+
rule(:snake_case_key => simple(:key), :number => simple(:value)) do
|
17
12
|
{
|
18
13
|
key.to_sym => Integer(value)
|
19
14
|
}
|
20
15
|
end
|
21
|
-
rule(:snake_case_key => simple(:key), :
|
16
|
+
rule(:snake_case_key => simple(:key), :string => simple(:value)) do
|
22
17
|
{
|
23
|
-
key.to_sym =>
|
18
|
+
key.to_sym => String(value)
|
24
19
|
}
|
25
20
|
end
|
26
|
-
rule(:snake_case_key => simple(:key), :
|
21
|
+
rule(:snake_case_key => simple(:key), :file_path => simple(:value)) do
|
27
22
|
{
|
28
23
|
key.to_sym => String(value)
|
29
24
|
}
|
30
25
|
end
|
26
|
+
# depends on wannabe_bool refining String class
|
31
27
|
rule(:snake_case_key => simple(:key), :boolean => simple(:value)) do
|
32
28
|
{
|
33
|
-
|
34
|
-
key.to_sym => String(value)
|
29
|
+
key.to_sym => String(value).to_b
|
35
30
|
}
|
36
31
|
end
|
37
|
-
rule(:snake_case_key => simple(:key), :
|
32
|
+
rule(:snake_case_key => simple(:key), :array => simple(:value)) do
|
38
33
|
{
|
39
|
-
key.to_sym => String(value)
|
34
|
+
key.to_sym => String(value).split(",")
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
# ini files are trees of a fixed height, if the file handle is the root
|
39
|
+
# subgroups are its children, and subgroup members are the next level of children
|
40
|
+
rule(:group => subtree(:group_members)) do
|
41
|
+
group_title = group_members[0][:group_title].to_sym
|
42
|
+
group_values = Subgroup.new(group_members[1..-1].reduce({}, :merge!))
|
43
|
+
{
|
44
|
+
group_title => group_values
|
40
45
|
}
|
41
46
|
end
|
47
|
+
|
48
|
+
# where does overrides come from? an argument into #apply on
|
49
|
+
# Transformer, that allows an additional capture outside the AST
|
50
|
+
# to be added to the context of the transform
|
42
51
|
rule(
|
43
|
-
:key_to_be_overridden => subtree(:
|
44
|
-
:optional_key => subtree(:
|
45
|
-
:file_path => subtree(:
|
52
|
+
:key_to_be_overridden => subtree(:overridden_key),
|
53
|
+
:optional_key => subtree(:overriding_key),
|
54
|
+
:file_path => subtree(:new_file_path),
|
46
55
|
) do
|
47
|
-
if
|
56
|
+
if overrides.include?(overriding_key[:snake_case_key].to_sym)
|
48
57
|
{
|
49
|
-
|
58
|
+
overridden_key[:snake_case_key] => String(new_file_path)
|
50
59
|
}
|
51
60
|
else
|
52
61
|
{
|
53
62
|
}
|
54
63
|
end
|
55
64
|
end
|
56
|
-
rule(:group => subtree(:group_members)) do
|
57
|
-
group_title = group_members[0][:group_title].to_sym
|
58
|
-
group_values = OpenStruct.new(group_members[1..-1].reduce({}, :merge))
|
59
|
-
{
|
60
|
-
group_title => group_values
|
61
|
-
}
|
62
|
-
end
|
63
65
|
end
|
64
66
|
end
|
data/lib/figtree/version.rb
CHANGED
data/lib/figtree.rb
CHANGED
@@ -4,13 +4,14 @@ require 'figtree/ini_config'
|
|
4
4
|
|
5
5
|
module Figtree
|
6
6
|
def self.load_config(file_path, overrides=[])
|
7
|
+
parsed_subgroups = figgy_transform(
|
8
|
+
figgy_parse(
|
9
|
+
File.read(file_path)
|
10
|
+
),
|
11
|
+
overrides
|
12
|
+
)
|
7
13
|
IniConfig.new(
|
8
|
-
|
9
|
-
figgy_parse(
|
10
|
-
File.read(file_path)
|
11
|
-
),
|
12
|
-
overrides
|
13
|
-
)
|
14
|
+
parsed_subgroups.reduce({}, :merge!)
|
14
15
|
)
|
15
16
|
end
|
16
17
|
|
@@ -18,13 +19,21 @@ module Figtree
|
|
18
19
|
def self.figgy_parse(str)
|
19
20
|
Parser.new.parse(str)
|
20
21
|
rescue Parslet::ParseFailed => failure
|
21
|
-
puts
|
22
|
+
STDERR.puts "\nInvalid ini file.\n" +
|
23
|
+
"Error: #{failure.cause.ascii_tree}" +
|
24
|
+
"Please correct the file and retry."
|
25
|
+
raise
|
22
26
|
end
|
23
27
|
|
24
28
|
def self.figgy_transform(tree, overrides = [])
|
25
|
-
Transformer.new
|
26
|
-
rescue
|
27
|
-
puts
|
28
|
-
|
29
|
+
Transformer.new.apply(tree, overrides: overrides)
|
30
|
+
rescue => e
|
31
|
+
STDERR.puts "\nInvalid transformation rule.\n" +
|
32
|
+
"Error: #{e}" +
|
33
|
+
"Please correct your transformer rule and retry."
|
34
|
+
raise TransformFailed
|
35
|
+
end
|
36
|
+
|
37
|
+
class TransformFailed < Exception
|
29
38
|
end
|
30
39
|
end
|
@@ -2,17 +2,57 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Figtree
|
4
4
|
describe Transformer do
|
5
|
-
|
6
|
-
|
5
|
+
context "can do type conversion" do
|
6
|
+
let(:int_tree) do
|
7
|
+
Parser.new.parse("[common]\nbasic_size_limit = 26214400\n")
|
8
|
+
end
|
9
|
+
let(:arr_tree) do
|
10
|
+
Parser.new.parse("[http]\nparams = array,of,values\n")
|
11
|
+
end
|
12
|
+
let(:bool_tree) do
|
13
|
+
Parser.new.parse("[ftp]\nenabled = no\n")
|
14
|
+
end
|
15
|
+
it 'can apply an int type conversion' do
|
16
|
+
expect(Transformer.new.apply(int_tree)).to eq(
|
17
|
+
[
|
18
|
+
{
|
19
|
+
common: Subgroup.new({basic_size_limit: 26214400})
|
20
|
+
}
|
21
|
+
]
|
22
|
+
)
|
23
|
+
end
|
24
|
+
it 'can apply an array type conversion' do
|
25
|
+
expect(Transformer.new.apply(arr_tree)).to eq(
|
26
|
+
[
|
27
|
+
{
|
28
|
+
http: Subgroup.new(params: ["array", "of", "values"])
|
29
|
+
}
|
30
|
+
]
|
31
|
+
)
|
32
|
+
end
|
33
|
+
it 'can apply a bool type conversion' do
|
34
|
+
expect(Transformer.new.apply(bool_tree)).to eq(
|
35
|
+
[
|
36
|
+
{
|
37
|
+
ftp: Subgroup.new(enabled: false)
|
38
|
+
}
|
39
|
+
]
|
40
|
+
)
|
41
|
+
end
|
7
42
|
end
|
8
|
-
|
9
|
-
|
10
|
-
[
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
43
|
+
context "overrides by angle brackets" do
|
44
|
+
let(:override_tree) do
|
45
|
+
Parser.new.parse("[http]\npath = /srv/\npath<production> = /srv/var/tmp/\n")
|
46
|
+
end
|
47
|
+
it 'can apply an override' do
|
48
|
+
expect(Transformer.new.apply(override_tree, overrides: [:production])).to eq(
|
49
|
+
[
|
50
|
+
{
|
51
|
+
http: Subgroup.new(path: '/srv/var/tmp/')
|
52
|
+
}
|
53
|
+
]
|
54
|
+
)
|
55
|
+
end
|
16
56
|
end
|
17
57
|
end
|
18
58
|
end
|
data/spec/figtree_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe Figtree do
|
|
6
6
|
describe '#load_config' do
|
7
7
|
let(:settings_path) { 'spec/support/settings.conf' }
|
8
8
|
let(:common) do
|
9
|
-
|
9
|
+
Figtree::Subgroup.new(
|
10
10
|
:basic_size_limit => 26214400,
|
11
11
|
:student_size_limit => 52428800,
|
12
12
|
:paid_users_size_limit => 2147483648,
|
@@ -15,11 +15,11 @@ describe Figtree do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
let(:common_with_override) do
|
18
|
-
|
18
|
+
Figtree::Subgroup.new(
|
19
19
|
:basic_size_limit => 26214400,
|
20
20
|
:student_size_limit => 52428800,
|
21
21
|
:paid_users_size_limit => 2147483648,
|
22
|
-
:path => "/srv/
|
22
|
+
:path => "/srv/tmp/",
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
@@ -27,7 +27,7 @@ describe Figtree do
|
|
27
27
|
Figtree::IniConfig.new(
|
28
28
|
[
|
29
29
|
{
|
30
|
-
common:
|
30
|
+
common: Figtree::Subgroup.new(
|
31
31
|
{
|
32
32
|
:basic_size_limit => 26214400,
|
33
33
|
:student_size_limit=> 52428800,
|
@@ -37,24 +37,24 @@ describe Figtree do
|
|
37
37
|
)
|
38
38
|
},
|
39
39
|
{
|
40
|
-
ftp:
|
40
|
+
ftp: Figtree::Subgroup.new(
|
41
41
|
{
|
42
42
|
:name => "hello there, ftp uploading",
|
43
43
|
:path => "/tmp/",
|
44
|
-
:enabled =>
|
44
|
+
:enabled => false
|
45
45
|
}
|
46
46
|
)
|
47
47
|
},
|
48
48
|
{
|
49
|
-
http:
|
49
|
+
http: Figtree::Subgroup.new(
|
50
50
|
{
|
51
51
|
:name => "http uploading",
|
52
52
|
:path => "/tmp/",
|
53
|
-
:params => ["array,of,values"]
|
53
|
+
:params => ["array", "of", "values"]
|
54
54
|
}
|
55
55
|
)
|
56
56
|
}
|
57
|
-
]
|
57
|
+
].reduce({}, :merge!)
|
58
58
|
)
|
59
59
|
end
|
60
60
|
|
@@ -69,12 +69,29 @@ describe Figtree do
|
|
69
69
|
expect(Figtree.load_config(settings_path)).to eq(the_whole_kebab)
|
70
70
|
end
|
71
71
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
72
|
+
context "performance" do
|
73
|
+
it 'can parse the whole ini file quickly' do
|
74
|
+
expect(
|
75
|
+
Benchmark.realtime do
|
76
|
+
Figtree.load_config(settings_path)
|
77
|
+
end
|
78
|
+
).to be < 0.014
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "invalid ini file" do
|
83
|
+
let(:unparseable_config) { 'spec/support/unparseable_settings.conf' }
|
84
|
+
let(:untransformable_config) { 'spec/support/untransformable_settings.conf' }
|
85
|
+
it 'throws ParseFailed if unparseable' do
|
86
|
+
expect { Figtree.load_config(unparseable_config) }.
|
87
|
+
to raise_error(Parslet::ParseFailed)
|
88
|
+
end
|
89
|
+
it 'throws TransformFailed if untransformable' do
|
90
|
+
allow_any_instance_of(String).to receive(:to_b).
|
91
|
+
and_raise(StandardError)
|
92
|
+
expect { Figtree.load_config(untransformable_config) }.
|
93
|
+
to raise_error(Figtree::TransformFailed)
|
94
|
+
end
|
78
95
|
end
|
79
96
|
end
|
80
97
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
Bundler.setup
|
3
3
|
|
4
|
+
require 'pry'
|
4
5
|
require 'ostruct'
|
5
6
|
require 'parslet'
|
6
7
|
require 'parslet/rig/rspec'
|
7
8
|
|
9
|
+
require 'simplecov'
|
10
|
+
SimpleCov.start
|
11
|
+
|
8
12
|
Dir[File.join(File.dirname(__FILE__), "..", "lib" , "**.rb")].each do |file|
|
9
13
|
require file
|
10
14
|
end
|
11
15
|
|
12
16
|
RSpec.configure do |config|
|
17
|
+
# quiet output from figtree_spec invalid ini context
|
18
|
+
config.before { allow($stderr).to receive(:puts) }
|
13
19
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: figtree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Moore-Niemi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parslet
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: wannabe_bool
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.2'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,6 +58,34 @@ dependencies:
|
|
44
58
|
- - ">="
|
45
59
|
- !ruby/object:Gem::Version
|
46
60
|
version: 3.0.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: simplecov
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.10'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0.10'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: pry
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0.10'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0.10'
|
47
89
|
description: See README.md
|
48
90
|
email: moore.niemi@gmail.com
|
49
91
|
executables: []
|
@@ -54,6 +96,7 @@ files:
|
|
54
96
|
- ".ruby-version"
|
55
97
|
- Gemfile
|
56
98
|
- Gemfile.lock
|
99
|
+
- MIT-LICENSE
|
57
100
|
- README.md
|
58
101
|
- figtree.gemspec
|
59
102
|
- lib/figtree.rb
|
@@ -66,8 +109,11 @@ files:
|
|
66
109
|
- spec/figtree_spec.rb
|
67
110
|
- spec/spec_helper.rb
|
68
111
|
- spec/support/settings.conf
|
112
|
+
- spec/support/unparseable_settings.conf
|
113
|
+
- spec/support/untransformable_settings.conf
|
69
114
|
homepage: https://github.com/mooreniemi/figtree
|
70
|
-
licenses:
|
115
|
+
licenses:
|
116
|
+
- MIT
|
71
117
|
metadata: {}
|
72
118
|
post_install_message:
|
73
119
|
rdoc_options: []
|
@@ -96,4 +142,6 @@ test_files:
|
|
96
142
|
- spec/figtree_spec.rb
|
97
143
|
- spec/spec_helper.rb
|
98
144
|
- spec/support/settings.conf
|
145
|
+
- spec/support/unparseable_settings.conf
|
146
|
+
- spec/support/untransformable_settings.conf
|
99
147
|
has_rdoc:
|