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
         |