configerator 0.0.3 → 0.0.4

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: 1e2d61fe028ce7011ef38f7c66473779896d8909
4
- data.tar.gz: 4c97a839350bb20cf57663cb72eeb9bd1442a91e
3
+ metadata.gz: a77e8c3b7be476c6b9a4607d75c9e97e95343a98
4
+ data.tar.gz: d840fd2c528b01c7a786287b94ae95360b923c28
5
5
  SHA512:
6
- metadata.gz: 7cb6c10835323f561115d47529dd1e040745f3ab802bc350f22a14eafd9f890dd4476f478f8d02c39d7ae6e6430d4f757f28929414ae6eb3d14d2759eb75b817
7
- data.tar.gz: 526875af240df935bdcc219efb2b35e74af4889c70f646b61778f31ad17d34df2831f7ea39d10b9287fdd2985c9f9f05034d5fe73b3898cfbf92440f57a5e982
6
+ metadata.gz: 6708a7555553df1b71255d6bc9b76559d53532e28da786ae7e1646f33416b552c304f2bb537fe3abf1844ed90f32b64843749219099e3f34804e0730a923957d
7
+ data.tar.gz: ef78a142714098468d93acab0e177f581d2ea202ca02f05f2f5c38e11599f85b4b211c43c7703cf421b270842fdb6bde6946af1bed74ecfc7621c67b0ceb4de9
@@ -1,36 +1,36 @@
1
1
  require 'uri'
2
2
 
3
3
  module Configerator
4
- @processed = []
5
-
4
+ # Initializers (DSL)
6
5
  def required(name, method=nil, error_on_load: true)
7
- # Hash#fetch raises a KeyError, Hash#[] doesn't
8
- value = error_on_load ? ENV.fetch(name.to_s.upcase) : ENV[name.to_s.upcase]
9
- value = cast(value, method)
6
+ value = cast(fetch_env(name, error_on_load: error_on_load), method)
10
7
 
11
8
  create(name, value, error_on_load)
12
9
  end
13
10
 
14
11
  def optional(name, method=nil)
15
- value = cast(ENV[name.to_s.upcase], method)
12
+ value = cast(fetch_env(name), method)
13
+ create(name, value)
14
+ end
15
+
16
+ def override(name, default, method=nil)
17
+ value = cast(fetch_env(name) || default, method)
16
18
  create(name, value)
17
19
  end
18
20
 
19
21
  def namespace namespace, prefix: true, &block
20
22
  @processed = []
21
23
  @prefix = "#{namespace}_" if prefix
24
+
22
25
  yield
23
- instance_eval "def #{namespace}?; !!(#{@processed.join(' && ')}) end"
26
+
27
+ instance_eval "def #{namespace}?; !!(#{@processed.join(' && ')}) end", __FILE__, __LINE__
24
28
  ensure
25
29
  @prefix = nil
26
30
  @processed = []
27
31
  end
28
32
 
29
- def override(name, default, method=nil)
30
- value = cast(ENV.fetch(name.to_s.upcase, default), method)
31
- create(name, value)
32
- end
33
-
33
+ # Scope methods
34
34
  def int
35
35
  ->(v) { v.to_i }
36
36
  end
@@ -69,6 +69,7 @@ module Configerator
69
69
  end
70
70
  end
71
71
 
72
+ # Helpers
72
73
  private
73
74
 
74
75
  def cast(value, method)
@@ -76,13 +77,26 @@ module Configerator
76
77
  end
77
78
 
78
79
  def create(name, value, error_on_load=true)
79
- name = "#{@prefix}#{name}"
80
+ name = build_key(name).downcase
80
81
 
81
82
  instance_variable_set(:"@#{name}", value)
82
- instance_eval "def #{name}; @#{name} || (raise \"key not set '#{name}'\" unless #{error_on_load}) end"
83
+
84
+ instance_eval "def #{name}; @#{name} || (raise 'key not set: \"#{name.upcase}\"' unless #{error_on_load}) end", __FILE__, __LINE__
83
85
  instance_eval "def #{name}?; !!#{name} end", __FILE__, __LINE__
84
86
 
85
87
  @processed ||= []
86
88
  @processed << name
87
89
  end
90
+
91
+ def build_key(key)
92
+ key = "#{@prefix}#{key}" if @prefix
93
+
94
+ key.to_s.upcase
95
+ end
96
+
97
+ def fetch_env(key, error_on_load: false)
98
+ key = build_key(key)
99
+
100
+ error_on_load ? ENV.fetch(key) : ENV[key]
101
+ end
88
102
  end
@@ -0,0 +1,11 @@
1
+ module Configerator
2
+ class ConfigGenerator < Rails::Generators::Base
3
+ desc "Creates a Configerator-based file at config/config.rb"
4
+
5
+ source_root File.expand_path("../../templates", __FILE__)
6
+
7
+ def create_config_file
8
+ copy_file "config.rb", "config/config.rb"
9
+ end
10
+ end
11
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configerator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Mervine
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-08-12 00:00:00.000000000 Z
12
+ date: 2017-02-18 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Simple module for implementing environment based configuration adapted
15
15
  from Pliny and following the 12factor pattern.
@@ -22,9 +22,8 @@ extra_rdoc_files: []
22
22
  files:
23
23
  - lib/configerator.rb
24
24
  - lib/configerator/configerator.rb
25
- - lib/generators/config_generator.rb
25
+ - lib/generators/configerator/config_generator.rb
26
26
  - lib/generators/templates/config.rb
