alephant-broker 3.12.0 → 3.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 60b6af683863285e27316bde5b7392d93439b20e
4
- data.tar.gz: 7052275d91783c7b02ab1996cdced8e606b58e51
3
+ metadata.gz: 322bf8631f67f58a89b60648ab6b0b961a9689f9
4
+ data.tar.gz: b6651329e8bd41d6a5ee5da9dc2d6daa9cb0aa91
5
5
  SHA512:
6
- metadata.gz: b8307c2cbe4304ebf233878d20026529e21302cec83e78132b43a6bb7da377da977f85d2f48b447c76d4e3647d2f7915659ec56cdbb9b4ecda8b4e5e26b26777
7
- data.tar.gz: 0c2ba375708bfb96376954db24ab557b8bc615db013d9e85bd4ad3833d5f03861c6efc1074cd72e4a890d25ca42181f57caaf5da74ea29c458bd16ad71a7dafe
6
+ metadata.gz: a90d3ef9cb6e911103e32fff97933f259748961b24d7795c3a0a496b2131a6c5b1a3ace6c7055dba98fc6baa633e9621a32839994a8c377853b764add970ab00
7
+ data.tar.gz: 854e7f0e904af1e61389b1849d4f15aa6a83c614ed4093f40a430650a8612b4725de40caa2dd320a206fa69908500fe12aba8338e433da0ab3afd88483da05c4
@@ -24,6 +24,10 @@ module Alephant
24
24
  settings["REQUEST_METHOD"] == "GET"
25
25
  end
26
26
 
27
+ def options?
28
+ settings["REQUEST_METHOD"] == "OPTIONS"
29
+ end
30
+
27
31
  def query
28
32
  settings["QUERY_STRING"] || ""
29
33
  end
@@ -11,7 +11,7 @@ module Alephant
11
11
 
12
12
  @status = self.class.component_not_modified(@component.headers, request_env) ? NOT_MODIFIED_STATUS_CODE : component.status
13
13
 
14
- super @status
14
+ super(@status, component.content_type, request_env)
15
15
 
16
16
  @headers.merge!(@component.headers)
17
17
  end
@@ -21,7 +21,7 @@ module Alephant
21
21
  500 => "Error retrieving content"
22
22
  }
23
23
 
24
- def initialize(status = 200, content_type = "text/html")
24
+ def initialize(status = 200, content_type = "text/html", request_env = nil)
25
25
  @content = STATUS_CODE_MAPPING[status]
26
26
  @headers = {
27
27
  "Content-Type" => content_type,
@@ -34,6 +34,8 @@ module Alephant
34
34
  add_no_cache_headers if should_add_no_cache_headers?(status)
35
35
  add_etag_allow_header if headers.has_key?("ETag")
36
36
  setup if status == 200
37
+
38
+ @content = "" if self.class.options?(request_env)
37
39
  end
38
40
 
39
41
  protected
@@ -61,6 +63,10 @@ module Alephant
61
63
  })
62
64
  end
63
65
 
66
+ def self.options?(request_env)
67
+ request_env && request_env.respond_to?(:options?) && request_env.options?
68
+ end
69
+
64
70
  def self.component_not_modified(headers, request_env)
65
71
  return false unless allow_not_modified_response_status
66
72
  return false if request_env.post?
@@ -10,11 +10,11 @@ module Alephant
10
10
  attr_reader :components, :batch_id
11
11
 
12
12
  def initialize(components, batch_id, request_env)
13
- @components = components
14
- @batch_id = batch_id
15
- @status = self.class.component_not_modified(batch_response_headers, request_env) ? NOT_MODIFIED_STATUS_CODE : 200
13
+ @components = components
14
+ @batch_id = batch_id
15
+ @status = self.class.component_not_modified(batch_response_headers, request_env) ? NOT_MODIFIED_STATUS_CODE : 200
16
16
 
17
- super(@status, "application/json")
17
+ super(@status, "application/json", request_env)
18
18
 
19
19
  @headers.merge!(batch_response_headers)
20
20
  end
@@ -1,5 +1,5 @@
1
1
  module Alephant
2
2
  module Broker
3
- VERSION = "3.12.0"
3
+ VERSION = "3.13.0"
4
4
  end
5
5
  end
@@ -4,7 +4,7 @@ require "alephant/broker"
4
4
  describe Alephant::Broker::Application do
5
5
  include Rack::Test::Methods
6
6
 
