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.
@@ -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
@@ -0,0 +1,3 @@
1
+ class EnvParser
2
+ VERSION = '0.1.0'.freeze
3
+ 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: []