tokyo_api 1.5.1 → 1.6.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/.ruby-version +1 -1
- data/Gemfile +9 -6
- data/Rakefile +12 -12
- data/VERSION +1 -1
- data/example.rb +3 -2
- data/lib/tokyo_api.rb +2 -1
- data/lib/tokyo_api/actionkit.rb +4 -4
- data/lib/tokyo_api/base.rb +4 -2
- data/lib/tokyo_api/campact.rb +11 -17
- data/lib/tokyo_api/client.rb +14 -23
- data/lib/tokyo_api/expire.rb +3 -1
- data/lib/tokyo_api/identity.rb +18 -23
- data/spec/actionkit_spec.rb +14 -8
- data/spec/campact_spec.rb +36 -19
- data/spec/client_spec.rb +5 -3
- data/spec/expire_spec.rb +8 -6
- data/spec/identity_spec.rb +43 -29
- data/spec/spec_helper.rb +5 -3
- data/spec/tokyo_api_spec.rb +4 -4
- data/tokyo_api.gemspec +19 -19
- metadata +29 -18
- data/lib/tokyo_api/bluestatedigital.rb +0 -19
- data/spec/bluestatedigital_spec.rb +0 -58
- data/spec/fixtures/responses/bluestatedigital/full_user_success +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 608376ec5c22df615936ab9c5603877f983e3f1c36c93071f3e4e4195bc6012e
|
4
|
+
data.tar.gz: 48218037c0aa31d24ca5f708311677387172422adc63a1ee5a0f190b3f92bfd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5baf06d1f979d9efa535600046b02f384cc53ce3dc794be57e1e799a4cb1a9744b7202725656905940438b0a8081951f5545b9e46f463fa90f0c9ecf870d8a0b
|
7
|
+
data.tar.gz: 585fb0e20ce10d6aec74c764a8b43716dabed99e6c32605f8789837840e3ba80a0ae828dd5ed104fb604f2314e1c405242389bfcffe83b1467cba761b15256c3
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.6
|
data/Gemfile
CHANGED
@@ -1,13 +1,16 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
source 'http://rubygems.org'
|
4
|
+
|
5
|
+
gem 'vertebrae', '>= 0.6.0'
|
4
6
|
|
5
7
|
# Add dependencies to develop your gem here.
|
6
8
|
# Include everything needed to run rake, tests, features, etc.
|
7
9
|
group :development do
|
8
|
-
gem
|
9
|
-
gem 'webmock'
|
10
|
+
gem 'bundler'
|
10
11
|
gem 'byebug'
|
11
|
-
gem
|
12
|
-
gem
|
12
|
+
gem 'juwelier', git: 'https://github.com/flajann2/juwelier.git'
|
13
|
+
gem 'rspec'
|
14
|
+
gem 'rubocop'
|
15
|
+
gem 'webmock'
|
13
16
|
end
|
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,13 +14,13 @@ require 'rake'
|
|
14
14
|
require 'juwelier'
|
15
15
|
Juwelier::Tasks.new do |gem|
|
16
16
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 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 = 'tokyo_api'
|
18
|
+
gem.homepage = 'http://github.com/controlshift/tokyo_api'
|
19
|
+
gem.license = 'MIT'
|
20
|
+
gem.summary = 'Ruby API Wrapper for Tokyo CRM service'
|
21
|
+
gem.description = 'Tokyo is a CRM middleware, this gem helps apps talk to it.'
|
22
|
+
gem.email = 'nathan@controlshiftlabs.com'
|
23
|
+
gem.authors = ['Nathan Woodhull']
|
24
24
|
# dependencies defined in Gemfile
|
25
25
|
end
|
26
26
|
Juwelier::RubygemsDotOrgTasks.new
|
@@ -36,11 +36,11 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
36
36
|
spec.rcov = true
|
37
37
|
end
|
38
38
|
|
39
|
-
task :
|
39
|
+
task default: :spec
|
40
40
|
|
41
41
|
require 'rdoc/task'
|
42
42
|
Rake::RDocTask.new do |rdoc|
|
43
|
-
version = File.exist?('VERSION') ? File.read('VERSION') :
|
43
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
44
44
|
|
45
45
|
rdoc.rdoc_dir = 'rdoc'
|
46
46
|
rdoc.title = "tokyo_api #{version}"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.6.0
|
data/example.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
|
2
4
|
|
3
5
|
require 'tokyo_api'
|
4
6
|
|
5
7
|
ta = TokyoApi.new(host: 'localhost:9000', username: 'tokyo', password: 'Passw0rd!', scheme: 'http')
|
6
8
|
|
7
|
-
|
8
9
|
require 'pry-debugger'
|
9
|
-
binding.pry
|
10
|
+
binding.pry
|
data/lib/tokyo_api.rb
CHANGED
data/lib/tokyo_api/actionkit.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module TokyoApi
|
2
4
|
class Actionkit < Base
|
3
5
|
def base_path
|
@@ -9,10 +11,8 @@ module TokyoApi
|
|
9
11
|
end
|
10
12
|
|
11
13
|
def user_path(id, required_fields: nil)
|
12
|
-
path = "/#{normalized_base_path}user/#{url_escape(id)}"
|
13
|
-
unless required_fields.nil?
|
14
|
-
path << "?#{required_fields_param(required_fields)}"
|
15
|
-
end
|
14
|
+
path = String.new("/#{normalized_base_path}user/#{url_escape(id)}")
|
15
|
+
path << "?#{required_fields_param(required_fields)}" unless required_fields.nil?
|
16
16
|
path
|
17
17
|
end
|
18
18
|
end
|
data/lib/tokyo_api/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module TokyoApi
|
2
4
|
class Base < Vertebrae::Model
|
3
5
|
def normalized_base_path
|
@@ -10,10 +12,10 @@ module TokyoApi
|
|
10
12
|
|
11
13
|
def required_fields_param(required_fields)
|
12
14
|
if required_fields.present?
|
13
|
-
"required_fields=#{required_fields.collect{|v| url_escape(v.to_s)}.join(',')}"
|
15
|
+
"required_fields=#{required_fields.collect { |v| url_escape(v.to_s) }.join(',')}"
|
14
16
|
else
|
15
17
|
''
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
19
|
-
end
|
21
|
+
end
|
data/lib/tokyo_api/campact.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module TokyoApi
|
2
4
|
class Campact < Base
|
3
5
|
def base_path
|
@@ -17,26 +19,18 @@ module TokyoApi
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def subscription_status(token)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
raise
|
29
|
-
end
|
22
|
+
client.get_request(subscription_status_path(token)).body
|
23
|
+
rescue Vertebrae::ResponseError => e
|
24
|
+
# Status 404 is expected in these calls
|
25
|
+
return nil if e.status_code == 404
|
26
|
+
|
27
|
+
raise
|
30
28
|
end
|
31
29
|
|
32
30
|
def user_path(session_id, petition_id:, with_subscription_status: false, required_fields: nil)
|
33
|
-
path = "/#{normalized_base_path}user/#{url_escape(session_id)}?petition_id=#{url_escape(petition_id)}"
|
34
|
-
if with_subscription_status
|
35
|
-
|
36
|
-
end
|
37
|
-
unless required_fields.nil?
|
38
|
-
path << "&#{required_fields_param(required_fields)}"
|
39
|
-
end
|
31
|
+
path = String.new("/#{normalized_base_path}user/#{url_escape(session_id)}?petition_id=#{url_escape(petition_id)}")
|
32
|
+
path << '&with_subscription_status=true' if with_subscription_status
|
33
|
+
path << "&#{required_fields_param(required_fields)}" unless required_fields.nil?
|
40
34
|
path
|
41
35
|
end
|
42
36
|
|
data/lib/tokyo_api/client.rb
CHANGED
@@ -1,16 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module TokyoApi
|
2
4
|
class Client < Vertebrae::API
|
3
5
|
def actionkit
|
4
6
|
@actionkit ||= TokyoApi::Actionkit.new(client: self)
|
5
7
|
end
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
def bluestatedigital
|
10
|
-
@bluestatedigital ||= TokyoApi::Bluestatedigital.new(client: self)
|
11
|
-
end
|
12
|
-
|
13
|
-
alias_method :blue_state_digital, :bluestatedigital
|
9
|
+
alias action_kit actionkit
|
14
10
|
|
15
11
|
def campact
|
16
12
|
@campact ||= TokyoApi::Campact.new(client: self)
|
@@ -24,7 +20,6 @@ module TokyoApi
|
|
24
20
|
@expire ||= TokyoApi::Expire.new(client: self)
|
25
21
|
end
|
26
22
|
|
27
|
-
|
28
23
|
def default_options
|
29
24
|
opts = {
|
30
25
|
user_agent: 'TokyoApi Gem',
|
@@ -32,32 +27,27 @@ module TokyoApi
|
|
32
27
|
content_type: 'application/json'
|
33
28
|
}
|
34
29
|
|
35
|
-
if initialisation_options.
|
36
|
-
opts[:connection_options] = {request: {timeout: initialisation_options[:timeout]}}
|
30
|
+
if initialisation_options.key?(:timeout)
|
31
|
+
opts[:connection_options] = { request: { timeout: initialisation_options[:timeout] } }
|
37
32
|
end
|
38
33
|
|
39
34
|
opts
|
40
35
|
end
|
41
36
|
|
42
37
|
def request(method, path, params, options) # :nodoc:
|
43
|
-
|
44
|
-
raise ArgumentError, "unknown http method: #{method}"
|
45
|
-
end
|
38
|
+
raise ArgumentError, "unknown http method: #{method}" unless ::Vertebrae::Request::METHODS.include?(method)
|
46
39
|
|
47
|
-
unless connection.configuration.prefix.blank?
|
48
|
-
path = connection.configuration.prefix + '/' + path
|
49
|
-
end
|
40
|
+
path = "#{connection.configuration.prefix}/#{path}" unless connection.configuration.prefix.blank?
|
50
41
|
|
51
42
|
::Vertebrae::Base.logger.debug "EXECUTED: #{method} - #{path} with #{params} and #{options}"
|
52
43
|
|
53
44
|
connection.connection.send(method) do |request|
|
54
|
-
|
55
45
|
case method.to_sym
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
46
|
+
when *(::Vertebrae::Request::METHODS - ::Vertebrae::Request::METHODS_WITH_BODIES)
|
47
|
+
request.url(path, params)
|
48
|
+
when *::Vertebrae::Request::METHODS_WITH_BODIES
|
49
|
+
request.path = path
|
50
|
+
request.body = extract_data_from_params(params) unless params.empty?
|
61
51
|
end
|
62
52
|
end
|
63
53
|
end
|
@@ -67,7 +57,8 @@ module TokyoApi
|
|
67
57
|
builder.use Faraday::Request::Multipart
|
68
58
|
builder.use Faraday::Request::UrlEncoded
|
69
59
|
if connection.configuration.authenticated?
|
70
|
-
builder.use Faraday::Request::BasicAuthentication, connection.configuration.username,
|
60
|
+
builder.use Faraday::Request::BasicAuthentication, connection.configuration.username,
|
61
|
+
connection.configuration.password
|
71
62
|
end
|
72
63
|
|
73
64
|
builder.use Faraday::Response::Logger if ENV['DEBUG']
|
data/lib/tokyo_api/expire.rb
CHANGED
data/lib/tokyo_api/identity.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module TokyoApi
|
2
4
|
class Identity < Base
|
3
5
|
def base_path
|
@@ -9,24 +11,19 @@ module TokyoApi
|
|
9
11
|
end
|
10
12
|
|
11
13
|
def tokyo_identity_user_path(id, with_subscription_status: false, required_fields: nil, opt_in_public_ids: nil, minimum_consent_level: nil, encrypted: nil)
|
12
|
-
path = "/#{normalized_base_path}user/#{url_escape(id)}"
|
14
|
+
path = String.new("/#{normalized_base_path}user/#{url_escape(id)}")
|
13
15
|
|
14
16
|
params = []
|
15
|
-
unless required_fields.nil?
|
16
|
-
params << required_fields_param(required_fields)
|
17
|
-
end
|
17
|
+
params << required_fields_param(required_fields) unless required_fields.nil?
|
18
18
|
|
19
19
|
if with_subscription_status
|
20
20
|
params << 'with_subscription_status=true'
|
21
|
-
additional_subscription_parameters = path_for_subscription_status_params(opt_in_public_ids,
|
22
|
-
|
23
|
-
|
24
|
-
end
|
21
|
+
additional_subscription_parameters = path_for_subscription_status_params(opt_in_public_ids,
|
22
|
+
minimum_consent_level, encrypted)
|
23
|
+
params << additional_subscription_parameters if additional_subscription_parameters.present?
|
25
24
|
end
|
26
25
|
|
27
|
-
if params.any?
|
28
|
-
path << "?#{params.join('&')}"
|
29
|
-
end
|
26
|
+
path << "?#{params.join('&')}" if params.any?
|
30
27
|
|
31
28
|
path
|
32
29
|
end
|
@@ -34,25 +31,23 @@ module TokyoApi
|
|
34
31
|
def subscription_status_path(id, opt_in_public_ids: nil, minimum_consent_level: nil, encrypted: nil)
|
35
32
|
raise 'must provide opt_in_public_ids' if opt_in_public_ids.nil?
|
36
33
|
|
37
|
-
"/#{normalized_base_path}subscription_status/#{url_escape(id)}?#{path_for_subscription_status_params(
|
34
|
+
"/#{normalized_base_path}subscription_status/#{url_escape(id)}?#{path_for_subscription_status_params(
|
35
|
+
opt_in_public_ids, minimum_consent_level, encrypted
|
36
|
+
)}"
|
38
37
|
end
|
39
38
|
|
40
39
|
private
|
41
40
|
|
42
41
|
def path_for_subscription_status_params(opt_in_public_ids, minimum_consent_level, encrypted = nil)
|
43
|
-
path =
|
42
|
+
path = if opt_in_public_ids.present?
|
43
|
+
String.new("opt_in_public_ids=#{url_escape(opt_in_public_ids.join(','))}")
|
44
|
+
else
|
45
|
+
String.new('')
|
46
|
+
end
|
44
47
|
|
45
|
-
if
|
46
|
-
path = "opt_in_public_ids=#{url_escape(opt_in_public_ids.join(','))}"
|
47
|
-
end
|
48
|
+
path << "&minimum_consent_level=#{url_escape(minimum_consent_level)}" if minimum_consent_level
|
48
49
|
|
49
|
-
if
|
50
|
-
path << "&minimum_consent_level=#{url_escape(minimum_consent_level)}"
|
51
|
-
end
|
52
|
-
|
53
|
-
if encrypted
|
54
|
-
path << "&encrypted=1"
|
55
|
-
end
|
50
|
+
path << '&encrypted=1' if encrypted
|
56
51
|
|
57
52
|
path
|
58
53
|
end
|
data/spec/actionkit_spec.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/spec_helper")
|
2
4
|
|
3
5
|
describe TokyoApi::Actionkit do
|
4
6
|
subject { TokyoApi.new(host: 'test.com') }
|
@@ -15,15 +17,15 @@ describe TokyoApi::Actionkit do
|
|
15
17
|
let(:status) { 200 }
|
16
18
|
|
17
19
|
before(:each) do
|
18
|
-
|
19
|
-
|
20
|
+
stub_get(request_path).to_return(body: body, status: status,
|
21
|
+
headers: { content_type: 'application/json; charset=utf-8' })
|
20
22
|
end
|
21
23
|
|
22
24
|
describe 'error' do
|
23
25
|
let(:body) { fixture('responses/full_user_error') }
|
24
26
|
|
25
27
|
it 'should return an error hash' do
|
26
|
-
expect(subject.actionkit.full_user('1')).to eq({'error' => 'Connection refused'})
|
28
|
+
expect(subject.actionkit.full_user('1')).to eq({ 'error' => 'Connection refused' })
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
@@ -39,18 +41,22 @@ describe TokyoApi::Actionkit do
|
|
39
41
|
|
40
42
|
describe 'user_path' do
|
41
43
|
context 'without required_fields' do
|
42
|
-
it
|
44
|
+
it 'should return relative path to user API endpoint' do
|
43
45
|
expect(subject.actionkit.user_path('abc.123.xyz')).to eq('/actionkit/user/abc.123.xyz')
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
49
|
context 'with required_fields' do
|
48
|
-
it
|
49
|
-
expect(subject.actionkit.user_path('abc.123.xyz',
|
50
|
+
it 'should return relative path to user API endpoint' do
|
51
|
+
expect(subject.actionkit.user_path('abc.123.xyz',
|
52
|
+
required_fields: %i[first_name last_name email postal
|
53
|
+
phone])).to eq('/actionkit/user/abc.123.xyz?required_fields=first_name,last_name,email,postal,phone')
|
50
54
|
end
|
51
55
|
|
52
56
|
it 'should url-escape field names with weird characters' do
|
53
|
-
expect(subject.actionkit.user_path('abc.123.xyz',
|
57
|
+
expect(subject.actionkit.user_path('abc.123.xyz',
|
58
|
+
required_fields: ['email',
|
59
|
+
'fish & chips'])).to eq('/actionkit/user/abc.123.xyz?required_fields=email,fish+%26+chips')
|
54
60
|
end
|
55
61
|
end
|
56
62
|
end
|
data/spec/campact_spec.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/spec_helper")
|
2
4
|
|
3
5
|
describe TokyoApi::Campact do
|
4
6
|
subject { TokyoApi.new(host: 'test.com') }
|
@@ -15,15 +17,15 @@ describe TokyoApi::Campact do
|
|
15
17
|
let(:status) { 200 }
|
16
18
|
|
17
19
|
before(:each) do
|
18
|
-
|
19
|
-
|
20
|
+
stub_get(request_path).to_return(body: body, status: status,
|
21
|
+
headers: { content_type: 'application/json; charset=utf-8' })
|
20
22
|
end
|
21
23
|
|
22
24
|
describe 'error' do
|
23
25
|
let(:body) { fixture('responses/full_user_error') }
|
24
26
|
|
25
27
|
it 'should return an error message' do
|
26
|
-
expect(subject.campact.full_user('123abc456')).to eq({'error' => 'Connection refused'})
|
28
|
+
expect(subject.campact.full_user('123abc456')).to eq({ 'error' => 'Connection refused' })
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
@@ -31,8 +33,8 @@ describe TokyoApi::Campact do
|
|
31
33
|
let(:body) { fixture('responses/campact/full_user_success') }
|
32
34
|
|
33
35
|
it 'should find an organisation' do
|
34
|
-
expect(subject.campact.full_user('123abc456')).to eq({'first_name' => 'Homer', 'last_name' => 'Simpson',
|
35
|
-
|
36
|
+
expect(subject.campact.full_user('123abc456')).to eq({ 'first_name' => 'Homer', 'last_name' => 'Simpson',
|
37
|
+
'country' => 'DE', 'postal' => '12345', 'email' => 'foo@bar.com' })
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
@@ -48,15 +50,19 @@ describe TokyoApi::Campact do
|
|
48
50
|
end
|
49
51
|
|
50
52
|
it 'should perform request on subscription_status_path' do
|
51
|
-
expect(client).to receive(:get_request).with("/campact/subscription_status?token=#{token}").and_return(double(body: {subscribed: true}))
|
53
|
+
expect(client).to receive(:get_request).with("/campact/subscription_status?token=#{token}").and_return(double(body: { subscribed: true }))
|
52
54
|
|
53
55
|
subs_status = subject.subscription_status(token)
|
54
56
|
|
55
|
-
expect(subs_status).to eq({subscribed: true})
|
57
|
+
expect(subs_status).to eq({ subscribed: true })
|
56
58
|
end
|
57
59
|
|
58
60
|
it 'should return nil if tokyo responds with 404' do
|
59
|
-
expect(client).to receive(:get_request).with("/campact/subscription_status?token=#{token}").and_raise(Vertebrae::ResponseError.new(
|
61
|
+
expect(client).to receive(:get_request).with("/campact/subscription_status?token=#{token}").and_raise(Vertebrae::ResponseError.new(
|
62
|
+
404, {
|
63
|
+
method: 'get', url: "/campact/subscription_status?token=#{token}", status: '404', body: 'Not Found'
|
64
|
+
}
|
65
|
+
))
|
60
66
|
|
61
67
|
subs_status = subject.subscription_status(token)
|
62
68
|
|
@@ -64,7 +70,10 @@ describe TokyoApi::Campact do
|
|
64
70
|
end
|
65
71
|
|
66
72
|
it 'should raise if tokyo responds with other error code' do
|
67
|
-
expect(client).to receive(:get_request).with("/campact/subscription_status?token=#{token}").and_raise(Vertebrae::ResponseError.new(
|
73
|
+
expect(client).to receive(:get_request).with("/campact/subscription_status?token=#{token}").and_raise(Vertebrae::ResponseError.new(
|
74
|
+
500, { method: 'get', url: "/campact/subscription_status?token=#{token}", status: '500',
|
75
|
+
body: 'Something bad happened' }
|
76
|
+
))
|
68
77
|
|
69
78
|
expect { subject.subscription_status(token) }.to raise_error Vertebrae::ResponseError
|
70
79
|
end
|
@@ -72,32 +81,38 @@ describe TokyoApi::Campact do
|
|
72
81
|
|
73
82
|
describe '#user_path' do
|
74
83
|
context 'without required_fields' do
|
75
|
-
it
|
76
|
-
expect(subject.campact.user_path('123abc456',
|
84
|
+
it 'should return relative path to user API endpoint' do
|
85
|
+
expect(subject.campact.user_path('123abc456',
|
86
|
+
petition_id: 'save-the-trees')).to eq '/campact/user/123abc456?petition_id=save-the-trees'
|
77
87
|
end
|
78
88
|
end
|
79
89
|
|
80
90
|
context 'with required_fields' do
|
81
|
-
it
|
82
|
-
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
91
|
+
it 'should return relative path to user API endpoint' do
|
92
|
+
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
93
|
+
required_fields: %i[first_name last_name email])).to eq '/campact/user/123abc456?petition_id=save-the-trees&required_fields=first_name,last_name,email'
|
83
94
|
end
|
84
95
|
|
85
96
|
it 'should url-escape field names with weird characters' do
|
86
|
-
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
97
|
+
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
98
|
+
required_fields: ['email', 'fish & chips'])).to eq '/campact/user/123abc456?petition_id=save-the-trees&required_fields=email,fish+%26+chips'
|
87
99
|
end
|
88
100
|
end
|
89
101
|
|
90
102
|
context 'with_subscription_status argument' do
|
91
103
|
it 'should not include query string parameter if argument is missing' do
|
92
|
-
expect(subject.campact.user_path('123abc456',
|
104
|
+
expect(subject.campact.user_path('123abc456',
|
105
|
+
petition_id: 'save-the-trees')).not_to match(/.+with_subscription_status=.+/)
|
93
106
|
end
|
94
107
|
|
95
108
|
it 'should not include query string parameter if argument is false' do
|
96
|
-
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
109
|
+
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
110
|
+
with_subscription_status: false)).not_to match(/.+with_subscription_status=.+/)
|
97
111
|
end
|
98
112
|
|
99
113
|
it 'should include query string parameter if argument is true' do
|
100
|
-
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
114
|
+
expect(subject.campact.user_path('123abc456', petition_id: 'save-the-trees',
|
115
|
+
with_subscription_status: true)).to match(/.+with_subscription_status=true.*/)
|
101
116
|
end
|
102
117
|
end
|
103
118
|
end
|
@@ -117,7 +132,9 @@ describe TokyoApi::Campact do
|
|
117
132
|
subject { TokyoApi::Campact.new(client: client) }
|
118
133
|
|
119
134
|
it 'should perform request on session status path' do
|
120
|
-
expect(client).to receive(:get_request).with("/campact/session/#{session_id}/status").and_return(double(body: {
|
135
|
+
expect(client).to receive(:get_request).with("/campact/session/#{session_id}/status").and_return(double(body: {
|
136
|
+
hard_login: false, soft_login: true
|
137
|
+
}))
|
121
138
|
|
122
139
|
session_status = subject.session_status(session_id)
|
123
140
|
|
data/spec/client_spec.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/spec_helper")
|
2
4
|
|
3
5
|
describe TokyoApi::Client do
|
4
6
|
describe 'initialisation' do
|
5
7
|
subject { described_class.new(options) }
|
6
8
|
|
7
9
|
context 'with a basic_auth string parameter' do
|
8
|
-
let(:options) { {basic_auth: 'login:password'} }
|
10
|
+
let(:options) { { basic_auth: 'login:password' } }
|
9
11
|
|
10
12
|
it 'should set username/password on the configuration' do
|
11
13
|
config = subject.connection.configuration
|
@@ -15,7 +17,7 @@ describe TokyoApi::Client do
|
|
15
17
|
end
|
16
18
|
|
17
19
|
context 'with a timeout' do
|
18
|
-
let(:options) { {timeout: 5} }
|
20
|
+
let(:options) { { timeout: 5 } }
|
19
21
|
|
20
22
|
it 'should set the timeout on the faraday options' do
|
21
23
|
config = subject.connection.configuration
|
data/spec/expire_spec.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/spec_helper")
|
2
4
|
|
3
5
|
describe TokyoApi::Expire do
|
4
6
|
subject { TokyoApi.new(host: 'test.com') }
|
@@ -8,16 +10,16 @@ describe TokyoApi::Expire do
|
|
8
10
|
let(:request_path) { '/expire/organisation/foo.com' }
|
9
11
|
|
10
12
|
before(:each) do
|
11
|
-
|
12
|
-
|
13
|
+
stub_get(request_path).to_return(body: body, status: status,
|
14
|
+
headers: { content_type: 'application/json; charset=utf-8' })
|
13
15
|
end
|
14
16
|
|
15
17
|
describe 'success' do
|
16
|
-
let(:status) { 200 }
|
18
|
+
let(:status) { 200 }
|
17
19
|
|
18
20
|
it 'should find an organisation' do
|
19
|
-
expect(subject.expire.organisation('foo.com')).to eq({'status' => 'success'})
|
21
|
+
expect(subject.expire.organisation('foo.com')).to eq({ 'status' => 'success' })
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
23
|
-
end
|
25
|
+
end
|
data/spec/identity_spec.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/spec_helper")
|
2
4
|
|
3
5
|
describe TokyoApi::Identity do
|
4
6
|
subject { TokyoApi.new(host: 'test.com') }
|
@@ -15,15 +17,15 @@ describe TokyoApi::Identity do
|
|
15
17
|
let(:status) { 200 }
|
16
18
|
|
17
19
|
before(:each) do
|
18
|
-
stub_get(request_path).to_return(:
|
19
|
-
:
|
20
|
+
stub_get(request_path).to_return(body: body, status: status,
|
21
|
+
headers: { content_type: 'application/json; charset=utf-8' })
|
20
22
|
end
|
21
23
|
|
22
24
|
describe 'error' do
|
23
25
|
let(:body) { fixture('responses/full_user_error') }
|
24
26
|
|
25
27
|
it 'should return an error hash' do
|
26
|
-
expect(subject.identity.full_user('1')).to eq({'error' => 'Connection refused'})
|
28
|
+
expect(subject.identity.full_user('1')).to eq({ 'error' => 'Connection refused' })
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
@@ -31,8 +33,8 @@ describe TokyoApi::Identity do
|
|
31
33
|
let(:body) { fixture('responses/identity/full_user_success') }
|
32
34
|
|
33
35
|
it 'should return a hash' do
|
34
|
-
expect(subject.identity.full_user('1')).to eq({'first_name' => 'Homer', 'last_name' => 'Simpson',
|
35
|
-
|
36
|
+
expect(subject.identity.full_user('1')).to eq({ 'first_name' => 'Homer', 'last_name' => 'Simpson',
|
37
|
+
'country' => 'GB', 'postal' => '12345', 'email' => 'foo@bar.com' })
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
@@ -46,52 +48,60 @@ describe TokyoApi::Identity do
|
|
46
48
|
|
47
49
|
context 'with required_fields' do
|
48
50
|
it 'should return rooted relative path to tokyo user API endpoint' do
|
49
|
-
expect(subject.identity.tokyo_identity_user_path('-123456',
|
51
|
+
expect(subject.identity.tokyo_identity_user_path('-123456',
|
52
|
+
required_fields: %i[first_name last_name email postal
|
53
|
+
phone])).to eq('/identity/user/-123456?required_fields=first_name,last_name,email,postal,phone')
|
50
54
|
end
|
51
55
|
|
52
56
|
it 'should url-escape field names with weird characters' do
|
53
|
-
expect(subject.identity.tokyo_identity_user_path('-123456',
|
57
|
+
expect(subject.identity.tokyo_identity_user_path('-123456',
|
58
|
+
required_fields: ['email',
|
59
|
+
'fish & chips'])).to eq('/identity/user/-123456?required_fields=email,fish+%26+chips')
|
54
60
|
end
|
55
61
|
end
|
56
62
|
|
57
63
|
context 'with_subscription_status and associated arguments' do
|
58
64
|
it 'should not include query string parameter if argument is missing' do
|
59
|
-
expect(subject.identity.tokyo_identity_user_path('123abc456')).not_to match
|
65
|
+
expect(subject.identity.tokyo_identity_user_path('123abc456')).not_to match(/.+with_subscription_status=.+/)
|
60
66
|
end
|
61
67
|
|
62
68
|
it 'should not include query string parameter if argument is false' do
|
63
|
-
expect(subject.identity.tokyo_identity_user_path('123abc456',
|
69
|
+
expect(subject.identity.tokyo_identity_user_path('123abc456',
|
70
|
+
with_subscription_status: false)).not_to match(/.+with_subscription_status=.+/)
|
64
71
|
end
|
65
72
|
|
66
73
|
it 'should not include opt_in_public_ids and minimum_consent_level if with_subscription_status is false' do
|
67
74
|
tokyo_path = subject.identity.tokyo_identity_user_path('123abc456',
|
68
|
-
|
69
|
-
|
70
|
-
|
75
|
+
with_subscription_status: false,
|
76
|
+
opt_in_public_ids: ['policy-1.5'],
|
77
|
+
minimum_consent_level: 'explicit')
|
71
78
|
|
72
|
-
expect(tokyo_path).not_to match
|
73
|
-
expect(tokyo_path).not_to match
|
79
|
+
expect(tokyo_path).not_to match(/.+opt_in_public_ids=.+/)
|
80
|
+
expect(tokyo_path).not_to match(/.+minimum_consent_level=.+/)
|
74
81
|
end
|
75
82
|
|
76
83
|
it 'should include query string parameter if argument is true' do
|
77
|
-
expect(subject.identity.tokyo_identity_user_path('123abc456',
|
84
|
+
expect(subject.identity.tokyo_identity_user_path('123abc456',
|
85
|
+
with_subscription_status: true)).to match(/.+with_subscription_status=.+/)
|
78
86
|
end
|
79
87
|
|
80
88
|
it 'should include encrypted parameter if argument is true' do
|
81
|
-
expect(subject.identity.tokyo_identity_user_path('123abc456', with_subscription_status: true,
|
89
|
+
expect(subject.identity.tokyo_identity_user_path('123abc456', with_subscription_status: true,
|
90
|
+
encrypted: true)).to match(/.+encrypted=.+/)
|
82
91
|
end
|
83
92
|
|
84
93
|
it 'should include opt_in_public_ids and minimum_consent_level if with_subscription_status is true' do
|
85
94
|
tokyo_path = subject.identity.tokyo_identity_user_path('123abc456',
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
expect(tokyo_path).to match
|
93
|
-
expect(tokyo_path).to match
|
94
|
-
expect
|
95
|
+
required_fields: %i[first_name last_name email
|
96
|
+
postal phone],
|
97
|
+
with_subscription_status: true,
|
98
|
+
opt_in_public_ids: ['policy-1.5'],
|
99
|
+
minimum_consent_level: 'explicit')
|
100
|
+
|
101
|
+
expect(tokyo_path).to match(/.+with_subscription_status=true.*/)
|
102
|
+
expect(tokyo_path).to match(/.+opt_in_public_ids=.+/)
|
103
|
+
expect(tokyo_path).to match(/.+minimum_consent_level=.+/)
|
104
|
+
expect { URI.parse(tokyo_path) }.not_to raise_error
|
95
105
|
end
|
96
106
|
end
|
97
107
|
end
|
@@ -103,17 +113,21 @@ describe TokyoApi::Identity do
|
|
103
113
|
|
104
114
|
it 'should return correct path for a list of public ids' do
|
105
115
|
expected_path = '/identity/subscription_status/abc123?opt_in_public_ids=policy-1.5%2Cpolicy-1.6'
|
106
|
-
expect(subject.identity.subscription_status_path('abc123',
|
116
|
+
expect(subject.identity.subscription_status_path('abc123',
|
117
|
+
opt_in_public_ids: ['policy-1.5',
|
118
|
+
'policy-1.6'])).to eq expected_path
|
107
119
|
end
|
108
120
|
|
109
121
|
it 'should support minimum_consent_level' do
|
110
122
|
expected_path = '/identity/subscription_status/abc123?opt_in_public_ids=policy-1.5&minimum_consent_level=explicit'
|
111
|
-
expect(subject.identity.subscription_status_path('abc123', opt_in_public_ids: ['policy-1.5'],
|
123
|
+
expect(subject.identity.subscription_status_path('abc123', opt_in_public_ids: ['policy-1.5'],
|
124
|
+
minimum_consent_level: 'explicit')).to eq expected_path
|
112
125
|
end
|
113
126
|
|
114
127
|
it 'should support encrypted param' do
|
115
128
|
expected_path = '/identity/subscription_status/abc123?opt_in_public_ids=policy-1.5&minimum_consent_level=explicit&encrypted=1'
|
116
|
-
expect(subject.identity.subscription_status_path('abc123', opt_in_public_ids: ['policy-1.5'],
|
129
|
+
expect(subject.identity.subscription_status_path('abc123', opt_in_public_ids: ['policy-1.5'],
|
130
|
+
minimum_consent_level: 'explicit', encrypted: true)).to eq expected_path
|
117
131
|
end
|
118
132
|
end
|
119
133
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
4
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
5
|
require 'rspec'
|
@@ -6,12 +8,12 @@ require 'tokyo_api'
|
|
6
8
|
|
7
9
|
# Requires supporting files with custom matchers and macros, etc,
|
8
10
|
# in ./support/ and its subdirectories.
|
9
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
11
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each { |f| require f }
|
10
12
|
|
11
13
|
RSpec.configure do |config|
|
12
14
|
config.include WebMock::API
|
13
15
|
config.color = true
|
14
|
-
#config.raise_errors_for_deprecations!
|
16
|
+
# config.raise_errors_for_deprecations!
|
15
17
|
end
|
16
18
|
|
17
19
|
def stub_get(path)
|
@@ -29,7 +31,7 @@ def stub_tokyo_request(method, path)
|
|
29
31
|
end
|
30
32
|
|
31
33
|
def fixture_path
|
32
|
-
File.expand_path(
|
34
|
+
File.expand_path('fixtures', __dir__)
|
33
35
|
end
|
34
36
|
|
35
37
|
def fixture(file)
|
data/spec/tokyo_api_spec.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path("#{File.dirname(__FILE__)}/spec_helper")
|
2
4
|
|
3
5
|
describe TokyoApi do
|
4
6
|
before(:each) do
|
5
7
|
allow(TokyoApi::Client).to receive(:setup_client)
|
6
8
|
end
|
7
9
|
specify { expect(subject).to respond_to :actionkit }
|
8
|
-
specify { expect(subject.new).to be_a(TokyoApi::Client)}
|
10
|
+
specify { expect(subject.new).to be_a(TokyoApi::Client) }
|
9
11
|
end
|
10
|
-
|
11
|
-
|
data/tokyo_api.gemspec
CHANGED
@@ -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: tokyo_api 1.
|
5
|
+
# stub: tokyo_api 1.6.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "tokyo_api".freeze
|
9
|
-
s.version = "1.
|
9
|
+
s.version = "1.6.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
13
|
s.authors = ["Nathan Woodhull".freeze]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2021-03-24"
|
15
15
|
s.description = "Tokyo is a CRM middleware, this gem helps apps talk to it.".freeze
|
16
16
|
s.email = "nathan@controlshiftlabs.com".freeze
|
17
17
|
s.extra_rdoc_files = [
|
@@ -33,19 +33,16 @@ Gem::Specification.new do |s|
|
|
33
33
|
"lib/tokyo_api.rb",
|
34
34
|
"lib/tokyo_api/actionkit.rb",
|
35
35
|
"lib/tokyo_api/base.rb",
|
36
|
-
"lib/tokyo_api/bluestatedigital.rb",
|
37
36
|
"lib/tokyo_api/campact.rb",
|
38
37
|
"lib/tokyo_api/client.rb",
|
39
38
|
"lib/tokyo_api/expire.rb",
|
40
39
|
"lib/tokyo_api/identity.rb",
|
41
40
|
"spec/actionkit_spec.rb",
|
42
|
-
"spec/bluestatedigital_spec.rb",
|
43
41
|
"spec/campact_spec.rb",
|
44
42
|
"spec/client_spec.rb",
|
45
43
|
"spec/expire_spec.rb",
|
46
44
|
"spec/fixtures/expire/success",
|
47
45
|
"spec/fixtures/responses/actionkit/full_user_success",
|
48
|
-
"spec/fixtures/responses/bluestatedigital/full_user_success",
|
49
46
|
"spec/fixtures/responses/campact/full_user_success",
|
50
47
|
"spec/fixtures/responses/full_user_error",
|
51
48
|
"spec/fixtures/responses/full_user_success",
|
@@ -58,34 +55,37 @@ Gem::Specification.new do |s|
|
|
58
55
|
]
|
59
56
|
s.homepage = "http://github.com/controlshift/tokyo_api".freeze
|
60
57
|
s.licenses = ["MIT".freeze]
|
61
|
-
s.rubygems_version = "3.0.
|
58
|
+
s.rubygems_version = "3.0.8".freeze
|
62
59
|
s.summary = "Ruby API Wrapper for Tokyo CRM service".freeze
|
63
60
|
|
64
61
|
if s.respond_to? :specification_version then
|
65
62
|
s.specification_version = 4
|
66
63
|
|
67
64
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
68
|
-
s.add_runtime_dependency(%q<vertebrae>.freeze, ["
|
69
|
-
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
70
|
-
s.add_development_dependency(%q<webmock>.freeze, [">= 0"])
|
71
|
-
s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
|
65
|
+
s.add_runtime_dependency(%q<vertebrae>.freeze, [">= 0.6.0"])
|
72
66
|
s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
|
67
|
+
s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
|
73
68
|
s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
|
69
|
+
s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
|
70
|
+
s.add_development_dependency(%q<rubocop>.freeze, [">= 0"])
|
71
|
+
s.add_development_dependency(%q<webmock>.freeze, [">= 0"])
|
74
72
|
else
|
75
|
-
s.add_dependency(%q<vertebrae>.freeze, ["
|
76
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
77
|
-
s.add_dependency(%q<webmock>.freeze, [">= 0"])
|
78
|
-
s.add_dependency(%q<byebug>.freeze, [">= 0"])
|
73
|
+
s.add_dependency(%q<vertebrae>.freeze, [">= 0.6.0"])
|
79
74
|
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
75
|
+
s.add_dependency(%q<byebug>.freeze, [">= 0"])
|
80
76
|
s.add_dependency(%q<juwelier>.freeze, [">= 0"])
|
77
|
+
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
78
|
+
s.add_dependency(%q<rubocop>.freeze, [">= 0"])
|
79
|
+
s.add_dependency(%q<webmock>.freeze, [">= 0"])
|
81
80
|
end
|
82
81
|
else
|
83
|
-
s.add_dependency(%q<vertebrae>.freeze, ["
|
84
|
-
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
85
|
-
s.add_dependency(%q<webmock>.freeze, [">= 0"])
|
86
|
-
s.add_dependency(%q<byebug>.freeze, [">= 0"])
|
82
|
+
s.add_dependency(%q<vertebrae>.freeze, [">= 0.6.0"])
|
87
83
|
s.add_dependency(%q<bundler>.freeze, [">= 0"])
|
84
|
+
s.add_dependency(%q<byebug>.freeze, [">= 0"])
|
88
85
|
s.add_dependency(%q<juwelier>.freeze, [">= 0"])
|
86
|
+
s.add_dependency(%q<rspec>.freeze, [">= 0"])
|
87
|
+
s.add_dependency(%q<rubocop>.freeze, [">= 0"])
|
88
|
+
s.add_dependency(%q<webmock>.freeze, [">= 0"])
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
metadata
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tokyo_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Woodhull
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: vertebrae
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.6.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.6.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: byebug
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: juwelier
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,21 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
@@ -116,19 +130,16 @@ files:
|
|
116
130
|
- lib/tokyo_api.rb
|
117
131
|
- lib/tokyo_api/actionkit.rb
|
118
132
|
- lib/tokyo_api/base.rb
|
119
|
-
- lib/tokyo_api/bluestatedigital.rb
|
120
133
|
- lib/tokyo_api/campact.rb
|
121
134
|
- lib/tokyo_api/client.rb
|
122
135
|
- lib/tokyo_api/expire.rb
|
123
136
|
- lib/tokyo_api/identity.rb
|
124
137
|
- spec/actionkit_spec.rb
|
125
|
-
- spec/bluestatedigital_spec.rb
|
126
138
|
- spec/campact_spec.rb
|
127
139
|
- spec/client_spec.rb
|
128
140
|
- spec/expire_spec.rb
|
129
141
|
- spec/fixtures/expire/success
|
130
142
|
- spec/fixtures/responses/actionkit/full_user_success
|
131
|
-
- spec/fixtures/responses/bluestatedigital/full_user_success
|
132
143
|
- spec/fixtures/responses/campact/full_user_success
|
133
144
|
- spec/fixtures/responses/full_user_error
|
134
145
|
- spec/fixtures/responses/full_user_success
|
@@ -142,7 +153,7 @@ homepage: http://github.com/controlshift/tokyo_api
|
|
142
153
|
licenses:
|
143
154
|
- MIT
|
144
155
|
metadata: {}
|
145
|
-
post_install_message:
|
156
|
+
post_install_message:
|
146
157
|
rdoc_options: []
|
147
158
|
require_paths:
|
148
159
|
- lib
|
@@ -157,8 +168,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
168
|
- !ruby/object:Gem::Version
|
158
169
|
version: '0'
|
159
170
|
requirements: []
|
160
|
-
rubygems_version: 3.0.
|
161
|
-
signing_key:
|
171
|
+
rubygems_version: 3.0.8
|
172
|
+
signing_key:
|
162
173
|
specification_version: 4
|
163
174
|
summary: Ruby API Wrapper for Tokyo CRM service
|
164
175
|
test_files: []
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module TokyoApi
|
2
|
-
class Bluestatedigital < Base
|
3
|
-
def base_path
|
4
|
-
'bluestatedigital'
|
5
|
-
end
|
6
|
-
|
7
|
-
def full_user(id)
|
8
|
-
client.get_request("#{normalized_base_path}full_user/#{url_escape(id)}").body
|
9
|
-
end
|
10
|
-
|
11
|
-
def tokyo_blue_state_digital_user_path(id, required_fields: nil)
|
12
|
-
path = "/#{normalized_base_path}constituent/#{url_escape(id)}"
|
13
|
-
unless required_fields.nil?
|
14
|
-
path << "?#{required_fields_param(required_fields)}"
|
15
|
-
end
|
16
|
-
path
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
describe TokyoApi::Bluestatedigital do
|
4
|
-
subject { TokyoApi.new(host: 'test.com') }
|
5
|
-
|
6
|
-
describe 'configuration' do
|
7
|
-
it 'should propagate the host' do
|
8
|
-
expect(subject.bluestatedigital.client.connection.configuration.host).to eq('test.com')
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'full_user' do
|
13
|
-
let(:body) { fixture('responses/full_user_success') }
|
14
|
-
let(:request_path) { '/bluestatedigital/full_user/1' }
|
15
|
-
let(:status) { 200 }
|
16
|
-
|
17
|
-
before(:each) do
|
18
|
-
stub_get(request_path).to_return(:body => body, :status => status,
|
19
|
-
:headers => { content_type: "application/json; charset=utf-8"})
|
20
|
-
end
|
21
|
-
|
22
|
-
describe 'error' do
|
23
|
-
let(:body) { fixture('responses/full_user_error') }
|
24
|
-
|
25
|
-
it 'should return an error message' do
|
26
|
-
expect(subject.bluestatedigital.full_user('1')).to eq({'error' => 'Connection refused'})
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe 'success' do
|
31
|
-
let(:body) { fixture('responses/bluestatedigital/full_user_success') }
|
32
|
-
|
33
|
-
it 'should return a success hash' do
|
34
|
-
expect(subject.bluestatedigital.full_user('1')).to eq({ 'first_name' => 'Homer', 'last_name' => 'Simpson',
|
35
|
-
'city' => 'Springfield', 'state' => 'YZ', 'country' => 'US',
|
36
|
-
'postal' => '12345', 'email' => 'foo@bar.com' })
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe 'tokyo_blue_state_digital_user_path' do
|
42
|
-
context 'without required_fields' do
|
43
|
-
it "should return rooted relative path to tokyo user API endpoint" do
|
44
|
-
expect(subject.bluestatedigital.tokyo_blue_state_digital_user_path('-123456')).to eq('/bluestatedigital/constituent/-123456')
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'with required_fields' do
|
49
|
-
it "should return rooted relative path to tokyo user API endpoint" do
|
50
|
-
expect(subject.bluestatedigital.tokyo_blue_state_digital_user_path('-123456', required_fields: [:first_name, :last_name, :email, :postal, :phone])).to eq('/bluestatedigital/constituent/-123456?required_fields=first_name,last_name,email,postal,phone')
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'should url-escape field names with weird characters' do
|
54
|
-
expect(subject.bluestatedigital.tokyo_blue_state_digital_user_path('-123456', required_fields: ['email', 'fish & chips'])).to eq('/bluestatedigital/constituent/-123456?required_fields=email,fish+%26+chips')
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
{"first_name":"Homer","last_name":"Simpson","city":"Springfield","state":"YZ","country":"US","postal":"12345","email":"foo@bar.com"}
|