qonfig 0.4.0 → 0.5.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/.travis.yml +8 -7
- data/CHANGELOG.md +9 -0
- data/README.md +60 -0
- data/lib/qonfig/commands/load_from_json.rb +60 -0
- data/lib/qonfig/dsl.rb +10 -0
- data/lib/qonfig/error.rb +6 -0
- data/lib/qonfig/loaders/basic.rb +40 -0
- data/lib/qonfig/loaders/json.rb +31 -0
- data/lib/qonfig/loaders/yaml.rb +6 -9
- data/lib/qonfig/version.rb +1 -1
- data/lib/qonfig.rb +4 -0
- data/qonfig.gemspec +2 -2
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4478b75a75d9df31fedab5728cc55af2509b858158d522cefc8fbe15811c216
|
4
|
+
data.tar.gz: d50efec1ffcc132225be42a6e54d9b47e6d548cde6b45ac09f345a9f01fbc2d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5be60954fc592e1c62545c92d025d48cc6d5643ec80955cc9b4dea9bc0c65ccde98638de01a17aabc451bfdfc1d6be4b2465d5ce1f7d2f472ac9e2ef4012efe
|
7
|
+
data.tar.gz: 1a6e33b588e5df992e10921fd3c09df4de70786aa54968feeb3966170ff33083615110de566f40dd18b8921ee65da5dfd47b40956b08464104f246f68e625671
|
data/.travis.yml
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
- jruby-head
|
9
|
-
|
3
|
+
- 2.3.7
|
4
|
+
- 2.4.4
|
5
|
+
- 2.5.1
|
6
|
+
- ruby-head
|
7
|
+
- jruby-head
|
10
8
|
sudo: false
|
11
9
|
cache: bundler
|
12
10
|
before_install: gem install bundler
|
13
11
|
script: bundle exec rspec
|
12
|
+
notifications:
|
13
|
+
slack:
|
14
|
+
secure: I03SDv+IrKy3IkeGjjHUJ9VneFMiYpLzIgPOixGFO5zGVXgulwmun82KsrPSW5HkK1UEQCahfoXt1hNECPwxcdsY01q6LBYJQx1jD0q17bXHllN/q0C6lx3peRN0KqNAAOU3/mHZxLt3HFV+N3HsSnoxDMuSYJgKbjCL/QVG2L2UYT9vi+JRNM/thj8R6MWKWlOHemik40GbLr2anCOCqiALzxnJzh5nJyGj+9SGvjhHfQq/fAIrg1+Scu+UchG8d+1yS5JWsGTt1/JF08i+Ux4ceTQ7GNBNeA5cj/xuUzvRx6A85renxyTiZMKIL0+jeceUm8c+/46XFcq0F7/kJB36lwjFhX1JRphcu/VouRdEwW/BvH74wnyHtygqOpk0LH4shp7A1DIS1DlnBbeJxrR5hdMDnmV85kTU6w6H0BbncsYY/pH1fji1kgH6jCsdwqDlq4wLB8x8I+eZABBsfb/r55z/HnBmmxlvR7Rt3X5/yR3gJrsgRrDBBZ5LwYy1RSCDu76vMQqWGJKG03FdfqSNqmC5V4MC5Ez8yjGDW0Yle09mwvsL2c6fDXyDPCeB/gwNk+FvgLRXnv7C4BaBNEoG4JnCL/dwauoJNg0lB6uF34BEmYAhZIrdY1CI6BqPWnaVMJfcJSYekBVXDIELDnTFRWjaGU1y8dM6lNzDmYE=
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [0.5.0] - 2018-07-27
|
5
|
+
### Added
|
6
|
+
- `load_from_json`- a command that provides an ability to define config settings
|
7
|
+
by loading them from a json file (in `load_from_yaml` manner);
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
- Support for Ruby 2.2 has ended;
|
11
|
+
|
4
12
|
## [0.4.0] - 2018-06-24
|
13
|
+
### Added
|
5
14
|
- Introduce Plugin Ecosystem (`Qonfig::Plugins`):
|
6
15
|
- load plugin: `Qonfig.plugin('plugin_name')` or `Qonfig.plugin(:plugin_name)`;
|
7
16
|
- get registered plugins: `Qonfig.plugins #=> array of strings`
|
data/README.md
CHANGED
@@ -31,6 +31,7 @@ require 'qonfig'
|
|
31
31
|
- [State freeze](#state-freeze)
|
32
32
|
- [Settings as Predicates](#settings-as-predicates)
|
33
33
|
- [Load from YAML file](#load-from-yaml-file)
|
34
|
+
- [Load from JSON file](#load-from-json-file)
|
34
35
|
- [Load from ENV](#load-from-env)
|
35
36
|
- [Load from \_\_END\_\_](#load-from-__end__) (aka `load_from_self`)
|
36
37
|
- [Smart Mixin](#smart-mixin) (`Qonfig::Configurable`)
|
@@ -482,6 +483,65 @@ Config.new.to_h # => { "nonexistent_yaml" => {}, "another_key" => nil }
|
|
482
483
|
|
483
484
|
---
|
484
485
|
|
486
|
+
### Load from JSON file
|
487
|
+
|
488
|
+
- `:strict` mode (fail behaviour when the required yaml file doesnt exist):
|
489
|
+
- `true` (by default) - causes `Qonfig::FileNotFoundError`;
|
490
|
+
- `false` - do nothing, ignore current command;
|
491
|
+
|
492
|
+
```json
|
493
|
+
<!-- options.json -->
|
494
|
+
{
|
495
|
+
"user": "0exp",
|
496
|
+
"password": 12345,
|
497
|
+
"rubySettings": {
|
498
|
+
"allowedVersions": ["2.3", "2.4.2", "1.9.8"],
|
499
|
+
"gitLink": null,
|
500
|
+
"withAdditionals": false
|
501
|
+
}
|
502
|
+
}
|
503
|
+
```
|
504
|
+
|
505
|
+
```ruby
|
506
|
+
class Config < Qonfig::DataSet
|
507
|
+
load_from_json 'options.json'
|
508
|
+
end
|
509
|
+
|
510
|
+
config = Config.new
|
511
|
+
|
512
|
+
config.settings.user # => '0exp'
|
513
|
+
config.settings.password # => 12345
|
514
|
+
config.settings.rubySettings.allowedVersions # => ['2.3', '2.4.2', '1.9.8']
|
515
|
+
config.settings.rubySettings.gitLink # => nil
|
516
|
+
config.settings.rubySettings.withAdditionals # => false
|
517
|
+
```
|
518
|
+
|
519
|
+
```ruby
|
520
|
+
# --- strict mode ---
|
521
|
+
class Config < Qonfig::DataSet
|
522
|
+
setting :nonexistent_json do
|
523
|
+
load_from_yaml 'nonexistent_json.json', strict: true # true by default
|
524
|
+
end
|
525
|
+
|
526
|
+
setting :another_key
|
527
|
+
end
|
528
|
+
|
529
|
+
Config.new # => Qonfig::FileNotFoundError
|
530
|
+
|
531
|
+
# --- non-strict mode ---
|
532
|
+
class Config < Qonfig::DataSet
|
533
|
+
settings :nonexistent_json do
|
534
|
+
load_from_yaml 'nonexistent_json.json', strict: false
|
535
|
+
end
|
536
|
+
|
537
|
+
setting :another_key
|
538
|
+
end
|
539
|
+
|
540
|
+
Config.new.to_h # => { "nonexistent_json" => {}, "another_key" => nil }
|
541
|
+
```
|
542
|
+
|
543
|
+
---
|
544
|
+
|
485
545
|
### Load from ENV
|
486
546
|
|
487
547
|
- `:convert_values` (`false` by default):
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Qonfig
|
4
|
+
module Commands
|
5
|
+
# @api private
|
6
|
+
# @since 0.5.0
|
7
|
+
class LoadFromJSON < Base
|
8
|
+
# @return [String]
|
9
|
+
#
|
10
|
+
# @api private
|
11
|
+
# @since 0.5.0
|
12
|
+
attr_reader :file_path
|
13
|
+
|
14
|
+
# @return [Boolean]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
# @sicne 0.5.0
|
18
|
+
attr_reader :strict
|
19
|
+
|
20
|
+
# @param file_path [String]
|
21
|
+
# @option strict [Boolean]
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
# @since 0.5.0
|
25
|
+
def initialize(file_path, strict: true)
|
26
|
+
@file_path = file_path
|
27
|
+
@strict = strict
|
28
|
+
end
|
29
|
+
|
30
|
+
# @param settings [Qonfig::Settings]
|
31
|
+
# @return [void]
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
# @since 0.5.0
|
35
|
+
def call(settings)
|
36
|
+
json_data = Qonfig::Loaders::JSON.load_file(file_path, fail_on_unexist: strict)
|
37
|
+
|
38
|
+
raise(
|
39
|
+
Qonfig::IncompatibleJSONStructureError,
|
40
|
+
'JSON object should have a hash-like structure'
|
41
|
+
) unless json_data.is_a?(Hash)
|
42
|
+
|
43
|
+
json_based_settings = build_data_set_class(json_data).new.settings
|
44
|
+
|
45
|
+
settings.__append_settings__(json_based_settings)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
# @param json_data [Hash]
|
51
|
+
# @return [Class<Qonfig::DataSet>]
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
# @since 0.5.0
|
55
|
+
def build_data_set_class(json_data)
|
56
|
+
Qonfig::DataSet::ClassBuilder.build_from_hash(json_data)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/qonfig/dsl.rb
CHANGED
@@ -98,5 +98,15 @@ module Qonfig
|
|
98
98
|
trim_prefix: trim_prefix
|
99
99
|
)
|
100
100
|
end
|
101
|
+
|
102
|
+
# @param file_path [String]
|
103
|
+
# @option strict [Boolean]
|
104
|
+
# @return [void]
|
105
|
+
#
|
106
|
+
# @api public
|
107
|
+
# @since 0.5.0
|
108
|
+
def load_from_json(file_path, strict: true)
|
109
|
+
commands << Qonfig::Commands::LoadFromJSON.new(file_path, strict: strict)
|
110
|
+
end
|
101
111
|
end
|
102
112
|
end
|
data/lib/qonfig/error.rb
CHANGED
@@ -51,6 +51,12 @@ module Qonfig
|
|
51
51
|
# @since 0.2.0
|
52
52
|
IncompatibleYAMLStructureError = Class.new(Error)
|
53
53
|
|
54
|
+
# @see Qonfig::Commands::LoadFromJSON
|
55
|
+
#
|
56
|
+
# @api public
|
57
|
+
# @since 0.5.0
|
58
|
+
IncompatibleJSONStructureError = Class.new(Error)
|
59
|
+
|
54
60
|
# @see Qonfig::Loaders::YAML
|
55
61
|
#
|
56
62
|
# @api public
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Qonfig
|
4
|
+
module Loaders
|
5
|
+
# @api private
|
6
|
+
# @sicne 0.5.0
|
7
|
+
module Basic
|
8
|
+
# @param data [String]
|
9
|
+
# @return [void]
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
# @since 0.5.0
|
13
|
+
def load(data)
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [void]
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
# @since 0.5.0
|
21
|
+
def load_empty_data
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param file_path [String]
|
26
|
+
# @option fail_on_unexist [Boolean]
|
27
|
+
# @return [Object]
|
28
|
+
#
|
29
|
+
# @raise [Qonfig::FileNotFoundError]
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
# @since 0.5.0
|
33
|
+
def load_file(file_path, fail_on_unexist: true)
|
34
|
+
load(::File.read(file_path))
|
35
|
+
rescue Errno::ENOENT => error
|
36
|
+
fail_on_unexist ? (raise Qonfig::FileNotFoundError, error.message) : load_empty_data
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Qonfig
|
4
|
+
module Loaders
|
5
|
+
# @api private
|
6
|
+
# @since 0.5.0
|
7
|
+
module JSON
|
8
|
+
# @since 0.5.0
|
9
|
+
extend Qonfig::Loaders::Basic
|
10
|
+
|
11
|
+
class << self
|
12
|
+
# @param data [String]
|
13
|
+
# @return [Object]
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
# @since 0.5.0
|
17
|
+
def load(data)
|
18
|
+
::JSON.parse(data, max_nesting: false, allow_nan: true)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Object]
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
# @since 0.5.0
|
25
|
+
def load_empty_data
|
26
|
+
load('{}')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/qonfig/loaders/yaml.rb
CHANGED
@@ -5,6 +5,9 @@ module Qonfig
|
|
5
5
|
# @api private
|
6
6
|
# @since 0.2.0
|
7
7
|
module YAML
|
8
|
+
# @since 0.5.0
|
9
|
+
extend Qonfig::Loaders::Basic
|
10
|
+
|
8
11
|
class << self
|
9
12
|
# @param data [String]
|
10
13
|
# @return [Object]
|
@@ -15,18 +18,12 @@ module Qonfig
|
|
15
18
|
::YAML.load(ERB.new(data).result)
|
16
19
|
end
|
17
20
|
|
18
|
-
# @param file_path [String]
|
19
|
-
# @option fail_on_unexist [Boolean]
|
20
21
|
# @return [Object]
|
21
22
|
#
|
22
|
-
# @raise [Qonfig::FileNotFoundError]
|
23
|
-
#
|
24
23
|
# @api private
|
25
|
-
# @since 0.
|
26
|
-
def
|
27
|
-
load(
|
28
|
-
rescue Errno::ENOENT => error
|
29
|
-
fail_on_unexist ? (raise Qonfig::FileNotFoundError, error.message) : load('{}')
|
24
|
+
# @since 0.5.0
|
25
|
+
def load_empty_data
|
26
|
+
load('{}')
|
30
27
|
end
|
31
28
|
end
|
32
29
|
end
|
data/lib/qonfig/version.rb
CHANGED
data/lib/qonfig.rb
CHANGED
@@ -1,16 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'yaml'
|
4
|
+
require 'json'
|
4
5
|
require 'erb'
|
5
6
|
|
6
7
|
module Qonfig
|
7
8
|
require_relative 'qonfig/error'
|
9
|
+
require_relative 'qonfig/loaders/basic'
|
10
|
+
require_relative 'qonfig/loaders/json'
|
8
11
|
require_relative 'qonfig/loaders/yaml'
|
9
12
|
require_relative 'qonfig/commands/base'
|
10
13
|
require_relative 'qonfig/commands/add_option'
|
11
14
|
require_relative 'qonfig/commands/add_nested_option'
|
12
15
|
require_relative 'qonfig/commands/compose'
|
13
16
|
require_relative 'qonfig/commands/load_from_yaml'
|
17
|
+
require_relative 'qonfig/commands/load_from_json'
|
14
18
|
require_relative 'qonfig/commands/load_from_self'
|
15
19
|
require_relative 'qonfig/commands/load_from_env'
|
16
20
|
require_relative 'qonfig/commands/load_from_env/value_converter'
|
data/qonfig.gemspec
CHANGED
@@ -6,7 +6,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
6
|
require 'qonfig/version'
|
7
7
|
|
8
8
|
Gem::Specification.new do |spec|
|
9
|
-
spec.required_ruby_version = '>= 2.
|
9
|
+
spec.required_ruby_version = '>= 2.3.7'
|
10
10
|
|
11
11
|
spec.name = 'qonfig'
|
12
12
|
spec.version = Qonfig::VERSION
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency 'simplecov', '~> 0.14'
|
33
33
|
spec.add_development_dependency 'simplecov-json', '~> 0.2'
|
34
34
|
spec.add_development_dependency 'rspec', '~> 3.7'
|
35
|
-
spec.add_development_dependency 'armitage-rubocop', '~> 0.
|
35
|
+
spec.add_development_dependency 'armitage-rubocop', '~> 0.4'
|
36
36
|
|
37
37
|
spec.add_development_dependency 'bundler'
|
38
38
|
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.5.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: 2018-
|
11
|
+
date: 2018-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0.
|
75
|
+
version: '0.4'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0.
|
82
|
+
version: '0.4'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- lib/qonfig/commands/compose.rb
|
153
153
|
- lib/qonfig/commands/load_from_env.rb
|
154
154
|
- lib/qonfig/commands/load_from_env/value_converter.rb
|
155
|
+
- lib/qonfig/commands/load_from_json.rb
|
155
156
|
- lib/qonfig/commands/load_from_self.rb
|
156
157
|
- lib/qonfig/commands/load_from_yaml.rb
|
157
158
|
- lib/qonfig/configurable.rb
|
@@ -159,6 +160,8 @@ files:
|
|
159
160
|
- lib/qonfig/data_set/class_builder.rb
|
160
161
|
- lib/qonfig/dsl.rb
|
161
162
|
- lib/qonfig/error.rb
|
163
|
+
- lib/qonfig/loaders/basic.rb
|
164
|
+
- lib/qonfig/loaders/json.rb
|
162
165
|
- lib/qonfig/loaders/yaml.rb
|
163
166
|
- lib/qonfig/plugins.rb
|
164
167
|
- lib/qonfig/plugins/abstract.rb
|
@@ -182,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
185
|
requirements:
|
183
186
|
- - ">="
|
184
187
|
- !ruby/object:Gem::Version
|
185
|
-
version: 2.
|
188
|
+
version: 2.3.7
|
186
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
190
|
requirements:
|
188
191
|
- - ">="
|