anyway_config 2.0.0.pre2 → 2.0.0.rc1
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/CHANGELOG.md +350 -0
- data/LICENSE.txt +1 -1
- data/README.md +444 -119
- data/lib/.rbnext/2.7/anyway/auto_cast.rb +33 -0
- data/lib/.rbnext/2.7/anyway/config.rb +404 -0
- data/lib/.rbnext/2.7/anyway/option_parser_builder.rb +31 -0
- data/lib/.rbnext/2.7/anyway/tracing.rb +187 -0
- data/lib/anyway/auto_cast.rb +33 -0
- data/lib/anyway/config.rb +235 -58
- data/lib/anyway/dynamic_config.rb +1 -1
- data/lib/anyway/env.rb +29 -19
- data/lib/anyway/ext/hash.rb +14 -6
- data/lib/anyway/loaders.rb +79 -0
- data/lib/anyway/loaders/base.rb +23 -0
- data/lib/anyway/loaders/env.rb +16 -0
- data/lib/anyway/loaders/yaml.rb +46 -0
- data/lib/anyway/option_parser_builder.rb +6 -3
- data/lib/anyway/optparse_config.rb +10 -6
- data/lib/anyway/rails.rb +16 -0
- data/lib/anyway/rails/config.rb +2 -69
- data/lib/anyway/rails/loaders.rb +5 -0
- data/lib/anyway/rails/loaders/credentials.rb +64 -0
- data/lib/anyway/rails/loaders/secrets.rb +39 -0
- data/lib/anyway/rails/loaders/yaml.rb +19 -0
- data/lib/anyway/rails/settings.rb +58 -0
- data/lib/anyway/railtie.rb +14 -2
- data/lib/anyway/settings.rb +29 -0
- data/lib/anyway/tracing.rb +187 -0
- data/lib/anyway/version.rb +1 -1
- data/lib/anyway_config.rb +27 -21
- data/lib/generators/anyway/app_config/USAGE +9 -0
- data/lib/generators/anyway/app_config/app_config_generator.rb +17 -0
- data/lib/generators/anyway/config/USAGE +13 -0
- data/lib/generators/anyway/config/config_generator.rb +46 -0
- data/lib/generators/anyway/config/templates/config.rb.tt +9 -0
- data/lib/generators/anyway/config/templates/config.yml.tt +13 -0
- data/lib/generators/anyway/install/USAGE +4 -0
- data/lib/generators/anyway/install/install_generator.rb +43 -0
- data/lib/generators/anyway/install/templates/application_config.rb.tt +17 -0
- metadata +75 -10
- data/lib/anyway/ext/string_serialize.rb +0 -38
- data/lib/anyway/loaders/env_loader.rb +0 -0
- data/lib/anyway/loaders/secrets_loader.rb +0 -0
- data/lib/anyway/loaders/yaml_loader.rb +0 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "generators/anyway/config/config_generator"
|
4
|
+
|
5
|
+
module Anyway
|
6
|
+
module Generators
|
7
|
+
class AppConfigGenerator < ConfigGenerator
|
8
|
+
source_root ConfigGenerator.source_root
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def config_root
|
13
|
+
"app/configs"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a config class with the given name and list of parameters.
|
3
|
+
|
4
|
+
Use `--yml` / `--no-yml` option to specify whether you want to create a YAML config as well
|
5
|
+
(if no option is specified, the generator would ask you to choose during the run).
|
6
|
+
|
7
|
+
Use `--app` option to create config class in `app/configs` folder.
|
8
|
+
|
9
|
+
Example:
|
10
|
+
rails generate config my_service param1 param2 ...
|
11
|
+
|
12
|
+
This will create:
|
13
|
+
config/configs/my_service_config.rb
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
|
5
|
+
module Anyway
|
6
|
+
module Generators
|
7
|
+
class ConfigGenerator < ::Rails::Generators::NamedBase
|
8
|
+
source_root File.expand_path("templates", __dir__)
|
9
|
+
|
10
|
+
class_option :yml, type: :boolean
|
11
|
+
class_option :app, type: :boolean, default: false
|
12
|
+
argument :parameters, type: :array, default: [], banner: "param1 param2"
|
13
|
+
|
14
|
+
# check_class_collision suffix: "Config"
|
15
|
+
|
16
|
+
def run_install_if_needed
|
17
|
+
return if ::Rails.root.join(static_config_root, "application_config.rb").exist?
|
18
|
+
generate "anyway:install"
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_config
|
22
|
+
template "config.rb", File.join(config_root, class_path, "#{file_name}_config.rb")
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_yml
|
26
|
+
create_yml = options.fetch(:yml) { yes?("Would you like to generate a #{file_name}.yml file?") }
|
27
|
+
return unless create_yml
|
28
|
+
template "config.yml", File.join("config", "#{file_name}.yml")
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def static_config_root
|
34
|
+
Anyway::Settings.autoload_static_config_path || Anyway::DEFAULT_CONFIGS_PATH
|
35
|
+
end
|
36
|
+
|
37
|
+
def config_root
|
38
|
+
if options[:app]
|
39
|
+
"app/configs"
|
40
|
+
else
|
41
|
+
static_config_root
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
|
5
|
+
module Anyway
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < ::Rails::Generators::Base
|
8
|
+
source_root File.expand_path("templates", __dir__)
|
9
|
+
|
10
|
+
class_option :configs_path, type: :string
|
11
|
+
|
12
|
+
def copy_application_config
|
13
|
+
template "application_config.rb", File.join(static_config_root, "application_config.rb")
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_local_files_to_gitignore
|
17
|
+
if File.exist?(File.join(destination_root, ".gitignore"))
|
18
|
+
append_to_file ".gitignore", "\n/config/*.local.yml\n/config/credentials/local.*\n"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_setup_autoload_to_config
|
23
|
+
inject_into_file "config/application.rb", after: %r{< Rails::Application\n} do
|
24
|
+
<<-RUBY
|
25
|
+
# Configure the path for configuration classes that should be used before initialization
|
26
|
+
# NOTE: path should be relative to the project root (Rails.root)
|
27
|
+
#{default_configs_path? ? "# " : ""}config.anyway_config.autoload_static_config_path = "#{static_config_root}"
|
28
|
+
RUBY
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def static_config_root
|
35
|
+
options[:configs_path] || Anyway::Settings.autoload_static_config_path || Anyway::DEFAULT_CONFIGS_PATH
|
36
|
+
end
|
37
|
+
|
38
|
+
def default_configs_path?
|
39
|
+
static_config_root == (Anyway::Settings.autoload_static_config_path || Anyway::DEFAULT_CONFIGS_PATH)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Base class for application config classes
|
4
|
+
class ApplicationConfig < Anyway::Config
|
5
|
+
class << self
|
6
|
+
# Make it possible to access a singleton config instance
|
7
|
+
# via class methods (i.e., without explictly calling `instance`)
|
8
|
+
delegate_missing_to :instance
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
# Returns a singleton config instance
|
13
|
+
def instance
|
14
|
+
@instance ||= new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anyway_config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ruby-next-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.5.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.5.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ammeter
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.3
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.3
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +52,20 @@ dependencies:
|
|
24
52
|
- - ">="
|
25
53
|
- !ruby/object:Gem::Version
|
26
54
|
version: '1.15'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '13.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '13.0'
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: rspec
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,19 +81,19 @@ dependencies:
|
|
39
81
|
- !ruby/object:Gem::Version
|
40
82
|
version: '3.8'
|
41
83
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
84
|
+
name: ruby-next
|
43
85
|
requirement: !ruby/object:Gem::Requirement
|
44
86
|
requirements:
|
45
87
|
- - ">="
|
46
88
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
89
|
+
version: '0.5'
|
48
90
|
type: :development
|
49
91
|
prerelease: false
|
50
92
|
version_requirements: !ruby/object:Gem::Requirement
|
51
93
|
requirements:
|
52
94
|
- - ">="
|
53
95
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
96
|
+
version: '0.5'
|
55
97
|
description: "\n Configuration DSL for Ruby libraries and applications.\n Allows
|
56
98
|
you to easily follow the twelve-factor application principles (https://12factor.net/config).\n
|
57
99
|
\ "
|
@@ -61,27 +103,50 @@ executables: []
|
|
61
103
|
extensions: []
|
62
104
|
extra_rdoc_files: []
|
63
105
|
files:
|
106
|
+
- CHANGELOG.md
|
64
107
|
- LICENSE.txt
|
65
108
|
- README.md
|
109
|
+
- lib/.rbnext/2.7/anyway/auto_cast.rb
|
110
|
+
- lib/.rbnext/2.7/anyway/config.rb
|
111
|
+
- lib/.rbnext/2.7/anyway/option_parser_builder.rb
|
112
|
+
- lib/.rbnext/2.7/anyway/tracing.rb
|
66
113
|
- lib/anyway.rb
|
114
|
+
- lib/anyway/auto_cast.rb
|
67
115
|
- lib/anyway/config.rb
|
68
116
|
- lib/anyway/dynamic_config.rb
|
69
117
|
- lib/anyway/env.rb
|
70
118
|
- lib/anyway/ext/deep_dup.rb
|
71
119
|
- lib/anyway/ext/deep_freeze.rb
|
72
120
|
- lib/anyway/ext/hash.rb
|
73
|
-
- lib/anyway/
|
74
|
-
- lib/anyway/loaders/
|
75
|
-
- lib/anyway/loaders/
|
76
|
-
- lib/anyway/loaders/
|
121
|
+
- lib/anyway/loaders.rb
|
122
|
+
- lib/anyway/loaders/base.rb
|
123
|
+
- lib/anyway/loaders/env.rb
|
124
|
+
- lib/anyway/loaders/yaml.rb
|
77
125
|
- lib/anyway/option_parser_builder.rb
|
78
126
|
- lib/anyway/optparse_config.rb
|
127
|
+
- lib/anyway/rails.rb
|
79
128
|
- lib/anyway/rails/config.rb
|
129
|
+
- lib/anyway/rails/loaders.rb
|
130
|
+
- lib/anyway/rails/loaders/credentials.rb
|
131
|
+
- lib/anyway/rails/loaders/secrets.rb
|
132
|
+
- lib/anyway/rails/loaders/yaml.rb
|
133
|
+
- lib/anyway/rails/settings.rb
|
80
134
|
- lib/anyway/railtie.rb
|
135
|
+
- lib/anyway/settings.rb
|
81
136
|
- lib/anyway/testing.rb
|
82
137
|
- lib/anyway/testing/helpers.rb
|
138
|
+
- lib/anyway/tracing.rb
|
83
139
|
- lib/anyway/version.rb
|
84
140
|
- lib/anyway_config.rb
|
141
|
+
- lib/generators/anyway/app_config/USAGE
|
142
|
+
- lib/generators/anyway/app_config/app_config_generator.rb
|
143
|
+
- lib/generators/anyway/config/USAGE
|
144
|
+
- lib/generators/anyway/config/config_generator.rb
|
145
|
+
- lib/generators/anyway/config/templates/config.rb.tt
|
146
|
+
- lib/generators/anyway/config/templates/config.yml.tt
|
147
|
+
- lib/generators/anyway/install/USAGE
|
148
|
+
- lib/generators/anyway/install/install_generator.rb
|
149
|
+
- lib/generators/anyway/install/templates/application_config.rb.tt
|
85
150
|
homepage: http://github.com/palkan/anyway_config
|
86
151
|
licenses:
|
87
152
|
- MIT
|
@@ -106,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
171
|
- !ruby/object:Gem::Version
|
107
172
|
version: 1.3.1
|
108
173
|
requirements: []
|
109
|
-
rubygems_version: 3.0.
|
174
|
+
rubygems_version: 3.0.6
|
110
175
|
signing_key:
|
111
176
|
specification_version: 4
|
112
177
|
summary: Configuration DSL for Ruby libraries and applications
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Anyway
|
4
|
-
module Ext
|
5
|
-
# Extend String through refinements
|
6
|
-
module StringSerialize
|
7
|
-
# Regexp to detect array values
|
8
|
-
# Array value is a values that contains at least one comma
|
9
|
-
# and doesn't start/end with quote
|
10
|
-
ARRAY_RXP = /\A[^'"].*\s*,\s*.*[^'"]\z/
|
11
|
-
|
12
|
-
refine ::String do
|
13
|
-
def serialize
|
14
|
-
case self
|
15
|
-
when ARRAY_RXP
|
16
|
-
split(/\s*,\s*/).map { |word| word.serialize }
|
17
|
-
when /\A(true|t|yes|y)\z/i
|
18
|
-
true
|
19
|
-
when /\A(false|f|no|n)\z/i
|
20
|
-
false
|
21
|
-
when /\A(nil|null)\z/i
|
22
|
-
nil
|
23
|
-
when /\A\d+\z/
|
24
|
-
to_i
|
25
|
-
when /\A\d*\.\d+\z/
|
26
|
-
to_f
|
27
|
-
when /\A['"].*['"]\z/
|
28
|
-
gsub(/(\A['"]|['"]\z)/, "")
|
29
|
-
else
|
30
|
-
self
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
using self
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
File without changes
|
File without changes
|
File without changes
|