alephant-publisher-request 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/alephant/publisher/request/connection.rb +36 -0
- data/lib/alephant/publisher/request/data_mapper.rb +1 -20
- data/lib/alephant/publisher/request/version.rb +1 -1
- data/spec/connection_spec.rb +47 -0
- data/spec/integration/rack_server_spec.rb +2 -1
- data/spec/spec_helper.rb +11 -9
- metadata +5 -4
- data/spec/data_mapper_spec.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47fd46ef1bd5568a5d4ea6672a68fef0ebf3b16a
|
4
|
+
data.tar.gz: 8f90c8b8391c9fab241e0f7840af7eb565b08069
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 274ca023dc2e42790602def922158b8e63d71026c0b67f0b375402200fd83cdaef66a9f981d4d3638ce365719b56dd217d3cac5b97bb4859d1b3d1b0ac3a5870
|
7
|
+
data.tar.gz: 2120ecc5fb640e3019f4a968b21013c2e251ca35653242b932bb12b5f77f5545c69e7157b9a7ea72c2d112e47efb8be77c48f165b74299bf016b52f369b86d87
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "alephant/logger"
|
2
|
+
|
3
|
+
module Alephant
|
4
|
+
module Publisher
|
5
|
+
module Request
|
6
|
+
class Connection
|
7
|
+
include Logger
|
8
|
+
attr_reader :driver
|
9
|
+
|
10
|
+
def initialize(driver)
|
11
|
+
@driver = driver
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(uri)
|
15
|
+
before = Time.new
|
16
|
+
response = driver.get(uri)
|
17
|
+
logger.metric(:name => "PublisherRequestDataMapperRequestHTTPTime", :unit => 'Seconds', :value => Time.new - before)
|
18
|
+
raise InvalidApiStatus, response.status unless response.status == 200
|
19
|
+
JSON::parse(response.body, :symbolize_names => true)
|
20
|
+
rescue Faraday::ConnectionFailed
|
21
|
+
logger.metric(:name => "PublisherRequestDataMapperConnectionFailed", :unit => "Count", :value => 1)
|
22
|
+
raise ConnectionFailed
|
23
|
+
rescue JSON::ParserError
|
24
|
+
logger.metric(:name => "PublisherRequestDataMapperInvalidApiResponse", :unit => "Count", :value => 1)
|
25
|
+
raise InvalidApiResponse, "JSON parsing error: #{response.body}"
|
26
|
+
rescue InvalidApiStatus => e
|
27
|
+
logger.metric(:name => "PublisherRequestDataMapperInvalidStatus#{e.status}", :unit => "Count", :value => 1)
|
28
|
+
raise e
|
29
|
+
rescue StandardError => e
|
30
|
+
logger.metric(:name => "PublisherRequestDataMapperApiError", :unit => "Count", :value => 1)
|
31
|
+
raise ApiError, e.message
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -1,12 +1,9 @@
|
|
1
|
-
require 'alephant/logger'
|
2
1
|
require 'json'
|
3
2
|
|
4
3
|
module Alephant
|
5
4
|
module Publisher
|
6
5
|
module Request
|
7
6
|
class DataMapper
|
8
|
-
include Logger
|
9
|
-
|
10
7
|
attr_reader :connection, :context
|
11
8
|
|
12
9
|
def initialize(connection, context = {})
|
@@ -21,23 +18,7 @@ module Alephant
|
|
21
18
|
protected
|
22
19
|
|
23
20
|
def get(uri)
|
24
|
-
|
25
|
-
response = connection.get(uri)
|
26
|
-
logger.metric(:name => "PublisherRequestDataMapperRequestHTTPTime", :unit => 'Seconds', :value => Time.new - before)
|
27
|
-
raise InvalidApiStatus, response.status unless response.status == 200
|
28
|
-
JSON::parse(response.body, :symbolize_names => true)
|
29
|
-
rescue Faraday::ConnectionFailed
|
30
|
-
logger.metric(:name => "PublisherRequestDataMapperConnectionFailed", :unit => "Count", :value => 1)
|
31
|
-
raise ConnectionFailed
|
32
|
-
rescue JSON::ParserError
|
33
|
-
logger.metric(:name => "PublisherRequestDataMapperInvalidApiResponse", :unit => "Count", :value => 1)
|
34
|
-
raise InvalidApiResponse, "JSON parsing error: #{response.body}"
|
35
|
-
rescue InvalidApiStatus => e
|
36
|
-
logger.metric(:name => "PublisherRequestDataMapperInvalidStatus#{e.status}", :unit => "Count", :value => 1)
|
37
|
-
raise e
|
38
|
-
rescue StandardError => e
|
39
|
-
logger.metric(:name => "PublisherRequestDataMapperApiError", :unit => "Count", :value => 1)
|
40
|
-
raise ApiError, e.message
|
21
|
+
connection.get uri
|
41
22
|
end
|
42
23
|
end
|
43
24
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Alephant::Publisher::Request::Connection do
|
4
|
+
let (:driver) { instance_double(Faraday::Connection, :get => nil) }
|
5
|
+
let (:uri) { "/foo/bar/baz" }
|
6
|
+
|
7
|
+
subject { described_class.new driver }
|
8
|
+
|
9
|
+
describe "#get" do
|
10
|
+
let (:expected_raw_data) do
|
11
|
+
{
|
12
|
+
:some => 'data'
|
13
|
+
}
|
14
|
+
end
|
15
|
+
let (:expected_data) { JSON.generate(expected_raw_data, :symbolize_names => true) }
|
16
|
+
let (:expected_response) { instance_double(Faraday::Response, :body => expected_data, :status => 200) }
|
17
|
+
|
18
|
+
context "with a valid endpoint" do
|
19
|
+
before(:each) do
|
20
|
+
allow(driver).to receive(:get).and_return(expected_response)
|
21
|
+
end
|
22
|
+
|
23
|
+
specify { expect(subject.get(uri)).to eq expected_raw_data }
|
24
|
+
end
|
25
|
+
|
26
|
+
context "invalid hostname" do
|
27
|
+
let (:expected_exception) { Alephant::Publisher::Request::ConnectionFailed }
|
28
|
+
let (:faraday_exception) { Faraday::ConnectionFailed.new(StandardError) }
|
29
|
+
|
30
|
+
before(:each) do
|
31
|
+
allow(driver).to receive(:get).and_raise(faraday_exception)
|
32
|
+
end
|
33
|
+
|
34
|
+
specify { expect { subject.get(uri)}.to raise_error expected_exception }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "invalid status code" do
|
38
|
+
let (:status_code) { 503 }
|
39
|
+
let (:expected_exception) { Alephant::Publisher::Request::InvalidApiStatus }
|
40
|
+
before(:each) do
|
41
|
+
allow(driver).to receive(:get).and_return(OpenStruct.new(:status => status_code))
|
42
|
+
end
|
43
|
+
|
44
|
+
specify { expect { subject.get(uri)}.to raise_error expected_exception }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -5,7 +5,8 @@ describe Alephant::Publisher::Request do
|
|
5
5
|
let (:response) { instance_double(Faraday::Response, :status => 200, :body => nil) }
|
6
6
|
let (:base_path) { File.join(File.dirname(__FILE__), '..', 'fixtures', 'components') }
|
7
7
|
let (:processor) { Alephant::Publisher::Request::Processor.new(base_path) }
|
8
|
-
let (:
|
8
|
+
let (:driver) { instance_double(Faraday::Connection, :get => response) }
|
9
|
+
let (:connection) { Alephant::Publisher::Request::Connection.new driver }
|
9
10
|
let (:data_mapper_factory) { Alephant::Publisher::Request::DataMapperFactory.new(connection, base_path) }
|
10
11
|
let (:app) { subject.create(processor, data_mapper_factory, { :debug => true }) }
|
11
12
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
require
|
1
|
+
require "pry"
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
3
|
+
require "json"
|
4
|
+
require "aws-sdk"
|
5
|
+
require "faraday"
|
6
|
+
require "alephant/renderer"
|
7
|
+
require "alephant/publisher/request"
|
8
|
+
require "alephant/publisher/request/error"
|
9
|
+
require "alephant/publisher/request/data_mapper"
|
10
|
+
require "alephant/publisher/request/connection"
|
11
|
+
require "alephant/publisher/request/data_mapper_factory"
|
10
12
|
|
11
|
-
require_relative
|
13
|
+
require_relative "./fixtures/components/foo/mapper"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alephant-publisher-request
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Integralist
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -251,14 +251,15 @@ files:
|
|
251
251
|
- Rakefile
|
252
252
|
- alephant-publisher-request.gemspec
|
253
253
|
- lib/alephant/publisher/request.rb
|
254
|
+
- lib/alephant/publisher/request/connection.rb
|
254
255
|
- lib/alephant/publisher/request/data_mapper.rb
|
255
256
|
- lib/alephant/publisher/request/data_mapper_factory.rb
|
256
257
|
- lib/alephant/publisher/request/error.rb
|
257
258
|
- lib/alephant/publisher/request/processor.rb
|
258
259
|
- lib/alephant/publisher/request/processor/base.rb
|
259
260
|
- lib/alephant/publisher/request/version.rb
|
261
|
+
- spec/connection_spec.rb
|
260
262
|
- spec/data_mapper_factory_spec.rb
|
261
|
-
- spec/data_mapper_spec.rb
|
262
263
|
- spec/fixtures/components/foo/mapper.rb
|
263
264
|
- spec/fixtures/components/foo/models/foo.rb
|
264
265
|
- spec/fixtures/components/foo/templates/foo.mustache
|
@@ -294,8 +295,8 @@ signing_key:
|
|
294
295
|
specification_version: 4
|
295
296
|
summary: '...'
|
296
297
|
test_files:
|
298
|
+
- spec/connection_spec.rb
|
297
299
|
- spec/data_mapper_factory_spec.rb
|
298
|
-
- spec/data_mapper_spec.rb
|
299
300
|
- spec/fixtures/components/foo/mapper.rb
|
300
301
|
- spec/fixtures/components/foo/models/foo.rb
|
301
302
|
- spec/fixtures/components/foo/templates/foo.mustache
|
data/spec/data_mapper_spec.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe FooMapper do
|
4
|
-
let (:connection) { instance_double(Faraday::Connection, :get => nil) }
|
5
|
-
let (:context) do
|
6
|
-
{
|
7
|
-
:foo => :bar
|
8
|
-
}
|
9
|
-
end
|
10
|
-
|
11
|
-
subject { described_class.new(connection, context) }
|
12
|
-
|
13
|
-
describe "#data" do
|
14
|
-
let (:expected_raw_data) do
|
15
|
-
{
|
16
|
-
:some => 'data'
|
17
|
-
}
|
18
|
-
end
|
19
|
-
let (:expected_data) { JSON::generate(expected_raw_data, :symbolize_names => true) }
|
20
|
-
let (:expected_response) { instance_double(Faraday::Response, :body => expected_data, :status => 200) }
|
21
|
-
|
22
|
-
context "with a valid endpoint" do
|
23
|
-
before(:each) do
|
24
|
-
allow(connection).to receive(:get).with("/some/test/endpoint/#{context.values[0]}").and_return(expected_response)
|
25
|
-
end
|
26
|
-
|
27
|
-
specify { expect(subject.data).to eq expected_raw_data }
|
28
|
-
end
|
29
|
-
|
30
|
-
context "invalid hostname" do
|
31
|
-
let (:expected_exception) { Alephant::Publisher::Request::ConnectionFailed }
|
32
|
-
let (:faraday_exception) { Faraday::ConnectionFailed.new(StandardError) }
|
33
|
-
|
34
|
-
before(:each) do
|
35
|
-
allow(connection).to receive(:get).and_raise(faraday_exception)
|
36
|
-
end
|
37
|
-
|
38
|
-
specify { expect { subject.data }.to raise_error expected_exception }
|
39
|
-
end
|
40
|
-
|
41
|
-
context "invalid status code" do
|
42
|
-
let (:status_code) { 503 }
|
43
|
-
let (:expected_exception) { Alephant::Publisher::Request::InvalidApiStatus }
|
44
|
-
before(:each) do
|
45
|
-
allow(connection).to receive(:get).and_return(OpenStruct.new(:status => status_code))
|
46
|
-
end
|
47
|
-
|
48
|
-
specify { expect { subject.data }.to raise_error expected_exception }
|
49
|
-
end
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|