config_volumizer 0.3.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc9530cd3c91c5a4fe838039cb30de8a14830e4f
4
- data.tar.gz: 55016643bfc942b257bb0697bc033dde16befae7
3
+ metadata.gz: c0c29f0402462a29c95d7e2712a62d557ddfb71d
4
+ data.tar.gz: 52d81de5d4a22e8ed0aa6e7c96eae005f8484730
5
5
  SHA512:
6
- metadata.gz: 4ea31fbd58d7f9067f0de317969777793669c210b50f41b45d08cfa32d6eccb9c2e98368f9964a0441f496ccb66c950b3fb9c2c2dcd131e548ef594421b85ed3
7
- data.tar.gz: ba803bd708d6c13b5bc2426269f40a880a28aef3da8c1dbd7865eb766d1f235990bc12d110b7b1bd3707bf58e039c3e973c729aba17cd63cc14258938a67ab10
6
+ metadata.gz: 92db0ba571ec57b8b35116e8258808f230b5063b9bc0369011f99e15677cdbbfb5441ad98d6853f51cb178572ba7afc45e76125ba17d0af70c6be34e98cd883d
7
+ data.tar.gz: d2942c52b731795b2034d3730a8ddc67338741d4553657580166f89d21c29a254bf6543eec69671cb49e33337d46e15cbc311bcbcf9bf5437be97d17baa5ab3d
data/.gitignore CHANGED
@@ -3,3 +3,4 @@ Gemfile.lock
3
3
  doc/
4
4
  pkg/
