evt-settings 0.4.0.1 → 2.1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ccf7a0ebdea3e2fb7d4bc42b6032cb369b604be1179d866b06bd8dfbf535e9da
4
- data.tar.gz: 979a457656f0d4e7eaecd1c28bd4895e0bb90c3f69cc6a1c675590edddb30aa2
3
+ metadata.gz: fb5a4eb960f4d0e780bbcd97bb2e91416baf7b90b1268c7ae92fdf1663ec784d
4
+ data.tar.gz: 5ed28384eb54314aa31a421ba84355ed944ae932d5675c0c4c0ae6917e0b57c6
5
5
  SHA512:
6
- metadata.gz: 6c40d858633c7e030796e0281563a67906ac59b66920307f580dc06aaf0e8dc93959b41dec41b6e879a6103db037c852186e5fe4a3c4df30d48736b0d9cfedd3
7
- data.tar.gz: '0569425c2f9d67f8024b145a4441468a43a5c88d456225a395e1ccd7b9453a877ef0790c61cf695dea13358edae7af33975cf3952976e3a9e99ba1a655d24f6a'
6
+ metadata.gz: 0ad24968d8d1f02c1922d315868f5ed9a382d6308d856cf33168571e60be98ae70927feb68992e69d957d651ec6b86388ae8b87fdca7f7d95884d063729b6b5d
7
+ data.tar.gz: 5053f0ceffe12425ae380be52a484bed75ebd6f292989415bb9c7792b9a274fce768386fe760fad28e63916859b6788255e484deb187ce8d72d78ce972ebd708
@@ -4,15 +4,15 @@ require 'json'
4
4
  require 'log'
5
5
  require 'casing'
6
6
  require 'attribute'
7
- require 'confstruct'
8
7
 
9
8
  require 'settings/log'
10
- require 'settings/data_source/data_source'
9
+ require 'settings/data_source'
11
10
  require 'settings/data_source/hash'
11
+ require 'settings/data_source/env'
12
12
  require 'settings/data_source/file'
13
13
  require 'settings/data_source/build'
14
14
  require 'settings/registry'
15
15
  require 'settings/settings'
16
- require 'settings/activate'
16
+ require 'settings/setting'
17
17
  require 'settings/setting/assignment'
18
18
  require 'settings/setting/macro'
@@ -1,3 +1,4 @@
1
1
  require 'settings/controls/subject'
2
2
  require 'settings/controls/data_source'
3
+ require 'settings/controls/data'
3
4
  require 'settings/controls/settings'
