anyway_config 2.0.0.pre → 2.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d8ed2249df0baa740893d459922e839793eab4cef51b9410e2c618393ba88a7
4
- data.tar.gz: 587d0578b716af5035e393ab29eabff5aea163d44f705ed9b245eb51d083b4f4
3
+ metadata.gz: 540aa91321939a31eb3982143a12cc17621bdcb23c61d2d24686f999ae28a144
4
+ data.tar.gz: 3215663dd3722892f0635d13163dc02521f515ce31f5c310402893f304387b2d
5
5
  SHA512:
6
- metadata.gz: 5fb7bcf6b692b6fc75f4eb0ca3170787defac2063d646ca8c9ec77d3563e526c58dc16af77e42bf6d293da21d8303d6d82afca723e2b97e528b243702f1c38b5
7
- data.tar.gz: b89c278a7436c024f61894f59c885704c2cf4ae539bb382825181fe13d5f787662c6aafdc39b7d49ba9f4ee1c9535128e3fadb7904016c790907010e165996b9
6
+ metadata.gz: a629cdb9ba784714cff8df41814a6520745b9f1a6fdce272da2a56fd9d6635d46365767c4ce1289c93fdb0f3c5e4d9167b9b617830ff719c555a2a5a6e19f915
7
+ data.tar.gz: '009fd89edf49b814bde0fa2c7d846fa3f086fe606386c067bc447f4f8c990853a580257cb943e07692b57b49674912fd041f29cc9dbbb9eb652aaa3ee3857776'
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  [![Cult Of Martians](http://cultofmartians.com/assets/badges/badge.svg)](http://cultofmartians.com)
2
- [![Gem Version](https://badge.fury.io/rb/anyway_config.svg)](https://rubygems.org/gems/anyway_config) [![Build Status](https://travis-ci.org/palkan/anyway_config.svg?branch=master)](https://travis-ci.org/palkan/anyway_config)
2
+ [![Gem Version](https://badge.fury.io/rb/anyway_config.svg)](https://rubygems.org/gems/anyway_config) [![Build](https://github.com/palkan/anyway_config/workflows/Build/badge.svg)](https://github.com/palkan/anyway_config/actions)
3
+ [![JRuby Build](https://github.com/palkan/anyway_config/workflows/JRuby%20Build/badge.svg)](https://github.com/palkan/anyway_config/actions)
3
4
 
4
5
  # Anyway Config
5
6
 
@@ -24,7 +25,7 @@ Libraries using Anyway Config:
24
25
 
25
26
  ## Installation
26
27
 
27
- 1) Adding to a gem:
28
+ Adding to a gem:
28
29
 
29
30
  ```ruby
30
31
  # my-cool-gem.gemspec
@@ -35,18 +36,18 @@ Gem::Specification.new do |spec|
35
36
  end
36
37
  ```
37
38
 
38
- 2) Adding to your project:
39
+ Or adding to your project:
39
40
 
40
41
  ```ruby
41
42
  # Gemfile
42
43
  gem "anyway_config", "2.0.0.pre"
43
44
  ```
44
45
 
45
- 3) Install globally:
46
+ ## Supported Ruby versions
46
47
 
47
- ```sh
48
- $ gem install anyway_config
49
- ```
48
+ - Ruby (MRI) >= 2.5.0
49
+
50
+ - JRuby >= 9.2.7
50
51
 
51
52
  ## Usage
52
53
 
@@ -87,6 +88,7 @@ MyCoolGem.config.user #=> "root"
87
88
  Anyway Config relies on the notion of _config name_ to populate data.
88
89
 
89
90
  By default, Anyway Config uses the config class name to infer the config name using the following rules:
91
+
90
92
  - if the class name has a form of `<Module>::Config` then use the module name (`SomeModule::Config => "somemodule"`)
91
93
  - if the class name has a form of `<Something>Config` then use the class name prefix (`SomeConfig => "some"`)
92
94
 
@@ -105,7 +107,7 @@ end
105
107
 
106
108
  #### Customize env variable names prefix
107
109
 
108
- By default, Anyway Config uses upcased config name as a prefix for env variable names (e.g.
110
+ By default, Anyway Config uses upper-cased config name as a prefix for env variable names (e.g.
109
111
  `config_name :my_app` will result to parsing `MY_APP_` prefix).
110
112
 
111
113
  You can set env prefix explicitly:
@@ -143,7 +145,7 @@ You can also create configuration objects without pre-defined schema (just like
143
145
  # load data from config/my_app.yml, secrets.my_app (if using Rails), ENV["MY_APP_*"]
144
146
  # MY_APP_VALUE=42
145
147
  config = Anyway::Config.for(:my_app)
146
- config.value #=> 42
148
+ config["value"] #=> 42
147
149
 
148
150
  # you can specify the config file path or env prefix
149
151
  config = Anyway::Config.for(:my_app, config_path: "my_config.yml", env_prefix: "MYAPP")
@@ -185,6 +187,8 @@ my_cool_gem:
185
187
  host: secret.host
186
188
  ```
187
189
 
190
+ **NOTE:** You can backport Rails 6 per-environment credentials to Rails 5.2 app using [this patch](https://gist.github.com/palkan/e27e4885535ff25753aefce45378e0cb).
191
+
188
192
  - `ENV['MYCOOLGEM_*']`.
189
193
 
190
194
  #### `app/configs`
@@ -202,8 +206,8 @@ We have the following config to fetch the Heroku provided [metadata](https://dev
202
206
  # This data is provided by Heroku Dyno Metadadata add-on.
203
207
  class HerokuConfig < Anyway::Config
204
208
  attr_config :app_id, :app_name,
205
- :dyno_id, :release_version,
206
- :slug_commit
209
+ :dyno_id, :release_version,
210
+ :slug_commit
207
211
 
208
212
  def hostname
209
213
  "#{app_name}.herokuapp.com"
@@ -219,7 +223,7 @@ config.action_mailer.default_url_options = {host: HerokuConfig.new.hostname}
219
223
 
220
224
  ### Using with Ruby
221
225
 
222
- When you're using Anyway Config in non-Rails environment, we're looking for a YANL config file
226
+ When you're using Anyway Config in non-Rails environment, we're looking for a YAML config file
223
227
  at `./config/<config-name>.yml`.
224
228
 
225
229
  You can override this setting through special environment variable – 'MYCOOLGEM_CONF' – containing the path to the YAML file.
@@ -238,6 +242,7 @@ Environmental variables work the same way as with Rails.
238
242
  It's useful to have personal, user-specific configuration in development, which extends the project-wide one.
239
243
 
240
244
  We support this by looking at _local_ files when loading the configuration data:
245
+
241
246
  - `<config_name>.local.yml` files (next to\* the _global_ `<config_name>.yml`)
242
247
  - `config/credentials/local.yml.enc` (for Rails >= 6, generate it via `rails credentials:edit --environment local`).
243
248
 
@@ -246,7 +251,7 @@ config at this location, too.
246
251
 
247
252
  Local configs are meant for using in development and only loaded if `Anyway::Settings.use_local_files` is `true` (which is true by default if `RACK_ENV` or `RAILS_ENV` env variable is equal to `"development"`).
248
253
 
249
- **NOTE:** in Rails apps you can use `Rails.applicaiton.configuration.anyway_config.use_local_files`.
254
+ **NOTE:** in Rails apps you can use `Rails.application.configuration.anyway_config.use_local_files`.
250
255
 
251
256
  Don't forget to add `*.local.yml` (and `config/credentials/local.*`) to your `.gitignore`.
252
257
 
@@ -312,12 +317,12 @@ Rails 4.2 introduced new feature: `Rails.application.config_for`. It looks very
312
317
  `Anyway::Config.for`, but there are some differences:
313
318
 
314
319
  | Feature | Rails | Anyway Config |
315
- | ------------- |:-------------:| -----:|
316
- | load data from `config/app.yml` | yes | yes |
317
- | load data from `secrets` | no | yes |
318
- | load data from `credentials` | no | yes |
319
- | load data from environment | no | yes |
320
- | local config files | no | yes |
320
+ | ------------- |-------------:| -----:|
321
+ | load data from `config/app.yml` | yes | yes |
322
+ | load data from `secrets` | no | yes |
323
+ | load data from `credentials` | no | yes |
324
+ | load data from environment | no | yes |
325
+ | local config files | no | yes |
321
326
  | return Hash with indifferent access | no | yes |
322
327
  | support ERB within `config/app.yml` | yes | yes* |
323
328
  | raise errors if file doesn't exist | yes | no |
@@ -328,11 +333,12 @@ But the main advantage of Anyway::Config is that it can be used [without Rails](
328
333
 
329
334
  ## How to set env vars
330
335
 
331
- Environmental variables for your config should start with your config name, uppercased.
336
+ Environmental variables for your config should start with your config name, upper-cased.
332
337
 
333
338
  For example, if your config name is "mycoolgem" then the env var "MYCOOLGEM_PASSWORD" is used as `config.password`.
334
339
 
335
340
  Environment variables are automatically serialized:
341
+
336
342
  - `"True"`, `"t"` and `"yes"` to `true`;
337
343
  - `"False"`, `"f"` and `"no"` to `false`;
338
344
  - `"nil"` and `"null"` to `nil` (do you really need it?);
@@ -394,7 +400,7 @@ You can add it manually by requiring `"anyway/testing/helpers"` and including th
394
400
 
395
401
  ## Contributing
396
402
 
397
- Bug reports and pull requests are welcome on GitHub at https://github.com/palkan/anyway_config.
403
+ Bug reports and pull requests are welcome on GitHub at [https://github.com/palkan/anyway_config](https://github.com/palkan/anyway_config).
398
404
 
399
405
  ## License
400
406
 
@@ -1,32 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Anyway # :nodoc:
4
- require "anyway/version"
5
-
6
- require "anyway/config"
7
- require "anyway/rails/config" if defined?(::Rails::VERSION)
8
- require "anyway/env"
9
-
10
- # Use Settings name to not confuse with Config.
11
- #
12
- # Settings contain the library-wide configuration.
13
- class Settings
14
- class << self
15
- # Define whether to load data from
16
- # *.yml.local (or credentials/local.yml.enc)
17
- attr_accessor :use_local_files
18
- end
19
-
20
- # By default, use local files only in development (that's the purpose if the local files)
21
- self.use_local_files = (ENV["RACK_ENV"] == "development" || ENV["RAILS_ENV"] == "development")
22
- end
23
-
24
- class << self
25
- def env
26
- @env ||= ::Anyway::Env.new
27
- end
28
- end
29
-
30
- require "anyway/railtie" if defined?(::Rails::VERSION)
31
- require "anyway/testing" if ENV["RACK_ENV"] == "test" || ENV["RAILS_ENV"] == "test"
32
- end
3
+ require "anyway_config"
@@ -3,20 +3,15 @@
3
3
  require "anyway/optparse_config"
4
4
  require "anyway/dynamic_config"
5
5
 
6
- require "anyway/ext/jruby" if defined? JRUBY_VERSION
7
6
  require "anyway/ext/deep_dup"
8
7
  require "anyway/ext/deep_freeze"
9
8
  require "anyway/ext/hash"
10
9
  require "anyway/ext/string_serialize"
11
10
 
12
11
  module Anyway # :nodoc:
13
- if defined? JRUBY_VERSION
14
- using Anyway::Ext::JRuby
15
- else
16
- using Anyway::Ext::DeepDup
17
- using Anyway::Ext::DeepFreeze
18
- using Anyway::Ext::Hash
19
- end
12
+ using Anyway::Ext::DeepDup
13
+ using Anyway::Ext::DeepFreeze
14
+ using Anyway::Ext::Hash
20
15
  using Anyway::Ext::StringSerialize
21
16
 
22
17
  # Base config class
@@ -62,7 +62,7 @@ module Anyway
62
62
 
63
63
  creds_config.deep_merge!(::Rails.application.credentials.public_send(name) || {})
64
64
 
65
- creds_config.deep_merge!(load_from_local_credentials(name: name)) if Anyway::Settings.use_local_files
65
+ creds_config.deep_merge!(load_from_local_credentials(name: name) || {}) if Anyway::Settings.use_local_files
66
66
  creds_config
67
67
  end
68
68
 
@@ -76,7 +76,7 @@ module Anyway
76
76
  key_path: ::Rails.root.join("config/credentials/local.key")
77
77
  )
78
78
 
79
- creds.public_send(name) || {}
79
+ creds.public_send(name)
80
80
  end
81
81
 
82
82
  def default_config_path(name)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Anyway # :nodoc:
4
- VERSION = "2.0.0.pre"
4
+ VERSION = "2.0.0.pre2"
5
5
  end
@@ -1,3 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "anyway"
3
+ module Anyway # :nodoc:
4
+ require "anyway/version"
5
+
6
+ require "anyway/config"
7
+ require "anyway/rails/config" if defined?(::Rails::VERSION)
8
+ require "anyway/env"
9
+
10
+ # Use Settings name to not confuse with Config.
11
+ #
12
+ # Settings contain the library-wide configuration.
13
+ class Settings
14
+ class << self
15
+ # Define whether to load data from
16
+ # *.yml.local (or credentials/local.yml.enc)
17
+ attr_accessor :use_local_files
18
+ end
19
+
20
+ # By default, use local files only in development (that's the purpose if the local files)
21
+ self.use_local_files = (ENV["RACK_ENV"] == "development" || ENV["RAILS_ENV"] == "development")
22
+ end
23
+
24
+ class << self
25
+ def env
26
+ @env ||= ::Anyway::Env.new
27
+ end
28
+ end
29
+
30
+ require "anyway/railtie" if defined?(::Rails::VERSION)
31
+ require "anyway/testing" if ENV["RACK_ENV"] == "test" || ENV["RAILS_ENV"] == "test"
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anyway_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre
4
+ version: 2.0.0.pre2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-26 00:00:00.000000000 Z
11
+ date: 2019-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,34 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.8'
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 0.63.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 0.63.0
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop-md
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.2'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.2'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: simplecov
71
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +52,6 @@ dependencies:
80
52
  - - ">="
81
53
  - !ruby/object:Gem::Version
82
54
  version: 0.3.8
83
- - !ruby/object:Gem::Dependency
84
- name: standard
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.0.12
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.0.12
97
55
  description: "\n Configuration DSL for Ruby libraries and applications.\n Allows
98
56
  you to easily follow the twelve-factor application principles (https://12factor.net/config).\n
99
57
  \ "
@@ -112,7 +70,6 @@ files:
112
70
  - lib/anyway/ext/deep_dup.rb
113
71
  - lib/anyway/ext/deep_freeze.rb
114
72
  - lib/anyway/ext/hash.rb
115
- - lib/anyway/ext/jruby.rb
116
73
  - lib/anyway/ext/string_serialize.rb
117
74
  - lib/anyway/loaders/env_loader.rb
118
75
  - lib/anyway/loaders/secrets_loader.rb
@@ -128,7 +85,12 @@ files:
128
85
  homepage: http://github.com/palkan/anyway_config
129
86
  licenses:
130
87
  - MIT
131
- metadata: {}
88
+ metadata:
89
+ bug_tracker_uri: http://github.com/palkan/anyway_config/issues
90
+ changelog_uri: https://github.com/palkan/anyway_config/blob/master/CHANGELOG.md
91
+ documentation_uri: http://github.com/palkan/anyway_config
92
+ homepage_uri: http://github.com/palkan/anyway_config
93
+ source_code_uri: http://github.com/palkan/anyway_config
132
94
  post_install_message:
133
95
  rdoc_options: []
134
96
  require_paths:
@@ -144,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
106
  - !ruby/object:Gem::Version
145
107
  version: 1.3.1
146
108
  requirements: []
147
- rubygems_version: 3.0.2
109
+ rubygems_version: 3.0.4
148
110
  signing_key:
149
111
  specification_version: 4
150
112
  summary: Configuration DSL for Ruby libraries and applications
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Anyway
4
- module Ext
5
- # JRuby 9.2.5.0. has a regression which breaks multiple refinements for the same
6
- # class, so we put them in one God-refinement
7
- # See https://github.com/jruby/jruby/issues/5550
8
- #
9
- # Should be fixed in 9.2.6.0
10
- module JRuby
11
- refine ::Hash do
12
- # Based on ActiveSupport http://api.rubyonrails.org/classes/Hash.html#method-i-deep_dup
13
- def deep_dup
14
- each_with_object(dup) do |(key, value), hash|
15
- hash[key] = if value.is_a?(::Hash) || value.is_a?(::Array)
16
- value.deep_dup
17
- else
18
- value
19
- end
20
- end
21
- end
22
-
23
- def deep_freeze
24
- freeze
25
- each_value do |value|
26
- value.deep_freeze if value.is_a?(::Hash) || value.is_a?(::Array)
27
- end
28
- end
29
-
30
- # From ActiveSupport http://api.rubyonrails.org/classes/Hash.html#method-i-deep_merge
31
- def deep_merge!(other_hash)
32
- other_hash.each_pair do |current_key, other_value|
33
- this_value = self[current_key]
34
-
35
- if this_value.is_a?(::Hash) && other_value.is_a?(::Hash)
36
- this_value.deep_merge!(other_value)
37
- this_value
38
- else
39
- self[current_key] = other_value
40
- end
41
- end
42
-
43
- self
44
- end
45
-
46
- def stringify_keys!
47
- keys.each do |key|
48
- value = delete(key)
49
- value.stringify_keys! if value.is_a?(::Hash)
50
- self[key.to_s] = value
51
- end
52
-
53
- self
54
- end
55
- end
56
-
57
- refine ::Array do
58
- # From ActiveSupport http://api.rubyonrails.org/classes/Array.html#method-i-deep_dup
59
- def deep_dup
60
- map do |value|
61
- if value.is_a?(::Hash) || value.is_a?(::Array)
62
- value.deep_dup
63
- else
64
- value
65
- end
66
- end
67
- end
68
-
69
- def deep_freeze
70
- freeze
71
- each do |value|
72
- value.deep_freeze if value.is_a?(::Hash) || value.is_a?(::Array)
73
- end
74
- end
75
- end
76
-
77
- begin
78
- require "active_support/core_ext/hash/indifferent_access"
79
- rescue LoadError
80
- end
81
-
82
- if defined?(::ActiveSupport::HashWithIndifferentAccess)
83
- refine ::ActiveSupport::HashWithIndifferentAccess do
84
- def deep_freeze
85
- freeze
86
- each_value do |value|
87
- value.deep_freeze if value.is_a?(::Hash) || value.is_a?(::Array)
88
- end
89
- end
90
- end
91
- end
92
-
93
- using self
94
- end
95
- end
96
- end