wbconfigurator 0.2 → 0.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3ffd332828a7b6fd0f0bbecc8687fa6c8106a23784edce28b8e8cf1795579f70
4
- data.tar.gz: 8766eb08427c53b35f28208831b901987f15b3b42d548711cce537371d40684e
3
+ metadata.gz: 6c6a0a05711b29eb8bd8c4eefaa2d45d9fab0813a8a8db1cb6dec7083f6a3475
4
+ data.tar.gz: e456a5d8e1efff923292fa2e48f2f140d5dc51febd8dce95afdae4c97594d792
5
5
  SHA512:
6
- metadata.gz: 5b79a2ea876cbe2349a093d0877a41c8cb3340ee20959e15476d21e9a649d7dab492236e1abf3a5314a479716d11d7aad4ffab76f6058358c8e0252ec3b0aaff
7
- data.tar.gz: ac9656c2ef10c9fddd1b1e4f58999f5f1370d5be6b3ee447f1c97f05644b108c01048d3d895f0fdbd18493c7f925dc9946d5baea47cc22df7e9a119340cf57c7
6
+ metadata.gz: 30b89d75958aeb943d2b79d2e7cf315cda716368d3269d6b13e5925deda36e995fd171fa1be5eda8553cf241cd1222f9136cff81957be44971c0209fe96f54ab
7
+ data.tar.gz: 41913c7f625b270c6510edb91b32ff8abcb4833d16a837ee5281c7f7192be202cc506d79e4f46ba60dc091361a88db906a2e9c4d411b18296ecc6a09d8757f95
data/Gemfile CHANGED
@@ -4,3 +4,8 @@
4
4
  source 'https://rubygems.org'
5
5
 
6
6
  gem 'secure_yaml'
7
+
8
+ group :test do
9
+ gem 'rspec', '~> 3.7'
10
+ gem 'pry'
11
+ end
data/Gemfile.lock CHANGED
@@ -1,13 +1,34 @@
1
1
  GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
+ coderay (1.1.3)
5
+ diff-lcs (1.4.4)
6
+ method_source (1.0.0)
7
+ pry (0.14.0)
8
+ coderay (~> 1.1)
9
+ method_source (~> 1.0)
10
+ rspec (3.10.0)
11
+ rspec-core (~> 3.10.0)
12
+ rspec-expectations (~> 3.10.0)
13
+ rspec-mocks (~> 3.10.0)
14
+ rspec-core (3.10.1)
15
+ rspec-support (~> 3.10.0)
16
+ rspec-expectations (3.10.1)
17
+ diff-lcs (>= 1.2.0, < 2.0)
18
+ rspec-support (~> 3.10.0)
19
+ rspec-mocks (3.10.2)
20
+ diff-lcs (>= 1.2.0, < 2.0)
21
+ rspec-support (~> 3.10.0)
22
+ rspec-support (3.10.2)
4
23
  secure_yaml (2.0.2)
5
24
 
6
25
  PLATFORMS
7
- ruby
26
+ x86_64-darwin-19
8
27
 
9
28
  DEPENDENCIES
29
+ pry
30
+ rspec (~> 3.7)
10
31
  secure_yaml
11
32
 
12
33
  BUNDLED WITH
13
- 1.17.3
34
+ 2.2.9
data/README.md CHANGED
@@ -14,7 +14,7 @@ You can use the library with a Bundler.
14
14
  With Bundler:
15
15
 
16
16
  ``` ruby
17
- gem 'configurator', git: 'https://github.com/wildbit/configurator.git'
17
+ gem 'wbconfigurator'
18
18
  ```
19
19
 
20
20
  ## Issues & Comments
