env_vars 1.0.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 55e64c1a12f68fdce3e66fbf0fe6206bf30d5efa934f79a813c83ad49d5642ba
4
- data.tar.gz: 9fbc815998275bcdd4fc6a23f6fb7be0f856fdae42abe7b4795c56d46803c793
3
+ metadata.gz: e32d97f4e650d16b8c82ec8dd85bc19112788797262c00425e83a1d8594678f3
4
+ data.tar.gz: ebec12747a93d37dbeadf026ec1140dbcb1122eca498db9db7f5612221868cc4
5
5
  SHA512:
6
- metadata.gz: c5bc9f04749be125c623730228c0ea332cb0645636a9f0c5415d32f02ba287970713b0cc3f03e582afaace73b7bd8721579b4f6caf2be629f1fe72b76f46f806
7
- data.tar.gz: 2d2631747255512e9794a4fc3f3638622995e28a78d725fd31b4b2b3d1457bd4be2434aa0dde4bb286eca5dc6092dc8172759556184a469e8c902d61b195d007
6
+ metadata.gz: c6822500b56e48d42f508d128e505b288133724996a926dab44ecb6e43b8373ee6ea177faa6b30a21e48a3e2e2f9eb980d950140f1beca0447d6475aa1ce48ea
7
+ data.tar.gz: b4240b420772985e2c3403a7a5abd047b0b8bc8dfc0500340ef3a1e187dea6e181df0bbb4cea52652603c3bc04046b2cde98e85dda48d888067c8305070f1370
@@ -0,0 +1,15 @@
1
+ ---
2
+ inherit_gem:
3
+ rubocop-fnando: .rubocop.yml
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.7
7
+
8
+ Metrics/ClassLength:
9
+ Enabled: false
10
+
11
+ Metrics/MethodLength:
12
+ Enabled: false
13
+
14
+ Metrics/ParameterLists:
15
+ Enabled: false
@@ -4,13 +4,15 @@ sudo: false
4
4
  notifications:
5
5
  email: false
6
6
  rvm:
7
- - 2.5.3
7
+ - 2.7.1
8
8
  before_script:
9
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
10
- - chmod +x ./cc-test-reporter
11
- - "./cc-test-reporter before-build"
9
+ - "curl -L
10
+ https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
11
+ > ./cc-test-reporter"
12
+ - chmod +x ./cc-test-reporter
13
+ - "./cc-test-reporter before-build"
12
14
  after_script:
13
- - "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
15
+ - "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
14
16
  env:
15
17
  global:
16
18
  secure: dXC3R4mvHkeXyhKskgf5/3/LUtBYKpDcTpNGbuOpnoXAaB87fHgjhDtwSazYERE5i0FYeMHWBWKUosQZkCOCydXCuZQ7Q1AnqjnouiCoaj675uvs/KamRAoknQVzxbSk5nxSiqth2fMDu6DTm8ZcbAXkCJj3JwNe0x/zZrx6ZfqEj928NdL2qxTbGLciFyovjhjwIx5ZNKJ+LlvwZ5uGdaGJvN1K7xuATcrRFyyPRzd0oPGFJb7pBwbkK0VxmdTMKcCnXmovoIIZPsXCMW1zvfE30McrCOyHrE/4OQWFI0FG7QJAzM3ekioWQj94JRkno3NPflTWBqn+tSQmjgKkSuooJQgbJ0eWAD0uU2JBebjrXx4/AvWlUiB4mG4u7OGUbq8TbY2EHhqb5JtTuAo3qy/D5xUtZaSISD70sQqfE6ZdjVlBaC9hDSATYXNyiUYGihslEUySmCqH94ZBkm1c5CKDPm1bnBs8eyzI2NqO6EA/yf8/U97fGKI1EmjNQm888MIgbgSeKlWfc6EonWMxlaZ8SG/J4cFx43nlUPPmP/q488wKz8qaCeVpvuX29mN+8LQmQT0zQlVNZIHfI64tIcdE8kvK/vu+9iq7UlPim2VPNf8B9aHX67NUli0FVo2acvCgivIcZ75YJFSCmy8IhNX/XaJD5AdQgVmwP0A/uk0=
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
  gemspec
data/README.md CHANGED
@@ -39,7 +39,8 @@ Config.timeout
39
39
  Config.force_ssl?
