qonfig 0.0.0 → 0.12.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -2
  3. data/.jrubyrc +1 -0
  4. data/.rspec +1 -1
  5. data/.rubocop.yml +15 -0
  6. data/.travis.yml +43 -4
  7. data/CHANGELOG.md +121 -0
  8. data/Gemfile +4 -2
  9. data/LICENSE.txt +1 -1
  10. data/README.md +1060 -19
  11. data/Rakefile +18 -4
  12. data/bin/console +5 -11
  13. data/bin/rspec +55 -0
  14. data/bin/setup +1 -0
  15. data/gemfiles/with_external_deps.gemfile +8 -0
  16. data/gemfiles/without_external_deps.gemfile +5 -0
  17. data/lib/qonfig.rb +22 -2
  18. data/lib/qonfig/command_set.rb +67 -0
  19. data/lib/qonfig/commands.rb +15 -0
  20. data/lib/qonfig/commands/add_nested_option.rb +45 -0
  21. data/lib/qonfig/commands/add_option.rb +41 -0
  22. data/lib/qonfig/commands/base.rb +12 -0
  23. data/lib/qonfig/commands/compose.rb +37 -0
  24. data/lib/qonfig/commands/expose_yaml.rb +159 -0
  25. data/lib/qonfig/commands/load_from_env.rb +95 -0
  26. data/lib/qonfig/commands/load_from_env/value_converter.rb +84 -0
  27. data/lib/qonfig/commands/load_from_json.rb +56 -0
  28. data/lib/qonfig/commands/load_from_self.rb +73 -0
  29. data/lib/qonfig/commands/load_from_yaml.rb +58 -0
  30. data/lib/qonfig/configurable.rb +116 -0
  31. data/lib/qonfig/data_set.rb +213 -0
  32. data/lib/qonfig/data_set/class_builder.rb +27 -0
  33. data/lib/qonfig/data_set/validator.rb +7 -0
  34. data/lib/qonfig/dsl.rb +122 -0
  35. data/lib/qonfig/errors.rb +111 -0
  36. data/lib/qonfig/loaders.rb +9 -0
  37. data/lib/qonfig/loaders/basic.rb +38 -0
  38. data/lib/qonfig/loaders/json.rb +24 -0
  39. data/lib/qonfig/loaders/yaml.rb +24 -0
  40. data/lib/qonfig/plugins.rb +65 -0
  41. data/lib/qonfig/plugins/abstract.rb +13 -0
  42. data/lib/qonfig/plugins/access_mixin.rb +38 -0
  43. data/lib/qonfig/plugins/registry.rb +125 -0
  44. data/lib/qonfig/plugins/toml.rb +26 -0
  45. data/lib/qonfig/plugins/toml/commands/expose_toml.rb +146 -0
  46. data/lib/qonfig/plugins/toml/commands/load_from_toml.rb +49 -0
  47. data/lib/qonfig/plugins/toml/data_set.rb +19 -0
  48. data/lib/qonfig/plugins/toml/dsl.rb +27 -0
  49. data/lib/qonfig/plugins/toml/loaders/toml.rb +24 -0
  50. data/lib/qonfig/plugins/toml/tomlrb_fixes.rb +92 -0
  51. data/lib/qonfig/plugins/toml/uploaders/toml.rb +25 -0
  52. data/lib/qonfig/settings.rb +457 -0
  53. data/lib/qonfig/settings/builder.rb +18 -0
  54. data/lib/qonfig/settings/key_guard.rb +71 -0
  55. data/lib/qonfig/settings/lock.rb +60 -0
  56. data/lib/qonfig/uploaders.rb +10 -0
  57. data/lib/qonfig/uploaders/base.rb +18 -0
  58. data/lib/qonfig/uploaders/file.rb +55 -0
  59. data/lib/qonfig/uploaders/json.rb +35 -0
  60. data/lib/qonfig/uploaders/yaml.rb +93 -0
  61. data/lib/qonfig/version.rb +7 -1
  62. data/qonfig.gemspec +29 -17
  63. metadata +122 -16
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.2.0
5
+ module Qonfig::Settings::Builder
6
+ class << self
7
+ # @param commands [Qonfig::CommandSet]
8
+ # @return [Qonfig::Settings]
9
+ #
10
+ # @api private
11
+ # @since 0.2.0
12
+ def build(commands)
13
+ Qonfig::Settings.new.tap do |settings|
14
+ commands.each { |command| command.call(settings) }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.2.0
5
+ class Qonfig::Settings::KeyGuard
6
+ class << self
7
+ # @param key [String, Symbol, Object]
8
+ # @return [void]
9
+ #
10
+ # @raise [Qonfig::ArgumentError]
11
+ # @raise [Qonfig::CoreMethodIntersectionError]
12
+ #
13
+ # @api private
14
+ # @since 0.2.0
15
+ def prevent_incomparabilities!(key)
16
+ new(key).prevent_incomparabilities!
17
+ end
18
+ end
19
+
20
+ # @return [String, Symbol, Object]
21
+ #
22
+ # @api private
23
+ # @sicne 0.2.0
24
+ attr_reader :key
25
+
26
+ # @param key [String, Symbol, Object]
27
+ #
28
+ # @api private
29
+ # @since 0.2.0
30
+ def initialize(key)
31
+ @key = key
32
+ end
33
+
34
+ # @return [void]
35
+ #
36
+ # @raise [Qonfig::ArgumentError]
37
+ # @raise [Qonfig::CoreMethodIntersectionError]
38
+ #
39
+ # @api private
40
+ # @since 0.2.0
41
+ def prevent_incomparabilities!
42
+ prevent_incompatible_key_type!
43
+ prevent_core_method_intersection!
44
+ end
45
+
46
+ # @return [void]
47
+ #
48
+ # @raise [Qonfig::ArgumentError]
49
+ #
50
+ # @api private
51
+ # @since 0.2.0
52
+ def prevent_incompatible_key_type!
53
+ raise(
54
+ Qonfig::ArgumentError,
55
+ 'Setting key should be a symbol or a string!'
56
+ ) unless key.is_a?(Symbol) || key.is_a?(String)
57
+ end
58
+
59
+ # @return [void]
60
+ #
61
+ # @raise [Qonfig::CoreMethodIntersectionError]
62
+ #
63
+ # @api private
64
+ # @since 0.2.0
65
+ def prevent_core_method_intersection!
66
+ raise(
67
+ Qonfig::CoreMethodIntersectionError,
68
+ "<#{key}> key can not be used since this is a private core method"
69
+ ) if Qonfig::Settings::CORE_METHODS.include?(key.to_s)
70
+ end
71
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.2.0
5
+ class Qonfig::Settings::Lock
6
+ # @api private
7
+ # @since 0.2.0
8
+ def initialize
9
+ @definition_lock = Mutex.new
10
+ @access_lock = Mutex.new
11
+ @merge_lock = Mutex.new
12
+ end
13
+
14
+ # @param instructions [Proc]
15
+ # @return [Object]
16
+ #
17
+ # @api private
18
+ # @since 0.2.0
19
+ def thread_safe_definition(&instructions)
20
+ definition_lock.synchronize(&instructions)
21
+ end
22
+
23
+ # @param instructions [Proc]
24
+ # @return [Object]
25
+ #
26
+ # @api private
27
+ # @since 0.2.0
28
+ def thread_safe_access(&instructions)
29
+ access_lock.synchronize(&instructions)
30
+ end
31
+
32
+ # @param instructions [Proc]
33
+ # @return [Object]
34
+ #
35
+ # @api private
36
+ # @since 0.2.0
37
+ def thread_safe_merge(&instructions)
38
+ merge_lock.synchronize(&instructions)
39
+ end
40
+
41
+ private
42
+
43
+ # @return [Mutex]
44
+ #
45
+ # @api private
46
+ # @since 0.2.0
47
+ attr_reader :definition_lock
48
+
49
+ # @return [Mutex]
50
+ #
51
+ # @api private
52
+ # @since 0.2.0
53
+ attr_reader :access_lock
54
+
55
+ # @return [Mutex]
56
+ #
57
+ # @api private
58
+ # @since 0.2.0
59
+ attr_reader :merge_lock
60
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.11.0
5
+ module Qonfig::Uploaders
6
+ require_relative 'uploaders/base'
7
+ require_relative 'uploaders/file'
8
+ require_relative 'uploaders/json'
9
+ require_relative 'uploaders/yaml'
10
+ end
@@ -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
@@ -1,3 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Qonfig
2
- VERSION = "0.0.0"
4
+ # @return [String]
5
+ #
6
+ # @api public
7
+ # @since 0.1.0
8
+ VERSION = '0.12.0'
3
9
  end
