traitify 1.8.4 → 2.0.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 +5 -5
- data/.rubocop.yml +11 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +5 -1
- data/Gemfile.lock +109 -42
- data/README.md +50 -25
- data/lib/traitify/client/connection.rb +22 -0
- data/lib/traitify/client/model.rb +45 -0
- data/lib/traitify/client/overrides.rb +27 -0
- data/lib/traitify/client/request.rb +33 -0
- data/lib/traitify/client/setup.rb +25 -0
- data/lib/traitify/client.rb +20 -27
- data/lib/traitify/configuration.rb +4 -12
- data/lib/traitify/data.rb +18 -0
- data/lib/traitify/error.rb +18 -16
- data/lib/traitify/middleware/formatter.rb +52 -0
- data/lib/traitify/middleware/raise_error.rb +38 -0
- data/lib/traitify/response.rb +44 -0
- data/lib/traitify/version.rb +1 -1
- data/lib/traitify.rb +29 -1
- data/paths.yml +1352 -0
- data/spec/spec_helper.rb +14 -6
- data/spec/support/mocks/assessment.json +1 -1
- data/spec/support/mocks/assessment_analytics.json +7 -0
- data/spec/support/mocks/blank.json +0 -0
- data/spec/support/mocks/career.json +1 -2
- data/spec/support/mocks/careers.json +2 -3
- data/spec/support/mocks/decks.json +1 -4
- data/spec/support/mocks/locale.json +10 -0
- data/spec/support/mocks/locales.json +12 -0
- data/spec/support/mocks/profile.json +5 -0
- data/spec/support/mocks/profiles.json +5 -0
- data/spec/support/mocks/trait_analytics.json +7 -0
- data/spec/support/mocks/type_analytics.json +7 -0
- data/spec/traitify/client/examples/analytics_spec.rb +53 -0
- data/spec/{traitify-ruby/client → traitify/client/examples}/assessment_spec.rb +19 -14
- data/spec/traitify/client/examples/career_spec.rb +52 -0
- data/spec/traitify/client/examples/configuration_spec.rb +29 -0
- data/spec/traitify/client/examples/deck_spec.rb +29 -0
- data/spec/traitify/client/examples/locale_spec.rb +39 -0
- data/spec/{traitify-ruby/client → traitify/client/examples}/major_spec.rb +12 -11
- data/spec/traitify/client/examples/profiles_spec.rb +66 -0
- data/spec/traitify/client/examples/result_spec.rb +130 -0
- data/spec/traitify/client/examples/slide_spec.rb +95 -0
- data/spec/traitify/client/model_spec.rb +73 -0
- data/spec/traitify/client/request_spec.rb +85 -0
- data/spec/traitify/client/setup_spec.rb +62 -0
- data/spec/traitify/client_spec.rb +52 -0
- data/spec/traitify/data_spec.rb +105 -0
- data/spec/traitify/error_spec.rb +117 -0
- data/spec/traitify/response_spec.rb +82 -0
- data/spec/traitify/version_spec.rb +7 -0
- data/traitify.gemspec +14 -12
- metadata +113 -53
- data/lib/traitify/client/assessments.rb +0 -29
- data/lib/traitify/client/careers.rb +0 -25
- data/lib/traitify/client/decks.rb +0 -16
- data/lib/traitify/client/majors.rb +0 -25
- data/lib/traitify/client/results.rb +0 -37
- data/lib/traitify/client/slides.rb +0 -34
- data/lib/traitify/connection.rb +0 -33
- data/lib/traitify/request.rb +0 -18
- data/spec/traitify-ruby/client/career_spec.rb +0 -51
- data/spec/traitify-ruby/client/configuration_spec.rb +0 -51
- data/spec/traitify-ruby/client/deck_spec.rb +0 -28
- data/spec/traitify-ruby/client/result_spec.rb +0 -93
- data/spec/traitify-ruby/client/slide_spec.rb +0 -82
data/lib/traitify/error.rb
CHANGED
@@ -3,33 +3,35 @@ module Traitify
|
|
3
3
|
attr_accessor :response
|
4
4
|
|
5
5
|
def self.from(response)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
13
|
-
klass.new(response)
|
6
|
+
klass = case response.status
|
7
|
+
when 400 then Traitify::BadRequest
|
8
|
+
when 401 then Traitify::Unauthorized
|
9
|
+
when 404 then Traitify::NotFound
|
10
|
+
when 422 then Traitify::UnprocessableEntity
|
11
|
+
when 500..505 then Traitify::ServerError
|
14
12
|
end
|
13
|
+
|
14
|
+
klass.new(response) if klass
|
15
15
|
end
|
16
16
|
|
17
17
|
def initialize(response)
|
18
18
|
@response = response
|
19
|
-
super(error_message)
|
20
|
-
end
|
21
19
|
|
22
|
-
|
23
|
-
response.body
|
20
|
+
super(error_message)
|
24
21
|
end
|
25
22
|
|
26
23
|
private
|
24
|
+
|
27
25
|
def error_message
|
28
|
-
message = "#{response.
|
29
|
-
message << "#{response.url
|
26
|
+
message = "#{response.request.http_method.upcase} | "
|
27
|
+
message << "#{response.request.url} | "
|
30
28
|
message << "#{response.status} | "
|
31
|
-
|
32
|
-
|
29
|
+
|
30
|
+
error = response.body
|
31
|
+
error = error.first if error.is_a?(Array)
|
32
|
+
error = error.message if error.respond_to?(:message)
|
33
|
+
|
34
|
+
message << error.to_s if error.present?
|
33
35
|
message
|
34
36
|
end
|
35
37
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Traitify
|
2
|
+
module Middleware
|
3
|
+
class Formatter
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
attr_accessor :logger, :options
|
7
|
+
|
8
|
+
def initialize(logger:, options:)
|
9
|
+
@logger = logger
|
10
|
+
@options = {log_level: :info, prefix: "[traitify-ruby]"}.merge(options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def_delegators :@logger, :debug, :info, :warn, :error, :fatal
|
14
|
+
|
15
|
+
def request(env)
|
16
|
+
log(env[:method].upcase, env.url.to_s)
|
17
|
+
log("AUTH", env.request_headers["Authorization"], level: :debug)
|
18
|
+
log("BODY", env.body)
|
19
|
+
log("PARAMS", query_params(env))
|
20
|
+
end
|
21
|
+
|
22
|
+
def response(env)
|
23
|
+
log("STATUS", env.status)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def log(name, object, level: nil)
|
29
|
+
return unless object
|
30
|
+
|
31
|
+
log = proc {
|
32
|
+
"#{name}: #{object.respond_to?(:to_str) ? object.to_str : object.pretty_inspect&.strip}"
|
33
|
+
}
|
34
|
+
|
35
|
+
public_send(level || log_level, options[:prefix], &log)
|
36
|
+
end
|
37
|
+
|
38
|
+
def log_level
|
39
|
+
unless [:debug, :info, :warn, :error, :fatal].include?(options[:log_level])
|
40
|
+
return :info
|
41
|
+
end
|
42
|
+
|
43
|
+
options[:log_level]
|
44
|
+
end
|
45
|
+
|
46
|
+
def query_params(env)
|
47
|
+
env.request.params_encoder ||= Faraday::Utils.default_params_encoder
|
48
|
+
env.params_encoder.decode(env.url.query)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# NOTE: Traitified version of Faraday error response middleware
|
2
|
+
# https://github.com/lostisland/faraday/blob/b3b922949d14f604ed11dc0f749455fc062777e7/lib/faraday/response/raise_error.rb
|
3
|
+
module Traitify
|
4
|
+
module Middleware
|
5
|
+
class RaiseError < Faraday::Middleware
|
6
|
+
def on_complete(env)
|
7
|
+
error = Traitify::Error.from(error_data(env))
|
8
|
+
|
9
|
+
raise error if error
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def error_data(env)
|
15
|
+
Traitify::Data.new(
|
16
|
+
body: env.body,
|
17
|
+
headers: env.response_headers,
|
18
|
+
request: {
|
19
|
+
body: env.request_body,
|
20
|
+
headers: env.request_headers,
|
21
|
+
http_method: env[:method],
|
22
|
+
query: query_params(env),
|
23
|
+
url: env.url,
|
24
|
+
url_path: env.url.path
|
25
|
+
},
|
26
|
+
status: env.status
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def query_params(env)
|
31
|
+
env.request.params_encoder ||= Faraday::Utils.default_params_encoder
|
32
|
+
env.params_encoder.decode(env.url.query)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
Faraday::Response.register_middleware(raise_traitify_error: Traitify::Middleware::RaiseError)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Traitify
|
2
|
+
class Response
|
3
|
+
attr_reader :request
|
4
|
+
|
5
|
+
def initialize(request)
|
6
|
+
@request = request
|
7
|
+
end
|
8
|
+
|
9
|
+
def data
|
10
|
+
@data ||= Traitify::Data.new(request.body)
|
11
|
+
end
|
12
|
+
|
13
|
+
def page
|
14
|
+
@page ||= begin
|
15
|
+
page = {}
|
16
|
+
|
17
|
+
if request.env.response_headers["link"]
|
18
|
+
links = request.env.response_headers["link"].split(",")
|
19
|
+
if prev_link = links.find{ |link| link.include?("rel=\"prev\"") }
|
20
|
+
prev_link = prev_link.split(/>|</)[1]
|
21
|
+
page[:previous] = {
|
22
|
+
url: prev_link,
|
23
|
+
params: CGI.parse(prev_link.split("?")[1..-1].join("?"))
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
if next_link = links.find{ |link| link.include?("rel=\"next\"") }
|
28
|
+
next_link = next_link.split(/>|</)[1]
|
29
|
+
page[:next] = {
|
30
|
+
url: next_link,
|
31
|
+
params: CGI.parse(next_link.split("?")[1..-1].join("?"))
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Traitify::Data.new page
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def total
|
41
|
+
@total ||= request.env.response_headers["x-total-count"]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/traitify/version.rb
CHANGED
data/lib/traitify.rb
CHANGED
@@ -1,13 +1,41 @@
|
|
1
|
-
require "traitify/version"
|
2
1
|
require "traitify/configuration"
|
3
2
|
require "traitify/client"
|
3
|
+
require "traitify/data"
|
4
|
+
require "traitify/error"
|
5
|
+
require "traitify/response"
|
6
|
+
require "traitify/version"
|
7
|
+
require "logger"
|
8
|
+
require "active_support"
|
9
|
+
require "active_support/core_ext/object/deep_dup"
|
4
10
|
|
5
11
|
module Traitify
|
6
12
|
extend Configuration
|
7
13
|
|
14
|
+
self.host = "http://api-sandbox.traitify.com"
|
15
|
+
self.version = "v1"
|
16
|
+
self.locale_key = "en-us"
|
17
|
+
|
8
18
|
class << self
|
19
|
+
attr_writer :logger
|
20
|
+
|
9
21
|
def new(options = {})
|
10
22
|
Traitify::Client.new(options)
|
11
23
|
end
|
24
|
+
|
25
|
+
def logger
|
26
|
+
@logger ||= Logger.new($stdout).tap do |log|
|
27
|
+
log.progname = name
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def log(level, message)
|
32
|
+
message = "[traitify-ruby] #{message}"
|
33
|
+
case level
|
34
|
+
when :debug
|
35
|
+
logger.debug message
|
36
|
+
else
|
37
|
+
logger.info message
|
38
|
+
end
|
39
|
+
end
|
12
40
|
end
|
13
41
|
end
|