config_volumizer 0.2.0 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 10a449433b7b4ca3479a4c362f276f9b74a07836
4
- data.tar.gz: 7330a1c32aed1e002d9d8d748b2af31989815925
3
+ metadata.gz: bc9530cd3c91c5a4fe838039cb30de8a14830e4f
4
+ data.tar.gz: 55016643bfc942b257bb0697bc033dde16befae7
5
5
  SHA512:
6
- metadata.gz: f175ab8adcbc7da7d5da1b8af4c8d91838a4a07c03b9ad14fa2c40a6f8dcc6306b90928ce3fe29c34136c299a1bd6be60ca580f6582d56e8ca040d4903bbf6f1
7
- data.tar.gz: 0d8b1f5b36cfef85ed2cae3a9c36857afa4f4b838271b3a36838306690b067c47936a1376f195f929aceca59ea12657337ac8b95e6043debc9d2faa6adfb706e
6
+ metadata.gz: 4ea31fbd58d7f9067f0de317969777793669c210b50f41b45d08cfa32d6eccb9c2e98368f9964a0441f496ccb66c950b3fb9c2c2dcd131e548ef594421b85ed3
7
+ data.tar.gz: ba803bd708d6c13b5bc2426269f40a880a28aef3da8c1dbd7865eb766d1f235990bc12d110b7b1bd3707bf58e039c3e973c729aba17cd63cc14258938a67ab10
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ repo_token: Ra3YeFoOEOvZbWACZz5hRTUbqRq4Uewi9
data/Gemfile CHANGED
@@ -2,13 +2,17 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- group :development do
5
+ group :development, :test do
6
+ gem 'awesome_print'
6
7
  gem 'kramdown'
7
8
  gem 'bundler'
8
9
  gem 'rake'
9
10
  gem 'rspec'
10
11
  gem 'rubygems-tasks'
12
+ gem 'github_changelog_generator'
11
13
  gem 'yard'
12
14
  gem 'flay'
13
15
  gem 'flog'
