Alephant::Broker
Brokers requests for rendered templates, retrieved from S3 or a HTML endpoint.
Installation
Add this line to your application's Gemfile:
gem 'alephant-broker'
And then execute:
bundle install
Or install it yourself as:
gem install alephant-broker
Usage
The Broker is capable of retrieving rendered templates from either S3 or a HTML endpoint (e.g. alephant-publisher-request). This must be decided when creating an instance of the Broker, as a load strategy is given as a parameter (see below for examples).
Barebones
S3 Load Strategy
require 'alephant/broker'
require 'alephant/broker/load_strategy/s3'
config = {
:s3_bucket_id => 'test_bucket',
:s3_object_path => 'foo',
:lookup_table_name => 'test_lookup'
}
request = {
'PATH_INFO' => '/component/foo',
'QUERY_STRING' => 'variant=bar',
'REQUEST_METHOD' => 'GET'
}
Alephant::Broker::Application.new(
Alephant::Broker::LoadStrategy::S3.new,
config
).call(request).tap do |response|
puts "status: #{response.status}"
puts "content: #{response.content}"
end
HTML Load Strategy
require 'alephant/broker'
require 'alephant/broker/load_strategy/http'
class UrlGenerator < Alephant::Broker::LoadStrategy::HTTP::URL
def generate(id, )
"http://example-api.com/data?id=#{id}"
end
end
request = {
'PATH_INFO' => '/component/foo',
'QUERY_STRING' => 'variant=bar',
'REQUEST_METHOD' => 'GET'
}
Alephant::Broker::Application.new(
Alephant::Broker::LoadStrategy::HTTP.new(UrlGenerator.new),
{}
).call(request).tap do |response|
puts "status: #{response.status}"
puts "content: #{response.content}"
end
Note
The HTML load strategy relies upon being given a URLGenerator, which is used to generate the URL of the HTML endpoint (see below for example). The class must:
- be implemented within your own application.
- extend
Alephant::Broker::LoadStrategy::HTTP::URL. - include a
#generatemethod which takesid(string) andoptions(hash) as parameters.
require 'alephant/broker/load_strategy/http'
require 'rack'
class UrlGenerator < Alephant::Broker::LoadStrategy::HTTP::URL
def generate(id, )
"http://api.my-app.com/component/#{id}?#{to_query_string()}"
end
private
def to_query_string(hash)
Rack::Utils.build_query hash
end
end
Rack App
Create config.ru using example below, and then run:
rackup config.ru
require 'alephant/broker'
require 'alephant/broker/load_strategy/http'
class UrlGenerator < Alephant::Broker::LoadStrategy::HTTP::URL
def generate(id, )
"http://example-api.com/data?id=#{id}"
end
end
run Alephant::Broker::Application.new(
Alephant::Broker::LoadStrategy::HTTP.new(UrlGenerator.new),
{}
)
Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature - Commit your changes:
git commit -am 'Add some feature' - Push to the branch:
git push origin my-new-feature - Create a new Pull Request.
Feel free to create a new issue if you find a bug.

