alephant-broker 0.1.6 → 1.0.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/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
|