payload 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
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