alephant-preview 0.3.6 → 0.3.7

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 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