env_parser 0.1.0
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 +7 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.rubocop.yml +78 -0
- data/.ruby-version +1 -0
- data/.travis.yml +5 -0
- data/.yardopts +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +48 -0
- data/LICENSE.txt +21 -0
- data/README.md +90 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/docs/EnvParser.html +315 -0
- data/docs/_index.html +107 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +499 -0
- data/docs/file.README.html +182 -0
- data/docs/file_list.html +56 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +182 -0
- data/docs/js/app.js +248 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +59 -0
- data/docs/top-level-namespace.html +110 -0
- data/env_parser.gemspec +28 -0
- data/lib/env_parser/version.rb +3 -0
- data/lib/env_parser.rb +99 -0
- metadata +132 -0
data/env_parser.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'env_parser/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'env_parser'
|
8
|
+
spec.version = EnvParser::VERSION
|
9
|
+
spec.authors = ['Nestor Custodio']
|
10
|
+
spec.email = ['sakimorix@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'A tool for painless parsing and validation of environment variables.'
|
13
|
+
spec.homepage = 'https://github.com/nestor-custodio/env_parser'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
spec.bindir = 'exe'
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
24
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
26
|
+
|
27
|
+
spec.add_dependency 'activesupport', '>= 5.0.0'
|
28
|
+
end
|
data/lib/env_parser.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'env_parser/version'
|
2
|
+
|
3
|
+
## The EnvParser class simplifies parsing of environment variables as different data types.
|
4
|
+
##
|
5
|
+
class EnvParser
|
6
|
+
class << self
|
7
|
+
## Interprets the given value as the specified type.
|
8
|
+
##
|
9
|
+
## @param value [String, Symbol]
|
10
|
+
## The value to parse/interpret. If a String is given, the value will be used as-is. If a
|
11
|
+
## Symbol is given, the ENV value for the matching string key will be used.
|
12
|
+
##
|
13
|
+
## @param :as [Symbol]
|
14
|
+
## The expected return type. A best-effort attempt is made to convert the source String to the
|
15
|
+
## requested type. Valid "as" types are:
|
16
|
+
##
|
17
|
+
## - `:string`
|
18
|
+
## - `:symbol`
|
19
|
+
## - `:boolean`
|
20
|
+
## - `:int` / `:integer`
|
21
|
+
## - `:float` / `:decimal` / `:number`
|
22
|
+
## - `:json`
|
23
|
+
## - `:array`
|
24
|
+
## - `:hash`
|
25
|
+
##
|
26
|
+
def parse(value, as: nil)
|
27
|
+
value = if value.is_a? Symbol
|
28
|
+
ENV[value.to_s]
|
29
|
+
else
|
30
|
+
value.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
case as.to_sym
|
34
|
+
when :string then parse_string(value)
|
35
|
+
when :symbol then parse_symbol(value)
|
36
|
+
when :boolean then parse_boolean(value)
|
37
|
+
when :int, :integer then parse_integer(value)
|
38
|
+
when :float, :decimal, :number then parse_float(value)
|
39
|
+
when :json then parse_json(value)
|
40
|
+
when :array then parse_array(value)
|
41
|
+
when :hash then parse_hash(value)
|
42
|
+
else raise ArgumentError, "invalid `as` parameter: #{as.inspect}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def parse_string(value)
|
49
|
+
value
|
50
|
+
end
|
51
|
+
|
52
|
+
def parse_symbol(value)
|
53
|
+
value.to_sym
|
54
|
+
end
|
55
|
+
|
56
|
+
def parse_boolean(value)
|
57
|
+
case value
|
58
|
+
when '', '0', 'f', 'false' then false
|
59
|
+
else true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def parse_integer(value)
|
64
|
+
value.to_i
|
65
|
+
end
|
66
|
+
|
67
|
+
def parse_float(value)
|
68
|
+
value.to_f
|
69
|
+
end
|
70
|
+
|
71
|
+
def parse_json(value)
|
72
|
+
require 'json'
|
73
|
+
require 'active_support/all'
|
74
|
+
|
75
|
+
return nil if value.nil? || (value == '')
|
76
|
+
|
77
|
+
decoded_json = JSON.parse(value, quirks_mode: true)
|
78
|
+
{ decoded_json: decoded_json }.with_indifferent_access[:decoded_json]
|
79
|
+
end
|
80
|
+
|
81
|
+
def parse_array(value)
|
82
|
+
return [] if value.nil? || (value == '')
|
83
|
+
|
84
|
+
decoded_json = parse_json(value)
|
85
|
+
raise(ArgumentError, 'non-array value') unless decoded_json.is_a? Array
|
86
|
+
|
87
|
+
decoded_json
|
88
|
+
end
|
89
|
+
|
90
|
+
def parse_hash(value)
|
91
|
+
return {} if value.nil? || (value == '')
|
92
|
+
|
93
|
+
decoded_json = parse_json(value)
|
94
|
+
raise(ArgumentError, 'non-hash value') unless decoded_json.is_a? Hash
|
95
|
+
|
96
|
+
decoded_json
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
metadata
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: env_parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nestor Custodio
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-11-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.16'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.16'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activesupport
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 5.0.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 5.0.0
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- sakimorix@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
|
+
- ".rubocop.yml"
|
79
|
+
- ".ruby-version"
|
80
|
+
- ".travis.yml"
|
81
|
+
- ".yardopts"
|
82
|
+
- CODE_OF_CONDUCT.md
|
83
|
+
- Gemfile
|
84
|
+
- Gemfile.lock
|
85
|
+
- LICENSE.txt
|
86
|
+
- README.md
|
87
|
+
- Rakefile
|
88
|
+
- bin/console
|
89
|
+
- bin/setup
|
90
|
+
- docs/EnvParser.html
|
91
|
+
- docs/_index.html
|
92
|
+
- docs/class_list.html
|
93
|
+
- docs/css/common.css
|
94
|
+
- docs/css/full_list.css
|
95
|
+
- docs/css/style.css
|
96
|
+
- docs/file.README.html
|
97
|
+
- docs/file_list.html
|
98
|
+
- docs/frames.html
|
99
|
+
- docs/index.html
|
100
|
+
- docs/js/app.js
|
101
|
+
- docs/js/full_list.js
|
102
|
+
- docs/js/jquery.js
|
103
|
+
- docs/method_list.html
|
104
|
+
- docs/top-level-namespace.html
|
105
|
+
- env_parser.gemspec
|
106
|
+
- lib/env_parser.rb
|
107
|
+
- lib/env_parser/version.rb
|
108
|
+
homepage: https://github.com/nestor-custodio/env_parser
|
109
|
+
licenses:
|
110
|
+
- MIT
|
111
|
+
metadata: {}
|
112
|
+
post_install_message:
|
113
|
+
rdoc_options: []
|
114
|
+
require_paths:
|
115
|
+
- lib
|
116
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
requirements: []
|
127
|
+
rubyforge_project:
|
128
|
+
rubygems_version: 2.6.13
|
129
|
+
signing_key:
|
130
|
+
specification_version: 4
|
131
|
+
summary: A tool for painless parsing and validation of environment variables.
|
132
|
+
test_files: []
|