@@ -1,27 +1,39 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
1
3
 
2
- lib = File.expand_path("../lib", __FILE__)
4
+ lib = File.expand_path('lib', __dir__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "qonfig/version"
6
+ require 'qonfig/version'
5
7
 
6
8
  Gem::Specification.new do |spec|
7
- spec.name = "qonfig"
8
- spec.version = Qonfig::VERSION
9
- spec.authors = ["Rustam Ibragimov"]
10
- spec.email = ["iamdaiver@icloud.com"]
9
+ spec.required_ruby_version = '>= 2.3.8'
11
10
 
12
- spec.summary = "Soon"
13
- spec.description = "Soon"
14
- spec.homepage = "https://github.com/0exp/qonfig"
15
- spec.license = "MIT"
11
+ spec.name = 'qonfig'
12
+ spec.version = Qonfig::VERSION
13
+ spec.authors = ['Rustam Ibragimov']
14
+ spec.email = ['iamdaiver@icloud.com']
15
+ spec.summary = 'Config object'
16
+ spec.description = 'Config. Defined as a class. Used as an instance. ' \
17
+ 'Support for inheritance and composition. ' \
18
+ 'Lazy instantiation. Thread-safe. Command-style DSL. ' \
19
+ 'Extremely simple to define. Extremely simple to use. That\'s all.'
20
+ spec.homepage = 'https://github.com/0exp/qonfig'
21
+ spec.license = 'MIT'
16
22
 
17
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
23
+ spec.bindir = 'bin'
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
28
  f.match(%r{^(test|spec|features)/})
19
29
  end
20
- spec.bindir = "exe"
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ["lib"]
23
30
 
24
- spec.add_development_dependency "bundler", "~> 1.16"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "rspec", "~> 3.0"
31
+ spec.add_development_dependency 'coveralls', '~> 0.8'
32
+ spec.add_development_dependency 'simplecov', '~> 0.16'
33
+ spec.add_development_dependency 'rspec', '~> 3.8'
34
+ spec.add_development_dependency 'armitage-rubocop', '~> 0.73'
35
+
36
+ spec.add_development_dependency 'bundler'
37
+ spec.add_development_dependency 'rake'
38
+ spec.add_development_dependency 'pry'
27
39
  end
metadata CHANGED
@@ -1,58 +1,116 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qonfig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-26 00:00:00.000000000 Z
11
+ date: 2019-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: coveralls
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '0.8'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '0.8'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: simplecov
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0.16'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0.16'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '3.8'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: armitage-rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.73'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '3.0'
55
- description: Soon
68
+ version: '0.73'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Config. Defined as a class. Used as an instance. Support for inheritance
112
+ and composition. Lazy instantiation. Thread-safe. Command-style DSL. Extremely simple
113
+ to define. Extremely simple to use. That's all.
56
114
  email:
57
115
  - iamdaiver@icloud.com
58
116
  executables: []
@@ -60,16 +118,65 @@ extensions: []
60
118
  extra_rdoc_files: []
61
119
  files:
62
120
  - ".gitignore"
121
+ - ".jrubyrc"
63
122
  - ".rspec"
123
+ - ".rubocop.yml"
64
124
  - ".travis.yml"
125
+ - CHANGELOG.md
65
126
  - CODE_OF_CONDUCT.md
66
127
  - Gemfile
67
128
  - LICENSE.txt
68
129
  - README.md
69
130
  - Rakefile
70
131
  - bin/console
132
+ - bin/rspec
71
133
  - bin/setup
134
+ - gemfiles/with_external_deps.gemfile
135
+ - gemfiles/without_external_deps.gemfile
72
136
  - lib/qonfig.rb
137
+ - lib/qonfig/command_set.rb
138
+ - lib/qonfig/commands.rb
139
+ - lib/qonfig/commands/add_nested_option.rb
140
+ - lib/qonfig/commands/add_option.rb
141
+ - lib/qonfig/commands/base.rb
142
+ - lib/qonfig/commands/compose.rb
143
+ - lib/qonfig/commands/expose_yaml.rb
144
+ - lib/qonfig/commands/load_from_env.rb
145
+ - lib/qonfig/commands/load_from_env/value_converter.rb
146
+ - lib/qonfig/commands/load_from_json.rb
147
+ - lib/qonfig/commands/load_from_self.rb
148
+ - lib/qonfig/commands/load_from_yaml.rb
149
+ - lib/qonfig/configurable.rb
150
+ - lib/qonfig/data_set.rb
151
+ - lib/qonfig/data_set/class_builder.rb
152
+ - lib/qonfig/data_set/validator.rb
153
+ - lib/qonfig/dsl.rb
154
+ - lib/qonfig/errors.rb
155
+ - lib/qonfig/loaders.rb
156
+ - lib/qonfig/loaders/basic.rb
157
+ - lib/qonfig/loaders/json.rb
158
+ - lib/qonfig/loaders/yaml.rb
159
+ - lib/qonfig/plugins.rb
160
+ - lib/qonfig/plugins/abstract.rb
161
+ - lib/qonfig/plugins/access_mixin.rb
162
+ - lib/qonfig/plugins/registry.rb
163
+ - lib/qonfig/plugins/toml.rb
164
+ - lib/qonfig/plugins/toml/commands/expose_toml.rb
165
+ - lib/qonfig/plugins/toml/commands/load_from_toml.rb
166
+ - lib/qonfig/plugins/toml/data_set.rb
167
+ - lib/qonfig/plugins/toml/dsl.rb
168
+ - lib/qonfig/plugins/toml/loaders/toml.rb
169
+ - lib/qonfig/plugins/toml/tomlrb_fixes.rb
170
+ - lib/qonfig/plugins/toml/uploaders/toml.rb
171
+ - lib/qonfig/settings.rb
172
+ - lib/qonfig/settings/builder.rb
173
+ - lib/qonfig/settings/key_guard.rb
174
+ - lib/qonfig/settings/lock.rb
175
+ - lib/qonfig/uploaders.rb
176
+ - lib/qonfig/uploaders/base.rb
177
+ - lib/qonfig/uploaders/file.rb
178
+ - lib/qonfig/uploaders/json.rb
179
+ - lib/qonfig/uploaders/yaml.rb
73
180
  - lib/qonfig/version.rb
74
181
  - qonfig.gemspec
75
182
  homepage: https://github.com/0exp/qonfig
@@ -84,16 +191,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
191
  requirements:
85
192
  - - ">="
86
193
  - !ruby/object:Gem::Version
87
- version: '0'
194
+ version: 2.3.8
88
195
  required_rubygems_version: !ruby/object:Gem::Requirement
89
196
  requirements:
90
197
  - - ">="
91
198
  - !ruby/object:Gem::Version
92
199
  version: '0'
93
200
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.7.6
201
+ rubygems_version: 3.0.3
96
202
  signing_key:
97
203
  specification_version: 4
98
- summary: Soon
204
+ summary: Config object
99
205
  test_files: []