plumbum 0.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 +7 -0
- data/CHANGELOG.md +18 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/LICENSE +22 -0
- data/README.md +163 -0
- data/lib/plumbum/consumer.rb +148 -0
- data/lib/plumbum/consumers/class_methods.rb +319 -0
- data/lib/plumbum/consumers/instance_methods.rb +105 -0
- data/lib/plumbum/consumers/scoped_consumer.rb +25 -0
- data/lib/plumbum/consumers.rb +12 -0
- data/lib/plumbum/errors/immutable_error.rb +8 -0
- data/lib/plumbum/errors/invalid_dependency_error.rb +8 -0
- data/lib/plumbum/errors/invalid_key_error.rb +8 -0
- data/lib/plumbum/errors/missing_dependency_error.rb +8 -0
- data/lib/plumbum/errors.rb +13 -0
- data/lib/plumbum/many_provider.rb +86 -0
- data/lib/plumbum/one_provider.rb +56 -0
- data/lib/plumbum/parameters.rb +39 -0
- data/lib/plumbum/provider.rb +148 -0
- data/lib/plumbum/providers/lazy.rb +26 -0
- data/lib/plumbum/providers/plural.rb +31 -0
- data/lib/plumbum/providers/singular.rb +26 -0
- data/lib/plumbum/providers.rb +12 -0
- data/lib/plumbum/rspec/deferred/consumer_examples.rb +2122 -0
- data/lib/plumbum/rspec/deferred/provider_examples.rb +848 -0
- data/lib/plumbum/rspec/deferred.rb +8 -0
- data/lib/plumbum/rspec/stub_provider.rb +75 -0
- data/lib/plumbum/rspec.rb +8 -0
- data/lib/plumbum/version.rb +57 -0
- data/lib/plumbum.rb +25 -0
- metadata +91 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'sleeping_king_studios/tools/toolbox/mixin'
|
|
4
|
+
|
|
5
|
+
require 'plumbum/rspec'
|
|
6
|
+
|
|
7
|
+
module Plumbum::RSpec
|
|
8
|
+
# Helper methods for stubbing the values of Plumbum providers in RSpec tests.
|
|
9
|
+
module StubProvider
|
|
10
|
+
extend SleepingKingStudios::Tools::Toolbox::Mixin
|
|
11
|
+
|
|
12
|
+
# Class methods to extend when including StubProvider.
|
|
13
|
+
module ClassMethods
|
|
14
|
+
# (see Plumbum::RSpec::StubProvider#stub_provider)
|
|
15
|
+
def stub_provider(provider, key, value)
|
|
16
|
+
before(:example) { stub_provider(provider, key, value) }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class << self
|
|
21
|
+
# Verifies the provider has the given key.
|
|
22
|
+
#
|
|
23
|
+
# @param provider [Plumbum::Provider] the provider to stub.
|
|
24
|
+
# @param key [String, Symbol] the key to verify.
|
|
25
|
+
#
|
|
26
|
+
# @return void
|
|
27
|
+
#
|
|
28
|
+
# @raise [ArgumentError] if the key is not a valid String or Symbol.
|
|
29
|
+
# @raise [Plumbum::Errors::InvalidKeyError] if the key is not supported
|
|
30
|
+
# by the provider.
|
|
31
|
+
def validate_key(provider, key)
|
|
32
|
+
SleepingKingStudios::Tools::Toolbelt
|
|
33
|
+
.instance
|
|
34
|
+
.assertions
|
|
35
|
+
.validate_name(key, as: :key)
|
|
36
|
+
|
|
37
|
+
return if provider.has?(key)
|
|
38
|
+
|
|
39
|
+
return if provider.send(:raw_value, key.to_s) == Plumbum::UNDEFINED
|
|
40
|
+
|
|
41
|
+
provider_name =
|
|
42
|
+
provider.respond_to?(:name) ? provider.name : provider.class.name
|
|
43
|
+
|
|
44
|
+
raise Plumbum::Errors::InvalidKeyError,
|
|
45
|
+
"invalid key #{key.inspect} for #{provider_name}"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Stubs the value of a specific key for a provider for the current spec.
|
|
50
|
+
#
|
|
51
|
+
# @param provider [Plumbum::Provider] the provider to stub.
|
|
52
|
+
# @param key [String, Symbol] the key to stub.
|
|
53
|
+
# @param value [Object] the temporary value to assign for the key.
|
|
54
|
+
#
|
|
55
|
+
# @return [Symbol] the stubbed key.
|
|
56
|
+
#
|
|
57
|
+
# @raise [Plumbum::Errors::InvalidKeyError] if the key is not supported by
|
|
58
|
+
# the provider.
|
|
59
|
+
def stub_provider(provider, key, value) # rubocop:disable Metrics/AbcSize
|
|
60
|
+
StubProvider.validate_key(provider, key)
|
|
61
|
+
|
|
62
|
+
unless RSpec::Mocks.space.registered?(provider)
|
|
63
|
+
allow(provider).to receive(:get).and_call_original
|
|
64
|
+
allow(provider).to receive(:has?).and_call_original
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
presence = value != Plumbum::UNDEFINED
|
|
68
|
+
|
|
69
|
+
allow(provider).to receive(:get).with(key.to_s).and_return(value)
|
|
70
|
+
allow(provider).to receive(:get).with(key.to_sym).and_return(value)
|
|
71
|
+
allow(provider).to receive(:has?).with(key.to_s).and_return(presence)
|
|
72
|
+
allow(provider).to receive(:has?).with(key.to_sym).and_return(presence)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Plumbum
|
|
4
|
+
# @api private
|
|
5
|
+
#
|
|
6
|
+
# The current version of the gem.
|
|
7
|
+
#
|
|
8
|
+
# @see http://semver.org/
|
|
9
|
+
module Version
|
|
10
|
+
# Major version.
|
|
11
|
+
MAJOR = 0
|
|
12
|
+
# Minor version.
|
|
13
|
+
MINOR = 1
|
|
14
|
+
# Patch version.
|
|
15
|
+
PATCH = 0
|
|
16
|
+
# Prerelease version.
|
|
17
|
+
PRERELEASE = nil
|
|
18
|
+
# Build metadata.
|
|
19
|
+
BUILD = nil
|
|
20
|
+
|
|
21
|
+
class << self
|
|
22
|
+
# Generates the gem version string from the Version constants.
|
|
23
|
+
#
|
|
24
|
+
# Inlined here because dependencies may not be loaded when processing a
|
|
25
|
+
# gemspec, which results in the user being unable to install the gem for
|
|
26
|
+
# the first time.
|
|
27
|
+
#
|
|
28
|
+
# @see SleepingKingStudios::Tools::SemanticVersion#to_gem_version
|
|
29
|
+
def to_gem_version
|
|
30
|
+
str = "#{MAJOR}.#{MINOR}.#{PATCH}"
|
|
31
|
+
|
|
32
|
+
prerelease = value_of(:PRERELEASE)
|
|
33
|
+
str = "#{str}.#{prerelease}" if prerelease
|
|
34
|
+
|
|
35
|
+
build = value_of(:BUILD)
|
|
36
|
+
str = "#{str}.#{build}" if build
|
|
37
|
+
|
|
38
|
+
str
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def value_of(constant)
|
|
44
|
+
return nil unless const_defined?(constant)
|
|
45
|
+
|
|
46
|
+
value = const_get(constant)
|
|
47
|
+
|
|
48
|
+
return nil if value.respond_to?(:empty?) && value.empty?
|
|
49
|
+
|
|
50
|
+
value
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# The current version of the gem.
|
|
56
|
+
VERSION = Version.to_gem_version
|
|
57
|
+
end
|
data/lib/plumbum.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Dependency injection and management library for Ruby.
|
|
4
|
+
module Plumbum
|
|
5
|
+
autoload :Consumer, 'plumbum/consumer'
|
|
6
|
+
autoload :Consumers, 'plumbum/consumers'
|
|
7
|
+
autoload :Errors, 'plumbum/errors'
|
|
8
|
+
autoload :ManyProvider, 'plumbum/many_provider'
|
|
9
|
+
autoload :OneProvider, 'plumbum/one_provider'
|
|
10
|
+
autoload :Parameters, 'plumbum/parameters'
|
|
11
|
+
autoload :Provider, 'plumbum/provider'
|
|
12
|
+
autoload :Providers, 'plumbum/providers'
|
|
13
|
+
|
|
14
|
+
# Object representing an undefined or uninitialized value.
|
|
15
|
+
UNDEFINED = Object.new.freeze
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
# @return [String] the current version of the gem.
|
|
19
|
+
def version
|
|
20
|
+
VERSION
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
require 'plumbum/version'
|
metadata
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: plumbum
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Rob "Merlin" Smith
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: sleeping_king_studios-tools
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '1.3'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '1.3'
|
|
26
|
+
description: |-
|
|
27
|
+
A minimal dependency injection framework for Ruby, using vanilla Ruby
|
|
28
|
+
semantics to define and reference dependencies from different providers.
|
|
29
|
+
email:
|
|
30
|
+
- merlin@sleepingkingstudios.com
|
|
31
|
+
executables: []
|
|
32
|
+
extensions: []
|
|
33
|
+
extra_rdoc_files: []
|
|
34
|
+
files:
|
|
35
|
+
- CHANGELOG.md
|
|
36
|
+
- CODE_OF_CONDUCT.md
|
|
37
|
+
- LICENSE
|
|
38
|
+
- README.md
|
|
39
|
+
- lib/plumbum.rb
|
|
40
|
+
- lib/plumbum/consumer.rb
|
|
41
|
+
- lib/plumbum/consumers.rb
|
|
42
|
+
- lib/plumbum/consumers/class_methods.rb
|
|
43
|
+
- lib/plumbum/consumers/instance_methods.rb
|
|
44
|
+
- lib/plumbum/consumers/scoped_consumer.rb
|
|
45
|
+
- lib/plumbum/errors.rb
|
|
46
|
+
- lib/plumbum/errors/immutable_error.rb
|
|
47
|
+
- lib/plumbum/errors/invalid_dependency_error.rb
|
|
48
|
+
- lib/plumbum/errors/invalid_key_error.rb
|
|
49
|
+
- lib/plumbum/errors/missing_dependency_error.rb
|
|
50
|
+
- lib/plumbum/many_provider.rb
|
|
51
|
+
- lib/plumbum/one_provider.rb
|
|
52
|
+
- lib/plumbum/parameters.rb
|
|
53
|
+
- lib/plumbum/provider.rb
|
|
54
|
+
- lib/plumbum/providers.rb
|
|
55
|
+
- lib/plumbum/providers/lazy.rb
|
|
56
|
+
- lib/plumbum/providers/plural.rb
|
|
57
|
+
- lib/plumbum/providers/singular.rb
|
|
58
|
+
- lib/plumbum/rspec.rb
|
|
59
|
+
- lib/plumbum/rspec/deferred.rb
|
|
60
|
+
- lib/plumbum/rspec/deferred/consumer_examples.rb
|
|
61
|
+
- lib/plumbum/rspec/deferred/provider_examples.rb
|
|
62
|
+
- lib/plumbum/rspec/stub_provider.rb
|
|
63
|
+
- lib/plumbum/version.rb
|
|
64
|
+
homepage: http://sleepingkingstudios.com
|
|
65
|
+
licenses:
|
|
66
|
+
- MIT
|
|
67
|
+
metadata:
|
|
68
|
+
bug_tracker_uri: https://github.com/sleepingkingstudios/plumbum/issues
|
|
69
|
+
source_code_uri: https://github.com/sleepingkingstudios/plumbum
|
|
70
|
+
rubygems_mfa_required: 'true'
|
|
71
|
+
rdoc_options: []
|
|
72
|
+
require_paths:
|
|
73
|
+
- lib
|
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
|
+
requirements:
|
|
76
|
+
- - ">="
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: '3.2'
|
|
79
|
+
- - "<"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '5'
|
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
|
+
requirements:
|
|
84
|
+
- - ">="
|
|
85
|
+
- !ruby/object:Gem::Version
|
|
86
|
+
version: '0'
|
|
87
|
+
requirements: []
|
|
88
|
+
rubygems_version: 4.0.10
|
|
89
|
+
specification_version: 4
|
|
90
|
+
summary: A dependency injection and management library for Ruby.
|
|
91
|
+
test_files: []
|