qonfig 0.10.0 → 0.11.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 +4 -4
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/.rubocop.yml +1 -1
- data/.travis.yml +3 -3
- data/CHANGELOG.md +10 -0
- data/README.md +146 -1
- data/Rakefile +2 -0
- data/lib/qonfig/command_set.rb +53 -55
- data/lib/qonfig/commands/add_nested_option.rb +36 -40
- data/lib/qonfig/commands/add_option.rb +33 -37
- data/lib/qonfig/commands/base.rb +9 -13
- data/lib/qonfig/commands/compose.rb +29 -33
- data/lib/qonfig/commands/expose_yaml.rb +154 -158
- data/lib/qonfig/commands/load_from_env.rb +77 -79
- data/lib/qonfig/commands/load_from_json.rb +52 -56
- data/lib/qonfig/commands/load_from_self.rb +57 -61
- data/lib/qonfig/commands/load_from_yaml.rb +54 -58
- data/lib/qonfig/commands.rb +15 -0
- data/lib/qonfig/configurable.rb +88 -90
- data/lib/qonfig/data_set/class_builder.rb +17 -21
- data/lib/qonfig/data_set.rb +186 -138
- data/lib/qonfig/dsl.rb +106 -108
- data/lib/qonfig/{error.rb → exceptions.rb} +13 -1
- data/lib/qonfig/loaders/basic.rb +30 -32
- data/lib/qonfig/loaders/json.rb +16 -23
- data/lib/qonfig/loaders/yaml.rb +16 -23
- data/lib/qonfig/loaders.rb +9 -0
- data/lib/qonfig/plugins/abstract.rb +7 -11
- data/lib/qonfig/plugins/access_mixin.rb +21 -25
- data/lib/qonfig/plugins/registry.rb +120 -124
- data/lib/qonfig/plugins.rb +56 -54
- data/lib/qonfig/settings/builder.rb +10 -14
- data/lib/qonfig/settings/key_guard.rb +60 -64
- data/lib/qonfig/settings/lock.rb +53 -57
- data/lib/qonfig/settings.rb +392 -354
- data/lib/qonfig/uploaders/base.rb +18 -0
- data/lib/qonfig/uploaders/file.rb +55 -0
- data/lib/qonfig/uploaders/json.rb +35 -0
- data/lib/qonfig/uploaders/yaml.rb +93 -0
- data/lib/qonfig/uploaders.rb +10 -0
- data/lib/qonfig/version.rb +1 -1
- data/lib/qonfig.rb +4 -21
- data/qonfig.gemspec +1 -1
- metadata +13 -6
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.11.0
|
5
|
+
class Qonfig::Uploaders::Base
|
6
|
+
class << self
|
7
|
+
# @param settings [Qonfig::Settings]
|
8
|
+
# @param options [Hash<Symbol,Any>]
|
9
|
+
# @param value_procssor [Block]
|
10
|
+
# @return [void]
|
11
|
+
#
|
12
|
+
# @api private
|
13
|
+
# @since 0.11.0
|
14
|
+
def upload(settings, options: {}, &value_processor)
|
15
|
+
nil # NOTE: consciously return nil (for clarity)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.11.0
|
5
|
+
class Qonfig::Uploaders::File < Qonfig::Uploaders::Base
|
6
|
+
# @return [String]
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.11.0
|
10
|
+
FILE_OPENING_MODE = 'w'
|
11
|
+
|
12
|
+
# @return [String]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
# @since 0.11.0
|
16
|
+
EMPTY_SETTINGS_REPRESENTATION = ''
|
17
|
+
|
18
|
+
# @return [Hash]
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
# @since 0.11.0
|
22
|
+
DEFAULT_OPTIONS = {}.freeze
|
23
|
+
|
24
|
+
class << self
|
25
|
+
# @param settings [Qonfig::Settings]
|
26
|
+
# @param options [Hash<Symbol|String,Any>]
|
27
|
+
# @param value_processor [Block]
|
28
|
+
# @option path [String]
|
29
|
+
# @return [void]
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
# @since 0.11.0
|
33
|
+
def upload(settings, path:, options: self::DEFAULT_OPTIONS, &value_processor)
|
34
|
+
::File.open(path, FILE_OPENING_MODE) do |file_descriptor|
|
35
|
+
settings_representation = represent_settings(settings, options, &value_processor)
|
36
|
+
file_descriptor.write(settings_representation)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# @param settings [Qonfig::Settings]
|
43
|
+
# @param options [Hash<Symbol|String,Any>]
|
44
|
+
# @param value_processor [Block]
|
45
|
+
# @return [String]
|
46
|
+
#
|
47
|
+
# @api private
|
48
|
+
# @since 0.11.0
|
49
|
+
def represent_settings(settings, options, &value_processor)
|
50
|
+
# :nocov:
|
51
|
+
EMPTY_SETTINGS_REPRESENTATION
|
52
|
+
# :nocov:
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.11.0
|
5
|
+
class Qonfig::Uploaders::JSON < Qonfig::Uploaders::File
|
6
|
+
# @return [Hash<Symbol,Any>]
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.11.0
|
10
|
+
DEFAULT_OPTIONS = {
|
11
|
+
indent: ' ',
|
12
|
+
space: ' ',
|
13
|
+
object_nl: "\n"
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
class << self
|
17
|
+
# @param settings [Qonfig::Settings]
|
18
|
+
# @param options [Hash<Symbol,Any>]
|
19
|
+
# @param value_processor [Block]
|
20
|
+
# @return [String]
|
21
|
+
#
|
22
|
+
# @api private
|
23
|
+
# @since 0.11.0
|
24
|
+
def represent_settings(settings, options, &value_processor)
|
25
|
+
settings_hash =
|
26
|
+
if block_given?
|
27
|
+
settings.__to_hash__(transform_value: value_processor)
|
28
|
+
else
|
29
|
+
settings.__to_hash__
|
30
|
+
end
|
31
|
+
|
32
|
+
::JSON.generate(settings_hash, options)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @api private
|
4
|
+
# @since 0.11.0
|
5
|
+
class Qonfig::Uploaders::YAML < Qonfig::Uploaders::File
|
6
|
+
# @api private
|
7
|
+
# @since 0.11.0
|
8
|
+
class YAMLRepresenter < Psych::Visitors::YAMLTree
|
9
|
+
# Needed for using the '~' symbol used for null value representation in YAML files
|
10
|
+
# (instead of space symbol (' ')) (see psych/lib/psych/visitors/yaml_tree.rb)
|
11
|
+
#
|
12
|
+
# @param object [Any]
|
13
|
+
# @return [Any]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
# @since 0.11.0
|
17
|
+
def visit_NilClass(object) # rubocop:disable Naming/MethodName
|
18
|
+
@emitter.scalar('~', nil, 'tag:yaml.org,2002:null', true, false, Psych::Nodes::Scalar::ANY)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Hash<Symbol,Any>]
|
23
|
+
#
|
24
|
+
# @api private
|
25
|
+
# @since 0.11.0
|
26
|
+
DEFAULT_OPTIONS = {
|
27
|
+
indentation: 2,
|
28
|
+
line_width: -1,
|
29
|
+
canonical: false,
|
30
|
+
header: false,
|
31
|
+
symbolize_keys: false
|
32
|
+
}.freeze
|
33
|
+
|
34
|
+
# @return [Proc]
|
35
|
+
#
|
36
|
+
# @api private
|
37
|
+
# @since 0.11.0
|
38
|
+
KEY_SYMBOLIZER = -> (value) { value.to_sym }.freeze
|
39
|
+
|
40
|
+
class << self
|
41
|
+
# @param settings [Qonfig::Settings]
|
42
|
+
# @param options [Hash<Symbol,Any>]
|
43
|
+
# @param value_processor [Block]
|
44
|
+
# @return [String]
|
45
|
+
#
|
46
|
+
# @api private
|
47
|
+
# @since 0.11.0
|
48
|
+
def represent_settings(settings, options, &value_processor)
|
49
|
+
settings_hash_opts = hash_representation_options(options, &value_processor)
|
50
|
+
settings_hash = settings.__to_hash__(settings_hash_opts)
|
51
|
+
to_yaml_string(settings_hash, options)
|
52
|
+
end
|
53
|
+
|
54
|
+
# @param options [Hash<Symbol|String,Any>]
|
55
|
+
# @param value_processor [Block]
|
56
|
+
# @return [Hash]
|
57
|
+
#
|
58
|
+
# @api private
|
59
|
+
# @since 0.11.0
|
60
|
+
def hash_representation_options(options, &value_processor)
|
61
|
+
{}.tap do |representation_opts|
|
62
|
+
# NOTE: this case/when with the same logic is only used for better code readbility
|
63
|
+
case
|
64
|
+
# NOTE: options has :symbolize_keys key
|
65
|
+
when options.key?(:symbolize_keys) && !!options[:symbolize_keys]
|
66
|
+
representation_opts[:transform_key] = KEY_SYMBOLIZER
|
67
|
+
# NOTE: options does not have :symbolize_keys key
|
68
|
+
when !options.key?(:symbolize_keys) && DEFAULT_OPTIONS[:symbolize_keys]
|
69
|
+
# :nocov:
|
70
|
+
representation_opts[:transform_key] = KEY_SYMBOLIZER
|
71
|
+
# :nocov:
|
72
|
+
end
|
73
|
+
|
74
|
+
# NOTE: provide value transformer
|
75
|
+
if block_given?
|
76
|
+
representation_opts[:transform_value] = value_processor
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# @param settings_hash [Hash<String|Symbol,Any>]
|
82
|
+
# @param yaml_options [Hash<Symbol,Any>]
|
83
|
+
# @return [String]
|
84
|
+
#
|
85
|
+
# @api private
|
86
|
+
# @since 0.11.0
|
87
|
+
def to_yaml_string(settings_hash, yaml_options)
|
88
|
+
representer = YAMLRepresenter.create(yaml_options)
|
89
|
+
representer << settings_hash
|
90
|
+
representer.tree.yaml(nil, yaml_options)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/lib/qonfig/version.rb
CHANGED
data/lib/qonfig.rb
CHANGED
@@ -5,33 +5,16 @@ require 'json'
|
|
5
5
|
require 'erb'
|
6
6
|
|
7
7
|
module Qonfig
|
8
|
-
require_relative 'qonfig/
|
9
|
-
require_relative 'qonfig/loaders
|
10
|
-
require_relative 'qonfig/
|
11
|
-
require_relative 'qonfig/
|
12
|
-
require_relative 'qonfig/commands/base'
|
13
|
-
require_relative 'qonfig/commands/add_option'
|
14
|
-
require_relative 'qonfig/commands/add_nested_option'
|
15
|
-
require_relative 'qonfig/commands/compose'
|
16
|
-
require_relative 'qonfig/commands/load_from_yaml'
|
17
|
-
require_relative 'qonfig/commands/load_from_json'
|
18
|
-
require_relative 'qonfig/commands/load_from_self'
|
19
|
-
require_relative 'qonfig/commands/load_from_env'
|
20
|
-
require_relative 'qonfig/commands/load_from_env/value_converter'
|
21
|
-
require_relative 'qonfig/commands/expose_yaml'
|
8
|
+
require_relative 'qonfig/exceptions'
|
9
|
+
require_relative 'qonfig/loaders'
|
10
|
+
require_relative 'qonfig/uploaders'
|
11
|
+
require_relative 'qonfig/commands'
|
22
12
|
require_relative 'qonfig/command_set'
|
23
13
|
require_relative 'qonfig/settings'
|
24
|
-
require_relative 'qonfig/settings/lock'
|
25
|
-
require_relative 'qonfig/settings/builder'
|
26
|
-
require_relative 'qonfig/settings/key_guard'
|
27
14
|
require_relative 'qonfig/dsl'
|
28
15
|
require_relative 'qonfig/data_set'
|
29
|
-
require_relative 'qonfig/data_set/class_builder'
|
30
16
|
require_relative 'qonfig/configurable'
|
31
|
-
require_relative 'qonfig/plugins/registry'
|
32
17
|
require_relative 'qonfig/plugins'
|
33
|
-
require_relative 'qonfig/plugins/access_mixin'
|
34
|
-
require_relative 'qonfig/plugins/abstract'
|
35
18
|
|
36
19
|
# @api public
|
37
20
|
# @since 0.4.0
|
data/qonfig.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_development_dependency 'coveralls', '~> 0.8'
|
32
32
|
spec.add_development_dependency 'simplecov', '~> 0.16'
|
33
33
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
34
|
-
spec.add_development_dependency 'armitage-rubocop', '~> 0.
|
34
|
+
spec.add_development_dependency 'armitage-rubocop', '~> 0.30'
|
35
35
|
|
36
36
|
spec.add_development_dependency 'bundler'
|
37
37
|
spec.add_development_dependency 'rake'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qonfig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rustam Ibragimov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0.
|
61
|
+
version: '0.30'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0.
|
68
|
+
version: '0.30'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- bin/setup
|
133
133
|
- lib/qonfig.rb
|
134
134
|
- lib/qonfig/command_set.rb
|
135
|
+
- lib/qonfig/commands.rb
|
135
136
|
- lib/qonfig/commands/add_nested_option.rb
|
136
137
|
- lib/qonfig/commands/add_option.rb
|
137
138
|
- lib/qonfig/commands/base.rb
|
@@ -147,7 +148,8 @@ files:
|
|
147
148
|
- lib/qonfig/data_set/class_builder.rb
|
148
149
|
- lib/qonfig/data_set/validator.rb
|
149
150
|
- lib/qonfig/dsl.rb
|
150
|
-
- lib/qonfig/
|
151
|
+
- lib/qonfig/exceptions.rb
|
152
|
+
- lib/qonfig/loaders.rb
|
151
153
|
- lib/qonfig/loaders/basic.rb
|
152
154
|
- lib/qonfig/loaders/json.rb
|
153
155
|
- lib/qonfig/loaders/yaml.rb
|
@@ -159,6 +161,11 @@ files:
|
|
159
161
|
- lib/qonfig/settings/builder.rb
|
160
162
|
- lib/qonfig/settings/key_guard.rb
|
161
163
|
- lib/qonfig/settings/lock.rb
|
164
|
+
- lib/qonfig/uploaders.rb
|
165
|
+
- lib/qonfig/uploaders/base.rb
|
166
|
+
- lib/qonfig/uploaders/file.rb
|
167
|
+
- lib/qonfig/uploaders/json.rb
|
168
|
+
- lib/qonfig/uploaders/yaml.rb
|
162
169
|
- lib/qonfig/version.rb
|
163
170
|
- qonfig.gemspec
|
164
171
|
homepage: https://github.com/0exp/qonfig
|
@@ -180,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
187
|
- !ruby/object:Gem::Version
|
181
188
|
version: '0'
|
182
189
|
requirements: []
|
183
|
-
rubygems_version: 3.0.
|
190
|
+
rubygems_version: 3.0.3
|
184
191
|
signing_key:
|
185
192
|
specification_version: 4
|
186
193
|
summary: Config object
|