@@ -0,0 +1,54 @@
1
+ class Settings
2
+ module Controls
3
+ module Data
4
+ module Flat
5
+ module Single
6
+ def self.example
7
+ {
8
+ 'some_setting' => 'some value'
9
+ }
10
+ end
11
+ end
12
+
13
+ module Multiple
14
+ def self.example
15
+ {
16
+ 'some_setting' => 'some value',
17
+ 'some_other_setting' => 'some other value',
18
+ }
19
+ end
20
+ end
21
+ end
22
+
23
+ module Hierarchical
24
+ def self.example
25
+ {
26
+ 'some_namespace' => {
27
+ 'some_setting' => 'some value'
28
+ }
29
+ }
30
+ end
31
+ end
32
+
33
+ module CamelCaseKeys
34
+ def self.example
35
+ {
36
+ 'someNamespace' => {
37
+ 'someSetting' => 'some value'
38
+ }
39
+ }
40
+ end
41
+ end
42
+
43
+ module SymbolKeys
44
+ def self.example
45
+ {
46
+ :some_namespace => {
47
+ :some_setting => 'some value'
48
+ }
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -7,9 +7,17 @@ class Settings
7
7
  end
8
8
 
9
9
  def self.data
10
- {
11
- some_setting: 'some value'
12
- }
10
+ Data::Flat::Single.example
11
+ end
12
+
13
+ module SymbolKeys
14
+ def self.example
15
+ ::Settings::DataSource::Hash.build(data)
16
+ end
17
+
18
+ def self.data
19
+ Data::SymbolKeys.example
20
+ end
13
21
  end
14
22
  end
15
23
 
@@ -3,84 +3,44 @@ class Settings
3
3
  module Settings
4
4
  module SettingAttribute
5
5
  def self.example
6
- ::Settings.new(data)
6
+ ::Settings.build(data)
7
7
  end
8
8
 
9
9
  def self.data
10
- {
11
- "some_setting" => "some value"
12
- }
10
+ Data::Flat::Single.example
13
11
  end
14
12
  end
15
13
 
16
- module SettingAttributes
14
+ module PartialMatch
17
15
  def self.example
18
- ::Settings.new(data)
16
+ ::Settings.build(data)
19
17
  end
20
18
 
21
19
  def self.data
22
- {
23
- "some_setting" => "some value",
24
- "some_other_setting" => "some other value",
25
- "yet_another_setting" => "yet another value"
26
- }
27
- end
28
-
29
- module Partial
30
- def self.example
31
- ::Settings.new(data)
32
- end
33
-
34
- def self.data
35
- {
36
- "some_setting" => "some value",
37
- "some_other_setting" => "some other value",
38
- }
39
- end
20
+ Data::Flat::Multiple.example
40
21
  end
41
22
  end
42
23
 
43
- module AccessorAttribute
24
+ module Namespace
44
25
  def self.example
45
- ::Settings.new(data)
26
+ ::Settings.build(data)
46
27
  end
47
28
 
48
29
  def self.data
49
- {
50
- "some_accessor_attribute" => "some accessor value"
51
- }
30
+ Data::Hierarchical.example
52
31
  end
53
32
  end
54
33
 
55
- module Namespace
34
+ module AccessorAttribute
56
35
  def self.example
57
- ::Settings.new(data)
36
+ ::Settings.build(data)
58
37
  end
59
38
 
60
39
  def self.data
61
40
  {
62
- "some_namespace" => {
63
- "some_setting" => "some value"
64
- }
41
+ 'some_accessor_attribute' => 'some accessor value'
65
42
  }
66
43
  end
67
-
68
- module Override
69
- def self.example
70
- s = ::Settings.build(Namespace.data)
71
- s.override(data)
72
- s
73
- end
74
-
75
- def self.data
76
- {
77
- "some_namespace" => {
78
- "some_setting" => "some overridden value",
79
- "some_other_setting" => "some other value"
80
- }
81
- }
82
- end
83
- end
84
44
  end
85
45
  end
86
46
  end
@@ -2,6 +2,8 @@ class Settings
2
2
  module Controls
3
3
  module Subject
4
4
  class Example
5
+ include Setting
6
+
5
7
  setting :some_setting
6
8
  setting :some_other_setting
7
9
  setting :yet_another_setting
@@ -7,5 +7,11 @@ class Settings
7
7
  def initialize(source)
8
8
  @source = source
9
9
  end
10
+
11
+ def self.build(source=nil)
12
+ source = canonize(source) if respond_to? :canonize
13
+
14
+ new(source)
15
+ end
10
16
  end
11
17
  end
@@ -10,6 +10,7 @@ class Settings
10
10
  def self.type(input=nil)
11
11
  return Settings::DataSource::Hash if input.is_a?(::Hash)
12
12
  return Settings::DataSource::File if input.is_a?(String) || input.nil?
13
+ return Settings::DataSource::Env if input.instance_of?(Object)
13
14
 
14
15
  raise Settings::Error, "Input is not supported: #{input}"
15
16
  end
@@ -0,0 +1,15 @@
1
+ class Settings
2
+ class DataSource
3
+ class Env < DataSource
4
+ def self.logger
5
+ @logger ||= Log.get(self)
6
+ end
7
+
8
+ def get_data
9
+ source.map do |k, v|
10
+ [k.downcase, v]
11
+ end.to_h
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,22 +1,18 @@
1
1
  class Settings
2
2
  class DataSource
3
3
  class File < DataSource
4
- def self.build(source=nil)
5
- canonical = canonical(source)
6
- validate(canonical)
4
+ def self.canonize(source)
5
+ logger.trace { "Canonizing the file source (Source: #{source})" }
7
6
 
8
- new(canonical)
9
- end
7
+ canonized_filepath = canonize_filepath(source)
8
+ validate(canonized_filepath)
10
9
 
11
- def self.canonical(source)
12
- logger.trace { "Canonizing the file source (#{source})" }
10
+ logger.debug { "Canonized the file source (Source: #{source}, Canonized: #{canonized_filepath})" }
13
11
 
14
- canonize(source).tap do |instance|
15
- logger.debug { "Canonized the file source (#{source})" }
16
- end
12
+ canonized_filepath
17
13
  end
18
14
 
19
- def self.canonize(source)
15
+ def self.canonize_filepath(source)
20
16
  return default_filepath if source.nil?
21
17
  return source if full_path?(source)
22
18
 
@@ -32,6 +28,8 @@ class Settings
32
28
  dirpath ||= Pathname.new(source)
33
29
  filepath ||= Pathname.new(source)
34
30
 
31
+ logger.debug { "Canonized the file source (#{source})" }
32
+
35
33
  pathname(filepath, dirpath)
36
34
  end
37
35
 
@@ -83,8 +81,6 @@ class Settings
83
81
  logger.debug { "Read file: #{source}" }
84
82
  end
85
83
 
86
- data = Casing::Underscore.(data)
87
-
88
84
  hash_data_source = Hash.build data
89
85
  hash_data_source.get_data
90
86
  end
@@ -5,14 +5,27 @@ class Settings
5
5
  @logger ||= Log.get(self)
6
6
  end
7
7
 
8
- def self.build(source)
9
- new(source)
8
+ def get_data
9
+ AssureStringKeys.(source)
10
10
  end
11
11
 
12
- def get_data
13
- logger.trace { "Converting the raw source data to Confstruct" }
14
- Confstruct::Configuration.new(source).tap do |instance|
15
- logger.debug { "Converted the raw source data to Confstruct" }
12
+ module AssureStringKeys
13
+ def self.call(data)
14
+ new_data = {}
15
+
16
+ data.each do |key, value|
17
+ new_key = key.to_s
18
+
19
+ if value.is_a?(::Hash)
20
+ new_value = self.(value)
21
+ else
22
+ new_value = value
23
+ end
24
+
25
+ new_data[new_key] = new_value
26
+ end
27
+
28
+ new_data
16
29
  end
17
30
  end
18
31
  end
@@ -0,0 +1,9 @@
1
+ class Settings
2
+ module Setting
3
+ def self.included(cls)
4
+ cls.class_exec do
5
+ extend Macro
6
+ end
7
+ end
8
+ end
9
+ end
@@ -20,6 +20,8 @@ class Settings
20
20
 
21
21
  data = data_source.get_data
22
22
 
23
+ data = Casing::Underscore.(data)
24
+
23
25
  instance = new(data)
24
26
 
25
27
  instance
@@ -38,21 +40,6 @@ class Settings
38
40
  end
39
41
  end
40
42
 
41
- def override(override_data)
42
- logger.trace { "Overriding settings data" }
43
- res = data.push!(override_data)
44
- logger.debug { "Overrode settings data" }
45
- logger.debug(tag: :data) { "Override data #{override_data}" }
46
- res
47
- end
48
-
49
- def reset
50
- logger.trace { "Resetting overridden settings data" }
51
- res = data.pop!
52
- logger.debug { "Reset overridden settings data" }
53
- res
54
- end
55
-
56
43
  def set(receiver, *namespace, attribute: nil, strict: true)
57
44
  logger.trace { "Setting #{receiver.class.name} (#{digest(namespace, attribute, strict)})" }
58
45
  unless attribute.nil?
@@ -114,9 +101,14 @@ class Settings
114
101
  namespace.flatten!
115
102
  logger.trace { "Getting #{namespace}" }
116
103
 
117
- string_keys = namespace.map { |n| n.is_a?(String) ? n : n.to_s }
104
+ keys = namespace.map { |n| n.is_a?(Symbol) ? n.to_s : n }
118
105
 
119
- value = string_keys.inject(data) {|memo, k| memo ? memo[k] : nil }
106
+ value = nil
107
+ if keys.empty?
108
+ value = data
109
+ else
110
+ value = data.dig(*keys)
111
+ end
120
112
 
121
113
  logger.debug { "Got #{namespace}" }
122
114
  logger.debug(tag: :data) { "#{namespace}: #{value.inspect}" }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evt-settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.1
4
+ version: 2.1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Eventide Project
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-09 00:00:00.000000000 Z
11
+ date: 2020-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evt-log
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: confstruct
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: test_bench
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -73,17 +59,19 @@ extensions: []
73
59
  extra_rdoc_files: []
74
60
  files:
75
61
  - lib/settings.rb
76
- - lib/settings/activate.rb
77
62
  - lib/settings/controls.rb
63
+ - lib/settings/controls/data.rb
78
64
  - lib/settings/controls/data_source.rb
79
65
  - lib/settings/controls/settings.rb
80
66
  - lib/settings/controls/subject.rb
67
+ - lib/settings/data_source.rb
81
68
  - lib/settings/data_source/build.rb
82
- - lib/settings/data_source/data_source.rb
69
+ - lib/settings/data_source/env.rb
83
70
  - lib/settings/data_source/file.rb
84
71
  - lib/settings/data_source/hash.rb
85
72
  - lib/settings/log.rb
86
73
  - lib/settings/registry.rb
74
+ - lib/settings/setting.rb
87
75
  - lib/settings/setting/assignment.rb
88
76
  - lib/settings/setting/macro.rb
89
77
  - lib/settings/settings.rb
@@ -91,7 +79,7 @@ homepage: https://github.com/eventide-project/settings
91
79
  licenses:
92
80
  - MIT
93
81
  metadata: {}
94
- post_install_message:
82
+ post_install_message:
95
83
  rdoc_options: []
96
84
  require_paths:
97
85
  - lib
@@ -106,9 +94,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
94
  - !ruby/object:Gem::Version
107
95
  version: '0'
108
96
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.7.6
111
- signing_key:
97
+ rubygems_version: 3.1.2
98
+ signing_key:
112
99
  specification_version: 4
113
100
  summary: Settings data access and assignment
114
101
  test_files: []
@@ -1,11 +0,0 @@
1
- class Settings
2
- def self.activate(target_class=nil)
3
- target_class ||= Object
4
-
5
- macro_module = Settings::Setting::Macro
6
-
7
- return if target_class.is_a?(macro_module)
8
-
9
- target_class.extend(macro_module)
10
- end
11
- end