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