7
- let(:options) do
7
+ let(:config) do
8
8
  {
9
9
  :lookup_table_name => "test_table",
10
10
  :bucket_id => "test_bucket",
@@ -15,7 +15,7 @@ describe Alephant::Broker::Application do
15
15
  let(:app) do
16
16
  described_class.new(
17
17
  Alephant::Broker::LoadStrategy::S3::Sequenced.new,
18
- options
18
+ config
19
19
  )
20
20
  end
21
21
 
@@ -73,7 +73,7 @@ describe Alephant::Broker::Application do
73
73
  specify { expect(last_response.headers).to include("Expires") }
74
74
  end
75
75
 
76
- describe "Component endpoint '/component/...'" do
76
+ describe "Component endpoint '/component/...' GET" do
77
77
  before do
78
78
  allow(Alephant::Storage).to receive(:new) { s3_double }
79
79
  get "/component/test_component"
@@ -96,6 +96,45 @@ describe Alephant::Broker::Application do
96
96
  end
97
97
  end
98
98
 
99
+ describe "Component endpoint '/component/...' OPTIONS" do
100
+ before do
101
+ allow(Alephant::Storage).to receive(:new) { s3_double }
102
+ options "/component/test_component"
103
+ end
104
+
105
+ context "for a valid component ID" do
106
+ specify { expect(last_response.status).to eql 200 }
107
+ specify { expect(last_response.body).to eql "" }
108
+ specify { expect(last_response.headers).to_not include("Cache-Control") }
109
+ specify { expect(last_response.headers).to_not include("Pragma") }
110
+ specify { expect(last_response.headers).to_not include("Expires") }
111
+ specify { expect(last_response.headers["ETag"]).to eq("123") }
112
+ specify { expect(last_response.headers["Last-Modified"]).to eq("Mon, 11 Apr 2016 10:39:57 GMT") }
113
+ specify { expect(last_response.headers["Content-Type"]).to eq("test/content") }
114
+ specify { expect(last_response.headers["Content-Length"]).to eq("0") }
115
+ end
116
+
117
+ context "for valid URL parameters in request" do
118
+ before { options "/component/test_component?variant=test_variant" }
119
+ specify { expect(last_response.status).to eq 200 }
120
+ specify { expect(last_response.body).to eq "" }
121
+ specify { expect(last_response.headers["Content-Type"]).to eq("test/content") }
122
+ specify { expect(last_response.headers["Content-Length"]).to eq("0") }
123
+ end
124
+
125
+ context "for invalid URL parameters in request" do
126
+ before {
127
+ content[:meta]["status"] = 404
128
+ allow(Alephant::Storage).to receive(:new) { s3_double }
129
+ options "/component/invalid_component"
130
+ }
131
+ specify { expect(last_response.status).to eq 404 }
132
+ specify { expect(last_response.body).to eq "" }
133
+ specify { expect(last_response.headers["Content-Type"]).to eq("test/content") }
134
+ specify { expect(last_response.headers["Content-Length"]).to eq("0") }
135
+ end
136
+ end
137
+
99
138
  describe "Components endpoint '/components' POST" do
100
139
  let(:fixture_path) { "#{File.dirname(__FILE__)}/../fixtures/json" }
101
140
  let(:batch_json) do
@@ -197,6 +236,52 @@ describe Alephant::Broker::Application do
197
236
  end
198
237
  end
199
238
 
239
+ describe "Components endpoint '/components' OPTIONS" do
240
+ let(:fixture_path) { "#{File.dirname(__FILE__)}/../fixtures/json" }
241
+ let(:s3_double_batch) { instance_double("Alephant::Storage") }
242
+
243
+ before do
244
+ allow(s3_double_batch).to receive(:get).and_return(
245
+ content,
246
+ AWS::Core::Data.new(
247
+ :content_type => "test/content",
248
+ :content => "Test",
249
+ :meta => {
250
+ :head_ETag => "\"abc\"",
251
+ :"head_Last-Modified" => "Mon, 11 Apr 2016 09:39:57 GMT"
252
+ }
253
+ )
254
+ )
255
+
256
+ allow(Alephant::Storage).to receive(:new) { s3_double_batch }
257
+ end
258
+
259
+ context "when using valid batch asset data" do
260
+ let(:path) { "/components/batch?batch_id=baz&components[ni_council_results_table][component]=ni_council_results_table&components[ni_council_results_table][options][foo]=bar&components[ni_council_results_table_no_options][component]=ni_council_results_table" }
261
+ let(:content_type) { "application/json" }
262
+
263
+ before { options path, {}, "CONTENT_TYPE" => content_type }
264
+
265
+ specify { expect(last_response.status).to eql 200 }
266
+ specify { expect(last_response.body).to eq "" }
267
+
268
+ describe "response should have headers" do
269
+ it "should have content headers" do
270
+ expect(last_response.headers["Content-Type"]).to eq("application/json")
271
+ expect(last_response.headers["Content-Length"]).to eq("0")
272
+ end
273
+
274
+ it "should have ETag cache header" do
275
+ expect(last_response.headers["ETag"]).to eq('"34774567db979628363e6e865127623f"')
276
+ end
277
+
278
+ it "should have most recent Last-Modified header" do
279
+ expect(last_response.headers["Last-Modified"]).to eq("Mon, 11 Apr 2016 10:39:57 GMT")
280
+ end
281
+ end
282
+ end
283
+ end
284
+
200
285
  describe "S3 headers" do
201
286
  let(:content) do
202
287
  AWS::Core::Data.new(
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: 3.12.0
4
+ version: 3.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - BBC News
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-28 00:00:00.000000000 Z
11
+ date: 2016-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement