sinclair 2.0.1 → 2.1.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/README.md +3 -3
- data/config/check_specs.yml +2 -0
- data/config/yardstick.yml +5 -1
- data/lib/sinclair/chain_settable.rb +83 -0
- data/lib/sinclair/core_ext/object.rb +39 -0
- data/lib/sinclair/env_settable.rb +35 -17
- data/lib/sinclair/settable/builder.rb +140 -0
- data/lib/sinclair/settable/caster.rb +61 -0
- data/lib/sinclair/settable/class_methods.rb +80 -0
- data/lib/sinclair/settable.rb +115 -0
- data/lib/sinclair/version.rb +1 -1
- data/lib/sinclair.rb +2 -0
- data/spec/integration/yard/sinclair/env_settable_spec.rb +6 -25
- data/spec/integration/yard/sinclair/settable/caster_spec.rb +41 -0
- data/spec/integration/yard/sinclair/settable/class_methods_spec.rb +11 -0
- data/spec/integration/yard/sinclair/settable_spec.rb +26 -0
- data/spec/lib/sinclair/chain_settable_spec.rb +76 -0
- data/spec/lib/sinclair/env_settable_spec.rb +4 -2
- data/spec/lib/sinclair/settable/builder_spec.rb +47 -0
- data/spec/lib/sinclair/settable_spec.rb +46 -0
- data/spec/support/files/config.yml +1 -0
- data/spec/support/models/app_client.rb +1 -0
- data/spec/support/models/hash_app_client.rb +14 -0
- data/spec/support/models/hash_settable.rb +10 -0
- data/spec/support/models/json_env_settings.rb +18 -0
- data/spec/support/models/math_env_settings.rb +17 -0
- data/spec/support/models/my_app_client.rb +1 -0
- data/spec/support/models/non_default_app_client.rb +8 -0
- data/spec/support/models/yaml_file_settings.rb +26 -0
- data/spec/support/shared_examples/settable.rb +86 -0
- metadata +21 -5
- data/lib/sinclair/env_settable/builder.rb +0 -61
- data/spec/lib/sinclair/env_settable/builder_spec.rb +0 -35
- data/spec/support/shared_examples/env_settable.rb +0 -43
@@ -1,61 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class Sinclair
|
4
|
-
module EnvSettable
|
5
|
-
# @api private
|
6
|
-
# @author darthjee
|
7
|
-
#
|
8
|
-
# Env setting methods builder
|
9
|
-
#
|
10
|
-
# This builder does the magic of adding methods
|
11
|
-
# that will fetch variables from env or a default value
|
12
|
-
class Builder < Sinclair
|
13
|
-
# @param klass [Class] Class that will receive the methods
|
14
|
-
# @param prefix [String] Env keys prefix
|
15
|
-
# @param (see EnvSettable#with_settings)
|
16
|
-
def initialize(klass, prefix, *settings_name, **defaults)
|
17
|
-
super(klass, prefix: prefix)
|
18
|
-
|
19
|
-
@settings = Sinclair::InputHash.input_hash(*settings_name, **defaults)
|
20
|
-
|
21
|
-
add_all_methods
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
attr_reader :settings
|
27
|
-
# @method settings
|
28
|
-
# @private
|
29
|
-
# @api private
|
30
|
-
#
|
31
|
-
# Settings map with default values
|
32
|
-
#
|
33
|
-
# @return [Hash<Symbol,Object>]
|
34
|
-
|
35
|
-
delegate :prefix, to: :options_object
|
36
|
-
# @method prefix
|
37
|
-
# @private
|
38
|
-
# @api private
|
39
|
-
#
|
40
|
-
# Env keys prefix
|
41
|
-
#
|
42
|
-
# @return [String]
|
43
|
-
|
44
|
-
# @private
|
45
|
-
# @api private
|
46
|
-
#
|
47
|
-
# Process all settings adding the methods
|
48
|
-
#
|
49
|
-
# @return (see settings)
|
50
|
-
def add_all_methods
|
51
|
-
settings.each do |name, value|
|
52
|
-
key = [prefix, name].compact.join('_').to_s.upcase
|
53
|
-
|
54
|
-
add_class_method(name) do
|
55
|
-
ENV[key] || value
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Sinclair::EnvSettable::Builder do
|
6
|
-
subject(:settable) { Class.new }
|
7
|
-
|
8
|
-
let(:username) { 'my_login' }
|
9
|
-
let(:password) { Random.rand(10_000).to_s }
|
10
|
-
|
11
|
-
let(:builder) do
|
12
|
-
described_class.new(settable, prefix, :username, :password, host: 'my-host.com')
|
13
|
-
end
|
14
|
-
|
15
|
-
before { builder.build }
|
16
|
-
|
17
|
-
context 'when not using prefix' do
|
18
|
-
let(:prefix) { nil }
|
19
|
-
|
20
|
-
let(:username_key) { 'USERNAME' }
|
21
|
-
let(:password_key) { 'PASSWORD' }
|
22
|
-
let(:host_key) { 'HOST' }
|
23
|
-
|
24
|
-
it_behaves_like 'settings reading from env'
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'when defining a prefix' do
|
28
|
-
let(:prefix) { 'MY_APP' }
|
29
|
-
let(:username_key) { 'MY_APP_USERNAME' }
|
30
|
-
let(:password_key) { 'MY_APP_PASSWORD' }
|
31
|
-
let(:host_key) { 'MY_APP_HOST' }
|
32
|
-
|
33
|
-
it_behaves_like 'settings reading from env'
|
34
|
-
end
|
35
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
shared_examples 'settings reading from env' do
|
4
|
-
before do
|
5
|
-
ENV[username_key] = username
|
6
|
-
ENV[password_key] = password
|
7
|
-
end
|
8
|
-
|
9
|
-
after do
|
10
|
-
ENV.delete(username_key)
|
11
|
-
ENV.delete(password_key)
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'retrieves username from env' do
|
15
|
-
expect(settable.username).to eq(username)
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'retrieves password from env' do
|
19
|
-
expect(settable.password).to eq(password)
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'when defining defaults' do
|
23
|
-
it 'returns default value' do
|
24
|
-
expect(settable.host).to eq('my-host.com')
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'when setting the env variable' do
|
28
|
-
let(:other_host) { 'other-host.com' }
|
29
|
-
|
30
|
-
before do
|
31
|
-
ENV[host_key] = other_host
|
32
|
-
end
|
33
|
-
|
34
|
-
after do
|
35
|
-
ENV.delete(host_key)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'retrieves host from env' do
|
39
|
-
expect(settable.host).to eq(other_host)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|