Skip to content

Commit 4902dcf

Browse files
author
Alex Tharp
authored
Merge pull request #25 from cortex-cms/client-rebuild-and-support-for-special-chars
Large-ish Refactor and Support for Special Characters
2 parents 927531d + 4f2760c commit 4902dcf

File tree

12 files changed

+66
-55
lines changed

12 files changed

+66
-55
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: ruby
22
rvm:
3-
- 2.3.0
3+
- 2.4.0
44
notifications:
55
recipients:
6-
- ContentEnablementProductTeam@careerbuilder.com
6+
- EmployerSiteContentProducts@cb.com

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
Version History
22
====
3-
* All Version bumps are required to update this file as well!!
3+
* All Version bumps are required to update this file as well!
44
----
55

6+
* 0.10.0:
7+
* Utilize `Addressable::URI` as Faraday's default URI parser so that resourceful URI fragments are escaped and parsed properly
8+
* Utilize `Faraday::Middleware` for `Hashie::Mash`ing & OAuth2 Token insertion
9+
* Update dependencies
10+
* No major breaking changes anticipated, but please *test* your use cases!
611
* 0.9.0 - Add total pages, next page, and prev page to result object
712
* 0.8.0 - Revert ETag caching flow implementation
813
* 0.7.0 - Implement ability to specify OAuth scopes

cortex-client.gemspec

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,22 @@ Gem::Specification.new do |s|
66
s.version = Cortex::VERSION
77
s.summary = 'Cortex API Client'
88
s.homepage = 'https://github.com/cortex-cms/cortex-client-ruby'
9-
s.authors = ['CB Content Enablement']
10-
s.email = 'ContentEnablementProductTeam@careerbuilder.com'
9+
s.authors = ['CareerBuilder Employer Site & Content Products']
10+
s.email = ['EmployerSiteContentProducts@cb.com']
1111
s.license = 'Apache-2.0'
1212

1313
s.files = `git ls-files`.split($/).reject { |f| f == '.gitignore' }
1414
s.test_files = s.files.grep(%r{^(test|spec|features)/})
1515
s.require_paths = ['lib']
1616

17-
s.add_development_dependency 'rake', '~> 11.1'
18-
s.add_development_dependency 'rspec', '~> 3.4'
19-
s.add_development_dependency 'mocha', '~> 1.1'
17+
s.add_development_dependency 'rake', '~> 12.0'
18+
s.add_development_dependency 'rspec', '~> 3.5'
19+
s.add_development_dependency 'mocha', '~> 1.2'
2020

21+
s.add_dependency 'oauth2', '~> 1.1.0'
2122
s.add_dependency 'faraday', '~> 0.9'
2223
s.add_dependency 'faraday_middleware', '~> 0.10'
23-
s.add_dependency 'oauth2', '~> 1.1.0'
24-
s.add_dependency 'cortex-exceptions', '~> 0.0.4'
24+
s.add_dependency 'addressable', '~> 2.5'
2525
s.add_dependency 'hashie', '~> 3.4'
26+
s.add_dependency 'cortex-exceptions', '~> 0.0.4'
2627
end

lib/cortex/client.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1+
require 'oauth2'
2+
13
require 'cortex/connection'
24
require 'cortex/request'
35
require 'cortex/resource'
46
require 'cortex/posts'
57
require 'cortex/users'
68
require 'cortex/webpages'
79
require 'cortex/result'
8-
require 'oauth2'
9-
require 'cortex/exceptions'
1010

1111
module Cortex
1212
class Client
@@ -20,7 +20,7 @@ class Client
2020
include Cortex::Request
2121

2222
def initialize(hasharg)
23-
@base_url = hasharg[:base_url] || 'https://cbcortex.com/api/v1/'
23+
@base_url = hasharg[:base_url] || 'https://cbcortex.com/api/v1'
2424
if hasharg.has_key? :access_token
2525
@access_token = hasharg[:access_token]
2626
else

lib/cortex/connection.rb

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
require 'faraday'
22
require 'faraday_middleware'
3-
require 'cortex/faraday_middleware'
3+
require 'addressable/uri'
4+
require 'hashie/mash'
5+
6+
require 'cortex/faraday_middleware/response_failures'
47

