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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1233d1fd9829365dc29dc2ed44b73634c7c4cfa6
4
- data.tar.gz: 44fba04a7b4c08a88f1c4d20e0464d0d25643ab8
3
+ metadata.gz: 63e43d9d640143445c0baa5ce76f59f481866607
4
+ data.tar.gz: b4c3ccea33953ee1838e753143359692b4ffed8a
5
5
  SHA512:
6
- metadata.gz: f0ff4a80575eeea798dfe2a2adeee750f614428d866f160a3bb4f7cae001f797e9aedf671496102b18b67738f2f29e4464d2ee02d4a6882759ec852b30355c13
7
- data.tar.gz: d5c9d8a28065b65c74a976a47e5a67215418fa8ba8437a289db1f83a12b08355c9ca7f00596cf29709873af0c31537c049dba6d97fa2526443545c38bf36a5d6
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
- rspec (>= 3.0.0)
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
- # development
18
- ## installation
31
+ ## development
32
+ ### installation
19
33
  `bundle install`
20
34
 
21
- ## tests
35
+ ### tests
22
36
  `rspec spec/`
23
37
 
24
- ### TODO
25
- - refactor marked TODO listings in files (mostly refactoring to generic)
26
- - allow indifferent access? (not just dot notation but allow hash access)
27
- - add more unit test coverage to Transformer
28
- - seems like Parslet doesn't have a `TransformFailed` error format, worth adding one?
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 = 'figtree'
6
- gem.version = Figtree::VERSION
7
- gem.date = Date.today.to_s
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 = "A parser and transformer for loading `.ini` files into Ruby dot notation accessible objects."
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")
@@ -1,10 +1,7 @@
1
1
  require 'ostruct'
2
2
  module Figtree
3
3
  class IniConfig < OpenStruct
4
- def initialize(array = [])
5
- # TODO move the reduction to #load_config
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
@@ -1,64 +1,66 @@
1
1
  require 'parslet'
2
2
  require 'ostruct'
3
+ require 'wannabe_bool'
3
4
 
4
5
  module Figtree
5
- # once you have an AST, you can do type transformations
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
- # TODO subtree is considered too flexible, switch to simple(:x)?
16
- rule(:snake_case_key => simple(:key), :number => subtree(:value)) do
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), :array => subtree(:value)) do
16
+ rule(:snake_case_key => simple(:key), :string => simple(:value)) do
22
17
  {
23
- key.to_sym => Array(value)
18
+ key.to_sym => String(value)
24
19
  }
25
20
  end
26
- rule(:snake_case_key => simple(:key), :string => subtree(:value)) do
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
- # Boolean(value) fails
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), :file_path => subtree(:value)) do
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(:a),
44
- :optional_key => subtree(:b),
45
- :file_path => subtree(:c)
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 !@overrides.nil? && @overrides.include?(b[:snake_case_key])
56
+ if overrides.include?(overriding_key[:snake_case_key].to_sym)
48
57
  {
49
- a[:snake_case_key] => String(c)
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
@@ -1,3 +1,3 @@
1
1
  module Figtree
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
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
- figgy_transform(
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 failure.cause.ascii_tree
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(overrides).apply(tree)
26
- rescue
27
- puts 'failed transform'
28
- {} # returning hash just to preserve stack trace
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
- let(:tree) do
6
- Parser.new.parse("[common]\nbasic_size_limit = 26214400\n")
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
- it 'can apply an int type conversion' do
9
- expect(Transformer.new.apply(tree)).to eq(
10
- [
11
- {
12
- common: OpenStruct.new({basic_size_limit: 26214400})
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
- OpenStruct.new(
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
- OpenStruct.new(
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/var/tmp/",
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: OpenStruct.new(
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: OpenStruct.new(
40
+ ftp: Figtree::Subgroup.new(
41
41
  {
42
42
  :name => "hello there, ftp uploading",
43
43
  :path => "/tmp/",
44
- :enabled => "no"
44
+ :enabled => false
45
45
  }
46
46
  )
47
47
  },
48
48
  {
49
- http: OpenStruct.new(
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
- it 'can parse the whole ini file quickly' do
73
- expect(
74
- Benchmark.realtime do
75
- Figtree.load_config(settings_path)
76
- end
77
- ).to be < 0.02
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
@@ -0,0 +1,4 @@
1
+ common]
2
+ basic_size_limit: 26214400
3
+ student_size_limit is 52428800
4
+ paid_users_size_limit 2147483648
@@ -0,0 +1,2 @@
1
+ [heading]
2
+ enabled = no
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.1
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-07 00:00:00.000000000 Z
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: