configerator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/configerator.rb +68 -0
  3. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4f6252318d5dc6d903f22526000b7e017fa8c88c
4
+ data.tar.gz: 122ecf1a995d4195f8ecf5cc9f8ee33f495fc09d
5
+ SHA512:
6
+ metadata.gz: 3d0558904733988bb80c710ae283bceb996315dc4c75351cb90f26b7ba554ea63ac48521af484fca9b911ba3d6f53fdf9bef686b131e2ee86f04f8b1b38bc566
7
+ data.tar.gz: 03c473376629c211a2dbca0e1243d3850679e44330336920020346be287283cca68dd881e58e27a37af45bbddef887cd71de18861f04062e54628a787c9572da
@@ -0,0 +1,68 @@
1
+ require 'uri'
2
+
3
+ module Configerator
4
+ def required(name, method=nil)
5
+ value = cast(ENV.fetch(name.to_s.upcase), method)
6
+ create(name, value)
7
+ end
8
+
9
+ def optional(name, method=nil)
10
+ value = cast(ENV[name.to_s.upcase], method)
11
+ create(name, value)
12
+ end
13
+
14
+ def override(name, default, method=nil)
15
+ value = cast(ENV.fetch(name.to_s.upcase, default), method)
16
+ create(name, value)
17
+ end
18
+
19
+ def int
20
+ ->(v) { v.to_i }
21
+ end
22
+
23
+ def float
24
+ ->(v) { v.to_f }
25
+ end
26
+
27
+ def bool
28
+ ->(v) { v.to_s=='true'}
29
+ end
30
+
31
+ def string
32
+ nil
33
+ end
34
+
35
+ def symbol
36
+ ->(v) { v.to_sym }
37
+ end
38
+
39
+ def url
40
+ ->(v) { v && URI.parse(v) }
41
+ end
42
+
43
+ # optional :accronyms, array(string)
44
+ # => ['a', 'b']
45
+ # optional :numbers, array(int)
46
+ # => [1, 2]
47
+ # optional :notype, array
48
+ # => ['a', 'b']
49
+ def array(method = nil)
50
+ -> (v) do
51
+ if v
52
+ v.split(',').map{|a| cast(a, method) }
53
+ end
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def cast(value, method)
60
+ method ? method.call(value) : value
61
+ end
62
+
63
+ def create(name, value)
64
+ instance_variable_set(:"@#{name}", value)
65
+ instance_eval "def #{name}; @#{name} end", __FILE__, __LINE__
66
+ instance_eval "def #{name}?; !!@#{name} end", __FILE__, __LINE__
67
+ end
68
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: configerator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Joshua Mervine
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Simple web application extension for configuring applications from the
14
+ environment, following the 12factor pattern.
15
+ email: joshua@mervine.net
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/configerator.rb
21
+ homepage: https://github.com/heroku/configerator
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.5.1
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: 'Configerator: A Config Helper'
45
+ test_files: []