alephant-publisher-request 0.1.2 → 0.2.0
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 +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
|