engaging-networks-rest 0.6.0 → 0.7.0

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: 9a3893669b39db25ea995ca69261faf534cfd5bc497928e1df6b5765d57315d1
4
- data.tar.gz: 7f1e50fbb1831eb1c03b3bdb19bfbd1ea0af6828f1db3d4c92831c83ebe5c5db
3
+ metadata.gz: 0d4c75c9409376d414dc63d78307aa86b764c036a93b007590137f85794c1980
4
+ data.tar.gz: 46e773a7635d878fe9115b66e1a7a395e0efd287ed1532c73b347c7e6e027cca
5
5
  SHA512:
6
- metadata.gz: 684c2ddccb8c0f2b2206e33a01cb34d37094c43af7beab6d69aee6731e10595f620b9d76d800f0e10ca68128961bec1bfaf0f0814375bc3a6c653d922e5ac5be
7
- data.tar.gz: 59f1ba47be552a66f24e931628945c26d147b716e87c7f280927a5ecf06e476d8d743c9bf3ced9eb2b3247724497e2a4c17592f1339c4056f9876678bef1ba47
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.6.6
1
+ 2.7.4
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [0.7.0] - 2023-10-16
2
+
3
+ ### Added
4
+ - Adds support for passing a `host` parameter to EngagingNetworksRest.new and EngagingNetworksRest::Client.new
5
+ - Ruby versions 3.0, 3.1, and 3.2 are officially supported in addition to ruby 2.7
data/Gemfile CHANGED
@@ -1,13 +1,18 @@
1
- source "https://rubygems.org"
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 'pry-byebug', '> 3.6'
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
@@ -1,4 +1,4 @@
1
- Copyright (c) 2018 Jacinda Moore
1
+ Copyright (c) 2018 ControlShift Labs
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
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
+ [![CI Status](https://github.com/controlshift/engaging-networks-rest/actions/workflows/ci.yml/badge.svg)](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
- # encoding: utf-8
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
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
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 = "engaging-networks-rest"
18
- gem.homepage = "http://github.com/controlshift/engaging-networks-rest"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Client gem for the ENS API to Engaging Networks}
21
- gem.description = %Q{Client gem for the ENS API to Engaging Networks}
22
- gem.email = "jacinda@controlshiftlabs.com"
23
- gem.authors = ["Jacinda Moore"]
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 "Run specs"
30
+ desc 'Run specs'
31
31
  RSpec::Core::RakeTask.new do |t|
32
- t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
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 "Code coverage detail"
36
+ desc 'Code coverage detail'
37
37
  task :simplecov do
38
- ENV['COVERAGE'] = "true"
38
+ ENV['COVERAGE'] = 'true'
39
39
  Rake::Task['test'].execute
40
40
  end
41
41
 
42
- desc 'Default: run specs.'
43
- task :default => :spec
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.6.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.6.0 ruby lib
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.6.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 = ["Jacinda Moore".freeze]
14
- s.date = "2021-03-23"
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 = "jacinda@controlshiftlabs.com".freeze
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.0.8".freeze
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
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
- s.add_runtime_dependency(%q<faraday>.freeze, [">= 1.0"])
51
- s.add_runtime_dependency(%q<faraday_middleware>.freeze, [">= 0"])
52
- s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
53
- s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
54
- s.add_development_dependency(%q<webmock>.freeze, ["> 3.4"])
55
- s.add_development_dependency(%q<faker>.freeze, ["> 1.9"])
56
- s.add_development_dependency(%q<pry-byebug>.freeze, ["> 3.6"])
57
- s.add_development_dependency(%q<faraday-detailed_logger>.freeze, [">= 2.1.2"])
58
- else
59
- s.add_dependency(%q<faraday>.freeze, [">= 1.0"])
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<pry-byebug>.freeze, ["> 3.6"])
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' => "application/json;q=0.1",
11
- 'Accept-Charset' => "utf-8"
12
+ 'Accept' => 'application/json;q=0.1',
13
+ 'Accept-Charset' => 'utf-8'
12
14
  }
13
15
  }
14
16
 
15
- faraday_builder = ->(faraday) do
17
+ faraday_builder = lambda do |faraday|
16
18
  faraday.request :json
