alephant-broker 0.1.6 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/alephant/broker.rb +40 -5
- data/lib/alephant/broker/component.rb +74 -0
- data/lib/alephant/broker/{call_environment.rb → environment.rb} +11 -7
- data/lib/alephant/broker/request.rb +13 -0
- data/lib/alephant/broker/request/asset.rb +37 -0
- data/lib/alephant/broker/request/batch.rb +38 -0
- data/lib/alephant/broker/request/factory.rb +24 -0
- data/lib/alephant/broker/request/handler.rb +35 -0
- data/lib/alephant/broker/response.rb +23 -0
- data/lib/alephant/broker/response/asset.rb +28 -0
- data/lib/alephant/broker/response/base.rb +60 -0
- data/lib/alephant/broker/response/batch.rb +45 -0
- data/lib/alephant/broker/response/factory.rb +27 -0
- data/lib/alephant/broker/version.rb +1 -1
- data/spec/rack_spec.rb +14 -15
- data/spec/spec_helper.rb +0 -1
- metadata +14 -27
- data/lib/alephant/broker/app.rb +0 -20
- data/lib/alephant/broker/app/rack.rb +0 -25
- data/lib/alephant/broker/models/request.rb +0 -41
- data/lib/alephant/broker/models/request/error_request.rb +0 -11
- data/lib/alephant/broker/models/request/get_request.rb +0 -38
- data/lib/alephant/broker/models/request/notfound_request.rb +0 -11
- data/lib/alephant/broker/models/request/post_request.rb +0 -50
- data/lib/alephant/broker/models/request/status_request.rb +0 -11
- data/lib/alephant/broker/models/request_factory.rb +0 -26
- data/lib/alephant/broker/models/request_handler.rb +0 -50
- data/lib/alephant/broker/models/response.rb +0 -27
- data/lib/alephant/broker/models/response/asset_response.rb +0 -90
- data/lib/alephant/broker/models/response/batch_response.rb +0 -61
- data/lib/alephant/broker/models/response_factory.rb +0 -39
- data/spec/asset_response_spec.rb +0 -78
- data/spec/batch_response_spec.rb +0 -87
- data/spec/get_request_spec.rb +0 -72
- data/spec/post_request_spec.rb +0 -49
- data/spec/response_factory_spec.rb +0 -60
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'alephant/logger'
|
2
|
+
require 'peach'
|
3
|
+
|
4
|
+
module Alephant
|
5
|
+
module Broker
|
6
|
+
module Response
|
7
|
+
class Batch < Base
|
8
|
+
include Logger
|
9
|
+
|
10
|
+
attr_reader :components, :batch_id
|
11
|
+
|
12
|
+
def initialize(components, batch_id)
|
13
|
+
@components = components
|
14
|
+
@batch_id = batch_id
|
15
|
+
|
16
|
+
super(200, 'application/json')
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup
|
20
|
+
@content = JSON.generate({
|
21
|
+
"batch_id" => batch_id,
|
22
|
+
"components" => json
|
23
|
+
})
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def json
|
29
|
+
logger.info("Broker: Batch load started (#{batch_id})")
|
30
|
+
result = components.pmap do | component |
|
31
|
+
{
|
32
|
+
'component' => component.id,
|
33
|
+
'options' => component.options
|
34
|
+
}.merge load(component)
|
35
|
+
end
|
36
|
+
logger.info("Broker: Batch load done (#{batch_id})")
|
37
|
+
|
38
|
+
result
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'alephant/broker/response'
|
2
|
+
|
3
|
+
module Alephant
|
4
|
+
module Broker
|
5
|
+
module Response
|
6
|
+
class Factory
|
7
|
+
def self.response_for(request)
|
8
|
+
case request
|
9
|
+
when Request::Asset
|
10
|
+
Asset.new(request.component)
|
11
|
+
when Request::Batch
|
12
|
+
Batch.new(request.components, request.batch_id)
|
13
|
+
when Request::Status
|
14
|
+
Status.new
|
15
|
+
else
|
16
|
+
NotFound.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.error
|
21
|
+
ServerError.new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
data/spec/rack_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
ENV['RACK_ENV'] = 'test'
|
2
2
|
|
3
|
+
require 'spec_helper'
|
3
4
|
require 'rack/test'
|
4
|
-
require 'alephant/broker
|
5
|
-
require 'request_store'
|
5
|
+
require 'alephant/broker'
|
6
6
|
|
7
7
|
RSpec.configure do |conf|
|
8
8
|
conf.include Rack::Test::Methods
|
@@ -10,25 +10,24 @@ end
|
|
10
10
|
|
11
11
|
describe 'Broker Rack Application' do
|
12
12
|
before do
|
13
|
-
|
13
|
+
Alephant::Broker::Component
|
14
|
+
.any_instance
|
15
|
+
.stub(:load)
|
16
|
+
.and_return('Test')
|
14
17
|
|
15
|
-
Alephant::Broker::
|
18
|
+
Alephant::Broker::Component
|
16
19
|
.any_instance
|
17
|
-
.stub(:
|
20
|
+
.stub(:version)
|
21
|
+
.and_return(1)
|
18
22
|
|
19
|
-
Alephant::Broker::
|
23
|
+
Alephant::Broker::Response::Asset
|
20
24
|
.any_instance
|
21
25
|
.stub(:status)
|
22
26
|
.and_return(200)
|
23
|
-
|
24
|
-
Alephant::Broker::AssetResponse
|
25
|
-
.any_instance
|
26
|
-
.stub(:content)
|
27
|
-
.and_return('Test')
|
28
27
|
end
|
29
28
|
|
30
29
|
def app
|
31
|
-
Alephant::Broker::
|
30
|
+
Alephant::Broker::Application.new({
|
32
31
|
:lookup_table_name => 'test_table',
|
33
32
|
:bucket_id => 'test_bucket',
|
34
33
|
:path => 'bucket_path'
|
@@ -62,7 +61,7 @@ describe 'Broker Rack Application' do
|
|
62
61
|
end
|
63
62
|
|
64
63
|
it "Tests 404 when lookup doesn't return a valid location" do
|
65
|
-
Alephant::Broker::
|
64
|
+
Alephant::Broker::Response::Asset
|
66
65
|
.any_instance
|
67
66
|
.stub(:status)
|
68
67
|
.and_return(404)
|
@@ -73,7 +72,7 @@ describe 'Broker Rack Application' do
|
|
73
72
|
end
|
74
73
|
|
75
74
|
it "Tests 500 when exception is raised in application" do
|
76
|
-
Alephant::Broker::
|
75
|
+
Alephant::Broker::Response::Asset
|
77
76
|
.any_instance
|
78
77
|
.stub(:status)
|
79
78
|
.and_return(500)
|
@@ -85,7 +84,7 @@ describe 'Broker Rack Application' do
|
|
85
84
|
|
86
85
|
it "Test batch asset data is returned" do
|
87
86
|
json = '{"batch_id":"baz","components":[{"component":"ni_council_results_table"},{"component":"ni_council_results_table"}]}'
|
88
|
-
compiled_json = '{"batch_id":"baz","components":[{"component":"ni_council_results_table","
|
87
|
+
compiled_json = '{"batch_id":"baz","components":[{"component":"ni_council_results_table","options":{},"body":"Test","status":200},{"component":"ni_council_results_table","options":{},"body":"Test","status":200}]}'
|
89
88
|
|
90
89
|
post '/components/batch', json, "CONTENT_TYPE" => "application/json"
|
91
90
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alephant-broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Jack
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
11
|
+
date: 2014-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -251,30 +251,22 @@ files:
|
|
251
251
|
- Rakefile
|
252
252
|
- alephant-broker.gemspec
|
253
253
|
- lib/alephant/broker.rb
|
254
|
-
- lib/alephant/broker/
|
255
|
-
- lib/alephant/broker/
|
256
|
-
- lib/alephant/broker/call_environment.rb
|
254
|
+
- lib/alephant/broker/component.rb
|
255
|
+
- lib/alephant/broker/environment.rb
|
257
256
|
- lib/alephant/broker/errors/invalid_asset_id.rb
|
258
257
|
- lib/alephant/broker/errors/invalid_cache_key.rb
|
259
|
-
- lib/alephant/broker/
|
260
|
-
- lib/alephant/broker/
|
261
|
-
- lib/alephant/broker/
|
262
|
-
- lib/alephant/broker/
|
263
|
-
- lib/alephant/broker/
|
264
|
-
- lib/alephant/broker/
|
265
|
-
- lib/alephant/broker/
|
266
|
-
- lib/alephant/broker/
|
267
|
-
- lib/alephant/broker/
|
268
|
-
- lib/alephant/broker/
|
269
|
-
- lib/alephant/broker/models/response/batch_response.rb
|
270
|
-
- lib/alephant/broker/models/response_factory.rb
|
258
|
+
- lib/alephant/broker/request.rb
|
259
|
+
- lib/alephant/broker/request/asset.rb
|
260
|
+
- lib/alephant/broker/request/batch.rb
|
261
|
+
- lib/alephant/broker/request/factory.rb
|
262
|
+
- lib/alephant/broker/request/handler.rb
|
263
|
+
- lib/alephant/broker/response.rb
|
264
|
+
- lib/alephant/broker/response/asset.rb
|
265
|
+
- lib/alephant/broker/response/base.rb
|
266
|
+
- lib/alephant/broker/response/batch.rb
|
267
|
+
- lib/alephant/broker/response/factory.rb
|
271
268
|
- lib/alephant/broker/version.rb
|
272
|
-
- spec/asset_response_spec.rb
|
273
|
-
- spec/batch_response_spec.rb
|
274
|
-
- spec/get_request_spec.rb
|
275
|
-
- spec/post_request_spec.rb
|
276
269
|
- spec/rack_spec.rb
|
277
|
-
- spec/response_factory_spec.rb
|
278
270
|
- spec/spec_helper.rb
|
279
271
|
homepage: https://github.com/BBC-News/alephant-broker
|
280
272
|
licenses:
|
@@ -301,10 +293,5 @@ signing_key:
|
|
301
293
|
specification_version: 4
|
302
294
|
summary: Brokers requests for alephant components
|
303
295
|
test_files:
|
304
|
-
- spec/asset_response_spec.rb
|
305
|
-
- spec/batch_response_spec.rb
|
306
|
-
- spec/get_request_spec.rb
|
307
|
-
- spec/post_request_spec.rb
|
308
296
|
- spec/rack_spec.rb
|
309
|
-
- spec/response_factory_spec.rb
|
310
297
|
- spec/spec_helper.rb
|
data/lib/alephant/broker/app.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
$: << File.dirname(__FILE__)
|
2
|
-
|
3
|
-
require 'alephant/broker'
|
4
|
-
require 'alephant/logger'
|
5
|
-
|
6
|
-
module Alephant
|
7
|
-
module Broker
|
8
|
-
class Application
|
9
|
-
include Logger
|
10
|
-
|
11
|
-
def initialize(config)
|
12
|
-
@config = config
|
13
|
-
end
|
14
|
-
|
15
|
-
def handle
|
16
|
-
Alephant::Broker.handle(@config)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
$: << File.dirname(__FILE__)
|
2
|
-
|
3
|
-
require 'alephant/broker/app'
|
4
|
-
require 'alephant/broker/call_environment'
|
5
|
-
|
6
|
-
module Alephant
|
7
|
-
module Broker
|
8
|
-
class RackApplication < Application
|
9
|
-
|
10
|
-
def call(env)
|
11
|
-
RequestStore.store[:env] ||= CallEnvironment.new(env)
|
12
|
-
response = handle
|
13
|
-
send response
|
14
|
-
end
|
15
|
-
|
16
|
-
def send(response)
|
17
|
-
[
|
18
|
-
response.status,
|
19
|
-
{ "Content-Type" => response.content_type },
|
20
|
-
[ response.content.to_s ]
|
21
|
-
]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'alephant/logger'
|
2
|
-
|
3
|
-
module Alephant
|
4
|
-
module Broker
|
5
|
-
class Request
|
6
|
-
include Logger
|
7
|
-
attr_reader :type
|
8
|
-
|
9
|
-
DEFAULT_EXTENSION = :html
|
10
|
-
|
11
|
-
@@extension_mapping = {
|
12
|
-
:html => 'text/html',
|
13
|
-
:json => 'application/json'
|
14
|
-
}
|
15
|
-
|
16
|
-
def initialize(request_type)
|
17
|
-
logger.info("Broker.request: Type: #{request_type}")
|
18
|
-
@type = request_type
|
19
|
-
end
|
20
|
-
|
21
|
-
def options_from(query_string)
|
22
|
-
query_string.split('&').reduce({}) do |object, key_pair|
|
23
|
-
key, value = key_pair.split('=')
|
24
|
-
object.tap { |o| o.store(key.to_sym, value) }
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def get_type_from(request_parts)
|
29
|
-
request_parts[1]
|
30
|
-
end
|
31
|
-
|
32
|
-
def get_extension_for(path)
|
33
|
-
path.split('.')[1] ? path.split('.')[1].to_sym : DEFAULT_EXTENSION
|
34
|
-
end
|
35
|
-
|
36
|
-
def get_component_id_from(request_parts)
|
37
|
-
(request_parts[2] || '').split('.')[0]
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'alephant/broker/errors/invalid_asset_id'
|
2
|
-
require 'alephant/broker/models/request'
|
3
|
-
|
4
|
-
module Alephant
|
5
|
-
module Broker
|
6
|
-
class GetRequest < Request
|
7
|
-
attr_reader :type, :component_id, :extension, :options, :content_type
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
super(:asset)
|
11
|
-
env = RequestStore.store[:env]
|
12
|
-
parse requested_components(env.path, env.query)
|
13
|
-
end
|
14
|
-
|
15
|
-
def requested_components(path, query_string)
|
16
|
-
request_parts = path.split('/')
|
17
|
-
|
18
|
-
{
|
19
|
-
:type => get_type_from(request_parts),
|
20
|
-
:component_id => get_component_id_from(request_parts),
|
21
|
-
:extension => get_extension_for(path),
|
22
|
-
:options => options_from(query_string)
|
23
|
-
}
|
24
|
-
end
|
25
|
-
|
26
|
-
def parse(request)
|
27
|
-
@component_id = request[:component_id]
|
28
|
-
@extension = request[:extension]
|
29
|
-
@options = request[:options]
|
30
|
-
@content_type = @@extension_mapping[@extension.to_sym] || @@extension_mapping[DEFAULT_EXTENSION]
|
31
|
-
|
32
|
-
logger.info("Broker.request: Type: #{@type}, Asset ID: #{@component_id}, Options: #{@options.inspect}")
|
33
|
-
|
34
|
-
raise InvalidAssetId.new("No Asset ID specified") if @component_id.nil?
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'alephant/broker/models/request'
|
2
|
-
|
3
|
-
module Alephant
|
4
|
-
module Broker
|
5
|
-
class PostRequest < Request
|
6
|
-
attr_reader :type, :renderer_id, :component_id, :options, :content_type
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
@renderer_id = batch_id
|
10
|
-
@content_type = 'application/json'
|
11
|
-
super(:batch)
|
12
|
-
end
|
13
|
-
|
14
|
-
def components
|
15
|
-
@requested_components ||= components_for env.path
|
16
|
-
end
|
17
|
-
|
18
|
-
def set_component(id, options)
|
19
|
-
@component_id = id
|
20
|
-
@options = options
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def env
|
26
|
-
@env ||= RequestStore.store[:env]
|
27
|
-
end
|
28
|
-
|
29
|
-
def components_for(path)
|
30
|
-
request_parts = path.split('/')
|
31
|
-
|
32
|
-
{
|
33
|
-
:batch_id => batch_id,
|
34
|
-
:type => get_type_from(request_parts),
|
35
|
-
:component_id => get_component_id_from(request_parts)
|
36
|
-
}.merge! batched
|
37
|
-
end
|
38
|
-
|
39
|
-
def batch_id
|
40
|
-
env.data['batch_id']
|
41
|
-
end
|
42
|
-
|
43
|
-
def batched
|
44
|
-
env.data['components'].reduce({ :components => [] }) do |obj, component|
|
45
|
-
obj.tap { |o| o[:components].push(component) }
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|