payload 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/.gitignore +4 -0
- data/CONTRIBUTING.md +10 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +28 -0
- data/LICENSE +19 -0
- data/README.md +242 -0
- data/Rakefile +10 -0
- data/lib/payload/container.rb +96 -0
- data/lib/payload/controller.rb +12 -0
- data/lib/payload/decorator_chain.rb +23 -0
- data/lib/payload/definition_list.rb +41 -0
- data/lib/payload/exported_definition.rb +19 -0
- data/lib/payload/factory.rb +33 -0
- data/lib/payload/factory_definition.rb +24 -0
- data/lib/payload/mutable_container.rb +57 -0
- data/lib/payload/rack_container.rb +23 -0
- data/lib/payload/rails_loader.rb +58 -0
- data/lib/payload/railtie.rb +20 -0
- data/lib/payload/service_definition.rb +24 -0
- data/lib/payload/testing.rb +84 -0
- data/lib/payload/undefined_dependency_error.rb +5 -0
- data/lib/payload/version.rb +3 -0
- data/payload.gemspec +24 -0
- data/spec/payload/container_spec.rb +154 -0
- data/spec/payload/controller_spec.rb +32 -0
- data/spec/payload/decorator_chain_spec.rb +29 -0
- data/spec/payload/definition_list_spec.rb +80 -0
- data/spec/payload/exported_definition_spec.rb +30 -0
- data/spec/payload/factory_definition_spec.rb +49 -0
- data/spec/payload/factory_spec.rb +46 -0
- data/spec/payload/mutable_container_spec.rb +68 -0
- data/spec/payload/rack_container_spec.rb +33 -0
- data/spec/payload/rails_loader_spec.rb +62 -0
- data/spec/payload/service_definition_spec.rb +39 -0
- data/spec/spec_helper.rb +0 -0
- metadata +137 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rack/mock'
|
3
|
+
require 'payload/rack_container'
|
4
|
+
require 'payload/testing'
|
5
|
+
|
6
|
+
describe Payload::RackContainer do
|
7
|
+
include Payload::Testing
|
8
|
+
|
9
|
+
describe '#call' do
|
10
|
+
it 'injects its container into the Rack environment' do
|
11
|
+
service = double('service')
|
12
|
+
dependencies = build_container.
|
13
|
+
service(:example) { service }
|
14
|
+
app = lambda { |env| [200, {}, [env[:dependencies][:example].inspect]] }
|
15
|
+
stack = Payload::RackContainer.new(app) { dependencies }
|
16
|
+
|
17
|
+
response = Rack::MockRequest.new(stack).get('/')
|
18
|
+
|
19
|
+
expect(response.body).to eq(service.inspect)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'injects Rack environment into its container' do
|
23
|
+
dependencies = build_container.
|
24
|
+
service(:path) { |container| container[:rack_env]['PATH_INFO'] }
|
25
|
+
app = lambda { |env| [200, {}, [env[:dependencies][:path]]] }
|
26
|
+
stack = Payload::RackContainer.new(app) { dependencies }
|
27
|
+
|
28
|
+
response = Rack::MockRequest.new(stack).get('/some_path')
|
29
|
+
|
30
|
+
expect(response.body).to eq('/some_path')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'tmpdir'
|
3
|
+
require 'payload/rails_loader'
|
4
|
+
|
5
|
+
module Rails
|
6
|
+
end
|
7
|
+
|
8
|
+
describe Payload::RailsLoader do
|
9
|
+
describe '.load' do
|
10
|
+
it 'returns a proc which returns a Container from config/dependencies.rb' do
|
11
|
+
in_rails_root do
|
12
|
+
write_config 'dependencies.rb', <<-RUBY
|
13
|
+
service(:root) { |container| 'root' }
|
14
|
+
service(:using_root) { |container| "using \#{container[:root]}" }
|
15
|
+
RUBY
|
16
|
+
|
17
|
+
write_config 'payload/namespace.rb', <<-RUBY
|
18
|
+
service(:private) { |container| "private with \#{container[:root]}" }
|
19
|
+
service(:exported) { |container| "exported \#{container[:private]}" }
|
20
|
+
export :exported
|
21
|
+
RUBY
|
22
|
+
|
23
|
+
container = Payload::RailsLoader.load
|
24
|
+
|
25
|
+
expect(container[:root]).to eq('root')
|
26
|
+
expect(container[:using_root]).to eq('using root')
|
27
|
+
expect(container[:exported]).to eq('exported private with root')
|
28
|
+
expect { container[:private] }.
|
29
|
+
to raise_error(Payload::UndefinedDependencyError)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '.to_proc' do
|
35
|
+
it 'returns a proc which returns a Container from config/dependencies.rb' do
|
36
|
+
in_rails_root do
|
37
|
+
write_config 'dependencies.rb', <<-RUBY
|
38
|
+
service(:example) { |container| 'expected' }
|
39
|
+
RUBY
|
40
|
+
|
41
|
+
container = Payload::RailsLoader.to_proc.call
|
42
|
+
|
43
|
+
expect(container[:example]).to eq('expected')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def in_rails_root(&block)
|
49
|
+
Dir.mktmpdir do |path|
|
50
|
+
Dir.chdir(path) do
|
51
|
+
allow(Rails).to receive(:root).and_return(Pathname.pwd)
|
52
|
+
yield
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def write_config(path, contents)
|
58
|
+
config_path = File.join('config', path)
|
59
|
+
FileUtils.mkdir_p File.dirname(config_path)
|
60
|
+
File.open(config_path, 'w') { |file| file.write(contents) }
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,39 @@
|
|
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
|
data/spec/spec_helper.rb
ADDED
File without changes
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: payload
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- thoughtbot
|
8
|
+
- Joe Ferris
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-05-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rack
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ~>
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 2.14.1
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.14.1
|
56
|
+
description: Dependency configuration and injection for Ruby and Rails.
|
57
|
+
email: support@thoughtbot.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files:
|
61
|
+
- LICENSE
|
62
|
+
- README.md
|
63
|
+
- CONTRIBUTING.md
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- CONTRIBUTING.md
|
67
|
+
- Gemfile
|
68
|
+
- Gemfile.lock
|
69
|
+
- LICENSE
|
70
|
+
- README.md
|
71
|
+
- Rakefile
|
72
|
+
- lib/payload/container.rb
|
73
|
+
- lib/payload/controller.rb
|
74
|
+
- lib/payload/decorator_chain.rb
|
75
|
+
- lib/payload/definition_list.rb
|
76
|
+
- lib/payload/exported_definition.rb
|
77
|
+
- lib/payload/factory.rb
|
78
|
+
- lib/payload/factory_definition.rb
|
79
|
+
- lib/payload/mutable_container.rb
|
80
|
+
- lib/payload/rack_container.rb
|
81
|
+
- lib/payload/rails_loader.rb
|
82
|
+
- lib/payload/railtie.rb
|
83
|
+
- lib/payload/service_definition.rb
|
84
|
+
- lib/payload/testing.rb
|
85
|
+
- lib/payload/undefined_dependency_error.rb
|
86
|
+
- lib/payload/version.rb
|
87
|
+
- payload.gemspec
|
88
|
+
- spec/payload/container_spec.rb
|
89
|
+
- spec/payload/controller_spec.rb
|
90
|
+
- spec/payload/decorator_chain_spec.rb
|
91
|
+
- spec/payload/definition_list_spec.rb
|
92
|
+
- spec/payload/exported_definition_spec.rb
|
93
|
+
- spec/payload/factory_definition_spec.rb
|
94
|
+
- spec/payload/factory_spec.rb
|
95
|
+
- spec/payload/mutable_container_spec.rb
|
96
|
+
- spec/payload/rack_container_spec.rb
|
97
|
+
- spec/payload/rails_loader_spec.rb
|
98
|
+
- spec/payload/service_definition_spec.rb
|
99
|
+
- spec/spec_helper.rb
|
100
|
+
homepage: http://github.com/thoughtbot/payload
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata: {}
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options:
|
106
|
+
- --charset=UTF-8
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: 2.0.0
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 2.1.10
|
122
|
+
signing_key:
|
123
|
+
specification_version: 4
|
124
|
+
summary: Dependency configuration and injection for Ruby and Rails.
|
125
|
+
test_files:
|
126
|
+
- spec/payload/container_spec.rb
|
127
|
+
- spec/payload/controller_spec.rb
|
128
|
+
- spec/payload/decorator_chain_spec.rb
|
129
|
+
- spec/payload/definition_list_spec.rb
|
130
|
+
- spec/payload/exported_definition_spec.rb
|
131
|
+
- spec/payload/factory_definition_spec.rb
|
132
|
+
- spec/payload/factory_spec.rb
|
133
|
+
- spec/payload/mutable_container_spec.rb
|
134
|
+
- spec/payload/rack_container_spec.rb
|
135
|
+
- spec/payload/rails_loader_spec.rb
|
136
|
+
- spec/payload/service_definition_spec.rb
|
137
|
+
- spec/spec_helper.rb
|