40
40
  ```
41
41
 
42
- You can specify the description for both `mandatory` and `optional` methods; this will be used in exceptions.
42
+ You can specify the description for both `mandatory` and `optional` methods;
43
+ this will be used in exceptions.
43
44
 
44
45
  ```ruby
45
46
  Config = Env::Vars.new do
@@ -49,7 +50,8 @@ end
49
50
  #=> Env::Vars::MissingEnvironmentVariable: MISSING_VAR (this is important) is not defined
50
51
  ```
51
52
 
52
- If you're going to use `env_vars` as your main configuration object, you can also set arbitrary properties, like the following:
53
+ If you're going to use `env_vars` as your main configuration object, you can
54
+ also set arbitrary properties, like the following:
53
55
 
54
56
  ```ruby
55
57
  Config = Env::Vars.new do
@@ -63,7 +65,8 @@ Config.redis.get("key")
63
65
  #=> "value"
64
66
  ```
65
67
 
66
- Values are cached by default. If you want to dynamically generate new values, set `cache: false`.
68
+ Values are cached by default. If you want to dynamically generate new values,
69
+ set `cache: false`.
67
70
 
68
71
  ```ruby
69
72
  Config = Env::Vars.new do
@@ -71,7 +74,10 @@ Config = Env::Vars.new do
71
74
  end
72
75
  ```
73
76
 
74
- You may want to start a debug session without raising exceptions for missing variables. In this case, just pass `raise_exception: false` instead to log error messages to `$stderr`. This is especially great with Rails' credentials command (`rails credentials:edit`) when already defined the configuration.
77
+ You may want to start a debug session without raising exceptions for missing
78
+ variables. In this case, just pass `raise_exception: false` instead to log error
79
+ messages to `$stderr`. This is especially great with Rails' credentials command
80
+ (`rails credentials:edit`) when already defined the configuration.
75
81
 
76
82
  ```ruby
77
83
  Config = Env::Vars.new(raise_exception: false) do
@@ -89,13 +95,20 @@ You can coerce values to the following types:
89
95
  - `int`: E.g. `optional :timeout, int`.
90
96
  - `float`: E.g. `optional :wait, float`.
91
97
  - `bigdecimal`: E.g. `optional :fee, bigdecimal`.
92
- - `bool`: E.g. `optional :force_ssl, bool`. Any of `yes`, `true` or `1` is considered as `true`. Any other value will be coerced to `false`.
98
+ - `bool`: E.g. `optional :force_ssl, bool`. Any of `yes`, `true` or `1` is
99
+ considered as `true`. Any other value will be coerced to `false`.
93
100
  - `symbol`: E.g. `optional :app_name, symbol`.
94
- - `array`: E.g. `optional :chars, array` or `optional :numbers, array(int)`. The environment variable must be something like `a,b,c`.
101
+ - `array`: E.g. `optional :chars, array` or `optional :numbers, array(int)`. The
102
+ environment variable must be something like `a,b,c`.
103
+ - `json`: E.g. `mandatory :keyring, json`. The environment variable must be
104
+ parseable by `JSON.parse(content)`.
95
105
 
96
106
  ### Dotenv integration
97
107
 
98
- If you're using [dotenv](https://rubygems.org/gems/dotenv), you can simply require `env_vars/dotenv`. This will load environment variables from `.env.local.%{environment}`, `.env.local`, `.env.%{environment}` and `.env` files, respectively. You _must_ add `dotenv` to your `Gemfile`.
108
+ If you're using [dotenv](https://rubygems.org/gems/dotenv), you can simply
109
+ require `env_vars/dotenv`. This will load environment variables from
110
+ `.env.local.%{environment}`, `.env.local`, `.env.%{environment}` and `.env`
111
+ files, respectively. You _must_ add `dotenv` to your `Gemfile`.
99
112
 
100
113
  ```ruby
101
114
  require "env_vars/dotenv"
@@ -103,7 +116,9 @@ require "env_vars/dotenv"
103
116
 
104
117
  ### Configuring Rails
105
118
 
106
- If you want to use `env_vars` even on your Rails configuration files like `database.yml` and `secrets.yml`, you must load it from `config/boot.rb`, right after setting up Bundler.
119
+ If you want to use `env_vars` even on your Rails configuration files like
120
+ `database.yml` and `secrets.yml`, you must load it from `config/boot.rb`, right
121
+ after setting up Bundler.
107
122
 
108
123
  ```ruby
