legion-settings 1.0.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/NOTICE.txt ADDED
@@ -0,0 +1,9 @@
1
+ Legion::Settings(legion-settings)
2
+ Copyright 2021 Optum
3
+
4
+ Project Description:
5
+ ====================
6
+ A gem written to handle LegionIO Settings in a consistent way across extensions
7
+
8
+ Author(s):
9
+ Esity
data/README.md CHANGED
@@ -1,55 +1,36 @@
1
- # Legion::Settings
1
+ Legion::Settings
2
+ =====
2
3
 
3
- Legion::Settings is part of the Legion Framework
4
+ Legion::Settings is a hash like class used to store LegionIO Settings.
4
5
 
5
- ###Badges
6
- ####CICD
7
- | | License | CircleCI | CodeCov | CodeBeat |
8
- |---------|---------|----------|---------|----------|
9
- | Master |[![MIT Licence](https://badges.frapsoft.com/os/mit/mit.svg?v=103)](https://opensource.org/licenses/mit-license.php)|[![CircleCI](https://circleci.com/bb/legion-io/legion-settings/tree/master.svg?style=svg)](https://circleci.com/bb/legion-io/legion-settings/tree/master)|[![codecov](https://codecov.io/bb/legion-io/legion-settings/branch/master/graph/badge.svg)](https://codecov.io/bb/legion-io/legion-settings)|[![codebeat badge](https://codebeat.co/badges/e86dbe3e-b463-4f3c-91a8-c85492fd3833)](https://codebeat.co/projects/bitbucket-org-legion-io-legion-settings-master)|
10
- | Develop |[![MIT Licence](https://badges.frapsoft.com/os/mit/mit.svg?v=103)](https://opensource.org/licenses/mit-license.php)|[![CircleCI](https://circleci.com/bb/legion-io/legion-settings/tree/develop.svg?style=svg)](https://circleci.com/bb/legion-io/legion-settings/tree/develop)|[![codecov](https://codecov.io/bb/legion-io/legion-settings/branch/develop/graph/badge.svg)](https://codecov.io/bb/legion-io/legion-settings)|[![codebeat badge](https://codebeat.co/badges/e86dbe3e-b463-4f3c-91a8-c85492fd3833)](https://codebeat.co/projects/bitbucket-org-legion-io-legion-settings-develop)|
6
+ Supported Ruby versions and implementations
7
+ ------------------------------------------------
11
8
 
12
- #####RubyGems
13
- ![](https://ruby-gem-downloads-badge.herokuapp.com/legion-settings)
14
- [![Gem Version](https://badge.fury.io/rb/legion-settings.svg)](https://badge.fury.io/rb/legion-settings)
9
+ Legion::Json should work identically on:
15
10
 
16
- #####Bitbucket
17
- ![](https://img.shields.io/bitbucket/issues-raw/legion-io/legion-settings.svg)
18
- ![](https://img.shields.io/bitbucket/pr-raw/legion-io/legion-settings.svg)
19
- ## Installation
11
+ * JRuby 9.2+
12
+ * Ruby 2.4+
20
13
 
21
- Add this line to your application's Gemfile:
22
14
 
23
- ```ruby
24
- gem 'legion-settings'
25
- ```
26
-
27
- And then execute:
28
-
29
- $ bundle
30
-
31
- Or install it yourself as:
32
-
33
- $ gem install legion-settings
34
-
35
- ## Usage
15
+ Installation and Usage
16
+ ------------------------
36
17
 
37
- This library is utilized by Legion to load config files
18
+ You can verify your installation using this piece of code:
38
19
 
39
- ## Gem
40
-
41
- This gem can be viewed and download from [RubyGems - Legion-Settings](https://rubygems.org/gems/legion-settings)
42
-
43
- ## Development
44
-
45
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
20
+ ```bash
21
+ gem install legion-json
22
+ ```
46
23
 
47
- To install this gem onto your local machine, run `bundle exec install`.
24
+ ```ruby
25
+ require 'legion-settings'
26
+ Legion::Settings.load(config_dir: './') # will automatically load json files it has access to inside this dir
48
27
 
49
- ## Contributing
28
+ Legion::Settings[:client][:hostname]
29
+ Legion::Settings[:client][:new_attribute] = 'foobar'
50
30
 
51
- Bug reports and pull requests are welcome on GitHub at https://bitbucket.org/legion-io/legion-settings/issues This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
31
+ ```
52
32
 
53
- ## License
33
+ Authors
34
+ ----------
54
35
 
55
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
36
+ * [Matthew Iverson](https://github.com/Esity) - current maintainer
data/SECURITY.md ADDED
@@ -0,0 +1,9 @@
1
+ # Security Policy
2
+
3
+ ## Supported Versions
4
+ | Version | Supported |
5
+ | ------- | ------------------ |
6
+ | 1.x.x | :white_check_mark: |
7
+
8
+ ## Reporting a Vulnerability
9
+ To be added
data/attribution.txt ADDED
@@ -0,0 +1 @@
1
+ Add attributions here.
@@ -1,35 +1,30 @@
1
- lib = File.expand_path('lib', __dir__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'legion/settings/version'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/legion/settings/version'
4
4
 
5
5
  Gem::Specification.new do |spec|
6
- spec.name = 'legion-settings'
6
+ spec.name = 'legion-settings'
7
7
  spec.version = Legion::Settings::VERSION
8
8
  spec.authors = ['Esity']
9
- spec.email = ['matthewdiverson@gmail.com']
10
-
11
- spec.summary = 'Used to load the json settings files'
12
- spec.description = "Based on Sensu's implementation of settings"
13
- spec.homepage = 'https://bitbucket.org/whonodes/legion-settings'
14
- spec.license = 'MIT'
9
+ spec.email = %w[matthewdiverson@gmail.com ruby@optum.com]
15
10
 
16
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
- f.match(%r{^(test|spec|features)/})
18
- end
19
- spec.bindir = 'exe'
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
11
+ spec.summary = 'Legion::Settings'
12
+ spec.description = 'A gem written to handle LegionIO Settings in a consistent way across extensions'
13
+ spec.homepage = 'https://github.com/Optum/legion-settings'
14
+ spec.license = 'Apache-2.0'
21
15
  spec.require_paths = ['lib']
16
+ spec.required_ruby_version = '>= 2.4'
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.test_files = spec.files.select { |p| p =~ %r{^test/.*_test.rb} }
19
+ spec.extra_rdoc_files = %w[README.md LICENSE CHANGELOG.md]
20
+ spec.metadata = {
21
+ 'bug_tracker_uri' => 'https://github.com/Optum/legion-settings/issues',
22
+ 'changelog_uri' => 'https://github.com/Optum/legion-settings/src/main/CHANGELOG.md',
23
+ 'documentation_uri' => 'https://github.com/Optum/legion-settings',
24
+ 'homepage_uri' => 'https://github.com/Optum/LegionIO',
25
+ 'source_code_uri' => 'https://github.com/Optum/legion-settings',
26
+ 'wiki_uri' => 'https://github.com/Optum/legion-settings/wiki'
27
+ }
22
28
 
23
- spec.add_development_dependency 'bundler'
24
- spec.add_development_dependency 'rake'
25
- spec.add_development_dependency 'rspec'
26
- spec.add_development_dependency 'rspec_junit_formatter'
27
- spec.add_development_dependency 'rubocop'
28
- spec.add_development_dependency 'simplecov'
29
- if RUBY_ENGINE == 'jruby'
30
- spec.add_dependency 'legion-json-jruby'
31
- else
32
- spec.add_dependency 'legion-json'
33
- end
34
- spec.add_dependency 'legion-logging'
29
+ spec.add_dependency 'legion-json', '>= 1.2'
35
30
  end
@@ -7,6 +7,7 @@ module Legion
7
7
  module Settings
8
8
  class << self
9
9
  attr_accessor :loader
10
+
10
11
  def load(options = {})
11
12
  @loader = Legion::Settings::Loader.new
12
13
  @loader.load_env
@@ -23,11 +24,11 @@ module Legion
23
24
  end
24
25
 
25
26
  def [](key)
26
- Legion::Logging.info('Legion::Settings was not loading, auto loading now!') if @loader.nil?
27
+ logger.info('Legion::Settings was not loading, auto loading now!') if @loader.nil?
27
28
  @loader = load if @loader.nil?
28
29
  @loader[key]
29
30
  rescue NoMethodError, TypeError
30
- Legion::Logging.fatal 'rescue inside [](key)'
31
+ logger.fatal 'rescue inside [](key)'
31
32
  nil
32
33
  end
33
34
 
@@ -40,7 +41,16 @@ module Legion
40
41
  @loader = load if @loader.nil?
41
42
  thing = {}
42
43
  thing[key.to_sym] = hash
43
- @loader.load_module_default(thing)
44
+ @loader.load_module_settings(thing)
45
+ end
46
+
47
+ def logger
48
+ @logger = if ::Legion.const_defined?('Logging')
49
+ ::Legion::Logging
50
+ else
51
+ require 'logger'
52
+ ::Logger.new($stdout)
53
+ end
44
54
  end
45
55
  end
46
56
  end
@@ -1,14 +1,13 @@
1
1
  require 'socket'
2
+ require 'legion/settings/os'
2
3
 
3
4
  module Legion
4
5
  module Settings
5
6
  class Loader
6
- class Error < RuntimeError; end
7
+ include Legion::Settings::OS
7
8
 
8
- attr_reader :warnings
9
- attr_reader :errors
10
- attr_reader :loaded_files
11
- attr_reader :settings
9
+ class Error < RuntimeError; end
10
+ attr_reader :warnings, :errors, :loaded_files, :settings
12
11
 
13
12
  def initialize
14
13
  @warnings = []
@@ -16,55 +15,45 @@ module Legion
16
15
  @settings = default_settings
17
16
  @indifferent_access = false
18
17
  @loaded_files = []
19
- self.class.create_category_methods
20
18
  end
21
19
 
22
20
  def client_defaults
23
21
  {
24
22
  hostname: system_hostname,
25
- address: system_address,
26
- name: "#{::Socket.gethostname.gsub('.', '_')}.#{::Process.pid}",
27
- ready: false
23
+ address: system_address,
24
+ name: "#{::Socket.gethostname.tr('.', '_')}.#{::Process.pid}",
25
+ ready: false
28
26
  }
29
27
  end
30
28
 
31
29
  def default_settings
32
30
  {
33
- client: client_defaults,
34
- cluster: { public_keys: {} },
35
- crypt: {
36
- cluster_secret: nil,
31
+ client: client_defaults,
32
+ cluster: { public_keys: {} },
33
+ crypt: {
34
+ cluster_secret: nil,
37
35
  cluster_secret_timeout: 5,
38
- vault: { connected: false }
36
+ vault: { connected: false }
39
37
  },
40
- cache: { enabled: true, connected: false, driver: 'dalli' },
41
- extensions: {},
38
+ cache: { enabled: true, connected: false, driver: 'dalli' },
39
+ extensions: {},
40
+ reload: false,
41
+ reloading: false,
42
+ auto_install_missing_lex: true,
42
43
  default_extension_settings: {
43
44
  logger: { level: 'info', trace: false, extended: false }
44
45
  },
45
- logging: {
46
- level: 'info',
47
- location: 'stdout',
48
- trace: true,
46
+ logging: {
47
+ level: 'info',
48
+ location: 'stdout',
49
+ trace: true,
49
50
  backtrace_logging: true
50
51
  },
51
- transport: { connected: false },
52
- data: { connected: false }
52
+ transport: { connected: false },
53
+ data: { connected: false }
53
54
  }
54
55
  end
55
56
 
56
- def self.create_category_methods
57
- # CATEGORIES.each do |category|
58
- # define_method(category) do
59
- # setting_category(category)
60
- # end
61
- # method_name = category.to_s.chop + "_exists?"
62
- # define_method(method_name.to_sym) do |name|
63
- # definition_exists?(category, name)
64
- # end
65
- # end
66
- end
67
-
68
57
  def to_hash
69
58
  unless @indifferent_access
70
59
  indifferent_access!
@@ -97,13 +86,17 @@ module Legion
97
86
  load_api_env
98
87
  end
99
88
 
89
+ def load_module_settings(config)
90
+ @settings = deep_merge(config, @settings)
91
+ end
92
+
100
93
  def load_module_default(config)
101
94
  merged = deep_merge(@settings, config)
102
95
  deep_diff(@settings, merged) unless @loaded_files.empty?
103
96
  @settings = merged
104
97
  end
105
98
 
106
- def load_file(file) # rubocop:disable Metrics/AbcSize
99
+ def load_file(file)
107
100
  Legion::Logging.debug("Trying to load file #{file}")
108
101
  if File.file?(file) && File.readable?(file)
109
102
  begin
@@ -124,7 +117,6 @@ module Legion
124
117
  end
125
118
 
126
119
  def load_directory(directory)
127
- warning('loading config files from directory', directory: directory)
128
120
  path = directory.gsub(/\\(?=\S)/, '/')
129
121
  if File.readable?(path) && File.executable?(path)
130
122
  Dir.glob(File.join(path, '**{,/*/**}/*.json')).uniq.each do |file|
@@ -0,0 +1,34 @@
1
+ module Legion
2
+ module Settings
3
+ module OS
4
+ def self.windows?
5
+ (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
6
+ end
7
+
8
+ def self.mac?
9
+ (/darwin/ =~ RUBY_PLATFORM) != nil
10
+ end
11
+
12
+ def self.unix?
13
+ !OS.windows?
14
+ end
15
+
16
+ def self.linux?
17
+ OS.unix? and !OS.mac?
18
+ end
19
+
20
+ def self.jruby?
21
+ RUBY_ENGINE == 'jruby'
22
+ end
23
+
24
+ def os
25
+ return 'jruby' if jruby?
26
+ return 'windows' if windows?
27
+ return 'mac' if mac?
28
+ return 'unix' if unix?
29
+
30
+ 'linux'
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,5 +1,5 @@
1
1
  module Legion
2
2
  module Settings
3
- VERSION = '1.0.0'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,12 @@
1
+ sonar.projectKey=legion-io_legion-settings
2
+ sonar.organization=legion-io
3
+ sonar.projectName=Legion::Settings
4
+ sonar.sources=.
5
+ sonar.exclusions=vendor/**
6
+ sonar.coverage.exclusions=spec/**
7
+ sonar.ruby.coverage.reportPath=coverage/.resultset.json
8
+ sonar.ruby.file.suffixes=rb,ruby
9
+ sonar.ruby.coverage.framework=RSpec
10
+ sonar.ruby.rubocopConfig=.rubocop.yml
11
+ sonar.ruby.rubocop.reportPath=rubocop-result.json
12
+ sonar.ruby.rubocop.filePath=.
data/sourcehawk.yml ADDED
@@ -0,0 +1,4 @@
1
+
2
+ config-locations:
3
+ - https://raw.githubusercontent.com/optum/.github/main/sourcehawk.yml
4
+
metadata CHANGED
@@ -1,165 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-settings
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-12 00:00:00.000000000 Z
11
+ date: 2021-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rspec
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rspec_junit_formatter
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
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: simplecov
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
13
  - !ruby/object:Gem::Dependency
98
14
  name: legion-json
99
15
  requirement: !ruby/object:Gem::Requirement
100
16
  requirements:
101
17
  - - ">="
102
18
  - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: legion-logging
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
19
+ version: '1.2'
118
20
  type: :runtime
119
21
  prerelease: false
120
22
  version_requirements: !ruby/object:Gem::Requirement
121
23
  requirements:
122
24
  - - ">="
123
25
  - !ruby/object:Gem::Version
124
- version: '0'
125
- description: Based on Sensu's implementation of settings
26
+ version: '1.2'
27
+ description: A gem written to handle LegionIO Settings in a consistent way across
28
+ extensions
126
29
  email:
127
30
  - matthewdiverson@gmail.com
31
+ - ruby@optum.com
128
32
  executables: []
129
33
  extensions: []
130
- extra_rdoc_files: []
34
+ extra_rdoc_files:
35
+ - README.md
36
+ - LICENSE
37
+ - CHANGELOG.md
131
38
  files:
132
- - ".circleci/config.yml"
39
+ - ".github/workflows/sourcehawk-scan.yml"
133
40
  - ".gitignore"
134
- - ".idea/.rakeTasks"
135
- - ".idea/legion-settings.iml"
136
- - ".idea/misc.xml"
137
- - ".idea/modules.xml"
138
- - ".idea/vagrant.xml"
139
- - ".idea/workspace.xml"
140
41
  - ".rubocop.yml"
141
42
  - CHANGELOG.md
43
+ - CODE_OF_CONDUCT.md
44
+ - CONTRIBUTING.md
142
45
  - Gemfile
143
- - LICENSE.txt
46
+ - INDIVIDUAL_CONTRIBUTOR_LICENSE.md
47
+ - LICENSE
48
+ - NOTICE.txt
144
49
  - README.md
145
- - Rakefile
146
- - bin/console
147
- - bin/setup
148
- - bitbucket-pipelines.yml
50
+ - SECURITY.md
51
+ - attribution.txt
149
52
  - legion-settings.gemspec
150
53
  - lib/legion/settings.rb
151
- - lib/legion/settings/constants.rb
152
54
  - lib/legion/settings/loader.rb
153
- - lib/legion/settings/rules.rb
154
- - lib/legion/settings/validator.rb
155
- - lib/legion/settings/validators.rb
55
+ - lib/legion/settings/os.rb
156
56
  - lib/legion/settings/validators/legion.rb
157
57
  - lib/legion/settings/version.rb
158
- homepage: https://bitbucket.org/whonodes/legion-settings
58
+ - sonar-project.properties
59
+ - sourcehawk.yml
60
+ homepage: https://github.com/Optum/legion-settings
159
61
  licenses:
160
- - MIT
161
- metadata: {}
162
- post_install_message:
62
+ - Apache-2.0
63
+ metadata:
64
+ bug_tracker_uri: https://github.com/Optum/legion-settings/issues
65
+ changelog_uri: https://github.com/Optum/legion-settings/src/main/CHANGELOG.md
66
+ documentation_uri: https://github.com/Optum/legion-settings
67
+ homepage_uri: https://github.com/Optum/LegionIO
68
+ source_code_uri: https://github.com/Optum/legion-settings
69
+ wiki_uri: https://github.com/Optum/legion-settings/wiki
70
+ post_install_message:
163
71
  rdoc_options: []
164
72
  require_paths:
165
73
  - lib
@@ -167,15 +75,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
75
  requirements:
168
76
  - - ">="
169
77
  - !ruby/object:Gem::Version
170
- version: '0'
78
+ version: '2.4'
171
79
  required_rubygems_version: !ruby/object:Gem::Requirement
172
80
  requirements:
173
81
  - - ">="
174
82
  - !ruby/object:Gem::Version
175
83
  version: '0'
176
84
  requirements: []
177
- rubygems_version: 3.0.8
178
- signing_key:
85
+ rubygems_version: 3.1.6
86
+ signing_key:
179
87
  specification_version: 4
180
- summary: Used to load the json settings files
88
+ summary: Legion::Settings
181
89
  test_files: []