engaging-networks-rest 0.3.0 → 0.4.1
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/Gemfile +1 -0
- data/Rakefile +7 -6
- data/VERSION +1 -1
- data/engaging-networks-rest.gemspec +11 -7
- data/example.rb +4 -0
- data/lib/engaging_networks_rest/client.rb +15 -7
- data/lib/engaging_networks_rest/client/pages.rb +6 -1
- data/lib/engaging_networks_rest/response/raise_error.rb +29 -0
- data/spec/client/pages_spec.rb +18 -6
- metadata +24 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c8fe675cfb462733d9a827b08f8714f6399d43649bdf92ee2e871d6516ed55f
|
4
|
+
data.tar.gz: ba88d33736c1c1972281eb1f5c1c0e47278f619148173acd1a0ba63a0a93ad17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff15125d0c3a29b05deb70bc0738e982b6d2a6fbabd2e7b2fb445b984f6dc461a0e33243f99ca4b11eeb6ea79be8589a080374d7094b403d3201f689366bff56
|
7
|
+
data.tar.gz: 8de4bc283e4268841185ef724419a47395318562613b02f3389a346a8f7ca3b834668abf6440c857fd7ada7097bd2fc44b3b478d7e1fcd6fcaf9c4e388d040be
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -26,11 +26,11 @@ Juwelier::Tasks.new do |gem|
|
|
26
26
|
end
|
27
27
|
Juwelier::RubygemsDotOrgTasks.new
|
28
28
|
|
29
|
-
require '
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
require 'rspec/core/rake_task'
|
30
|
+
desc "Run specs"
|
31
|
+
RSpec::Core::RakeTask.new do |t|
|
32
|
+
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
33
|
+
t.rspec_opts = '--color'
|
34
34
|
end
|
35
35
|
|
36
36
|
desc "Code coverage detail"
|
@@ -39,7 +39,8 @@ task :simplecov do
|
|
39
39
|
Rake::Task['test'].execute
|
40
40
|
end
|
41
41
|
|
42
|
-
|
42
|
+
desc 'Default: run specs.'
|
43
|
+
task :default => :spec
|
43
44
|
|
44
45
|
require 'rdoc/task'
|
45
46
|
Rake::RDocTask.new do |rdoc|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.1
|
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: engaging-networks-rest 0.
|
5
|
+
# stub: engaging-networks-rest 0.4.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "engaging-networks-rest".freeze
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.4.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["Jacinda Moore".freeze]
|
14
|
-
s.date = "2019-
|
14
|
+
s.date = "2019-03-11"
|
15
15
|
s.description = "Client gem for the ENS API to Engaging Networks".freeze
|
16
16
|
s.email = "jacinda@controlshiftlabs.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
@@ -33,13 +33,14 @@ Gem::Specification.new do |s|
|
|
33
33
|
"lib/engaging_networks_rest.rb",
|
34
34
|
"lib/engaging_networks_rest/client.rb",
|
35
35
|
"lib/engaging_networks_rest/client/pages.rb",
|
36
|
+
"lib/engaging_networks_rest/response/raise_error.rb",
|
36
37
|
"spec/client/pages_spec.rb",
|
37
38
|
"spec/client_spec.rb",
|
38
39
|
"spec/spec_helper.rb"
|
39
40
|
]
|
40
41
|
s.homepage = "http://github.com/controlshift/engaging-networks-rest".freeze
|
41
42
|
s.licenses = ["MIT".freeze]
|
42
|
-
s.rubygems_version = "2.7.
|
43
|
+
s.rubygems_version = "2.7.9".freeze
|
43
44
|
s.summary = "Client gem for the ENS API to Engaging Networks".freeze
|
44
45
|
|
45
46
|
if s.respond_to? :specification_version then
|
@@ -47,29 +48,32 @@ Gem::Specification.new do |s|
|
|
47
48
|
|
48
49
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
50
|
s.add_runtime_dependency(%q<faraday>.freeze, ["~> 0.15"])
|
51
|
+
s.add_runtime_dependency(%q<faraday_middleware>.freeze, [">= 0"])
|
50
52
|
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
51
53
|
s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
|
52
54
|
s.add_development_dependency(%q<webmock>.freeze, ["~> 3.4"])
|
53
55
|
s.add_development_dependency(%q<faker>.freeze, ["~> 1.9"])
|
54
56
|
s.add_development_dependency(%q<pry-byebug>.freeze, ["~> 3.6"])
|
55
|
-
s.add_development_dependency(%q<faraday-detailed_logger>.freeze, ["
|
57
|
+
s.add_development_dependency(%q<faraday-detailed_logger>.freeze, ["~> 2.1", ">= 2.1.2"])
|
56
58
|
else
|
57
59
|
s.add_dependency(%q<faraday>.freeze, ["~> 0.15"])
|
60
|
+
s.add_dependency(%q<faraday_middleware>.freeze, [">= 0"])
|
58
61
|
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
59
62
|
s.add_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
|
60
63
|
s.add_dependency(%q<webmock>.freeze, ["~> 3.4"])
|
61
64
|
s.add_dependency(%q<faker>.freeze, ["~> 1.9"])
|
62
65
|
s.add_dependency(%q<pry-byebug>.freeze, ["~> 3.6"])
|
63
|
-
s.add_dependency(%q<faraday-detailed_logger>.freeze, ["
|
66
|
+
s.add_dependency(%q<faraday-detailed_logger>.freeze, ["~> 2.1", ">= 2.1.2"])
|
64
67
|
end
|
65
68
|
else
|
66
69
|
s.add_dependency(%q<faraday>.freeze, ["~> 0.15"])
|
70
|
+
s.add_dependency(%q<faraday_middleware>.freeze, [">= 0"])
|
67
71
|
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
68
72
|
s.add_dependency(%q<juwelier>.freeze, ["~> 2.1.0"])
|
69
73
|
s.add_dependency(%q<webmock>.freeze, ["~> 3.4"])
|
70
74
|
s.add_dependency(%q<faker>.freeze, ["~> 1.9"])
|
71
75
|
s.add_dependency(%q<pry-byebug>.freeze, ["~> 3.6"])
|
72
|
-
s.add_dependency(%q<faraday-detailed_logger>.freeze, ["
|
76
|
+
s.add_dependency(%q<faraday-detailed_logger>.freeze, ["~> 2.1", ">= 2.1.2"])
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
data/example.rb
CHANGED
@@ -13,6 +13,10 @@ def instrument_connection_with_extended_logging(client)
|
|
13
13
|
}
|
14
14
|
|
15
15
|
faraday_builder = ->(faraday) do
|
16
|
+
faraday.request :json
|
17
|
+
faraday.response :json, :content_type => /\bjson$/
|
18
|
+
faraday.use Faraday::Response::Logger if ENV['DEBUG']
|
19
|
+
faraday.use EngagingNetworksRest::Response::RaiseError
|
16
20
|
faraday.response :detailed_logger
|
17
21
|
faraday.adapter Faraday.default_adapter
|
18
22
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'faraday'
|
2
|
-
require '
|
2
|
+
require 'faraday_middleware'
|
3
3
|
require 'engaging_networks_rest/client/pages'
|
4
|
+
require 'engaging_networks_rest/response/raise_error'
|
4
5
|
|
5
6
|
module EngagingNetworksRest
|
6
7
|
class Client
|
@@ -11,18 +12,25 @@ module EngagingNetworksRest
|
|
11
12
|
def initialize(api_key:)
|
12
13
|
@api_key = api_key
|
13
14
|
|
14
|
-
@connection = Faraday.new(url: "https://#{ENS_DOMAIN}")
|
15
|
+
@connection = Faraday.new(url: "https://#{ENS_DOMAIN}") do |conn|
|
16
|
+
conn.request :json
|
17
|
+
conn.response :json, :content_type => /\bjson$/
|
18
|
+
|
19
|
+
conn.use Faraday::Response::Logger if ENV['DEBUG']
|
20
|
+
conn.use EngagingNetworksRest::Response::RaiseError
|
21
|
+
|
22
|
+
conn.adapter :net_http
|
23
|
+
end
|
15
24
|
end
|
16
25
|
|
17
26
|
def authenticate!
|
18
27
|
response = connection.post do |req|
|
19
|
-
req.url '/ens/service/authenticate'
|
20
28
|
req.headers['Content-Type'] = 'application/json'
|
29
|
+
req.url '/ens/service/authenticate'
|
21
30
|
req.body = api_key
|
22
31
|
end
|
23
32
|
|
24
|
-
|
25
|
-
@ens_auth_key = parsed_body['ens-auth-token']
|
33
|
+
@ens_auth_key = response.body['ens-auth-token']
|
26
34
|
end
|
27
35
|
|
28
36
|
def authenticated?
|
@@ -47,14 +55,14 @@ module EngagingNetworksRest
|
|
47
55
|
end
|
48
56
|
|
49
57
|
response = connection.send(method) do |req|
|
58
|
+
req.headers['Content-Type'] = 'application/json'
|
50
59
|
req.path = path
|
51
60
|
req.params = params
|
52
|
-
req.headers['Content-Type'] = 'application/json'
|
53
61
|
req.headers['ens-auth-token'] = ens_auth_key
|
54
62
|
req.body = ::JSON.generate(body) unless body.empty?
|
55
63
|
end
|
56
64
|
|
57
|
-
|
65
|
+
response.body
|
58
66
|
end
|
59
67
|
end
|
60
68
|
end
|
@@ -15,7 +15,12 @@ module EngagingNetworksRest
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def process_page_request(page_id:, supporter_data:)
|
18
|
-
post(path: "/ens/service/page/#{page_id}/process", body: {supporter: supporter_data})
|
18
|
+
response = post(path: "/ens/service/page/#{page_id}/process", body: {supporter: supporter_data})
|
19
|
+
if response['status'] == 'SUCCESS'
|
20
|
+
return response
|
21
|
+
end
|
22
|
+
|
23
|
+
raise "Unexpected 'status' value on response: #{response}"
|
19
24
|
end
|
20
25
|
end
|
21
26
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module EngagingNetworksRest
|
2
|
+
module Response
|
3
|
+
class NotFound < StandardError ; end
|
4
|
+
class Unauthorized < StandardError ; end
|
5
|
+
class InternalError < StandardError; end
|
6
|
+
|
7
|
+
class RaiseError < Faraday::Response::Middleware
|
8
|
+
def on_complete(response)
|
9
|
+
status_code = response[:status].to_i
|
10
|
+
if (400...600).include? status_code
|
11
|
+
case status_code
|
12
|
+
when 401
|
13
|
+
raise Unauthorized.new(error_message(response))
|
14
|
+
when 404
|
15
|
+
raise NotFound.new(error_message(response))
|
16
|
+
when 500
|
17
|
+
raise InternalError.new(error_message(response))
|
18
|
+
else
|
19
|
+
raise StandardError.new(error_message(response))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def error_message(response)
|
25
|
+
"#{response[:method].to_s.upcase} #{response[:url].to_s}: #{response[:status]} \n\n #{response[:body] if response[:body]}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/client/pages_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe EngagingNetworksRest::Client::Pages do
|
4
4
|
let(:api_key) { 'abc-123' }
|
5
5
|
let(:ens_auth_key) { 'tmp-auth-key-456' }
|
6
|
-
let(:standard_headers) { {'Content-Type' => 'application/json', '
|
6
|
+
let(:standard_headers) { {'Content-Type' => 'application/json', 'Ens-Auth-Token' => ens_auth_key} }
|
7
7
|
|
8
8
|
subject { EngagingNetworksRest::Client.new(api_key: api_key) }
|
9
9
|
|
@@ -19,14 +19,14 @@ describe EngagingNetworksRest::Client::Pages do
|
|
19
19
|
shared_examples_for 'list pages' do
|
20
20
|
it 'should get pages' do
|
21
21
|
stub_request(:get, pages_url).with(headers: standard_headers, query: {'type' => page_type, 'status' => page_status})
|
22
|
-
.to_return(body: response.to_json)
|
22
|
+
.to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: response.to_json)
|
23
23
|
|
24
24
|
expect(subject.pages(type: page_type, status: page_status)).to eq response
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should omit status param if not specified' do
|
28
28
|
stub_request(:get, pages_url).with(headers: standard_headers, query: {'type' => page_type})
|
29
|
-
.to_return(body: response.to_json)
|
29
|
+
.to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: response.to_json)
|
30
30
|
|
31
31
|
expect(subject.pages(type: page_type)).to eq response
|
32
32
|
end
|
@@ -57,13 +57,25 @@ describe EngagingNetworksRest::Client::Pages do
|
|
57
57
|
let(:email) { Faker::Internet.email }
|
58
58
|
let(:supporter_hash) { {'firstName' => 'Joe', 'lastName' => 'Smith', 'emailAddress' => email, 'customField1' => 'foo'} }
|
59
59
|
let(:response) { {'id' => '1234567', 'status' => 'SUCCESS', 'supporterEmailAddress' => email, 'supporterId' => '98765'} }
|
60
|
+
let(:failure_response) { {'status' => 'ERROR', 'message' => 'Something went wrong'} }
|
60
61
|
|
61
62
|
shared_examples_for 'process page request' do
|
62
|
-
it 'should process the page request' do
|
63
|
+
it 'should process the page request and return its ID' do
|
63
64
|
stub_request(:post, page_req_url).with(body: {supporter: supporter_hash}.to_json, headers: standard_headers)
|
64
|
-
.to_return(body: response.to_json)
|
65
|
+
.to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: response.to_json)
|
65
66
|
|
66
|
-
|
67
|
+
result = subject.process_page_request(page_id: page_id, supporter_data: supporter_hash)
|
68
|
+
|
69
|
+
expect(result['id']).to eq '1234567'
|
70
|
+
expect(result['supporterId']).to eq '98765'
|
71
|
+
expect(result['supporterEmailAddress']).to eq email
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should raise if response status is not SUCCESS' do
|
75
|
+
stub_request(:post, page_req_url).with(body: {supporter: supporter_hash}.to_json, headers: standard_headers)
|
76
|
+
.to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: failure_response.to_json)
|
77
|
+
|
78
|
+
expect { subject.process_page_request(page_id: page_id, supporter_data: supporter_hash) }.to raise_error(RuntimeError, /Unexpected 'status' value on response.*Something went wrong/)
|
67
79
|
end
|
68
80
|
end
|
69
81
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engaging-networks-rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacinda Moore
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.15'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,22 +112,22 @@ dependencies:
|
|
98
112
|
name: faraday-detailed_logger
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 2.1.2
|
104
115
|
- - "~>"
|
105
116
|
- !ruby/object:Gem::Version
|
106
117
|
version: '2.1'
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 2.1.2
|
107
121
|
type: :development
|
108
122
|
prerelease: false
|
109
123
|
version_requirements: !ruby/object:Gem::Requirement
|
110
124
|
requirements:
|
111
|
-
- - ">="
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
version: 2.1.2
|
114
125
|
- - "~>"
|
115
126
|
- !ruby/object:Gem::Version
|
116
127
|
version: '2.1'
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 2.1.2
|
117
131
|
description: Client gem for the ENS API to Engaging Networks
|
118
132
|
email: jacinda@controlshiftlabs.com
|
119
133
|
executables: []
|
@@ -136,6 +150,7 @@ files:
|
|
136
150
|
- lib/engaging_networks_rest.rb
|
137
151
|
- lib/engaging_networks_rest/client.rb
|
138
152
|
- lib/engaging_networks_rest/client/pages.rb
|
153
|
+
- lib/engaging_networks_rest/response/raise_error.rb
|
139
154
|
- spec/client/pages_spec.rb
|
140
155
|
- spec/client_spec.rb
|
141
156
|
- spec/spec_helper.rb
|
@@ -159,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
174
|
version: '0'
|
160
175
|
requirements: []
|
161
176
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.7.
|
177
|
+
rubygems_version: 2.7.9
|
163
178
|
signing_key:
|
164
179
|
specification_version: 4
|
165
180
|
summary: Client gem for the ENS API to Engaging Networks
|