17
- faraday.response :json, :content_type => /\bjson$/
19
+ faraday.response :json, content_type: /\bjson$/
18
20
  faraday.use Faraday::Response::Logger if ENV['DEBUG']
19
- faraday.use EngagingNetworksRest::Response::RaiseError
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 "Bye!"
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: "/ens/service/page", params: filter_params)
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", body: generic_data.merge(supporter: supporter_data))
19
- if response['status'] == 'SUCCESS'
20
- return response
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'.freeze
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://#{ENS_DOMAIN}") do |conn|
17
+ @connection = Faraday.new(url: "https://#{host}") do |conn|
16
18
  conn.request :json
17
- conn.response :json, :content_type => /\bjson$/
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 ; end
4
- class Unauthorized < StandardError ; end
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.new(error_message(response))
17
+ raise Unauthorized, error_message(response)
14
18
  when 404
15
- raise NotFound.new(error_message(response))
19
+ raise NotFound, error_message(response)
16
20
  when 500
17
- raise InternalError.new(error_message(response))
21
+ raise InternalError, error_message(response)
18
22
  else
19
- raise StandardError.new(error_message(response))
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].to_s}: #{response[:status]} \n\n #{response[:body] if response[:body]}"
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
@@ -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).with(headers: standard_headers, query: {'type' => page_type, 'status' => page_status})
22
- .to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: response.to_json)
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).with(headers: standard_headers, query: {'type' => page_type})
29
- .to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: response.to_json)
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) { {'firstName' => 'Joe', 'lastName' => 'Smith', 'emailAddress' => email, 'customField1' => 'foo'} }
59
- let(:response) { {'id' => '1234567', 'status' => 'SUCCESS', 'supporterEmailAddress' => email, 'supporterId' => '98765'} }
60
- let(:failure_response) { {'status' => 'ERROR', 'message' => 'Something went wrong'} }
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, supporter: { 'lastName' => 'Smith', 'emailAddress' => email }}.to_json, headers: standard_headers)
66
- .to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: response.to_json)
67
-
68
- result = subject.process_page_request(page_id: page_id, generic_data: { 'txn1' => 'foo', 'txn2' => 'bar', 'suppressAutoResponder' => true }, supporter_data: { 'lastName' => 'Smith', 'emailAddress' => email })
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).with(body: {supporter: supporter_hash}.to_json, headers: standard_headers)
73
- .to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: response.to_json)
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).with(body: {supporter: supporter_hash}.to_json, headers: standard_headers)
84
- .to_return(status: '200', headers: {content_type: "application/json; charset=utf-8"}, body: failure_response.to_json)
85
-
86
- 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/)
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).with(body: api_key, headers: content_type_header).to_return(body: auth_key_body, headers: content_type_header)
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
- it 'should set the ens_auth_key on the client' do
19
- subject.authenticate!
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
- expect(subject.ens_auth_key).to eq auth_key
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec'
2
4
  require 'webmock/rspec'
3
5
  require 'faker'
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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
- - Jacinda Moore
8
- autorequire:
7
+ - Grey Moore
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-23 00:00:00.000000000 Z
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: rspec
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: '0'
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: '0'
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: webmock
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.4'
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.4'
110
+ version: '3.6'
83
111
  - !ruby/object:Gem::Dependency
84
- name: faker
112
+ name: rspec
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
- - - ">"
115
+ - - ">="
88
116
  - !ruby/object:Gem::Version
89
- version: '1.9'
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: '1.9'
124
+ version: '0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: pry-byebug
126
+ name: rubocop
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
- - - ">"
129
+ - - ">="
102
130
  - !ruby/object:Gem::Version
103
- version: '3.6'
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: '3.6'
138
+ version: '0'
111
139
  - !ruby/object:Gem::Dependency
112
- name: faraday-detailed_logger
140
+ name: webmock
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - ">="
143
+ - - ">"
116
144
  - !ruby/object:Gem::Version
117
- version: 2.1.2
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: 2.1.2
152
+ version: '3.4'
125
153
  description: Client gem for the ENS API to Engaging Networks
126
- email: jacinda@controlshiftlabs.com
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.0.8
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: []