@@ -28,4 +28,4 @@ Configurator library is released under the [MIT](http://www.opensource.org/licen
28
28
 
29
29
  ## Copyright
30
30
 
31
- Copyright © 2020 Wildbit LLC.
31
+ Copyright © 2020 Wildbit LLC.
data/lib/config/app.rb CHANGED
@@ -2,8 +2,10 @@
2
2
 
3
3
  require 'yaml'
4
4
  require 'secure_yaml'
5
+ require_relative 'patch/secure_yaml/cipher'
5
6
  require 'singleton'
6
7
  require 'ostruct'
8
+ require 'erb'
7
9
 
8
10
  # App::Configuration class helps loading configuration files.
9
11
  #
@@ -126,7 +128,8 @@ module App
126
128
  end
127
129
 
128
130
  def load_from_yaml(filename)
129
- SecureYaml.load(File.open(file_full_path(filename)))
131
+ yaml_file = ERB.new(File.read(file_full_path(filename))).result
132
+ SecureYaml.load(yaml_file)
130
133
  end
131
134
 
132
135
  # generate accessors for loaded data
@@ -155,4 +158,8 @@ module App
155
158
  def self.config
156
159
  @config ||= Configurator.new
157
160
  end
158
- end
161
+
162
+ def self.clear_config
163
+ @config = Configurator.new
164
+ end
165
+ end
@@ -0,0 +1,39 @@
1
+ require 'openssl'
2
+ require 'digest/sha2'
3
+ require 'base64'
4
+
5
+ module SecureYaml
6
+
7
+ class Cipher
8
+
9
+ def encrypt(secret_key, plain_data)
10
+ cipher = create_cipher(secret_key, :encrypt)
11
+ strip_newline_chars_from_base64(Base64.encode64(cipher.update(plain_data) + cipher.final))
12
+ end
13
+
14
+ def decrypt(secret_key, encrypted_data)
15
+ cipher = create_cipher(secret_key, :decrypt)
16
+ cipher.update(Base64.decode64(encrypted_data)) + cipher.final
17
+ end
18
+
19
+ private
20
+
21
+ def create_cipher(secret_key, type)
22
+ cipher = retrieve_encryption_type(type)
23
+ cipher.key = Digest::SHA2.new(256).digest(secret_key)
24
+ cipher
25
+ end
26
+
27
+ def retrieve_encryption_type(type = :encrypt)
28
+ cipher = OpenSSL::Cipher.new("AES-256-CFB")
29
+ type == :encrypt ? cipher.encrypt : cipher.decrypt
30
+ cipher
31
+ end
32
+
33
+ def strip_newline_chars_from_base64(base64)
34
+ base64.gsub("\n", '')
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Configurator
4
- VERSION = '0.2'
4
+ VERSION = '0.3.1'
5
5
  end
data/spec/data/db.yaml ADDED
@@ -0,0 +1,2 @@
1
+ username: admin
2
+ password: admin
@@ -0,0 +1,4 @@
1
+ retry_count: 2
2
+ display_errors: true
3
+ error_id: <%= "error_#{1+1}" %>
4
+ boolean: <%= true %>
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rspec'
4
+ require 'configurator'
5
+ require 'pry'
6
+
7
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
8
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
+
10
+ RSpec.configure do |c|
11
+ c.formatter = :documentation
12
+ c.color = true
13
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Configurator' do
4
+ before(:each) do
5
+ App.clear_config
6
+ App.config.files_path = File.join(File.dirname(__FILE__), '../data/')
7
+ end
8
+
9
+ context 'loading' do
10
+ it '.load_all!' do
11
+ expect { App.config.load_all! }.not_to raise_error
12
+ end
13
+
14
+ it '.load! - valid file' do
15
+ expect { App.config.load!(:db) }.not_to raise_error
16
+ end
17
+
18
+ it '.load! - invalid file' do
19
+ expect { App.config.load!(:dbs) }.to raise_error /Configuration file.*doesn't exist on path/
20
+ end
21
+ end
22
+
23
+ context 'content' do
24
+ it 'all config files' do
25
+ App.config.load_all!
26
+
27
+ aggregate_failures do
28
+ expect(App.config.test.display_errors).to be true
29
+ expect(App.config.db.username).to eq('admin')
30
+ end
31
+ end
32
+
33
+ it 'single file' do
34
+ App.config.load!(:db)
35
+ expect(App.config.db.username).to eq('admin')
36
+ end
37
+
38
+ it 'erb content' do
39
+ App.config.load!(:test)
40
+ expect(App.config.test.error_id).to eq('error_2')
41
+ end
42
+
43
+ it 'erb content - boolean' do
44
+ App.config.load!(:test)
45
+ expect(App.config.test.boolean).to eq(true)
46
+ end
47
+ end
48
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wbconfigurator
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Balos
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-03 00:00:00.000000000 Z
11
+ date: 2022-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: secure_yaml
@@ -38,13 +38,18 @@ files:
38
38
  - README.md
39
39
  - configurator.gemspec
40
40
  - lib/config/app.rb
41
+ - lib/config/patch/secure_yaml/cipher.rb
41
42
  - lib/config/version.rb
42
43
  - lib/configurator.rb
44
+ - spec/data/db.yaml
45
+ - spec/data/test.yaml
46
+ - spec/spec_helper.rb
47
+ - spec/unit/app_spec.rb
43
48
  homepage: https://github.com/wildbit/configurator
44
49
  licenses:
45
50
  - MIT
46
51
  metadata: {}
47
- post_install_message:
52
+ post_install_message:
48
53
  rdoc_options: []
49
54
  require_paths:
50
55
  - lib
@@ -59,8 +64,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
64
  - !ruby/object:Gem::Version
60
65
  version: 1.9.3
61
66
  requirements: []
62
- rubygems_version: 3.0.8
63
- signing_key:
67
+ rubygems_version: 3.2.3
68
+ signing_key:
64
69
  specification_version: 4
65
70
  summary: Config tool.
66
71
  test_files: []