alephant-preview 0.3.6 → 0.3.7

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: 95bcd03d20157f534d63adf7f8d74ab0da2674c8
4
- data.tar.gz: d0631aac7e026d9a112ae3d6d2180b862a341909
3
+ metadata.gz: 6ca1569d4f9ca20e48a9d00ef981602422a237b9
4
+ data.tar.gz: 4056520bbdf02527bcdd07e5f9428b9e43b6b898
5
5
  SHA512:
6
- metadata.gz: 421b39118421dbaa27a3ab1ec17e0759964123401f5603076ee3b219496619f2b0f994749bfd93febb0bfd043029ccc807a50e81e1bd7dc910d48ec0df3212e1
7
- data.tar.gz: f24b9db157d8216407380e020676520fd10ece3ed76cd9d30704c998020f05a894fc8864586510b914ce4bc791e725d32f4d052a7abb99ee8cc2e6bb54c53ee8
6
+ metadata.gz: a388bca06b68b45e6e92a75aaad037b806dd78c1119905a609e53898b7a89fc305e02b4f2d5a0cb6dd6e48b8e1e95c7083cb376bf0365cf5f2b07780fc53d11a
7
+ data.tar.gz: 84646ac9db16888430e8ea03b6d792c6ac3972b672dd13eaf84698160a05553eb4e1d46910ccf349483cf414f2ed8697dad3daa75bd0ce41e41332775d80961e
@@ -27,6 +27,10 @@ module Alephant
27
27
 
28
28
  BASE_LOCATION = "#{(ENV['BASE_LOCATION'] || Dir.pwd)}/components"
29
29
 
30
+ before do
31
+ response["Access-Control-Allow-Origin"] = "*"
32
+ end
33
+
30
34
  get '/preview/:id/:template/:region/?:fixture?' do
31
35
  render_preview
32
36
  end
@@ -41,6 +45,20 @@ module Alephant
41
45
  render_component
42
46
  end
43
47
 
48
+ post "/components/batch" do
49
+ batch_components = []
50
+
51
+ batched_components.each do |component|
52
+ options = component.fetch(:options, {}) || {}
53
+ params["template"] = component.fetch(:component)
54
+ params["id"] = find_id_from_template params["template"]
55
+ params["fixture"] = options.fetch(:fixture, "responsive") || "responsive"
56
+ batch_components << render_batch_component
57
+ end
58
+
59
+ { :components => batch_components }.to_json
60
+ end
61
+
44
62
  get '/status' do
45
63
  'ok'
46
64
  end
@@ -63,7 +81,25 @@ module Alephant
63
81
  view_mapper.generate(fixture_data)[template].render
64
82
  end
65
83
 
84
+ def render_batch_component
85
+ {
86
+ :component => template,
87
+ :options => {},
88
+ :status => 200,
89
+ :body => render_component
90
+ }
91
+ end
92
+
66
93
  private
94
+
95
+ def request_body
96
+ JSON.parse(request.body.read, :symbolize_names => true) || {}
97
+ end
98
+
99
+ def batched_components
100
+ request_body.fetch(:components, [])
101
+ end
102
+
67
103
  def model
68
104
  require model_location
69
105
  Alephant::Renderer::Views.get_registered_class(template).new(fixture_data)
@@ -1,5 +1,5 @@
1
1
  module Alephant
2
2
  module Preview
3
- VERSION = "0.3.6"
3
+ VERSION = "0.3.7"
4
4
  end
5
5
  end
@@ -38,10 +38,14 @@ describe Alephant::Preview::FixtureLoader do
38
38
  end
39
39
  end
40
40
 
41
- context 'using incorrect amount of fixtures' do
41
+ context "using incorrect amount of fixtures" do
42
42
  it "should raise an exception" do
43
43
  (0..2).each { |index| subject.get(uri).body }
44
- expect{ subject.get(uri).body }.to raise_error
44
+ expect do
45
+ subject.get(uri).body
46
+ end.to raise_error(
47
+ RuntimeError, "There isn't a fixture matching the request call, please add one"
48
+ )
45
49
  end
46
50
  end
47
51
  end
@@ -59,6 +59,80 @@ describe Alephant::Preview::Server do
59
59
  end
60
60
  end
61
61
 
62
+ describe "component batch endpoint (POST /components/batch" do
63
+
64
+ describe "content" do
65
+ before(:each) do
66
+ post "/components/batch", {
67
+ :components => [
68
+ {
69
+ :component => id,
70
+ :options => {
71
+ :fixture => id
72
+ }
73
+ }
74
+ ]
75
+ }.to_json
76
+ end
77
+
78
+ let (:response) { JSON.parse(last_response.body.chomp, :symbolize_names => true) }
79
+
80
+ context "without a data mapper" do
81
+ let(:id) { "foo" }
82
+
83
+ expected = {
84
+ :components => [
85
+ {
86
+ :component => "foo",
87
+ :options => {},
88
+ :status => 200,
89
+ :body => "content\n"
90
+ }
91
+ ]
92
+ }
93
+
94
+ specify { expect(response).to eq(expected) }
95
+ end
96
+
97
+ context "with a data mapper" do
98
+
99
+ context "using a single fixture" do
100
+ let (:id) { "bar" }
101
+
102
+ expected = {
103
+ :components => [
104
+ {
105
+ :component => "bar",
106
+ :options => {},
107
+ :status => 200,
108
+ :body => "data mapped content\n"
109
+ }
110
+ ]
111
+ }
112
+
113
+ specify { expect(response).to eq(expected) }
114
+ end
115
+
116
+ context "using multiple fixtures" do
117
+ let (:id) { "baz" }
118
+
119
+ expected = {
120
+ :components => [
121
+ {
122
+ :component => "baz",
123
+ :options => {},
124
+ :status => 200,
125
+ :body => "multiple endpoint data mapped content\n"
126
+ }
127
+ ]
128
+ }
129
+
130
+ specify { expect(response).to eq(expected) }
131
+ end
132
+ end
133
+ end
134
+ end
135
+
62
136
  describe "status endpoint (GET /status)" do
63
137
  before(:each) do
64
138
  get "/status"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alephant-preview
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - BBC News
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-15 00:00:00.000000000 Z
11
+ date: 2015-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement