anyway_config 2.0.0.pre2 → 2.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|