tg_config 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/Guardfile +10 -0
- data/Rakefile +6 -0
- data/lib/tg_config/errors.rb +12 -0
- data/lib/tg_config/version.rb +17 -0
- data/lib/tg_config.rb +102 -0
- data/spec/lib/tg_config_spec.rb +231 -0
- data/spec/spec_helper.rb +16 -0
- data/tg_config.gemspec +54 -0
- metadata +151 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module TgConfig
|
3
|
+
TgConfigError = Class.new Exception
|
4
|
+
|
5
|
+
NotReadableError = Class.new TgConfigError
|
6
|
+
NotDefinedError = Class.new TgConfigError
|
7
|
+
NotWritableError = Class.new TgConfigError
|
8
|
+
NotValidError = Class.new TgConfigError
|
9
|
+
IsEmptyError = Class.new TgConfigError
|
10
|
+
ConfigFileNotSetError = Class.new TgConfigError
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module TgConfig
|
3
|
+
MAJOR = 0
|
4
|
+
MINOR = 0
|
5
|
+
TINY = 1
|
6
|
+
PRE = ''
|
7
|
+
|
8
|
+
def self.version
|
9
|
+
# Init the version
|
10
|
+
version = [MAJOR, MINOR, TINY]
|
11
|
+
# Add the pre if available
|
12
|
+
version << PRE unless PRE.nil? || PRE !~ /\S/
|
13
|
+
# Return the version joined by a dot
|
14
|
+
version.join('.')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/tg_config.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "active_support/core_ext/hash/indifferent_access"
|
3
|
+
require "tg_config/errors"
|
4
|
+
require "tg_config/version"
|
5
|
+
|
6
|
+
module TechnoGate
|
7
|
+
module TgConfig
|
8
|
+
extend self
|
9
|
+
|
10
|
+
# Define the config class variable
|
11
|
+
@@config = nil
|
12
|
+
|
13
|
+
# Define the config file
|
14
|
+
@@config_file = nil
|
15
|
+
|
16
|
+
# Return a particular config variable from the parsed config file
|
17
|
+
#
|
18
|
+
# @param [String|Symbol] config
|
19
|
+
# @return mixed
|
20
|
+
# @raise [Void]
|
21
|
+
def [](config)
|
22
|
+
if @@config.nil?
|
23
|
+
check_config_file
|
24
|
+
@@config ||= parse_config_file
|
25
|
+
end
|
26
|
+
|
27
|
+
@@config.send(:[], config)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Update the config file
|
31
|
+
#
|
32
|
+
# @param [String] config
|
33
|
+
# @param [Mixed] Values
|
34
|
+
def []=(config, value)
|
35
|
+
if @@config.nil?
|
36
|
+
check_config_file
|
37
|
+
@@config ||= parse_config_file
|
38
|
+
end
|
39
|
+
|
40
|
+
@@config.send(:[]=, config, value)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Get the config file
|
44
|
+
#
|
45
|
+
# @return [String] Absolute path to the config file
|
46
|
+
def config_file
|
47
|
+
raise ConfigFileNotSetError unless @@config_file
|
48
|
+
|
49
|
+
@@config_file
|
50
|
+
end
|
51
|
+
|
52
|
+
# Set the config file
|
53
|
+
#
|
54
|
+
# @param [String] Absolute path to the config file
|
55
|
+
def config_file=(config_file)
|
56
|
+
@@config_file = config_file
|
57
|
+
end
|
58
|
+
|
59
|
+
# Save the config file
|
60
|
+
def save
|
61
|
+
# Make sure the config file is writable
|
62
|
+
check_config_file(true)
|
63
|
+
# Write the config file
|
64
|
+
write_config_file
|
65
|
+
end
|
66
|
+
|
67
|
+
protected
|
68
|
+
# Initialize the configuration file
|
69
|
+
def initialize_config_file
|
70
|
+
File.open(config_file, 'w') do |f|
|
71
|
+
f.write ""
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Check the config file
|
76
|
+
def check_config_file(writable = false)
|
77
|
+
# Check that config_file is defined
|
78
|
+
raise NotDefinedError unless config_file
|
79
|
+
# Check that the config file exists
|
80
|
+
initialize_config_file unless ::File.exists?(config_file)
|
81
|
+
# Check that the config file is readable?
|
82
|
+
raise NotReadableError unless ::File.readable?(config_file)
|
83
|
+
# Checl that the Config file is writable?
|
84
|
+
raise NotWritableError unless ::File.writable?(config_file) if writable
|
85
|
+
end
|
86
|
+
|
87
|
+
# Parse the config file
|
88
|
+
#
|
89
|
+
# @return [HashWithIndifferentAccess] The config
|
90
|
+
def parse_config_file
|
91
|
+
YAML.load_file(config_file).with_indifferent_access
|
92
|
+
end
|
93
|
+
|
94
|
+
# Write the config file
|
95
|
+
def write_config_file
|
96
|
+
raise IsEmptyError unless @@config
|
97
|
+
File.open config_file, 'w' do |f|
|
98
|
+
f.write(@@config.to_hash.to_yaml)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,231 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe TgConfig do
|
4
|
+
before(:each) do
|
5
|
+
@config = {:submodules => [:pathogen]}
|
6
|
+
@config_path = '/valid/path'
|
7
|
+
@invalid_config_path = '/invalid/path'
|
8
|
+
YAML.stubs(:load_file).with(@config_path).returns(@config)
|
9
|
+
TgConfig.send(:class_variable_set, :@@config_file, @config_path)
|
10
|
+
|
11
|
+
::File.stubs(:exists?).with(@config_path).returns(true)
|
12
|
+
::File.stubs(:readable?).with(@config_path).returns(true)
|
13
|
+
::File.stubs(:writable?).with(@config_path).returns(true)
|
14
|
+
|
15
|
+
::File.stubs(:exists?).with(@invalid_config_path).returns(false)
|
16
|
+
::File.stubs(:readable?).with(@invalid_config_path).returns(false)
|
17
|
+
::File.stubs(:writable?).with(@invalid_config_path).returns(false)
|
18
|
+
|
19
|
+
@file_handler = mock "file handler"
|
20
|
+
@file_handler.stubs(:write)
|
21
|
+
|
22
|
+
::File.stubs(:open).with(@config_path, 'w').yields(@file_handler)
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "@@config" do
|
26
|
+
it "should have a class_variable @@config" do
|
27
|
+
lambda { subject.send(:class_variable_get, :@@config) }.should_not raise_error NameError
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "@@config_file" do
|
32
|
+
it "should have a class_variable @@config_file" do
|
33
|
+
lambda {subject.send(:class_variable_get, :@@config_file) }.should_not raise_error NameError
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#config_file" do
|
38
|
+
it { should respond_to :config_file }
|
39
|
+
|
40
|
+
it "should return @@config_file" do
|
41
|
+
subject.send(:class_variable_set, :@@config_file, @invalid_config_path)
|
42
|
+
|
43
|
+
subject.config_file.should == @invalid_config_path
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should raise ConfigFileNotSetError if @@config_file is not set" do
|
47
|
+
subject.send(:class_variable_set, :@@config_file, nil)
|
48
|
+
|
49
|
+
lambda { subject.config_file }.should raise_error TgConfig::ConfigFileNotSetError
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#config_file=" do
|
54
|
+
it { should respond_to :config_file= }
|
55
|
+
|
56
|
+
it "should set @@config_file" do
|
57
|
+
subject.config_file = @invalid_config_path
|
58
|
+
subject.config_file.should == @invalid_config_path
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "#check_config_file" do
|
63
|
+
before(:each) do
|
64
|
+
TgConfig.stubs(:initialize_config_file)
|
65
|
+
end
|
66
|
+
|
67
|
+
it { should respond_to :check_config_file }
|
68
|
+
|
69
|
+
it "should call File.exists?" do
|
70
|
+
::File.expects(:exists?).with(@config_path).returns(true).once
|
71
|
+
|
72
|
+
subject.send(:check_config_file)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should call File.readable?" do
|
76
|
+
::File.expects(:readable?).with(@config_path).returns(true).once
|
77
|
+
|
78
|
+
subject.send(:check_config_file)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should call File.writable?" do
|
82
|
+
::File.expects(:writable?).with(@config_path).returns(true).once
|
83
|
+
|
84
|
+
subject.send(:check_config_file, true)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should not call File.writable? if no arguments were passed" do
|
88
|
+
::File.expects(:writable?).with(@config_path).returns(true).never
|
89
|
+
|
90
|
+
subject.send(:check_config_file)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should raise TgConfig::NotReadableError if config not readable" do
|
94
|
+
TgConfig.stubs(:config_file).returns(@invalid_config_path)
|
95
|
+
::File.stubs(:readable?).with(@invalid_config_path).returns(false)
|
96
|
+
|
97
|
+
lambda { subject.send(:check_config_file) }.should raise_error TgConfig::NotReadableError
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should raise TgConfig::NotWritableError if config not readable" do
|
101
|
+
TgConfig.stubs(:config_file).returns(@config_path)
|
102
|
+
::File.stubs(:writable?).with(@config_path).returns(false)
|
103
|
+
|
104
|
+
lambda { subject.send(:check_config_file, true) }.should raise_error TgConfig::NotWritableError
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "#initialize_config_file" do
|
110
|
+
it { should respond_to :initialize_config_file }
|
111
|
+
|
112
|
+
it "should be able to create the config file from the template" do
|
113
|
+
config_file = mock
|
114
|
+
config_file.expects(:write).once
|
115
|
+
File.expects(:open).with(TgConfig.config_file, 'w').yields(config_file).once
|
116
|
+
|
117
|
+
subject.send :initialize_config_file
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#parse_config_file" do
|
122
|
+
before(:each) do
|
123
|
+
TgConfig.send(:class_variable_set, :@@config, nil)
|
124
|
+
TgConfig.stubs(:initialize_config_file)
|
125
|
+
end
|
126
|
+
|
127
|
+
it { should respond_to :parse_config_file }
|
128
|
+
|
129
|
+
it "should parse the config file and return an instance of HashWithIndifferentAccess" do
|
130
|
+
subject.send(:parse_config_file).should be_instance_of HashWithIndifferentAccess
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "#[]" do
|
135
|
+
before(:each) do
|
136
|
+
TgConfig.send(:class_variable_set, :@@config, nil)
|
137
|
+
TgConfig.stubs(:initialize_config_file)
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should call check_config_file" do
|
141
|
+
TgConfig.expects(:check_config_file).once
|
142
|
+
|
143
|
+
subject[:submodules]
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should call parse_config_file" do
|
147
|
+
TgConfig.expects(:parse_config_file).returns(@config).once
|
148
|
+
|
149
|
+
subject[:submodules]
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "#[]=" do
|
154
|
+
after(:each) do
|
155
|
+
TgConfig.send(:class_variable_set, :@@config, nil)
|
156
|
+
end
|
157
|
+
|
158
|
+
it { should respond_to :[]= }
|
159
|
+
|
160
|
+
it "should set the new config in @@config" do
|
161
|
+
subject[:submodules] = [:pathogen, :github]
|
162
|
+
subject.send(:class_variable_get, :@@config)[:submodules].should ==
|
163
|
+
[:pathogen, :github]
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe "#write_config_file" do
|
168
|
+
before(:each) do
|
169
|
+
subject.send(:class_variable_set, :@@config, @config)
|
170
|
+
subject.send(:class_variable_get, :@@config).stubs(:to_hash).returns(@config)
|
171
|
+
end
|
172
|
+
|
173
|
+
it { should respond_to :write_config_file }
|
174
|
+
|
175
|
+
it "should call to_hash on @@config" do
|
176
|
+
subject.send(:class_variable_get, :@@config).expects(:to_hash).returns(@config).once
|
177
|
+
|
178
|
+
subject.send :write_config_file
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should call to_yaml on @@config.to_hash" do
|
182
|
+
@config.expects(:to_yaml).returns(@config.to_yaml).twice # => XXX: Why twice ?
|
183
|
+
subject.send(:class_variable_get, :@@config).stubs(:to_hash).returns(@config)
|
184
|
+
|
185
|
+
subject.send :write_config_file
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should call File.open with config_file" do
|
189
|
+
::File.expects(:open).with(@config_path, 'w').yields(@file_handler).once
|
190
|
+
|
191
|
+
subject.send :write_config_file
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should write the yaml contents to the config file" do
|
195
|
+
@file_handler.expects(:write).with(@config.to_yaml).once
|
196
|
+
::File.stubs(:open).with(@config_path, 'w').yields(@file_handler)
|
197
|
+
|
198
|
+
subject.send :write_config_file
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should raise TgConfig::IsEmptyError" do
|
202
|
+
subject.send(:class_variable_set, :@@config, nil)
|
203
|
+
|
204
|
+
lambda { subject.send :write_config_file }.should raise_error TgConfig::IsEmptyError
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
describe "#save" do
|
209
|
+
before(:each) do
|
210
|
+
subject.send(:class_variable_set, :@@config, @config)
|
211
|
+
subject.send(:class_variable_get, :@@config).stubs(:to_hash).returns(@config)
|
212
|
+
end
|
213
|
+
|
214
|
+
it { should respond_to :save }
|
215
|
+
|
216
|
+
it "should call check_config_file to make sure it is writable" do
|
217
|
+
TgConfig.expects(:check_config_file).with(true).once
|
218
|
+
|
219
|
+
subject.save
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should call write_config_file" do
|
223
|
+
TgConfig.expects(:write_config_file).once
|
224
|
+
|
225
|
+
subject.save
|
226
|
+
end
|
227
|
+
|
228
|
+
it "should clear the cache" do
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$:.push File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'rspec'
|
3
|
+
require 'tg_config'
|
4
|
+
|
5
|
+
include TechnoGate
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
# == Mock Framework
|
9
|
+
#
|
10
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
11
|
+
#
|
12
|
+
config.mock_with :mocha
|
13
|
+
# config.mock_with :flexmock
|
14
|
+
# config.mock_with :rr
|
15
|
+
# config.mock_with :rspec
|
16
|
+
end
|
data/tg_config.gemspec
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "tg_config/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "tg_config"
|
7
|
+
s.version = TechnoGate::TgConfig.version
|
8
|
+
s.authors = ["Wael Nasreddine"]
|
9
|
+
s.email = ["wael.nasreddine@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{A simple YAML configuration reader and writer}
|
12
|
+
s.description = s.summary
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.8.7")
|
20
|
+
|
21
|
+
####
|
22
|
+
# Run-time dependencies
|
23
|
+
####
|
24
|
+
|
25
|
+
# Active Support
|
26
|
+
s.add_dependency 'activesupport', '~>3.1.1'
|
27
|
+
|
28
|
+
####
|
29
|
+
# Development dependencies
|
30
|
+
####
|
31
|
+
|
32
|
+
# Guard
|
33
|
+
s.add_development_dependency 'guard', '~>0.8.4'
|
34
|
+
s.add_development_dependency 'guard-bundler', '~>0.1.3'
|
35
|
+
s.add_development_dependency 'guard-rspec', '~>0.4.5'
|
36
|
+
|
37
|
+
# Documentation
|
38
|
+
s.add_development_dependency 'yard', '~>0.7.2'
|
39
|
+
|
40
|
+
####
|
41
|
+
# Development / Test dependencies
|
42
|
+
####
|
43
|
+
|
44
|
+
# RSpec / Capybara
|
45
|
+
s.add_development_dependency 'rspec', '~>2.6.0'
|
46
|
+
|
47
|
+
# Mocha
|
48
|
+
s.add_development_dependency 'mocha', '~>0.10.0'
|
49
|
+
|
50
|
+
####
|
51
|
+
# Debugging
|
52
|
+
####
|
53
|
+
s.add_development_dependency 'pry', '~>0.9.6.2'
|
54
|
+
end
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tg_config
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Wael Nasreddine
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: &14181700 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.1.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *14181700
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: guard
|
27
|
+
requirement: &14177540 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.8.4
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *14177540
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: guard-bundler
|
38
|
+
requirement: &14175700 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.1.3
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *14175700
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: guard-rspec
|
49
|
+
requirement: &14185340 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.4.5
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *14185340
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: yard
|
60
|
+
requirement: &14204580 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.7.2
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *14204580
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: &14200620 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.6.0
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *14200620
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: mocha
|
82
|
+
requirement: &14233720 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.10.0
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *14233720
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: pry
|
93
|
+
requirement: &14231720 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.9.6.2
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *14231720
|
102
|
+
description: A simple YAML configuration reader and writer
|
103
|
+
email:
|
104
|
+
- wael.nasreddine@gmail.com
|
105
|
+
executables: []
|
106
|
+
extensions: []
|
107
|
+
extra_rdoc_files: []
|
108
|
+
files:
|
109
|
+
- .gitignore
|
110
|
+
- .rspec
|
111
|
+
- .travis.yml
|
112
|
+
- Gemfile
|
113
|
+
- Guardfile
|
114
|
+
- Rakefile
|
115
|
+
- lib/tg_config.rb
|
116
|
+
- lib/tg_config/errors.rb
|
117
|
+
- lib/tg_config/version.rb
|
118
|
+
- spec/lib/tg_config_spec.rb
|
119
|
+
- spec/spec_helper.rb
|
120
|
+
- tg_config.gemspec
|
121
|
+
homepage: ''
|
122
|
+
licenses: []
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 1.8.7
|
133
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
+
none: false
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
segments:
|
140
|
+
- 0
|
141
|
+
hash: -2304515669427187554
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 1.8.11
|
145
|
+
signing_key:
|
146
|
+
specification_version: 3
|
147
|
+
summary: A simple YAML configuration reader and writer
|
148
|
+
test_files:
|
149
|
+
- spec/lib/tg_config_spec.rb
|
150
|
+
- spec/spec_helper.rb
|
151
|
+
has_rdoc:
|