engaging-networks-rest 0.6.0 → 0.7.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/.github/workflows/ci.yml +35 -0
- data/.rubocop.yml +14 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +5 -0
- data/Gemfile +10 -5
- data/LICENSE.txt +1 -1
- data/README.md +3 -1
- data/Rakefile +17 -17
- data/VERSION +1 -1
- data/engaging-networks-rest.gemspec +27 -29
- data/example.rb +8 -6
- data/lib/engaging_networks_rest/client/pages.rb +8 -9
- data/lib/engaging_networks_rest/client.rb +7 -7
- data/lib/engaging_networks_rest/response/raise_error.rb +11 -7
- data/lib/engaging_networks_rest.rb +4 -2
- data/spec/client/pages_spec.rb +48 -19
- data/spec/client_spec.rb +26 -6
- data/spec/spec_helper.rb +2 -0
- metadata +60 -29
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0d4c75c9409376d414dc63d78307aa86b764c036a93b007590137f85794c1980
|
|
4
|
+
data.tar.gz: 46e773a7635d878fe9115b66e1a7a395e0efd287ed1532c73b347c7e6e027cca
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a4ae62b058d6ef1589226b0f82150da4cd45ef641f617dc967ff500b1529ba18137f098ee5e95054ed5ea0e4bdd0c42c868d5b37436960692df280a5939213e9
|
|
7
|
+
data.tar.gz: 6b2e2241bbc45fe002587341cfe792b826f403755d8c5b77efb226595c7e325cbb95745ee306a259e778fc4a54919ba87c9ce88e68c5dacd9ba8095fabe445a2
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on: [push]
|
|
3
|
+
|
|
4
|
+
jobs:
|
|
5
|
+
test:
|
|
6
|
+
runs-on: ubuntu-latest
|
|
7
|
+
|
|
8
|
+
strategy:
|
|
9
|
+
matrix:
|
|
10
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v2
|
|
14
|
+
- uses: ruby/setup-ruby@v1
|
|
15
|
+
with:
|
|
16
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
17
|
+
bundler-cache: true
|
|
18
|
+
- run: bundle install
|
|
19
|
+
- run: bundle exec rspec
|
|
20
|
+
|
|
21
|
+
rubocop:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
|
|
24
|
+
strategy:
|
|
25
|
+
matrix:
|
|
26
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v2
|
|
30
|
+
- uses: ruby/setup-ruby@v1
|
|
31
|
+
with:
|
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
33
|
+
bundler-cache: true
|
|
34
|
+
- run: bundle install
|
|
35
|
+
- run: bundle exec rubocop
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
Exclude:
|
|
3
|
+
- 'engaging-networks-rest.gemspec'
|
|
4
|
+
- 'example.rb'
|
|
5
|
+
- 'vendor/**/*'
|
|
6
|
+
|
|
7
|
+
Metrics/BlockLength:
|
|
8
|
+
Enabled: false
|
|
9
|
+
Metrics/MethodLength:
|
|
10
|
+
Enabled: false
|
|
11
|
+
Style/Documentation:
|
|
12
|
+
Enabled: false
|
|
13
|
+
Style/GuardClause:
|
|
14
|
+
Enabled: false
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.7.4
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source 'https://rubygems.org'
|
|
2
4
|
|
|
3
5
|
gem 'faraday', '>= 1.0'
|
|
4
6
|
gem 'faraday_middleware'
|
|
5
7
|
|
|
6
8
|
group :development do
|
|
7
|
-
gem 'rspec', '>= 0'
|
|
8
|
-
gem 'juwelier', git: 'https://github.com/flajann2/juwelier.git'
|
|
9
|
-
gem 'webmock', '> 3.4'
|
|
10
9
|
gem 'faker', '> 1.9'
|
|
11
|
-
gem '
|
|
10
|
+
gem 'psych', '3.3.2' # See https://github.com/faker-ruby/faker/issues/2330
|
|
11
|
+
|
|
12
12
|
gem 'faraday-detailed_logger', '>= 2.1.2'
|
|
13
|
+
gem 'juwelier', git: 'https://github.com/flajann2/juwelier.git'
|
|
14
|
+
gem 'pry-byebug', '> 3.6'
|
|
15
|
+
gem 'rspec', '>= 0'
|
|
16
|
+
gem 'rubocop'
|
|
17
|
+
gem 'webmock', '> 3.4'
|
|
13
18
|
end
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# engaging-networks-rest
|
|
2
2
|
Client gem for the ENS API to Engaging Networks
|
|
3
3
|
|
|
4
|
+
[](https://github.com/controlshift/engaging-networks-rest/actions/workflows/ci.yml)
|
|
5
|
+
|
|
4
6
|
## Install
|
|
5
7
|
|
|
6
8
|
`gem install engaging-networks-rest`
|
|
@@ -8,7 +10,7 @@ Client gem for the ENS API to Engaging Networks
|
|
|
8
10
|
## Usage
|
|
9
11
|
|
|
10
12
|
```
|
|
11
|
-
client = EngagingNetworksRest.new(api_key: 'YOUR API KEY HERE')
|
|
13
|
+
client = EngagingNetworksRest.new(api_key: 'YOUR API KEY HERE', host: 'us.engagingnetworks.app')
|
|
12
14
|
|
|
13
15
|
# get pages by type
|
|
14
16
|
pages = client.pages(type: 'dcf', status: 'live')
|
data/Rakefile
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'rubygems'
|
|
4
4
|
require 'bundler'
|
|
5
5
|
begin
|
|
6
6
|
Bundler.setup(:default, :development)
|
|
7
7
|
rescue Bundler::BundlerError => e
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
warn e.message
|
|
9
|
+
warn 'Run `bundle install` to install missing gems'
|
|
10
10
|
exit e.status_code
|
|
11
11
|
end
|
|
12
12
|
require 'rake'
|
|
@@ -14,37 +14,37 @@ require 'rake'
|
|
|
14
14
|
require 'juwelier'
|
|
15
15
|
Juwelier::Tasks.new do |gem|
|
|
16
16
|
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
|
17
|
-
gem.name =
|
|
18
|
-
gem.homepage =
|
|
19
|
-
gem.license =
|
|
20
|
-
gem.summary = %
|
|
21
|
-
gem.description = %
|
|
22
|
-
gem.email =
|
|
23
|
-
gem.authors = [
|
|
17
|
+
gem.name = 'engaging-networks-rest'
|
|
18
|
+
gem.homepage = 'http://github.com/controlshift/engaging-networks-rest'
|
|
19
|
+
gem.license = 'MIT'
|
|
20
|
+
gem.summary = %(Client gem for the ENS API to Engaging Networks)
|
|
21
|
+
gem.description = %(Client gem for the ENS API to Engaging Networks)
|
|
22
|
+
gem.email = 'grey@controlshiftlabs.com'
|
|
23
|
+
gem.authors = ['Grey Moore']
|
|
24
24
|
|
|
25
25
|
# dependencies defined in Gemfile
|
|
26
26
|
end
|
|
27
27
|
Juwelier::RubygemsDotOrgTasks.new
|
|
28
28
|
|
|
29
29
|
require 'rspec/core/rake_task'
|
|
30
|
-
desc
|
|
30
|
+
desc 'Run specs'
|
|
31
31
|
RSpec::Core::RakeTask.new do |t|
|
|
32
|
-
t.pattern =
|
|
32
|
+
t.pattern = './spec/**/*_spec.rb' # don't need this, it's default.
|
|
33
33
|
t.rspec_opts = '--color'
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
desc
|
|
36
|
+
desc 'Code coverage detail'
|
|
37
37
|
task :simplecov do
|
|
38
|
-
ENV['COVERAGE'] =
|
|
38
|
+
ENV['COVERAGE'] = 'true'
|
|
39
39
|
Rake::Task['test'].execute
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
desc 'Default: run specs
|
|
43
|
-
task :
|
|
42
|
+
desc 'Default: run specs'
|
|
43
|
+
task default: :spec
|
|
44
44
|
|
|
45
45
|
require 'rdoc/task'
|
|
46
46
|
Rake::RDocTask.new do |rdoc|
|
|
47
|
-
version = File.exist?('VERSION') ? File.read('VERSION') :
|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
|
48
48
|
|
|
49
49
|
rdoc.rdoc_dir = 'rdoc'
|
|
50
50
|
rdoc.title = "engaging-networks-rest #{version}"
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.7.0
|
|
@@ -2,26 +2,29 @@
|
|
|
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.7.0 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.7.0"
|
|
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
|
-
s.authors = ["
|
|
14
|
-
s.date = "
|
|
13
|
+
s.authors = ["Grey Moore".freeze]
|
|
14
|
+
s.date = "2023-10-16"
|
|
15
15
|
s.description = "Client gem for the ENS API to Engaging Networks".freeze
|
|
16
|
-
s.email = "
|
|
16
|
+
s.email = "grey@controlshiftlabs.com".freeze
|
|
17
17
|
s.extra_rdoc_files = [
|
|
18
18
|
"LICENSE",
|
|
19
19
|
"LICENSE.txt",
|
|
20
20
|
"README.md"
|
|
21
21
|
]
|
|
22
22
|
s.files = [
|
|
23
|
+
".github/workflows/ci.yml",
|
|
24
|
+
".rubocop.yml",
|
|
23
25
|
".ruby-gemset",
|
|
24
26
|
".ruby-version",
|
|
27
|
+
"CHANGELOG.md",
|
|
25
28
|
"Gemfile",
|
|
26
29
|
"LICENSE",
|
|
27
30
|
"LICENSE.txt",
|
|
@@ -40,40 +43,35 @@ Gem::Specification.new do |s|
|
|
|
40
43
|
]
|
|
41
44
|
s.homepage = "http://github.com/controlshift/engaging-networks-rest".freeze
|
|
42
45
|
s.licenses = ["MIT".freeze]
|
|
43
|
-
s.rubygems_version = "3.
|
|
46
|
+
s.rubygems_version = "3.1.6".freeze
|
|
44
47
|
s.summary = "Client gem for the ENS API to Engaging Networks".freeze
|
|
45
48
|
|
|
46
49
|
if s.respond_to? :specification_version then
|
|
47
50
|
s.specification_version = 4
|
|
51
|
+
end
|
|
48
52
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
s.add_dependency(%q<faraday_middleware>.freeze, [">= 0"])
|
|
61
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
|
62
|
-
s.add_dependency(%q<juwelier>.freeze, [">= 0"])
|
|
63
|
-
s.add_dependency(%q<webmock>.freeze, ["> 3.4"])
|
|
64
|
-
s.add_dependency(%q<faker>.freeze, ["> 1.9"])
|
|
65
|
-
s.add_dependency(%q<pry-byebug>.freeze, ["> 3.6"])
|
|
66
|
-
s.add_dependency(%q<faraday-detailed_logger>.freeze, [">= 2.1.2"])
|
|
67
|
-
end
|
|
53
|
+
if s.respond_to? :add_runtime_dependency then
|
|
54
|
+
s.add_runtime_dependency(%q<faraday>.freeze, [">= 1.0"])
|
|
55
|
+
s.add_runtime_dependency(%q<faraday_middleware>.freeze, [">= 0"])
|
|
56
|
+
s.add_development_dependency(%q<faker>.freeze, ["> 1.9"])
|
|
57
|
+
s.add_development_dependency(%q<psych>.freeze, ["= 3.3.2"])
|
|
58
|
+
s.add_development_dependency(%q<faraday-detailed_logger>.freeze, [">= 2.1.2"])
|
|
59
|
+
s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
|
|
60
|
+
s.add_development_dependency(%q<pry-byebug>.freeze, ["> 3.6"])
|
|
61
|
+
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
|
62
|
+
s.add_development_dependency(%q<rubocop>.freeze, [">= 0"])
|
|
63
|
+
s.add_development_dependency(%q<webmock>.freeze, ["> 3.4"])
|
|
68
64
|
else
|
|
69
65
|
s.add_dependency(%q<faraday>.freeze, [">= 1.0"])
|
|
70
66
|
s.add_dependency(%q<faraday_middleware>.freeze, [">= 0"])
|
|
71
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
|
72
|
-
s.add_dependency(%q<juwelier>.freeze, [">= 0"])
|
|
73
|
-
s.add_dependency(%q<webmock>.freeze, ["> 3.4"])
|
|
74
67
|
s.add_dependency(%q<faker>.freeze, ["> 1.9"])
|
|
75
|
-
s.add_dependency(%q<
|
|
68
|
+
s.add_dependency(%q<psych>.freeze, ["= 3.3.2"])
|
|
76
69
|
s.add_dependency(%q<faraday-detailed_logger>.freeze, [">= 2.1.2"])
|
|
70
|
+
s.add_dependency(%q<juwelier>.freeze, [">= 0"])
|
|
71
|
+
s.add_dependency(%q<pry-byebug>.freeze, ["> 3.6"])
|
|
72
|
+
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
|
73
|
+
s.add_dependency(%q<rubocop>.freeze, [">= 0"])
|
|
74
|
+
s.add_dependency(%q<webmock>.freeze, ["> 3.4"])
|
|
77
75
|
end
|
|
78
76
|
end
|
|
79
77
|
|
data/example.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
$LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
|
|
2
4
|
|
|
3
5
|
require 'engaging_networks_rest'
|
|
@@ -7,16 +9,16 @@ require 'byebug'
|
|
|
7
9
|
def instrument_connection_with_extended_logging(client)
|
|
8
10
|
default_options = {
|
|
9
11
|
headers: {
|
|
10
|
-
'Accept' =>
|
|
11
|
-
'Accept-Charset' =>
|
|
12
|
+
'Accept' => 'application/json;q=0.1',
|
|
13
|
+
'Accept-Charset' => 'utf-8'
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
faraday_builder =
|
|
17
|
+
faraday_builder = lambda do |faraday|
|
|
16
18
|
faraday.request :json
|
|
17
|
-
faraday.response :json, :
|
|
19
|
+
faraday.response :json, content_type: /\bjson$/
|
|
18
20
|
faraday.use Faraday::Response::Logger if ENV['DEBUG']
|
|
19
|
-
faraday.use
|
|
21
|
+
faraday.use EngagingNetworksRest::Response::RaiseError
|
|
20
22
|
faraday.response :detailed_logger
|
|
21
23
|
faraday.adapter Faraday.default_adapter
|
|
22
24
|
end
|
|
@@ -33,4 +35,4 @@ instrument_connection_with_extended_logging(client)
|
|
|
33
35
|
|
|
34
36
|
byebug
|
|
35
37
|
|
|
36
|
-
puts
|
|
38
|
+
puts 'Bye!'
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module EngagingNetworksRest
|
|
2
4
|
class Client
|
|
3
5
|
module Pages
|
|
4
6
|
def pages(type:, status: nil)
|
|
5
|
-
filter_params = {'type' => type}
|
|
6
|
-
unless status.nil?
|
|
7
|
-
filter_params['status'] = status
|
|
8
|
-
end
|
|
7
|
+
filter_params = { 'type' => type }
|
|
8
|
+
filter_params['status'] = status unless status.nil?
|
|
9
9
|
|
|
10
|
-
get(path:
|
|
10
|
+
get(path: '/ens/service/page', params: filter_params)
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def page(page_id:)
|
|
@@ -15,10 +15,9 @@ module EngagingNetworksRest
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def process_page_request(page_id:, supporter_data:, generic_data: {})
|
|
18
|
-
response = post(path: "/ens/service/page/#{page_id}/process",
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
end
|
|
18
|
+
response = post(path: "/ens/service/page/#{page_id}/process",
|
|
19
|
+
body: generic_data.merge(supporter: supporter_data))
|
|
20
|
+
return response if response['status'] == 'SUCCESS'
|
|
22
21
|
|
|
23
22
|
raise "Unexpected 'status' value on response: #{response}"
|
|
24
23
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'faraday'
|
|
2
4
|
require 'faraday_middleware'
|
|
3
5
|
require 'engaging_networks_rest/client/pages'
|
|
@@ -7,14 +9,14 @@ module EngagingNetworksRest
|
|
|
7
9
|
class Client
|
|
8
10
|
attr_reader :api_key, :connection, :ens_auth_key
|
|
9
11
|
|
|
10
|
-
ENS_DOMAIN = 'www.e-activist.com'
|
|
12
|
+
ENS_DOMAIN = 'www.e-activist.com'
|
|
11
13
|
|
|
12
|
-
def initialize(api_key:)
|
|
14
|
+
def initialize(api_key:, host: ENS_DOMAIN)
|
|
13
15
|
@api_key = api_key
|
|
14
16
|
|
|
15
|
-
@connection = Faraday.new(url: "https://#{
|
|
17
|
+
@connection = Faraday.new(url: "https://#{host}") do |conn|
|
|
16
18
|
conn.request :json
|
|
17
|
-
conn.response :json, :
|
|
19
|
+
conn.response :json, content_type: /\bjson$/
|
|
18
20
|
|
|
19
21
|
conn.use Faraday::Response::Logger if ENV['DEBUG']
|
|
20
22
|
conn.use EngagingNetworksRest::Response::RaiseError
|
|
@@ -50,9 +52,7 @@ module EngagingNetworksRest
|
|
|
50
52
|
private
|
|
51
53
|
|
|
52
54
|
def request(method:, path:, params: {}, body: {})
|
|
53
|
-
unless authenticated?
|
|
54
|
-
authenticate!
|
|
55
|
-
end
|
|
55
|
+
authenticate! unless authenticated?
|
|
56
56
|
|
|
57
57
|
response = connection.send(method) do |req|
|
|
58
58
|
req.headers['Content-Type'] = 'application/json'
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module EngagingNetworksRest
|
|
2
4
|
module Response
|
|
3
|
-
class NotFound < StandardError
|
|
4
|
-
|
|
5
|
+
class NotFound < StandardError; end
|
|
6
|
+
|
|
7
|
+
class Unauthorized < StandardError; end
|
|
8
|
+
|
|
5
9
|
class InternalError < StandardError; end
|
|
6
10
|
|
|
7
11
|
class RaiseError < Faraday::Response::Middleware
|
|
@@ -10,19 +14,19 @@ module EngagingNetworksRest
|
|
|
10
14
|
if (400...600).include? status_code
|
|
11
15
|
case status_code
|
|
12
16
|
when 401
|
|
13
|
-
raise Unauthorized
|
|
17
|
+
raise Unauthorized, error_message(response)
|
|
14
18
|
when 404
|
|
15
|
-
raise NotFound
|
|
19
|
+
raise NotFound, error_message(response)
|
|
16
20
|
when 500
|
|
17
|
-
raise InternalError
|
|
21
|
+
raise InternalError, error_message(response)
|
|
18
22
|
else
|
|
19
|
-
raise StandardError
|
|
23
|
+
raise StandardError, error_message(response)
|
|
20
24
|
end
|
|
21
25
|
end
|
|
22
26
|
end
|
|
23
27
|
|
|
24
28
|
def error_message(response)
|
|
25
|
-
"#{response[:method].to_s.upcase} #{response[:url]
|
|
29
|
+
"#{response[:method].to_s.upcase} #{response[:url]}: #{response[:status]} \n\n #{response[:body]}"
|
|
26
30
|
end
|
|
27
31
|
end
|
|
28
32
|
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'engaging_networks_rest/client'
|
|
2
4
|
|
|
3
5
|
module EngagingNetworksRest
|
|
4
6
|
class << self
|
|
5
|
-
def new(api_key:)
|
|
6
|
-
EngagingNetworksRest::Client.new(api_key: api_key)
|
|
7
|
+
def new(api_key:, host: EngagingNetworksRest::Client::ENS_DOMAIN)
|
|
8
|
+
EngagingNetworksRest::Client.new(api_key: api_key, host: host)
|
|
7
9
|
end
|
|
8
10
|
end
|
|
9
11
|
end
|
data/spec/client/pages_spec.rb
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
|
|
3
5
|
describe EngagingNetworksRest::Client::Pages do
|
|
4
6
|
let(:api_key) { 'abc-123' }
|
|
5
7
|
let(:ens_auth_key) { 'tmp-auth-key-456' }
|
|
6
|
-
let(:standard_headers) { {'Content-Type' => 'application/json', 'Ens-Auth-Token' => ens_auth_key} }
|
|
8
|
+
let(:standard_headers) { { 'Content-Type' => 'application/json', 'Ens-Auth-Token' => ens_auth_key } }
|
|
7
9
|
|
|
8
10
|
subject { EngagingNetworksRest::Client.new(api_key: api_key) }
|
|
9
11
|
|
|
@@ -14,19 +16,25 @@ describe EngagingNetworksRest::Client::Pages do
|
|
|
14
16
|
|
|
15
17
|
# The API docs don't actually say what this response looks like, so this is a guess.
|
|
16
18
|
# Fortunately, it doesn't actually matter for our purposes, since we just return whatever JSON we get.
|
|
17
|
-
let(:response) { [{'id' => 123, 'title' => 'A page'}, {'id' => 234, 'title' => 'Another page'}] }
|
|
19
|
+
let(:response) { [{ 'id' => 123, 'title' => 'A page' }, { 'id' => 234, 'title' => 'Another page' }] }
|
|
18
20
|
|
|
19
21
|
shared_examples_for 'list pages' do
|
|
20
22
|
it 'should get pages' do
|
|
21
|
-
stub_request(:get, pages_url)
|
|
22
|
-
.
|
|
23
|
+
stub_request(:get, pages_url)
|
|
24
|
+
.with(headers: standard_headers, query: { 'type' => page_type, 'status' => page_status })
|
|
25
|
+
.to_return(status: '200',
|
|
26
|
+
headers: { content_type: 'application/json; charset=utf-8' },
|
|
27
|
+
body: response.to_json)
|
|
23
28
|
|
|
24
29
|
expect(subject.pages(type: page_type, status: page_status)).to eq response
|
|
25
30
|
end
|
|
26
31
|
|
|
27
32
|
it 'should omit status param if not specified' do
|
|
28
|
-
stub_request(:get, pages_url)
|
|
29
|
-
.
|
|
33
|
+
stub_request(:get, pages_url)
|
|
34
|
+
.with(headers: standard_headers, query: { 'type' => page_type })
|
|
35
|
+
.to_return(status: '200',
|
|
36
|
+
headers: { content_type: 'application/json; charset=utf-8' },
|
|
37
|
+
body: response.to_json)
|
|
30
38
|
|
|
31
39
|
expect(subject.pages(type: page_type)).to eq response
|
|
32
40
|
end
|
|
@@ -55,22 +63,37 @@ describe EngagingNetworksRest::Client::Pages do
|
|
|
55
63
|
let(:page_id) { 234 }
|
|
56
64
|
let(:page_req_url) { "https://#{EngagingNetworksRest::Client::ENS_DOMAIN}/ens/service/page/#{page_id}/process" }
|
|
57
65
|
let(:email) { Faker::Internet.email }
|
|
58
|
-
let(:supporter_hash)
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
let(:supporter_hash) do
|
|
67
|
+
{ 'firstName' => 'Joe', 'lastName' => 'Smith', 'emailAddress' => email, 'customField1' => 'foo' }
|
|
68
|
+
end
|
|
69
|
+
let(:response) do
|
|
70
|
+
{ 'id' => '1234567', 'status' => 'SUCCESS', 'supporterEmailAddress' => email, 'supporterId' => '98765' }
|
|
71
|
+
end
|
|
72
|
+
let(:failure_response) { { 'status' => 'ERROR', 'message' => 'Something went wrong' } }
|
|
61
73
|
|
|
62
74
|
shared_examples_for 'process page request' do
|
|
63
75
|
it 'should send correct body for supporter and generic data' do
|
|
64
76
|
stub_request(:post, page_req_url)
|
|
65
|
-
.with(body: {'txn1' => 'foo', 'txn2' => 'bar', 'suppressAutoResponder' => true,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
.with(body: { 'txn1' => 'foo', 'txn2' => 'bar', 'suppressAutoResponder' => true,
|
|
78
|
+
supporter: { 'lastName' => 'Smith', 'emailAddress' => email } }.to_json,
|
|
79
|
+
headers: standard_headers)
|
|
80
|
+
.to_return(status: '200',
|
|
81
|
+
headers: { content_type: 'application/json; charset=utf-8' },
|
|
82
|
+
body: response.to_json)
|
|
83
|
+
|
|
84
|
+
subject.process_page_request(page_id: page_id,
|
|
85
|
+
generic_data: { 'txn1' => 'foo',
|
|
86
|
+
'txn2' => 'bar',
|
|
87
|
+
'suppressAutoResponder' => true },
|
|
88
|
+
supporter_data: { 'lastName' => 'Smith', 'emailAddress' => email })
|
|
69
89
|
end
|
|
70
90
|
|
|
71
91
|
it 'should process the page request and return its ID' do
|
|
72
|
-
stub_request(:post, page_req_url)
|
|
73
|
-
.
|
|
92
|
+
stub_request(:post, page_req_url)
|
|
93
|
+
.with(body: { supporter: supporter_hash }.to_json, headers: standard_headers)
|
|
94
|
+
.to_return(status: '200',
|
|
95
|
+
headers: { content_type: 'application/json; charset=utf-8' },
|
|
96
|
+
body: response.to_json)
|
|
74
97
|
|
|
75
98
|
result = subject.process_page_request(page_id: page_id, supporter_data: supporter_hash)
|
|
76
99
|
|
|
@@ -80,10 +103,16 @@ describe EngagingNetworksRest::Client::Pages do
|
|
|
80
103
|
end
|
|
81
104
|
|
|
82
105
|
it 'should raise if response status is not SUCCESS' do
|
|
83
|
-
stub_request(:post, page_req_url)
|
|
84
|
-
.
|
|
85
|
-
|
|
86
|
-
|
|
106
|
+
stub_request(:post, page_req_url)
|
|
107
|
+
.with(body: { supporter: supporter_hash }.to_json, headers: standard_headers)
|
|
108
|
+
.to_return(status: '200',
|
|
109
|
+
headers: { content_type: 'application/json; charset=utf-8' },
|
|
110
|
+
body: failure_response.to_json)
|
|
111
|
+
|
|
112
|
+
expect do
|
|
113
|
+
subject.process_page_request(page_id: page_id,
|
|
114
|
+
supporter_data: supporter_hash)
|
|
115
|
+
end.to raise_error(RuntimeError, /Unexpected 'status' value on response.*Something went wrong/)
|
|
87
116
|
end
|
|
88
117
|
end
|
|
89
118
|
|
data/spec/client_spec.rb
CHANGED
|
@@ -1,24 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
|
|
3
5
|
describe EngagingNetworksRest::Client do
|
|
4
6
|
let(:api_key) { 'abc123' }
|
|
5
|
-
let(:content_type_header) { {'Content-Type' => 'application/json'} }
|
|
7
|
+
let(:content_type_header) { { 'Content-Type' => 'application/json' } }
|
|
6
8
|
|
|
7
9
|
subject { EngagingNetworksRest::Client.new(api_key: api_key) }
|
|
8
10
|
|
|
9
11
|
describe '#authenticate!' do
|
|
10
|
-
let(:auth_url) { "https://#{EngagingNetworksRest::Client::ENS_DOMAIN}/ens/service/authenticate" }
|
|
11
12
|
let(:auth_key) { '75491e42-99dc-45ce-b637-a681bede875c' }
|
|
12
13
|
let(:auth_key_body) { "{\"ens-auth-token\":\"#{auth_key}\",\"expires\":3600000}" }
|
|
13
14
|
|
|
14
15
|
before :each do
|
|
15
|
-
stub_request(:post, auth_url)
|
|
16
|
+
stub_request(:post, auth_url)
|
|
17
|
+
.with(body: api_key, headers: content_type_header)
|
|
18
|
+
.to_return(body: auth_key_body, headers: content_type_header)
|
|
16
19
|
end
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
context 'with no host specified' do
|
|
22
|
+
let(:auth_url) { "https://#{EngagingNetworksRest::Client::ENS_DOMAIN}/ens/service/authenticate" }
|
|
23
|
+
|
|
24
|
+
it 'should set the ens_auth_key on the client' do
|
|
25
|
+
subject.authenticate!
|
|
26
|
+
|
|
27
|
+
expect(subject.ens_auth_key).to eq auth_key
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'with a host specified' do
|
|
32
|
+
let(:host) { 'example.com' }
|
|
33
|
+
let(:auth_url) { "https://#{host}/ens/service/authenticate" }
|
|
34
|
+
|
|
35
|
+
subject { EngagingNetworksRest::Client.new(api_key: api_key, host: host) }
|
|
36
|
+
|
|
37
|
+
it 'should set the ens_auth_key on the client' do
|
|
38
|
+
subject.authenticate!
|
|
20
39
|
|
|
21
|
-
|
|
40
|
+
expect(subject.ens_auth_key).to eq auth_key
|
|
41
|
+
end
|
|
22
42
|
end
|
|
23
43
|
end
|
|
24
44
|
end
|
data/spec/spec_helper.rb
CHANGED
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.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
8
|
-
autorequire:
|
|
7
|
+
- Grey Moore
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-10-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -39,19 +39,47 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: faker
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '1.9'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '1.9'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: psych
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - '='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 3.3.2
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - '='
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 3.3.2
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: faraday-detailed_logger
|
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
|
44
72
|
requirements:
|
|
45
73
|
- - ">="
|
|
46
74
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
75
|
+
version: 2.1.2
|
|
48
76
|
type: :development
|
|
49
77
|
prerelease: false
|
|
50
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
79
|
requirements:
|
|
52
80
|
- - ">="
|
|
53
81
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
82
|
+
version: 2.1.2
|
|
55
83
|
- !ruby/object:Gem::Dependency
|
|
56
84
|
name: juwelier
|
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,63 +95,63 @@ dependencies:
|
|
|
67
95
|
- !ruby/object:Gem::Version
|
|
68
96
|
version: '0'
|
|
69
97
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
98
|
+
name: pry-byebug
|
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
|
72
100
|
requirements:
|
|
73
101
|
- - ">"
|
|
74
102
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '3.
|
|
103
|
+
version: '3.6'
|
|
76
104
|
type: :development
|
|
77
105
|
prerelease: false
|
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
107
|
requirements:
|
|
80
108
|
- - ">"
|
|
81
109
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '3.
|
|
110
|
+
version: '3.6'
|
|
83
111
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
112
|
+
name: rspec
|
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
|
86
114
|
requirements:
|
|
87
|
-
- - "
|
|
115
|
+
- - ">="
|
|
88
116
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
117
|
+
version: '0'
|
|
90
118
|
type: :development
|
|
91
119
|
prerelease: false
|
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
121
|
requirements:
|
|
94
|
-
- - "
|
|
122
|
+
- - ">="
|
|
95
123
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
124
|
+
version: '0'
|
|
97
125
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
126
|
+
name: rubocop
|
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
|
100
128
|
requirements:
|
|
101
|
-
- - "
|
|
129
|
+
- - ">="
|
|
102
130
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
131
|
+
version: '0'
|
|
104
132
|
type: :development
|
|
105
133
|
prerelease: false
|
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
135
|
requirements:
|
|
108
|
-
- - "
|
|
136
|
+
- - ">="
|
|
109
137
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '
|
|
138
|
+
version: '0'
|
|
111
139
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
140
|
+
name: webmock
|
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
|
114
142
|
requirements:
|
|
115
|
-
- - "
|
|
143
|
+
- - ">"
|
|
116
144
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
145
|
+
version: '3.4'
|
|
118
146
|
type: :development
|
|
119
147
|
prerelease: false
|
|
120
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
149
|
requirements:
|
|
122
|
-
- - "
|
|
150
|
+
- - ">"
|
|
123
151
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
152
|
+
version: '3.4'
|
|
125
153
|
description: Client gem for the ENS API to Engaging Networks
|
|
126
|
-
email:
|
|
154
|
+
email: grey@controlshiftlabs.com
|
|
127
155
|
executables: []
|
|
128
156
|
extensions: []
|
|
129
157
|
extra_rdoc_files:
|
|
@@ -131,8 +159,11 @@ extra_rdoc_files:
|
|
|
131
159
|
- LICENSE.txt
|
|
132
160
|
- README.md
|
|
133
161
|
files:
|
|
162
|
+
- ".github/workflows/ci.yml"
|
|
163
|
+
- ".rubocop.yml"
|
|
134
164
|
- ".ruby-gemset"
|
|
135
165
|
- ".ruby-version"
|
|
166
|
+
- CHANGELOG.md
|
|
136
167
|
- Gemfile
|
|
137
168
|
- LICENSE
|
|
138
169
|
- LICENSE.txt
|
|
@@ -152,7 +183,7 @@ homepage: http://github.com/controlshift/engaging-networks-rest
|
|
|
152
183
|
licenses:
|
|
153
184
|
- MIT
|
|
154
185
|
metadata: {}
|
|
155
|
-
post_install_message:
|
|
186
|
+
post_install_message:
|
|
156
187
|
rdoc_options: []
|
|
157
188
|
require_paths:
|
|
158
189
|
- lib
|
|
@@ -167,8 +198,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
167
198
|
- !ruby/object:Gem::Version
|
|
168
199
|
version: '0'
|
|
169
200
|
requirements: []
|
|
170
|
-
rubygems_version: 3.
|
|
171
|
-
signing_key:
|
|
201
|
+
rubygems_version: 3.1.6
|
|
202
|
+
signing_key:
|
|
172
203
|
specification_version: 4
|
|
173
204
|
summary: Client gem for the ENS API to Engaging Networks
|
|
174
205
|
test_files: []
|