envied 0.0.2 → 0.0.3
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 +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
|
+

|
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
|