engaging-networks-rest 0.3.0 → 0.4.1

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
  SHA256:
3
- metadata.gz: 25a126fa7b16483ced7dfe2a92d73813f676c66e9023ac0441a511dca1a2cf2f
4
- data.tar.gz: 3455f32e368b6f49915fb5429de01e62c2fa9514740e767ba4a43f02609f277f
3
+ metadata.gz: 1c8fe675cfb462733d9a827b08f8714f6399d43649bdf92ee2e871d6516ed55f
4
+ data.tar.gz: ba88d33736c1c1972281eb1f5c1c0e47278f619148173acd1a0ba63a0a93ad17
5
5
  SHA512:
6
- metadata.gz: 79c178cdc855862dd88c2393c20f08f3b58b65560fa46281c968945c9cd35423c0452588c5ff4b0f2fcd503f4edb2f0f3c28bd366b34d02b4fbaca49c07e1879
7
- data.tar.gz: 9db9deb4c6b0d183697c8c209bbd8c0d69375f961b456a4ba3d93d3a4df8381e825dbaeea22d320cf5209992cd3b62859364979dc7e4b9a2e6078f37abfbc916
6
+ metadata.gz: ff15125d0c3a29b05deb70bc0738e982b6d2a6fbabd2e7b2fb445b984f6dc461a0e33243f99ca4b11eeb6ea79be8589a080374d7094b403d3201f689366bff56
7
+ data.tar.gz: 8de4bc283e4268841185ef724419a47395318562613b02f3389a346a8f7ca3b834668abf6440c857fd7ada7097bd2fc44b3b478d7e1fcd6fcaf9c4e388d040be
data/Gemfile CHANGED
@@ -1,6 +1,7 @@
1
1
  source "https://rubygems.org"
2
2
 
3
3
  gem 'faraday', '~> 0.15'
4
+ gem 'faraday_middleware'
4
5
 
5
6
  group :development do
6
7
  gem 'rspec', '>= 0'
data/Rakefile CHANGED
@@ -26,11 +26,11 @@ Juwelier::Tasks.new do |gem|
26
26
  end
27
27
  Juwelier::RubygemsDotOrgTasks.new
28
28
 
29
- require 'rake/testtask'
30
- Rake::TestTask.new(:test) do |test|
31
- test.libs << 'lib' << 'test'
32
- test.pattern = 'test/**/test_*.rb'
33
- test.verbose = true
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
- task :default => :test
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.3.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.3.0 ruby lib
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.3.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-01-08"
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.7".freeze
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, [">= 2.1.2", "~> 2.1"])
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, [">= 2.1.2", "~> 2.1"])
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, [">= 2.1.2", "~> 2.1"])
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 'json'
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
- parsed_body = JSON.parse(response.body)
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
- JSON.parse(response.body)
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
@@ -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', 'ens-auth-token' => ens_auth_key} }
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
- expect(subject.process_page_request(page_id: page_id, body: {supporter: supporter_hash})).to eq response
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.3.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-01-08 00:00:00.000000000 Z
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.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