109
124
  ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
@@ -118,18 +133,29 @@ require File.expand_path("../config", __FILE__)
118
133
 
119
134
  ## Development
120
135
 
121
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
136
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
137
+ `rake test` to run the tests. You can also run `bin/console` for an interactive
138
+ prompt that will allow you to experiment.
122
139
 
123
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
140
+ To install this gem onto your local machine, run `bundle exec rake install`. To
141
+ release a new version, update the version number in `version.rb`, and then run
142
+ `bundle exec rake release`, which will create a git tag for the version, push
143
+ git commits and tags, and push the `.gem` file to
144
+ [rubygems.org](https://rubygems.org).
124
145
 
125
146
  ## Contributing
126
147
 
127
- Bug reports and pull requests are welcome on GitHub at https://github.com/fnando/env_vars. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
148
+ Bug reports and pull requests are welcome on GitHub at
149
+ https://github.com/fnando/env_vars. This project is intended to be a safe,
150
+ welcoming space for collaboration, and contributors are expected to adhere to
151
+ the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
128
152
 
129
153
  ## License
130
154
 
131
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
155
+ The gem is available as open source under the terms of the
156
+ [MIT License](http://opensource.org/licenses/MIT).
132
157
 
133
158
  ## Icon
134
159
 
135
- Icon made by [eucalyp](https://www.flaticon.com/authors/eucalyp) from [Flaticon](https://www.flaticon.com/) is licensed by Creative Commons BY 3.0.
160
+ Icon made by [eucalyp](https://www.flaticon.com/authors/eucalyp) from
161
+ [Flaticon](https://www.flaticon.com/) is licensed by Creative Commons BY 3.0.
data/Rakefile CHANGED
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rake/testtask"
5
+ require "rubocop/rake_task"
3
6
 
4
7
  Rake::TestTask.new(:test) do |t|
5
8
  t.libs << "test"
@@ -7,4 +10,6 @@ Rake::TestTask.new(:test) do |t|
7
10
  t.test_files = FileList["test/**/*_test.rb"]
8
11
  end
9
12
 
10
- task :default => :test
13
+ RuboCop::RakeTask.new
14
+
15
+ task default: %i[test rubocop]
@@ -1,4 +1,6 @@
1
- require File.expand_path("../lib/env_vars", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "./lib/env_vars"
2
4
 
3
5
  Gem::Specification.new do |spec|
4
6
  spec.name = "env_vars"
@@ -6,12 +8,15 @@ Gem::Specification.new do |spec|
6
8
  spec.authors = ["Nando Vieira"]
7
9
  spec.email = ["fnando.vieira@gmail.com"]
8
10
 
9
- spec.summary = "Access environment variables. Also includes presence validation, type coercion and default values."
11
+ spec.summary = "Access environment variables. Also includes presence " \
12
+ "validation, type coercion and default values."
10
13
  spec.description = spec.summary
11
14
  spec.homepage = "https://github.com/fnando/env_vars"
12
15
  spec.license = "MIT"
13
16
 
14
- spec.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.files = `git ls-files -z`
18
+ .split("\x0")
19
+ .reject {|f| f.match(%r{^(test|spec|features)/}) }
15
20
  spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
16
21
  spec.require_paths = ["lib"]
17
22
 
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Env
2
4
  class Vars
3
- VERSION = "1.0.0"
4
- BOOL_TRUE = ["yes", "true", "1", true]
5
- BOOL_FALSE = ["no", "false"]
5
+ VERSION = "1.1.0"
6
+ BOOL_TRUE = ["yes", "true", "1", true].freeze
7
+ BOOL_FALSE = %w[no false].freeze
6
8
 
7
9
  MissingEnvironmentVariable = Class.new(StandardError)
8
10
  MissingCallable = Class.new(StandardError)
@@ -18,9 +20,16 @@ module Env
18
20
  def to_s
19
21
  "#<Env::Vars>"
20
22
  end
21
- alias_method :inspect, :to_s
23
+ alias inspect to_s
22
24
 
23
- def set(name, type, default = nil, required: false, aliases: [], description: nil)
25
+ def set(
26
+ name,
27
+ type,
28
+ default = nil,
29
+ required: false,
30
+ aliases: [],
31
+ description: nil
32
+ )
24
33
  name = name.to_s
25
34
  env_var = name.upcase
26
35
  name = "#{name}?" if type == bool
@@ -29,6 +38,7 @@ module Env
29
38
 
30
39
  define_singleton_method(name) do
31
40
  return default unless @env.key?(env_var)
41
+
32
42
  coerce(type, @env[env_var])
33
43
  end
34
44
 
@@ -53,16 +63,25 @@ module Env
53
63
  end
54
64
 
55
65
  def mandatory(name, type, aliases: [], description: nil)
56
- set(name, type, required: true, aliases: aliases, description: description)
66
+ set(
67
+ name,
68
+ type,
69
+ required: true,
70
+ aliases: aliases,
71
+ description: description
72
+ )
57
73
  end
58
74
 
59
75
  def optional(name, type, default = nil, aliases: [], description: nil)
60
76
  set(name, type, default, aliases: aliases, description: description)
61
77
  end
62
78
 
63
- def property(name, func = nil, cache: true, description: nil, &block)
79
+ def property(name, func = nil, cache: true, description: nil, &block) # rubocop:disable Lint/UnusedMethodArgument
64
80
  callable = (func || block)
65
- raise MissingCallable, "arg[1] must respond to #call or pass a block" unless callable
81
+
82
+ unless callable
83
+ raise MissingCallable, "arg[1] must respond to #call or pass a block"
84
+ end
66
85
 
67
86
  if cache
68
87
  define_singleton_method(name) do
@@ -102,37 +121,43 @@ module Env
102
121
  [:array, type]
103
122
  end
104
123
 
105
- private
124
+ def json
125
+ :json
126
+ end
106
127
 
107
- def coerce_to_string(value)
128
+ private def coerce_to_string(value)
108
129
  value
109
130
  end
110
131
 
111
- def coerce_to_bool(value)
132
+ private def coerce_to_bool(value)
112
133
  BOOL_TRUE.include?(value)
113
134
  end
114
135
 
115
- def coerce_to_int(value)
136
+ private def coerce_to_int(value)
116
137
  Integer(value) if !BOOL_FALSE.include?(value) && value
117
138
  end
118
139
 
119
- def coerce_to_float(value)
140
+ private def coerce_to_float(value)
120
141
  Float(value) if value
121
142
  end
122
143
 
123
- def coerce_to_bigdecimal(value)
144
+ private def coerce_to_bigdecimal(value)
124
145
  BigDecimal(value) if value
125
146
  end
126
147
 
127
- def coerce_to_symbol(value)
128
- value && value.to_sym
148
+ private def coerce_to_symbol(value)
149
+ value&.to_sym
150
+ end
151
+
152
+ private def coerce_to_array(value, type)
153
+ value&.split(/, */)&.map {|v| coerce(type, v) }
129
154
  end
130
155
 
131
- def coerce_to_array(value, type)
132
- value && value.split(/, */).map {|v| coerce(type, v) }
156
+ private def coerce_to_json(value)
157
+ value && JSON.parse(value)
133
158
  end
134
159
 
135
- def coerce(type, value)
160
+ private def coerce(type, value)
136
161
  main_type, sub_type = type
137
162
  args = [value]
138
163
  args << sub_type if sub_type
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "env_vars"
2
4
  require "dotenv"
3
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: env_vars
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-11 00:00:00.000000000 Z
11
+ date: 2020-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -103,6 +103,7 @@ extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
105
  - ".gitignore"
106
+ - ".rubocop.yml"
106
107
  - ".travis.yml"
107
108
  - CODE_OF_CONDUCT.md
108
109
  - Gemfile
@@ -118,7 +119,7 @@ homepage: https://github.com/fnando/env_vars
118
119
  licenses:
119
120
  - MIT
120
121
  metadata: {}
121
- post_install_message:
122
+ post_install_message:
122
123
  rdoc_options: []
123
124
  require_paths:
124
125
  - lib
@@ -133,9 +134,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
134
  - !ruby/object:Gem::Version
134
135
  version: '0'
135
136
  requirements: []
136
- rubyforge_project:
137
- rubygems_version: 2.7.6
138
- signing_key:
137
+ rubygems_version: 3.1.2
138
+ signing_key:
139
139
  specification_version: 4
140
140
  summary: Access environment variables. Also includes presence validation, type coercion
141
141
  and default values.