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.
@@ -13,12 +13,13 @@ describe Payload::ExportedDefinition do
13
13
  end
14
14
 
15
15
  private_definition =
16
- Payload::ServiceDefinition.new(lambda { |config| 'private' })
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 = Payload::ServiceDefinition.new(block)
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.1.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-05-22 00:00:00.000000000 Z
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/factory_definition.rb
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/service_definition.rb
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/factory_definition_spec.rb
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/service_definition_spec.rb
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.10
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/factory_definition_spec.rb
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/service_definition_spec.rb
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