16
+
17
+ gem 'coveralls', require: false
14
18
  end
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/payrollhero/config_volumizer.svg)](https://travis-ci.org/payrollhero/config_volumizer)
4
4
  [![Code Climate](https://codeclimate.com/github/payrollhero/config_volumizer/badges/gpa.svg)](https://codeclimate.com/github/payrollhero/config_volumizer)
5
+ [![Coverage Status](https://coveralls.io/repos/payrollhero/config_volumizer/badge.svg?branch=master)](https://coveralls.io/r/payrollhero/config_volumizer?branch=master)
6
+ [![Dependency Status](https://gemnasium.com/payrollhero/config_volumizer.svg)](https://gemnasium.com/payrollhero/config_volumizer)
5
7
 
6
8
  * [Homepage](https://rubygems.org/gems/config_volumizer)
7
9
  * [Documentation](http://rubydoc.info/gems/config_volumizer/frames)
@@ -32,31 +34,40 @@ some:
32
34
  info a series of ENV variables like so:
33
35
 
34
36
  ```
35
- some.setting[0] = one
36
- some.setting[1] = two
37
- some.setting[2] = three
38
- some.with.another = setting
37
+ some_setting = one,two,three
38
+ some_with_another = setting
39
39
  ```
40
40
 
41
41
  ... and then just give it some volume with the volumizer to turn it back to the original rich structure
42
42
 
43
43
  ```ruby
44
- ConfigVolumizer.parse(ENV, 'some')
44
+ mapping = { "some" => { "setting" => :value, "with" => { "another" => :value } } }
45
+ ConfigVolumizer.parse(ENV, 'some', mapping)
45
46
  ```
46
47
 
47
48
  ## Features
48
49
 
49
50
  ### Parsing
50
51
 
51
- You can parse a flattened config via `ConfigVolumizer.parse(ENV, 'some')`
52
+ You can parse a flattened config via `ConfigVolumizer.parse(ENV, 'some', mapping)`
52
53
 
53
54
  For example if your ENV was:
54
55
 
55
56
  ```
56
- some.setting[0] = one
57
- some.setting[1] = two
58
- some.setting[2] = three
59
- some.with.another = setting
57
+ some_setting = one,two,three
58
+ some_with_another = setting
59
+ ```
60
+
61
+ And you created a map like so:
62
+ ```ruby
63
+ mapping = {
64
+ "some" => {
65
+ "setting" => :value,
66
+ "with" => {
67
+ "another" => :value
68
+ }
69
+ }
70
+ }
60
71
  ```
61
72
 
62
73
  This would yield a {Hash} like the following:
@@ -87,13 +98,48 @@ some:
87
98
  another: setting
88
99
  ```
89
100
 
90
- You would get back a hash looking like this:
101
+ You would get back the data and mapping looking like this:
102
+
103
+ ```yaml
104
+ some:
105
+ setting: :value
106
+ with:
107
+ another: :value
108
+ ```
91
109
 
92
110
  ```yaml
93
- "some.setting[0]": one
94
- "some.setting[1]": two
95
- "some.setting[2]": three
96
- "some.with.another": setting
111
+ "some_setting": one,two,three
112
+ "some_with_another": setting
113
+ ```
114
+
115
+ ## Deployment
116
+
117
+ In order to deploy a new version of the gem into the wild ...
118
+
119
+ You will need to configure your github api token for the changelog.
120
+
121
+ Generate a new token for changelogs [here](https://github.com/settings/tokens/new).
122
+
123
+ add:
124
+
125
+ ```bash
126
+ export CHANGELOG_GITHUB_TOKEN=YOUR_CHANGELOG_API_TOKEN
127
+ ```
128
+
129
+ somewhere in your shell init. (ie .zshrc or simillar)
130
+
131
+
132
+ ```bash
133
+ vim lib/config_volumizer/version.rb
134
+ # set the new version
135
+ # commit the changed version file
136
+ # name your commit with the version number eg: "1.8.0"
137
+ rake release
138
+ # to push the gem to rubygems.org
139
+ rake changelog
140
+ # commit the changed changelog
141
+ # name your commit with the version again eg: "changelog for 1.8.0"
142
+ git push
97
143
  ```
98
144
 
99
145
  ## Install
data/Rakefile CHANGED
@@ -32,3 +32,8 @@ task :default => :spec
32
32
  require 'yard'
33
33
  YARD::Rake::YardocTask.new
34
34
  task :doc => :yard
35
+
36
+ desc "Updates the changelog"
37
+ task :changelog do
38
+ sh "github_changelog_generator payrollhero/dispatch-rider"
39
+ end
@@ -1,3 +1,4 @@
1
+ require 'ostruct'
1
2
  module ConfigVolumizer
2
3
 
3
4
  # Converts a {Hash} into a flattened {Hash} as a template for volumizing your configs
@@ -11,21 +12,56 @@ module ConfigVolumizer
11
12
  # @param [Hash] data
12
13
  # @return [Hash]
13
14
  def generate(data)
15
+ OpenStruct.new(
16
+ env_hash: generate_env(data),
17
+ mapping_hash: generate_mapping(data),
18
+ )
19
+ end
20
+
21
+ private
22
+
23
+ def generate_env(data)
24
+ data.inject({}) do |result, (key, value)|
25
+ process_env_item(result, key, value)
26
+ result
27
+ end
28
+ end
29
+
30
+ def generate_mapping(data)
14
31
  data.inject({}) do |result, (key, value)|
15
- process_item(result, key, value)
32
+ result[key] = process_mapping_item(value)
33
+ result
34
+ end
35
+ end
36
+
37
+ def process_mapping_item(value)
38
+ case value
39
+ when Array
40
+ result = []
41
+ value.each_with_index do |item, index|
42
+ result[index] = process_mapping_item(item)
43
+ end
44
+ result.uniq
45
+ when Hash
46
+ result = {}
47
+ value.each do |key, item|
48
+ result[key] = process_mapping_item(item)
49
+ end
16
50
  result
51
+ else
52
+ :value
17
53
  end
18
54
  end
19
55
 
20
- def process_item(result, prefix, value)
56
+ def process_env_item(result, prefix, value)
21
57
  case value
22
58
  when Array
23
59
  value.each_with_index do |item, index|
24
- process_item(result, "#{prefix}[#{index}]", item)
60
+ process_env_item(result, "#{prefix}_#{index}", item)
25
61
  end
26
62
  when Hash
27
63
  value.each do |key, item|
28
- process_item(result, "#{prefix}.#{key}", item)
64
+ process_env_item(result, "#{prefix}_#{key}", item)
29
65
  end
30
66
  else
31
67
  result[prefix] = value
@@ -1,5 +1,6 @@
1
1
  require 'strscan'
2
2
  require 'yaml'
3
+ require 'csv'
3
4
 
4
5
  module ConfigVolumizer
5
6
  module Parser
@@ -13,13 +14,15 @@ module ConfigVolumizer
13
14
  #
14
15
  # @param [Hash] source
15
16
  # @param [String] base_name
17
+ # @param [Hash] mapping
16
18
  # @return [Hash]
17
- def parse(source, base_name)
19
+ def parse(source, mapping)
18
20
  result = {}
19
- source.each do |key, value|
20
- if matches_name(base_name, key)
21
- fragments = key.gsub(/^#{base_name}/, '')
22
- handle_item(result, base_name, fragments, value)
21
+ mapping.each do |mapping_key, mapping_info|
22
+ source.each do |key, value|
23
+ if matches_name(mapping_key, key)
24
+ handle_item(result, key, value, mapping_key, mapping_info)
25
+ end
23
26
  end
24
27
  end
25
28
  result
@@ -28,61 +31,63 @@ module ConfigVolumizer
28
31
  private
29
32
 
30
33
  def matches_name(base_name, key)
31
- key == base_name || key =~ /^#{base_name}([.\[])/
34
+ key == base_name || key =~ /^#{base_name}_/
32
35
  end
33
36
 
34
37
  def format_value(value)
35
38
  YAML.load(value)
36
39
  end
37
40
 
38
- def initialize_array(result, key)
39
- validate_result_key_kind(result, key, Array)
40
- result[key] ||= []
41
+ def format_array_value(value)
42
+ CSV.parse_line(value).map { |inner_value| format_value(inner_value) }
41
43
  end
42
44
 
43
- def initialize_hash(result, key)
44
- validate_result_key_kind(result, key, Hash)
45
- result[key] ||= {}
46
- end
47
-
48
- def validate_result_key_kind(result, key, kind)
49
- if result[key] && !result[key].kind_of?(kind)
50
- raise ArgumentError, "referencing #{kind} key #{name} when its already a #{result[key].class}"
51
- end
52
- end
53
-
54
- def handle_item(result, base_name, name, value)
55
- dst, key = result, base_name
56
- scanner = StringScanner.new(name)
57
-
58
- until scanner.eos?
59
- dst, key = case next_fragment(scanner)
60
- when /^\.(.+)/
61
- handle_hash($~, dst, key)
62
- when /\[(\d+)\]/
63
- handle_array($~, dst, key)
64
- end
45
+ def handle_item(result, name, value, mapping_key, mapping_info)
46
+ case mapping_info
47
+ when Array
48
+ handle_array_item(mapping_info, mapping_key, name, result, value)
49
+ when Hash
50
+ handle_hash_item(mapping_info, mapping_key, name, result, value)
51
+ when :value
52
+ result[mapping_key] = format_value(value)
53
+ when :hash
54
+ new_name = name.gsub(/^#{mapping_key}_/, '')
55
+ result[mapping_key] ||= {}
56
+ result[mapping_key][new_name] = format_value(value)
57
+ else
58
+ raise ArgumentError, "don't know how to deal with #{mapping_info.inspect}"
65
59
  end
66
60
 
67
- dst[key] = format_value(value)
68
61
  end
69
62
 
70
- def handle_array(match, dst, key)
71
- index = match[1].to_i
72
- initialize_array(dst, key)
73
- return dst[key], index
63
+ def handle_hash_item(mapping_info, mapping_key, name, result, value)
64
+ result[mapping_key] ||= {}
65
+ new_name = name.gsub(/^#{mapping_key}_/, '')
66
+ mapping_info.each do |inner_mapping_key, inner_mapping_info|
67
+ if matches_name(inner_mapping_key, new_name)
68
+ handle_item(result[mapping_key], new_name, value, inner_mapping_key, inner_mapping_info)
69
+ end
70
+ end
74
71
  end
75
72
 
76
- def handle_hash(match, dst, key)
77
- hash_key = match[1]
78
- initialize_hash(dst, key)
79
- return dst[key], hash_key
73
+ def handle_array_item(mapping_info, mapping_key, name, result, value)
74
+ result[mapping_key] ||= []
75
+ mapping_info.each do |inner_mapping_info|
76
+ case inner_mapping_info
77
+ when :value
78
+ result[mapping_key] += format_array_value(value)
79
+ when :hash, Hash
80
+ handle_array_hash_item(inner_mapping_info, mapping_key, name, result, value)
81
+ else
82
+ raise "don't know how to handle: #{inner_mapping_info.inspect}"
83
+ end
84
+ end
80
85
  end
81
86
 
82
- def next_fragment(scanner)
83
- fragment = scanner.scan /\.[^.\[]+|\[\d+\]/
84
- raise "failed: rest: #{scanner.rest} inside #{scanner.string}" unless fragment
85
- fragment
87
+ def handle_array_hash_item(inner_mapping_info, mapping_key, name, result, value)
88
+ new_name = name.gsub(/^#{mapping_key}_(\d+)(?:_)?/, '')
89
+ index = $~[1].to_i
90
+ handle_item(result[mapping_key], new_name, value, index, inner_mapping_info)
86
91
  end
87
92
 
88
93
  end
@@ -1,3 +1,3 @@
1
1
  module ConfigVolumizer
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -13,8 +13,8 @@ module ConfigVolumizer
13
13
  # @param [Hash] source
14
14
  # @param [String] base_name
15
15
  # @return [Hash]
16
- def parse(source, base_name)
17
- Parser.parse(source, base_name)
16
+ def parse(source, mapping)
17
+ Parser.parse(source, mapping)
18
18
  end
19
19
 
20
20
  # Generates a flattened config out of a data hash
@@ -2,11 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe ConfigVolumizer do
4
4
  describe '.parse' do
5
- let(:key) { 'ex' }
6
- let(:result) { described_class.parse(input, key) }
5
+ let(:result) { described_class.parse(input, mapping) }
7
6
 
8
7
  describe "1 level hash" do
9
8
  let(:input) { { "ex" => "1a" } }
9
+ let(:mapping) { { "ex" => :value }}
10
10
  let(:expected_result) { { 'ex' => '1a' } }
11
11
 
12
12
  example do
@@ -15,11 +15,18 @@ describe ConfigVolumizer do
15
15
  end
16
16
 
17
17
  describe "2 level hash" do
18
- let(:key) { 'ex1' }
18
+ let(:mapping) {
19
+ {
20
+ "ex1" => {
21
+ "bar" => :value,
22
+ "bar2" => :value,
23
+ }
24
+ }
25
+ }
19
26
  let(:input) do
20
27
  {
21
- "ex1.bar" => "1a",
22
- "ex1.bar2" => "2a",
28
+ "ex1_bar" => "1a",
29
+ "ex1_bar2" => "2a",
23
30
  }
24
31
  end
25
32
  let(:expected_result) do
@@ -37,12 +44,24 @@ describe ConfigVolumizer do
37
44
  end
38
45
 
39
46
  describe "3 level hash" do
40
- let(:key) { 'ex3' }
47
+ let(:mapping) do
48
+ {
49
+ "ex3" => {
50
+ "one" => {
51
+ "two" => :value,
52
+ "three" => :value,
53
+ },
54
+ "two" => {
55
+ "three" => :value,
56
+ }
57
+ }
58
+ }
59
+ end
41
60
  let(:input) do
42
61
  {
43
- "ex3.one.two" => "1a",
44
- "ex3.one.three" => "2a",
45
- "ex3.two.three" => "3a",
62
+ "ex3_one_two" => "1a",
63
+ "ex3_one_three" => "2a",
64
+ "ex3_two_three" => "3a",
46
65
  }
47
66
  end
48
67
  let(:expected_result) do
@@ -65,10 +84,16 @@ describe ConfigVolumizer do
65
84
  end
66
85
 
67
86
  describe "array of values in hash" do
87
+ let(:mapping) do
88
+ {
89
+ "ex" => {
90
+ "one" => [:value]
91
+ }
92
+ }
93
+ end
68
94
  let(:input) do
69
95
  {
70
- "ex.one[0]" => "1a",
71
- "ex.one[1]" => "2a",
96
+ "ex_one" => "1a,2a",
72
97
  }
73
98
  end
74
99
  let(:expected_result) do
@@ -83,10 +108,14 @@ describe ConfigVolumizer do
83
108
  end
84
109
 
85
110
  describe "just array of values" do
111
+ let(:mapping) do
112
+ {
113
+ "ex" => [:value],
114
+ }
115
+ end
86
116
  let(:input) do
87
117
  {
88
- "ex[0]" => "1a",
89
- "ex[1]" => "2a",
118
+ "ex" => "1a,2a",
90
119
  }
91
120
  end
92
121
  let(:expected_result) do
@@ -101,11 +130,19 @@ describe ConfigVolumizer do
101
130
  end
102
131
 
103
132
  describe "array of hashes" do
133
+ let(:mapping) do
134
+ {
135
+ "ex" => [{
136
+ "foo" => :value,
137
+ "bar" => :value,
138
+ }],
139
+ }
140
+ end
104
141
  let(:input) do
105
142
  {
106
- "ex[0].foo" => "1a",
107
- "ex[0].bar" => "2a",
108
- "ex[1].foo" => "3a",
143
+ "ex_0_foo" => "1a",
144
+ "ex_0_bar" => "2a",
145
+ "ex_1_foo" => "3a",
109
146
  }
110
147
  end
111
148
  let(:expected_result) do
@@ -123,12 +160,23 @@ describe ConfigVolumizer do
123
160
  end
124
161
 
125
162
  describe "array of hash in hash" do
126
- let(:key) { 'ex2' }
163
+ let(:mapping) do
164
+ {
165
+ "ex2" => {
166
+ "one" => [
167
+ {
168
+ "foo" => :value,
169
+ "bar" => :value,
170
+ }
171
+ ]
172
+ },
173
+ }
174
+ end
127
175
  let(:input) do
128
176
  {
129
- "ex2.one[0].foo" => "1a",
130
- "ex2.one[0].bar" => "2a",
131
- "ex2.one[1].foo" => "3a",
177
+ "ex2_one_0_foo" => "1a",
178
+ "ex2_one_0_bar" => "2a",
179
+ "ex2_one_1_foo" => "3a",
132
180
  }
133
181
  end
134
182
  let(:expected_result) do
@@ -153,6 +201,11 @@ describe ConfigVolumizer do
153
201
  end
154
202
 
155
203
  describe "empty hash value" do
204
+ let(:mapping) {
205
+ {
206
+ "ex" => {}
207
+ }
208
+ }
156
209
  let(:input) { { "ex" => "{}", } }
157
210
  let(:expected_result) { { 'ex' => {} } }
158
211
 
@@ -162,6 +215,11 @@ describe ConfigVolumizer do
162
215
  end
163
216
 
164
217
  describe "empty array value" do
218
+ let(:mapping) {
219
+ {
220
+ "ex" => []
221
+ }
222
+ }
165
223
  let(:input) { { "ex" => "[]", } }
166
224
  let(:expected_result) { { 'ex' => [] } }
167
225
 
@@ -170,56 +228,101 @@ describe ConfigVolumizer do
170
228
  end
171
229
  end
172
230
 
173
- describe "2d arrays" do
174
- let(:input) do
175
- {
176
- "ex[0][0]" => "1a",
177
- "ex[0][1]" => "2a",
178
- "ex[1][0]" => "3a",
179
- "ex[1][1]" => "4a",
180
- }
181
- end
182
- let(:expected_result) do
183
- {
184
- 'ex' => [
185
- ['1a', '2a'],
186
- ['3a', '4a']
187
- ]
188
- }
189
- end
231
+ describe "hash values" do
232
+ context "at root" do
233
+ let(:mapping) do
234
+ {
235
+ "ex" => :hash
236
+ }
237
+ end
238
+ let(:input) do
239
+ {
240
+ 'ex_one' => "1a",
241
+ 'ex_two' => "2a",
242
+ 'ex_three' => "3a",
243
+ }
244
+ end
245
+ let(:expected_result) do
246
+ {
247
+ 'ex' => {
248
+ "one" => "1a",
249
+ "two" => "2a",
250
+ "three" => "3a",
251
+ }
252
+ }
253
+ end
190
254
 
191
- example do
192
- expect(result).to eq(expected_result)
255
+ example do
256
+ expect(result).to eq(expected_result)
257
+ end
193
258
  end
194
- end
195
259
 
196
- describe "3d arrays" do
197
- let(:input) do
198
- {
199
- 'ex[0][0][1]' => "1a",
200
- 'ex[0][1][0]' => "2a",
201
- 'ex[1][0][1]' => "3a",
202
- 'ex[1][1][0]' => "4a",
203
- }
260
+ context "in a hash" do
261
+ let(:mapping) do
262
+ {
263
+ "ex" => {
264
+ "ex2" => :hash
265
+ }
266
+ }
267
+ end
268
+ let(:input) do
269
+ {
270
+ 'ex_ex2_one' => "1a",
271
+ 'ex_ex2_two' => "2a",
272
+ 'ex_ex2_three' => "3a",
273
+ }
274
+ end
275
+ let(:expected_result) do
276
+ {
277
+ 'ex' => {
278
+ 'ex2' => {
279
+ "one" => "1a",
280
+ "two" => "2a",
281
+ "three" => "3a",
282
+ }
283
+ }
284
+ }
285
+ end
286
+
287
+ example do
288
+ expect(result).to eq(expected_result)
289
+ end
204
290
  end
205
- let(:expected_result) do
206
- {
207
- 'ex' => [
208
- [
209
- [nil, '1a'],
210
- ['2a'],
211
- ],
212
- [
213
- [nil, '3a'],
214
- ['4a'],
291
+
292
+ context "in an array" do
293
+ let(:mapping) do
294
+ {
295
+ "ex" => [:hash]
296
+ }
297
+ end
298
+ let(:input) do
299
+ {
300
+ 'ex_0_one' => "1a",
301
+ 'ex_0_two' => "2a",
302
+ 'ex_0_three' => "3a",
303
+ 'ex_1_two' => "4a",
304
+ }
305
+ end
306
+ let(:expected_result) do
307
+ {
308
+ 'ex' => [
309
+ {
310
+ "one" => "1a",
311
+ "two" => "2a",
312
+ "three" => "3a",
313
+ },
314
+ {
315
+ "two" => "4a",
316
+ }
215
317
  ]
216
- ]
217
- }
218
- end
318
+ }
319
+ end
219
320
 
220
- example do
221
- expect(result).to eq(expected_result)
321
+ example do
322
+ expect(result).to eq(expected_result)
323
+ end
222
324
  end
223
325
  end
326
+
224
327
  end
225
328
  end
@@ -13,13 +13,22 @@ describe ConfigVolumizer do
13
13
  ]
14
14
  }
15
15
  }
16
- expected_data = {
16
+ expected_env_data = {
17
17
  "one" => "two",
18
- "three.four" => "five",
19
- "three.six[0]" => "seven",
20
- "three.six[1]" => "eight",
18
+ "three_four" => "five",
19
+ "three_six_0" => "seven",
20
+ "three_six_1" => "eight",
21
21
  }
22
- expect(described_class.generate(data)).to eq(expected_data)
22
+ expected_mapping_data = {
23
+ "one" => :value,
24
+ "three" => {
25
+ "four" => :value,
26
+ "six" => [:value]
27
+ }
28
+ }
29
+ result = described_class.generate(data)
30
+ expect(result.env_hash).to eq(expected_env_data)
31
+ expect(result.mapping_hash).to eq(expected_mapping_data)
23
32
  end
24
33
  end
25
34
  end
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,7 @@
1
- require 'rspec'
1
+ require 'bundler'
2
+ Bundler.require :test
3
+
2
4
  require 'config_volumizer'
5
+
6
+ require 'coveralls'
7
+ Coveralls.wear!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: config_volumizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Banasik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-03 00:00:00.000000000 Z
11
+ date: 2015-04-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Allows turning dot notation config from ENV to rich Hash/Array structures
14
14
  email: piotr.banasik@gmail.com
@@ -16,6 +16,7 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
+ - ".coveralls.yml"
19
20
  - ".document"
20
21
  - ".gitignore"
21
22
  - ".rspec"