58
module Cortex
69
module Connection
@@ -16,12 +19,19 @@ def connection
1619
@access_token = get_cc_token
1720
end
1821

22+
Faraday::Utils.default_uri_parser = Addressable::URI
1923
Faraday.new options do |conn|
20-
conn.use Cortex::FaradayMiddleware
21-
conn.request :oauth2, access_token.is_a?(OAuth2::AccessToken) ? access_token.token : access_token
24+
## Request middleware first:
25+
conn.use ::FaradayMiddleware::OAuth2, access_token.is_a?(OAuth2::AccessToken) ? access_token.token : access_token
26+
27+
## Response middleware second:
28+
conn.use ::FaradayMiddleware::Mashify
29+
conn.use Cortex::FaradayMiddleware::ResponseFailures
30+
2231
conn.request :json
23-
conn.request :url_encoded
2432
conn.response :json, :content_type => /\bjson$/
33+
34+
## Adapter always last:
2535
conn.adapter Faraday.default_adapter
2636
end
2737
end

lib/cortex/faraday_middleware.rb

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require 'faraday'
2+
3+
require 'cortex/exceptions'
4+
5+
module Cortex
6+
module FaradayMiddleware
7+
class ResponseFailures < Faraday::Middleware
8+
def call(env)
9+
begin
10+
@app.call(env)
11+
rescue Faraday::ConnectionFailed
12+
raise Cortex::Exceptions::ConnectionFailed.new(base_url: env[:url])
13+
end
14+
end
15+
end
16+
end
17+
end

lib/cortex/request.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'ostruct'
2-
31
module Cortex
42
module Request
53
def get(path, params = {})

lib/cortex/resource.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ def initialize(client)
77
protected
88
attr_accessor :client
99
end
10-
end
10+
end

lib/cortex/result.rb

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
require 'hashie'
21
module Cortex
32
class Result
43
attr_reader :raw_headers, :contents, :total_items, :page, :per_page, :errors, :range_start, :range_end, :range, :status, :total_pages, :next_page, :prev_page
54

65
def initialize(body, headers, status)
7-
@contents = parse(body)
6+
@contents = body
87
@raw_headers = headers
98
@status = status
109
parse_headers(headers)
1110
@errors = find_errors
1211
end
1312

1413
def is_error?
15-
@status >= 400 || (@contents.is_a?(Hash) && @contents.has_key?('errors'))
14+
@status >= 400 || (@contents.is_a?(Hash) && @contents.errors?)
1615
end
1716

1817
private
@@ -32,31 +31,21 @@ def parse_headers(headers)
3231
end
3332
end
3433

35-
def parse(body)
36-
case body
37-
when Hash
38-
::Hashie::Mash.new(body)
39-
when Array
40-
body.map { |item| parse(item) }
41-
else
42-
body
43-
end
44-
end
45-
4634
def find_errors
35+
errors = nil
4736
if is_error?
4837
if @contents.is_a?(Hash)
49-
if @contents.has_key?('errors')
50-
Array(@contents['errors'])
38+
if @contents.errors?
39+
errors = @contents.errors
5140
else
52-
Array(@contents['message'])
41+
errors = @contents.message
5342
end
5443
else
55-
Array(@contents)
44+
errors = @contents
5645
end
57-
else
58-
Array(nil)
5946
end
47+
48+
Array(errors)
6049
end
6150
end
6251
end

lib/cortex/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module Cortex
2-
VERSION = '0.9.0'
2+
VERSION = '0.10.0'
33
end

spec/posts_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
RSpec.describe Cortex::Posts do
44

5+
# TODO: Stub out Faraday somewhere. See: https://github.com/lostisland/faraday#using-faraday-for-testing
56
let(:client) { Cortex::Client.new(access_token: '123') }
67

78
describe :get do
@@ -16,6 +17,10 @@
1617
client.expects(:get).with('/posts/feed/1').returns('response')
1718
expect(client.posts.get_published(1)).to eq('response')
1819
end
20+
21+
it 'should work with special characters' do
22+
expect { client.posts.get_published('1 post') }.to_not raise_error(URI::InvalidURIError)
23+
end
1924
end
2025

2126
describe :feed do

0 commit comments

Comments
 (0)