payload 0.1.0 → 0.2.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/Gemfile.lock +1 -1
- data/README.md +135 -92
- data/lib/payload/container.rb +7 -10
- data/lib/payload/decorator_chain.rb +16 -2
- data/lib/payload/definition.rb +39 -0
- data/lib/payload/definition_list.rb +11 -6
- data/lib/payload/dependency_already_defined_error.rb +5 -0
- data/lib/payload/exported_definition.rb +12 -2
- data/lib/payload/factory.rb +1 -1
- data/lib/payload/factory_resolver.rb +18 -0
- data/lib/payload/service_resolver.rb +17 -0
- data/lib/payload/undefined_definition.rb +37 -0
- data/lib/payload/version.rb +1 -1
- data/spec/payload/container_spec.rb +11 -3
- data/spec/payload/decorator_chain_spec.rb +34 -0
- data/spec/payload/definition_list_spec.rb +78 -27
- data/spec/payload/definition_spec.rb +72 -0
- data/spec/payload/exported_definition_spec.rb +25 -2
- data/spec/payload/factory_resolver_spec.rb +22 -0
- data/spec/payload/service_resolver_spec.rb +23 -0
- data/spec/payload/undefined_definition_spec.rb +65 -0
- metadata +26 -19
- data/lib/payload/factory_definition.rb +0 -24
- data/lib/payload/service_definition.rb +0 -24
- data/spec/payload/factory_definition_spec.rb +0 -49
- data/spec/payload/service_definition_spec.rb +0 -39
@@ -13,12 +13,13 @@ describe Payload::ExportedDefinition do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
private_definition =
|
16
|
-
Payload::
|
16
|
+
Payload::ServiceResolver.new(lambda { |config| 'private' })
|
17
17
|
private_definitions = Payload::DefinitionList.
|
18
18
|
new.
|
19
19
|
add(:private, private_definition)
|
20
20
|
container = build_container.service(:container) { |config| 'container' }
|
21
|
-
definition =
|
21
|
+
definition =
|
22
|
+
Payload::Definition.new(Payload::ServiceResolver.new(block))
|
22
23
|
exported_definition =
|
23
24
|
Payload::ExportedDefinition.new(definition, private_definitions)
|
24
25
|
|
@@ -27,4 +28,26 @@ describe Payload::ExportedDefinition do
|
|
27
28
|
expect(result).to eq('Ran with private and container')
|
28
29
|
end
|
29
30
|
end
|
31
|
+
|
32
|
+
describe '#==' do
|
33
|
+
it 'is true with the same definitions' do
|
34
|
+
expect(Payload::ExportedDefinition.new(:one, [:two, :three])).
|
35
|
+
to eq(Payload::ExportedDefinition.new(:one, [:two, :three]))
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'is false with a different public definition' do
|
39
|
+
expect(Payload::ExportedDefinition.new(:one, [:two, :three])).
|
40
|
+
not_to eq(Payload::ExportedDefinition.new(:other, [:two, :three]))
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'is false with different private definitions' do
|
44
|
+
expect(Payload::ExportedDefinition.new(:one, [:two, :three])).
|
45
|
+
not_to eq(Payload::ExportedDefinition.new(:one, [:two, :other]))
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'is false with another type' do
|
49
|
+
expect(Payload::ExportedDefinition.new(:one, [:two, :three])).
|
50
|
+
not_to eq(:other)
|
51
|
+
end
|
52
|
+
end
|
30
53
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'payload/factory_resolver'
|
3
|
+
|
4
|
+
describe Payload::FactoryResolver do
|
5
|
+
describe '#resolve' do
|
6
|
+
it 'returns a new factory from the container, block, and decorators' do
|
7
|
+
block = double('block')
|
8
|
+
factory = double('factory')
|
9
|
+
container = double('container')
|
10
|
+
decorators = double('decorators')
|
11
|
+
definition = Payload::FactoryResolver.new(block)
|
12
|
+
Payload::Factory.
|
13
|
+
stub(:new).
|
14
|
+
with(container, block, decorators).
|
15
|
+
and_return(factory)
|
16
|
+
|
17
|
+
result = definition.resolve(container, decorators)
|
18
|
+
|
19
|
+
expect(result).to eq(factory)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'payload/service_resolver'
|
3
|
+
|
4
|
+
describe Payload::ServiceResolver do
|
5
|
+
describe '#resolve' do
|
6
|
+
it 'returns a new service using the block and decorators' do
|
7
|
+
dependency = double('dependency')
|
8
|
+
container = { dependency: dependency }
|
9
|
+
decorated = double('decorated')
|
10
|
+
decorators = double('decorators')
|
11
|
+
decorators.
|
12
|
+
stub(:decorate).
|
13
|
+
with(dependency, container).
|
14
|
+
and_return(decorated)
|
15
|
+
block = lambda { |yielded| yielded[:dependency] }
|
16
|
+
service = Payload::ServiceResolver.new(block)
|
17
|
+
|
18
|
+
result = service.resolve(container, decorators)
|
19
|
+
|
20
|
+
expect(result).to eq(decorated)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'payload/undefined_definition'
|
3
|
+
|
4
|
+
describe Payload::UndefinedDefinition do
|
5
|
+
describe '#==' do
|
6
|
+
context 'with the same name' do
|
7
|
+
it 'returns true' do
|
8
|
+
expect(Payload::UndefinedDefinition.new(:name)).
|
9
|
+
to eq(Payload::UndefinedDefinition.new(:name))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with different names' do
|
14
|
+
it 'returns false' do
|
15
|
+
expect(Payload::UndefinedDefinition.new(:name)).
|
16
|
+
not_to eq(Payload::UndefinedDefinition.new(:other))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'with a different type' do
|
21
|
+
it 'returns false' do
|
22
|
+
expect(Payload::UndefinedDefinition.new(:name)).
|
23
|
+
not_to eq(:other)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#resolve' do
|
29
|
+
it 'raises an undefined dependency error' do
|
30
|
+
definition = Payload::UndefinedDefinition.new(:name)
|
31
|
+
|
32
|
+
expect { definition.resolve(double('conatainer')) }.
|
33
|
+
to raise_error(Payload::UndefinedDependencyError, /name/)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#decorate' do
|
38
|
+
it 'saves decorators for its replacement' do
|
39
|
+
first = double('decorator_one')
|
40
|
+
second = double('decorator_two')
|
41
|
+
replacement = double('replacement')
|
42
|
+
replacement.stub(:decorate).and_return(replacement)
|
43
|
+
definition = Payload::UndefinedDefinition.new(:name)
|
44
|
+
|
45
|
+
defined = definition.
|
46
|
+
decorate(first).
|
47
|
+
decorate(second).
|
48
|
+
set(replacement)
|
49
|
+
|
50
|
+
expect(defined).to eq(replacement)
|
51
|
+
expect(replacement).to have_received(:decorate).with(first)
|
52
|
+
expect(replacement).to have_received(:decorate).with(second)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#set' do
|
57
|
+
it 'returns the replacement dependency' do
|
58
|
+
replacement = double('replacement')
|
59
|
+
definition = Payload::UndefinedDefinition.new(:name)
|
60
|
+
|
61
|
+
expect(definition.set(replacement)).
|
62
|
+
to eq(replacement)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: payload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thoughtbot
|
@@ -9,48 +9,48 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-10-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '0'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rake
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: 2.14.1
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: 2.14.1
|
56
56
|
description: Dependency configuration and injection for Ruby and Rails.
|
@@ -62,7 +62,7 @@ extra_rdoc_files:
|
|
62
62
|
- README.md
|
63
63
|
- CONTRIBUTING.md
|
64
64
|
files:
|
65
|
-
- .gitignore
|
65
|
+
- ".gitignore"
|
66
66
|
- CONTRIBUTING.md
|
67
67
|
- Gemfile
|
68
68
|
- Gemfile.lock
|
@@ -72,16 +72,19 @@ files:
|
|
72
72
|
- lib/payload/container.rb
|
73
73
|
- lib/payload/controller.rb
|
74
74
|
- lib/payload/decorator_chain.rb
|
75
|
+
- lib/payload/definition.rb
|
75
76
|
- lib/payload/definition_list.rb
|
77
|
+
- lib/payload/dependency_already_defined_error.rb
|
76
78
|
- lib/payload/exported_definition.rb
|
77
79
|
- lib/payload/factory.rb
|
78
|
-
- lib/payload/
|
80
|
+
- lib/payload/factory_resolver.rb
|
79
81
|
- lib/payload/mutable_container.rb
|
80
82
|
- lib/payload/rack_container.rb
|
81
83
|
- lib/payload/rails_loader.rb
|
82
84
|
- lib/payload/railtie.rb
|
83
|
-
- lib/payload/
|
85
|
+
- lib/payload/service_resolver.rb
|
84
86
|
- lib/payload/testing.rb
|
87
|
+
- lib/payload/undefined_definition.rb
|
85
88
|
- lib/payload/undefined_dependency_error.rb
|
86
89
|
- lib/payload/version.rb
|
87
90
|
- payload.gemspec
|
@@ -89,13 +92,15 @@ files:
|
|
89
92
|
- spec/payload/controller_spec.rb
|
90
93
|
- spec/payload/decorator_chain_spec.rb
|
91
94
|
- spec/payload/definition_list_spec.rb
|
95
|
+
- spec/payload/definition_spec.rb
|
92
96
|
- spec/payload/exported_definition_spec.rb
|
93
|
-
- spec/payload/
|
97
|
+
- spec/payload/factory_resolver_spec.rb
|
94
98
|
- spec/payload/factory_spec.rb
|
95
99
|
- spec/payload/mutable_container_spec.rb
|
96
100
|
- spec/payload/rack_container_spec.rb
|
97
101
|
- spec/payload/rails_loader_spec.rb
|
98
|
-
- spec/payload/
|
102
|
+
- spec/payload/service_resolver_spec.rb
|
103
|
+
- spec/payload/undefined_definition_spec.rb
|
99
104
|
- spec/spec_helper.rb
|
100
105
|
homepage: http://github.com/thoughtbot/payload
|
101
106
|
licenses:
|
@@ -103,22 +108,22 @@ licenses:
|
|
103
108
|
metadata: {}
|
104
109
|
post_install_message:
|
105
110
|
rdoc_options:
|
106
|
-
- --charset=UTF-8
|
111
|
+
- "--charset=UTF-8"
|
107
112
|
require_paths:
|
108
113
|
- lib
|
109
114
|
required_ruby_version: !ruby/object:Gem::Requirement
|
110
115
|
requirements:
|
111
|
-
- -
|
116
|
+
- - ">="
|
112
117
|
- !ruby/object:Gem::Version
|
113
118
|
version: 2.0.0
|
114
119
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
120
|
requirements:
|
116
|
-
- -
|
121
|
+
- - ">="
|
117
122
|
- !ruby/object:Gem::Version
|
118
123
|
version: '0'
|
119
124
|
requirements: []
|
120
125
|
rubyforge_project:
|
121
|
-
rubygems_version: 2.1
|
126
|
+
rubygems_version: 2.4.1
|
122
127
|
signing_key:
|
123
128
|
specification_version: 4
|
124
129
|
summary: Dependency configuration and injection for Ruby and Rails.
|
@@ -127,11 +132,13 @@ test_files:
|
|
127
132
|
- spec/payload/controller_spec.rb
|
128
133
|
- spec/payload/decorator_chain_spec.rb
|
129
134
|
- spec/payload/definition_list_spec.rb
|
135
|
+
- spec/payload/definition_spec.rb
|
130
136
|
- spec/payload/exported_definition_spec.rb
|
131
|
-
- spec/payload/
|
137
|
+
- spec/payload/factory_resolver_spec.rb
|
132
138
|
- spec/payload/factory_spec.rb
|
133
139
|
- spec/payload/mutable_container_spec.rb
|
134
140
|
- spec/payload/rack_container_spec.rb
|
135
141
|
- spec/payload/rails_loader_spec.rb
|
136
|
-
- spec/payload/
|
142
|
+
- spec/payload/service_resolver_spec.rb
|
143
|
+
- spec/payload/undefined_definition_spec.rb
|
137
144
|
- spec/spec_helper.rb
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'payload/decorator_chain'
|
2
|
-
require 'payload/factory'
|
3
|
-
|
4
|
-
module Payload
|
5
|
-
# Encapsulates logic for resolving factory definitions.
|
6
|
-
#
|
7
|
-
# Used internally by {Container}. Use {Container#factory}.
|
8
|
-
#
|
9
|
-
# @api private
|
10
|
-
class FactoryDefinition
|
11
|
-
def initialize(block, decorators = DecoratorChain.new)
|
12
|
-
@block = block
|
13
|
-
@decorators = decorators
|
14
|
-
end
|
15
|
-
|
16
|
-
def resolve(container)
|
17
|
-
Factory.new(container, @block, @decorators)
|
18
|
-
end
|
19
|
-
|
20
|
-
def decorate(block)
|
21
|
-
self.class.new(@block, @decorators.add(block))
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'payload/decorator_chain'
|
2
|
-
|
3
|
-
module Payload
|
4
|
-
# Encapsulates logic for resolving service definitions.
|
5
|
-
#
|
6
|
-
# Used internally by {Container}. Use {Container#service}.
|
7
|
-
#
|
8
|
-
# @api private
|
9
|
-
class ServiceDefinition
|
10
|
-
def initialize(block, decorators = DecoratorChain.new)
|
11
|
-
@block = block
|
12
|
-
@decorators = decorators
|
13
|
-
end
|
14
|
-
|
15
|
-
def resolve(container)
|
16
|
-
base = @block.call(container)
|
17
|
-
@decorators.decorate(base, container)
|
18
|
-
end
|
19
|
-
|
20
|
-
def decorate(block)
|
21
|
-
self.class.new(@block, @decorators.add(block))
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'payload/factory_definition'
|
3
|
-
require 'payload/testing'
|
4
|
-
|
5
|
-
describe Payload::FactoryDefinition do
|
6
|
-
include Payload::Testing
|
7
|
-
|
8
|
-
describe '#resolve' do
|
9
|
-
it 'returns an object that responds to new' do
|
10
|
-
block = lambda do |config|
|
11
|
-
"#{config[:from_new]} and #{config[:from_container]}"
|
12
|
-
end
|
13
|
-
container = build_container
|
14
|
-
.service(:from_container) { 'From container' }
|
15
|
-
definition = Payload::FactoryDefinition.new(block)
|
16
|
-
|
17
|
-
result = definition.resolve(container).new(from_new: 'From new')
|
18
|
-
|
19
|
-
expect(result).to eq('From new and From container')
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '#decorate' do
|
24
|
-
it 'returns a decorated object' do
|
25
|
-
block = lambda do |config|
|
26
|
-
"#{config[:from_new]} and #{config[:from_container]}"
|
27
|
-
end
|
28
|
-
first = lambda do |component, config|
|
29
|
-
"Decorated #{component.inspect} with #{config[:from_new]}"
|
30
|
-
end
|
31
|
-
second = lambda do |component, config|
|
32
|
-
"#{component} and #{config[:other]}"
|
33
|
-
end
|
34
|
-
container = build_container
|
35
|
-
.service(:from_container) { 'From container' }
|
36
|
-
.service(:other) { 'Other' }
|
37
|
-
definition = Payload::FactoryDefinition
|
38
|
-
.new(block)
|
39
|
-
.decorate(first)
|
40
|
-
.decorate(second)
|
41
|
-
|
42
|
-
result = definition.resolve(container).new(from_new: 'From new')
|
43
|
-
|
44
|
-
expect(result).to eq(
|
45
|
-
'Decorated "From new and From container" with From new and Other'
|
46
|
-
)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'payload/service_definition'
|
3
|
-
|
4
|
-
describe Payload::ServiceDefinition do
|
5
|
-
describe '#resolve' do
|
6
|
-
it 'returns a new service using the block' do
|
7
|
-
block = lambda { |container| "Ran with #{container[:dependency]}" }
|
8
|
-
service = Payload::ServiceDefinition.new(block)
|
9
|
-
|
10
|
-
result = service.resolve(dependency: 'expected service')
|
11
|
-
|
12
|
-
expect(result).to eq('Ran with expected service')
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '#decorate' do
|
17
|
-
it 'returns a new decorated service' do
|
18
|
-
block = lambda { |container| "Ran with #{container[:dependency]}" }
|
19
|
-
first = lambda do |component, container|
|
20
|
-
"decorated #{component} with #{container[:dependency]}"
|
21
|
-
end
|
22
|
-
second = lambda do |component, container|
|
23
|
-
"#{component} and #{container[:other_dependency]}"
|
24
|
-
end
|
25
|
-
service = Payload::ServiceDefinition
|
26
|
-
.new(block)
|
27
|
-
.decorate(first)
|
28
|
-
.decorate(second)
|
29
|
-
|
30
|
-
result = service.resolve(
|
31
|
-
dependency: 'service',
|
32
|
-
other_dependency: 'other service'
|
33
|
-
)
|
34
|
-
|
35
|
-
expect(result)
|
36
|
-
.to eq('decorated Ran with service with service and other service')
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|