envied 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +39 -27
- data/envied.gemspec +2 -2
- data/lib/envied.rb +31 -14
- data/spec/envied_spec.rb +3 -3
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79a82b4ddfab5f725abe511edb302a7f82e74a31
|
4
|
+
data.tar.gz: b1627d78490f9ee58372b53c8699fecf572b36ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9275f7c89ccd8159d921aae002558fa7eaedff0831944481c80a18d5c320cfc81fad2e7e049a81c78c349e463f8c5d19cf4143b4f1e98247a389ef3f694722b5
|
7
|
+
data.tar.gz: 0e98638933ffa8fdb57278ab0d6b1172ef62e6148eef582cf994727d70f62ab1faeedf931353a1bf38246cc85940979527bcdd79213b058297a9235f294cddc4
|
data/README.md
CHANGED
@@ -1,48 +1,60 @@
|
|
1
|
-
# ENVied
|
1
|
+
# ENVied
|
2
2
|
|
3
|
-
### TL;DR
|
3
|
+
### TL;DR ensure presence and type of your app's ENV-variables.
|
4
4
|
|
5
|
-
|
6
|
-
Then maybe, just like me, you had the itch to check whether all variables your app needs, are present.
|
7
|
-
Or you sometimes wish that ENV-variables should not only contain strings, but integers and booleans.
|
5
|
+
For applications that are configured via ENV-variables, this gem will provide:
|
8
6
|
|
9
|
-
|
7
|
+
* A fail-fast check for presence of required ENV-variables
|
8
|
+
* A fail-fast check for type of required ENV-variables
|
9
|
+
* Access to typed ENV-variables (instead of just strings)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
## Installation
|
14
|
-
|
15
|
-
Add this line to your application's Gemfile:
|
11
|
+
### Current status
|
16
12
|
|
17
|
-
|
13
|
+
![](underconstruction.gif)
|
18
14
|
|
19
|
-
|
15
|
+
## Usage
|
20
16
|
|
21
|
-
|
17
|
+
### 1) Configure
|
22
18
|
|
23
|
-
|
19
|
+
Let's configure the ENV-variables we need:
|
24
20
|
|
25
21
|
```ruby
|
26
|
-
#
|
27
|
-
# somewhere after 'Bundler.require(*Rails.groups)':
|
22
|
+
# e.g. config/application.rb
|
28
23
|
ENVied.configure do |env|
|
29
24
|
env.variable :force_ssl, :Boolean
|
30
25
|
env.variable :port, :Integer
|
31
26
|
end
|
27
|
+
```
|
32
28
|
|
33
|
-
|
34
|
-
|
29
|
+
### 2) Check for presence and type
|
30
|
+
|
31
|
+
```ruby
|
35
32
|
ENVied.require!
|
33
|
+
```
|
34
|
+
Excecution will halt unless ENV is something like
|
35
|
+
`{'FORCE_SSL' => 'true', 'PORT' => '3000'}`.
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
A meaningful error will in this case explain what key and type is needed.
|
38
|
+
|
39
|
+
### 3) Use typed variables
|
40
|
+
|
41
|
+
Variables accessed via ENVied have the configured type:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
ENVied.port => 1
|
45
|
+
ENVied.force_ssl => false
|
44
46
|
```
|
45
47
|
|
48
|
+
## Installation
|
49
|
+
|
50
|
+
Add this line to your application's Gemfile:
|
51
|
+
|
52
|
+
gem 'envied'
|
53
|
+
|
54
|
+
And then execute:
|
55
|
+
|
56
|
+
$ bundle
|
57
|
+
|
46
58
|
## Testing
|
47
59
|
|
48
60
|
```bash
|
@@ -62,7 +74,7 @@ bin/pry --gem
|
|
62
74
|
|
63
75
|
## Contributing
|
64
76
|
|
65
|
-
1. Fork it ( http://github.com
|
77
|
+
1. Fork it ( http://github.com/eval/envied/fork )
|
66
78
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
67
79
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
68
80
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/envied.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = ENVied::VERSION
|
9
9
|
spec.authors = ["Gert Goet"]
|
10
10
|
spec.email = ["gert@thinkcreate.nl"]
|
11
|
-
spec.summary = %q{ENV on
|
12
|
-
spec.description = %q{
|
11
|
+
spec.summary = %q{ENV on EPO}
|
12
|
+
spec.description = %q{ENV on EPO. Or: ensure presence and type of your app's ENV-variables.}
|
13
13
|
spec.homepage = "https://github.com/eval/envied"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
data/lib/envied.rb
CHANGED
@@ -1,10 +1,30 @@
|
|
1
1
|
class ENVied
|
2
|
-
VERSION = "0.0.
|
2
|
+
VERSION = "0.0.3"
|
3
3
|
module Configurable
|
4
4
|
require 'virtus'
|
5
5
|
|
6
|
-
class
|
7
|
-
|
6
|
+
class VariableError < StandardError
|
7
|
+
attr_reader :variable
|
8
|
+
def initialize(variable)
|
9
|
+
@variable = variable
|
10
|
+
end
|
11
|
+
|
12
|
+
def variable_type
|
13
|
+
variable.type.to_s.split("::").last
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class VariableMissingError < VariableError
|
18
|
+
def message
|
19
|
+
"Please provide ENV['#{variable.name.to_s.upcase}'] of type #{variable_type}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class VariableTypeError < VariableError
|
24
|
+
def message
|
25
|
+
"ENV['#{variable.name.to_s.upcase}'] should be of type #{variable_type}"
|
26
|
+
end
|
27
|
+
end
|
8
28
|
|
9
29
|
def self.included(base)
|
10
30
|
base.class_eval do
|
@@ -14,30 +34,27 @@ class ENVied
|
|
14
34
|
end
|
15
35
|
|
16
36
|
module ClassMethods
|
17
|
-
# Creates
|
37
|
+
# Creates a configuration instance from env.
|
18
38
|
#
|
19
|
-
# Will raise
|
20
|
-
# but are missing from env.
|
39
|
+
# Will raise VariableMissingError for variables not present in ENV.
|
21
40
|
#
|
22
|
-
# Will raise
|
23
|
-
# type defined in Configuration.
|
41
|
+
# Will raise VariableTypeError for variables whose ENV-value can't be coerced to the configured type.
|
24
42
|
#
|
25
43
|
# @param env [Hash] the env
|
26
44
|
def parse_env(env)
|
27
45
|
atts = attribute_set.map(&:name).each_with_object({}) do |name, result|
|
28
|
-
@
|
46
|
+
@variable = attribute_set[name]
|
29
47
|
unless result[name] = env[name.to_s] || env[name.to_s.upcase]
|
30
|
-
raise
|
48
|
+
raise VariableMissingError, @variable
|
31
49
|
end
|
32
50
|
end
|
51
|
+
|
33
52
|
new(atts)
|
34
53
|
rescue Virtus::CoercionError => e
|
35
|
-
|
36
|
-
raise EnvWrongType,
|
37
|
-
"ENV['#{@current_att.to_s.upcase}'] should be of type %s" % configured_type
|
54
|
+
raise VariableTypeError, @variable
|
38
55
|
end
|
39
56
|
|
40
|
-
def variable(name, type = String, options = {})
|
57
|
+
def variable(name, type = :String, options = {})
|
41
58
|
attribute name, type, { strict: true }.merge(options)
|
42
59
|
end
|
43
60
|
end
|
data/spec/envied_spec.rb
CHANGED
@@ -47,13 +47,13 @@ describe ENVied do
|
|
47
47
|
it 'raises EnvMissing on calling required!' do
|
48
48
|
expect {
|
49
49
|
ENVied.require!
|
50
|
-
}.to raise_error(ENVied::Configurable::
|
50
|
+
}.to raise_error(ENVied::Configurable::VariableMissingError)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'raises EnvMissing when interacted with and configured variable not present in ENV' do
|
54
54
|
expect {
|
55
55
|
ENVied.any_missing_method
|
56
|
-
}.to raise_error(ENVied::Configurable::
|
56
|
+
}.to raise_error(ENVied::Configurable::VariableMissingError)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -63,7 +63,7 @@ describe ENVied do
|
|
63
63
|
specify do
|
64
64
|
expect {
|
65
65
|
ENVied.a
|
66
|
-
}.to raise_error(ENVied::Configurable::
|
66
|
+
}.to raise_error(ENVied::Configurable::VariableTypeError)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: envied
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gert Goet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 3.0.0.beta2
|
69
|
-
description:
|
69
|
+
description: 'ENV on EPO. Or: ensure presence and type of your app''s ENV-variables.'
|
70
70
|
email:
|
71
71
|
- gert@thinkcreate.nl
|
72
72
|
executables: []
|
@@ -106,7 +106,7 @@ rubyforge_project:
|
|
106
106
|
rubygems_version: 2.2.0
|
107
107
|
signing_key:
|
108
108
|
specification_version: 4
|
109
|
-
summary: ENV on
|
109
|
+
summary: ENV on EPO
|
110
110
|
test_files:
|
111
111
|
- spec/envied_spec.rb
|
112
112
|
- spec/spec_helper.rb
|