5
5
  vendor/cache/*.gem
6
+ coverage
@@ -0,0 +1,19 @@
1
+ # Change Log
2
+
3
+ ## [v0.3.0](https://github.com/payrollhero/config_volumizer/tree/v0.3.0) (2015-04-18)
4
+
5
+ [Full Changelog](https://github.com/payrollhero/config_volumizer/compare/v0.2.0...v0.3.0)
6
+
7
+ **Merged pull requests:**
8
+
9
+ - effectively a rewrite that uses mapping hashes to describe the syntax [\#1](https://github.com/payrollhero/config_volumizer/pull/1) ([piotrb](https://github.com/piotrb))
10
+
11
+ ## [v0.2.0](https://github.com/payrollhero/config_volumizer/tree/v0.2.0) (2015-04-03)
12
+
13
+ [Full Changelog](https://github.com/payrollhero/config_volumizer/compare/v0.1.0...v0.2.0)
14
+
15
+ ## [v0.1.0](https://github.com/payrollhero/config_volumizer/tree/v0.1.0) (2015-04-03)
16
+
17
+
18
+
19
+ \* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
data/README.md CHANGED
@@ -42,14 +42,14 @@ some_with_another = setting
42
42
 
43
43
  ```ruby
44
44
  mapping = { "some" => { "setting" => :value, "with" => { "another" => :value } } }
45
- ConfigVolumizer.parse(ENV, 'some', mapping)
45
+ ConfigVolumizer.parse(ENV, mapping)
46
46
  ```
47
47
 
48
48
  ## Features
49
49
 
50
50
  ### Parsing
51
51
 
52
- You can parse a flattened config via `ConfigVolumizer.parse(ENV, 'some', mapping)`
52
+ You can parse a flattened config via `ConfigVolumizer.parse(ENV, mapping)`
53
53
 
54
54
  For example if your ENV was:
55
55
 
@@ -82,6 +82,51 @@ some:
82
82
  another: setting
83
83
  ```
84
84
 
85
+ ### Fetching values (shorthand for parse)
86
+
87
+ You can fetch a specific key from the given source
88
+
89
+ For example:
90
+
91
+ ```ruby
92
+ env = {
93
+ "some_setting" => "one,two,three",
94
+ "some_with_another" => "setting",
95
+ }
96
+
97
+ mapping = {
98
+ "setting" => [:value],
99
+ "with" => {
100
+ "another" => :value
101
+ }
102
+ }
103
+
104
+ ConfigVolumizer.fetch(env, "some", mapping)
105
+
106
+ # returns:
107
+ {
108
+ "setting" => [
109
+ "one","two","three"
110
+ ],
111
+ "with" => {
112
+ "another" => "setting",
113
+ }
114
+ }
115
+ ```
116
+
117
+ fetch works much like Hash#fetch, so you can pass an additional
118
+ parameter for the default value, as well as use a block default value.
119
+
120
+ eg:
121
+
122
+ ```ruby
123
+ ConfigVolumizer.fetch(env, "another", mapping, "default_value")
124
+ # => "default_value"
125
+
126
+ ConfigVolumizer.fetch(env, "another", mapping) { |key| "default_#{key}" }
127
+ # => "default_another"
128
+ ```
129
+
85
130
  ### Generation
86
131
 
87
132
  You can generate a flat list of configs (mostly as examples for your actual config) via:
data/Rakefile CHANGED
@@ -35,5 +35,5 @@ task :doc => :yard
35
35
 
36
36
  desc "Updates the changelog"
37
37
  task :changelog do
38
- sh "github_changelog_generator payrollhero/dispatch-rider"
38
+ sh "github_changelog_generator payrollhero/config_volumizer"
39
39
  end
@@ -11,12 +11,27 @@ module ConfigVolumizer
11
11
  # @see ConfigVolumizer::Parser.parse
12
12
  #
13
13
  # @param [Hash] source
14
- # @param [String] base_name
14
+ # @param [Hash] mapping
15
15
  # @return [Hash]
16
16
  def parse(source, mapping)
17
17
  Parser.parse(source, mapping)
18
18
  end
19
19
 
20
+ # Fetches the data described by the mapping from the source
21
+ # works similar to #parse, but has a default value mechanism
22
+ # and skips the root key
23
+ #
24
+ # @param [Hash] source
25
+ # @param [String] mapping_key
26
+ # @param [Object] mapping_info
27
+ # @param [Object] default - default value if key not found
28
+ # @param [proc] block - default value proc (is passed key as parameter)
29
+ # @return [Object]
30
+ def fetch(source, mapping_key, mapping_info, default=nil, &block)
31
+ value = Parser.parse(source, mapping_key => mapping_info)
32
+ value.fetch(mapping_key, *[default].compact, &block)
33
+ end
34
+
20
35
  # Generates a flattened config out of a data hash
21
36
  #
22
37
  # @see ConfigVolumizer::Generator.generate
@@ -13,7 +13,6 @@ module ConfigVolumizer
13
13
  # See Readme for an example
14
14
  #
15
15
  # @param [Hash] source
16
- # @param [String] base_name
17
16
  # @param [Hash] mapping
18
17
  # @return [Hash]
19
18
  def parse(source, mapping)
@@ -1,3 +1,3 @@
1
1
  module ConfigVolumizer
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -6,7 +6,7 @@ describe ConfigVolumizer do
6
6
 
7
7
  describe "1 level hash" do
8
8
  let(:input) { { "ex" => "1a" } }
9
- let(:mapping) { { "ex" => :value }}
9
+ let(:mapping) { { "ex" => :value } }
10
10
  let(:expected_result) { { 'ex' => '1a' } }
11
11
 
12
12
  example do
@@ -325,4 +325,103 @@ describe ConfigVolumizer do
325
325
  end
326
326
 
327
327
  end
328
+
329
+ describe "fetch" do
330
+ let(:key_name) { "some_gem_settings" }
331
+ let(:result) { ConfigVolumizer.fetch(env, key_name, mapping) }
332
+
333
+ context "basic example" do
334
+ let(:env) do
335
+ {
336
+ "some_gem_settings_one" => "hello",
337
+ "some_gem_settings_two" => "world",
338
+ "some_gem_settings_three" => "yay",
339
+ }
340
+ end
341
+ let(:mapping) { :hash }
342
+ let(:expected) do
343
+ {
344
+ "one" => "hello",
345
+ "two" => "world",
346
+ "three" => "yay",
347
+ }
348
+ end
349
+
350
+ example { expect(result).to eq(expected) }
351
+ end
352
+
353
+ context "complex example" do
354
+ let(:env) do
355
+ {
356
+ "some_gem_settings_key1_one" => "hello1",
357
+ "some_gem_settings_key1_two" => "hello2",
358
+ "some_gem_settings_key2" => "hello,world",
359
+ "some_gem_settings_key3_0_foo_one" => "1",
360
+ "some_gem_settings_key3_0_foo_two" => "2",
361
+ "some_gem_settings_key3_1_foo_one" => "3",
362
+ "some_gem_settings_key3_1_foo_two" => "4",
363
+ "some_gem_settings_key3_2_foo_one" => "5",
364
+ "some_gem_settings_key3_2_foo_two" => "6",
365
+ }
366
+ end
367
+ let(:mapping) do
368
+ {
369
+ "key1" => :hash,
370
+ "key2" => [:value],
371
+ "key3" => [
372
+ {
373
+ "foo" => :hash,
374
+ }
375
+ ],
376
+ }
377
+ end
378
+ let(:expected) do
379
+ {
380
+ "key1" => { "one" => "hello1", "two" => "hello2" },
381
+ "key2" => ["hello", "world"],
382
+ "key3" => [{ "foo" => { "one" => 1, "two" => 2 } },
383
+ { "foo" => { "one" => 3, "two" => 4 } },
384
+ { "foo" => { "one" => 5, "two" => 6 } }]
385
+ }
386
+ end
387
+
388
+ example { expect(result).to eq(expected) }
389
+ end
390
+
391
+ context "key not found" do
392
+ let(:key_name) { "not_found" }
393
+ let(:env) do
394
+ {
395
+ "some_gem_settings_one" => "hello",
396
+ "some_gem_settings_two" => "world",
397
+ "some_gem_settings_three" => "yay",
398
+ }
399
+ end
400
+ let(:mapping) { :hash }
401
+
402
+ context "not specifying a default" do
403
+ let(:result) { ConfigVolumizer.fetch(env, key_name, mapping) }
404
+
405
+ example do
406
+ expect { result }.to raise_exception(KeyError)
407
+ end
408
+ end
409
+
410
+ context "specifying a default value" do
411
+ let(:result) { ConfigVolumizer.fetch(env, key_name, mapping, "default_value") }
412
+ let(:expected) { "default_value" }
413
+
414
+ example { expect(result).to eq(expected) }
415
+ end
416
+
417
+ context "specifying a default block" do
418
+ let(:result) { ConfigVolumizer.fetch(env, key_name, mapping) { |key| "default_#{key}" } }
419
+ let(:expected) { "default_not_found" }
420
+
421
+ example { expect(result).to eq(expected) }
422
+ end
423
+
424
+ end
425
+ end
426
+
328
427
  end
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.3.0
4
+ version: 0.3.1
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-18 00:00:00.000000000 Z
11
+ date: 2015-12-01 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
@@ -22,7 +22,7 @@ files:
22
22
  - ".rspec"
23
23
  - ".travis.yml"
24
24
  - ".yardopts"
25
- - ChangeLog.md
25
+ - CHANGELOG.md
26
26
  - Gemfile
27
27
  - LICENSE.txt
28
28
  - README.md
@@ -55,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
55
  version: '0'
56
56
  requirements: []
57
57
  rubyforge_project:
58
- rubygems_version: 2.4.5
58
+ rubygems_version: 2.4.5.1
59
59
  signing_key:
60
60
  specification_version: 4
61
61
  summary: Adds volume to an otherwise flat config
@@ -1,5 +0,0 @@
1
- ### 0.2.0 / 2015-04-03
2
-
3
- * Initial release:
4
- - Implements parsing
5
- - Implements generation