27
- - test/configerator_test.rb
28
27
  homepage: https://github.com/heroku/configerator
29
28
  licenses:
30
29
  - MIT
@@ -49,5 +48,4 @@ rubygems_version: 2.5.1
49
48
  signing_key:
50
49
  specification_version: 4
51
50
  summary: 'Configerator: A Config Helper'
52
- test_files:
53
- - test/configerator_test.rb
51
+ test_files: []
@@ -1,9 +0,0 @@
1
- class ConfigGenerator < Rails::Generators::Base
2
- desc "Creates a Configerator-based file at config/config.rb"
3
-
4
- source_root File.expand_path("../templates", __FILE__)
5
-
6
- def create_config_file
7
- copy_file "config.rb", "config/config.rb"
8
- end
9
- end
@@ -1,172 +0,0 @@
1
- require 'uri'
2
- require 'minitest/autorun'
3
- require './lib/configerator'
4
-
5
- module Config
6
- extend Configerator
7
- end
8
-
9
- class TestConfigerator < Minitest::Test
10
- FIXTURES = {
11
- test_required: 'required',
12
- test_optional: 'optional',
13
- test_override: 'override',
14
-
15
- test_int: 99,
16
- test_float: 99.9,
17
- test_string: 'ninty nine',
18
- test_symbol: :ninty_nine,
19
- test_url: 'https://99.com',
20
- test_array_int: [ 9, 9 ],
21
- test_array: [ 'nine', 'nine' ],
22
-
23
- test_ns1: 'ns1',
24
- test_ns2: 'ns2',
25
-
26
- ns1: 'ns1',
27
- ns2: 'ns2'
28
- }.freeze
29
-
30
- def setup
31
- FIXTURES.each { |k, v|
32
- ENV[k.to_s.upcase] = (v.is_a?(Array) ? v.join(',') : v.to_s)
33
- }
34
- end
35
-
36
- def with_method
37
- -> (v) { "method:#{v}" }
38
- end
39
-
40
- def test_required
41
- Config.required :test_required
42
-
43
- assert_equal Config.test_required, 'required'
44
- assert Config.test_required?
45
- end
46
-
47
- def test_required_on_load_false
48
- Config.required :test_required2, error_on_load: false
49
-
50
- assert_raises RuntimeError do
51
- Config.test_required2?
52
- end
53
-
54
- assert_raises RuntimeError do
55
- Config.test_required2
56
- end
57
- end
58
-
59
- def test_required_with_method
60
- Config.required :test_required, with_method
61
-
62
- assert_equal Config.test_required, 'method:required'
63
- assert Config.test_required?
64
- end
65
-
66
- def test_required_missing
67
- assert_raises KeyError do
68
- Config.required :test_missing
69
- end
70
- end
71
-
72
- def test_optional
73
- Config.optional :test_optional
74
-
75
- assert_equal Config.test_optional, 'optional'
76
- end
77
-
78
- def test_optional_with_method
79
- Config.optional :test_optional, with_method
80
-
81
- assert_equal Config.test_optional, 'method:optional'
82
- end
83
-
84
- def test_optional_missing
85
- Config.optional :test_missing_optional
86
-
87
- assert_nil Config.test_missing_optional
88
- end
89
-
90
- def test_namespace
91
- Config.namespace :test do
92
- Config.required :ns1
93
- Config.optional :ns2
94
- Config.override :ns3, "three"
95
- end
96
-
97
- assert Config.test_ns1
98
- assert Config.test_ns2
99
- assert Config.test_ns3
100
- assert Config.test?
101
- end
102
-
103
- def test_namepsace_missing
104
- Config.namespace :test do
105
- Config.required :ns1
106
- Config.optional :ns2
107
- Config.override :ns3, "three"
108
- Config.optional :ns4
109
- end
110
-
111
- assert Config.test_ns1
112
- assert Config.test_ns2
113
- assert Config.test_ns3
114
- refute Config.test_ns4
115
- refute Config.test?
116
- end
117
-
118
- def test_namespace_without_prefix
119
- Config.namespace :test, prefix: false do
120
- Config.optional :ns1
121
- Config.optional :ns2
122
- end
123
-
124
- assert Config.ns1
125
- assert Config.ns2
126
- end
127
-
128
- def test_override
129
- Config.override :test_override, 'override_default'
130
-
131
- assert_equal Config.test_override, 'override'
132
- end
133
-
134
- def test_override_with_method
135
- Config.override :test_override, 'override_default', with_method
136
-
137
- assert_equal Config.test_override, 'method:override'
138
- end
139
-
140
- def test_override_missing
141
- Config.override :test_override_missing, 'override_default'
142
-
143
- assert_equal Config.test_override_missing, 'override_default'
144
- end
145
-
146
- # build basic casting tests
147
- FIXTURES.each do |meth, val|
148
- caster = meth.to_s.gsub(/^test_/, '')
149
-
150
- unless %w[ required optional override url ns1 ns2 ].include? caster
151
- method = \
152
- if caster =~ /_/
153
- parts = caster.split('_')
154
- Config.send(parts.first.to_sym, Config.send(parts.last.to_sym))
155
- else
156
- Config.send(caster.to_sym)
157
- end
158
-
159
- define_method(meth) do
160
- Config.required meth, method
161
-
162
- assert_equal Config.send(meth), val
163
- end
164
- end
165
- end
166
-
167
- def test_url
168
- Config.required :test_url, Config.url
169
-
170
- assert_equal Config.test_url, URI.parse('https://99.com')
171
- end
172
- end