outbrain-api 0.2.2 → 0.2.3
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/lib/outbrain/api.rb +2 -0
- data/lib/outbrain/api/campaign_by_day_report.rb +2 -8
- data/lib/outbrain/api/campaign_report.rb +2 -7
- data/lib/outbrain/api/promoted_link.rb +19 -0
- data/lib/outbrain/api/promoted_link_performance_report.rb +13 -0
- data/lib/outbrain/api/publisher_report.rb +2 -8
- data/lib/outbrain/api/relation.rb +11 -10
- data/lib/outbrain/api/report.rb +8 -5
- data/lib/outbrain/api/version.rb +1 -1
- data/lib/outbrain/base.rb +4 -0
- data/lib/outbrain/config.rb +0 -2
- data/lib/outbrain/connection.rb +5 -5
- data/lib/outbrain/request.rb +7 -12
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 611076af635dfef59515e4d7370424ae0924e924
         | 
| 4 | 
            +
              data.tar.gz: 22e7cdfdce710aa25d8aaa97f1ccefdb353c84a2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: ab1b4431d4e0a92e15c31e1616891e1a466375317a8b3d8d6bdbe58b63255ed21f535e0d993fd9414412e437e296d9ffa25706e15a30ff3f87ca24f9b8a6d17f
         | 
| 7 | 
            +
              data.tar.gz: 6b856617eeeb6c0fb438c18a0ab053f40d98743ab45ce5d3876d28618489df352f8946425606e1272209a12ef21dca586e094f822e4cf89860b98877058d5109
         | 
    
        data/lib/outbrain/api.rb
    CHANGED
    
    | @@ -14,6 +14,8 @@ require "outbrain/api/budget" | |
| 14 14 | 
             
            require "outbrain/api/campaign_report"
         | 
| 15 15 | 
             
            require "outbrain/api/publisher_report"
         | 
| 16 16 | 
             
            require "outbrain/api/campaign_by_day_report"
         | 
| 17 | 
            +
            require "outbrain/api/promoted_link_performance_report"
         | 
| 18 | 
            +
            require "outbrain/api/promoted_link"
         | 
| 17 19 |  | 
| 18 20 | 
             
            module Outbrain
         | 
| 19 21 | 
             
              HEADER_AUTH_KEY = 'OB-TOKEN-V1'
         | 
| @@ -4,15 +4,9 @@ module Outbrain | |
| 4 4 | 
             
              module Api
         | 
| 5 5 | 
             
                class CampaignByDayReport < Report
         | 
| 6 6 | 
             
                  PATH = 'performanceByDay'
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                    "campaigns/#{campaign_id}/#{PATH}"
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  def self.where(options = {})
         | 
| 13 | 
            -
                    super(options.merge({path: self.path(options.fetch(:campaign_id))}))
         | 
| 7 | 
            +
                  def self.path(options)
         | 
| 8 | 
            +
                    "campaigns/#{options.fetch(:campaign_id)}/#{PATH}/"
         | 
| 14 9 | 
             
                  end
         | 
| 15 10 | 
             
                end
         | 
| 16 11 | 
             
              end
         | 
| 17 12 | 
             
            end
         | 
| 18 | 
            -
             | 
| @@ -4,13 +4,8 @@ module Outbrain | |
| 4 4 | 
             
              module Api
         | 
| 5 5 | 
             
                class CampaignReport < Report
         | 
| 6 6 | 
             
                  PATH = 'performanceByCampaign'
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                    "marketers/#{marketer_id}/#{PATH}"
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  def self.where(options = {})
         | 
| 13 | 
            -
                    super(options.merge({path: self.path(options.fetch(:marketer_id))}))
         | 
| 7 | 
            +
                  def self.path(options)
         | 
| 8 | 
            +
                    "marketers/#{options.fetch(:marketer_id)}/#{PATH}/"
         | 
| 14 9 | 
             
                  end
         | 
| 15 10 | 
             
                end
         | 
| 16 11 | 
             
              end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            require 'outbrain/api/report'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Outbrain
         | 
| 4 | 
            +
              module Api
         | 
| 5 | 
            +
                class PromotedLink < Base
         | 
| 6 | 
            +
                  PATH = "promotedLinks"
         | 
| 7 | 
            +
                  RESOURCE_NAME = PATH
         | 
| 8 | 
            +
                  
         | 
| 9 | 
            +
                  def self.find(id)
         | 
| 10 | 
            +
                      Request.find( PATH, id, { as: self })
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def self.where(options)
         | 
| 14 | 
            +
                    path = "campaigns/#{options.fetch(:campaign_id)}/#{PATH}"
         | 
| 15 | 
            +
                    Request.where(path, options, as: self, resource_name: RESOURCE_NAME)
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            require 'outbrain/api/report'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Outbrain
         | 
| 4 | 
            +
              module Api
         | 
| 5 | 
            +
                class PromotedLinkPerformanceReport < Report
         | 
| 6 | 
            +
                  PATH = 'performanceByPromotedLink'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def self.path(options)
         | 
| 9 | 
            +
                    "campaigns/#{options.fetch(:campaign_id)}/#{PATH}/"
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -4,15 +4,9 @@ module Outbrain | |
| 4 4 | 
             
              module Api
         | 
| 5 5 | 
             
                class PublisherReport < Report
         | 
| 6 6 | 
             
                  PATH = 'performanceByPublisher'
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                    "campaigns/#{campaign_id}/#{PATH}"
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  def self.where(options = {})
         | 
| 13 | 
            -
                    super(options.merge({path: self.path(options.fetch(:campaign_id))}))
         | 
| 7 | 
            +
                  def self.path(options)
         | 
| 8 | 
            +
                    "campaigns/#{options.fetch(:campaign_id)}/#{PATH}/"
         | 
| 14 9 | 
             
                  end
         | 
| 15 10 | 
             
                end
         | 
| 16 11 | 
             
              end
         | 
| 17 12 | 
             
            end
         | 
| 18 | 
            -
             | 
| @@ -1,20 +1,21 @@ | |
| 1 1 | 
             
            module Outbrain
         | 
| 2 2 | 
             
              module Api
         | 
| 3 | 
            -
                class Relation
         | 
| 3 | 
            +
                class Relation < OpenStruct
         | 
| 4 4 | 
             
                  include Enumerable
         | 
| 5 | 
            -
                   | 
| 6 | 
            -
             | 
| 5 | 
            +
                  extend Forwardable
         | 
| 6 | 
            +
                  def_delegator :relations, :each, :each
         | 
| 7 7 | 
             
                  def initialize(options = {})
         | 
| 8 | 
            -
                     | 
| 9 | 
            -
                     | 
| 8 | 
            +
                    super
         | 
| 9 | 
            +
                    self.errors = []
         | 
| 10 | 
            +
                    relation = options.delete(options[:relation_name])
         | 
| 11 | 
            +
                    Hashie::Mash.new(options).each{ |k,v| self[k] = v }
         | 
| 12 | 
            +
                    setup_relations(relation)
         | 
| 10 13 | 
             
                  end
         | 
| 11 14 |  | 
| 12 | 
            -
                   | 
| 13 | 
            -
                    @relations.each{|relation| block.call(relation) }
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            +
                  private
         | 
| 15 16 |  | 
| 16 | 
            -
                  def  | 
| 17 | 
            -
                    relations. | 
| 17 | 
            +
                  def setup_relations(relation)
         | 
| 18 | 
            +
                    self.relations = relation.map { |e| relation_class.new(e) }
         | 
| 18 19 | 
             
                  end
         | 
| 19 20 | 
             
                end
         | 
| 20 21 | 
             
              end
         | 
    
        data/lib/outbrain/api/report.rb
    CHANGED
    
    | @@ -1,13 +1,16 @@ | |
| 1 1 | 
             
            module Outbrain
         | 
| 2 2 | 
             
              module Api
         | 
| 3 3 | 
             
                class Report < Base
         | 
| 4 | 
            -
                   | 
| 5 | 
            -
             | 
| 4 | 
            +
                  def self.resource_name
         | 
| 5 | 
            +
                    'details'
         | 
| 6 | 
            +
                  end
         | 
| 6 7 |  | 
| 7 8 | 
             
                  def self.where(options = {})
         | 
| 8 | 
            -
                     | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 9 | 
            +
                    report_options = {
         | 
| 10 | 
            +
                      as: self,
         | 
| 11 | 
            +
                      resource_name: resource_name,
         | 
| 12 | 
            +
                    }
         | 
| 13 | 
            +
                    Request.where(self.path(options), options, report_options)
         | 
| 11 14 | 
             
                  end
         | 
| 12 15 | 
             
                end
         | 
| 13 16 | 
             
              end
         | 
    
        data/lib/outbrain/api/version.rb
    CHANGED
    
    
    
        data/lib/outbrain/base.rb
    CHANGED
    
    
    
        data/lib/outbrain/config.rb
    CHANGED
    
    
    
        data/lib/outbrain/connection.rb
    CHANGED
    
    | @@ -5,7 +5,7 @@ module Outbrain | |
| 5 5 | 
             
              class Connection
         | 
| 6 6 | 
             
                BASE = 'https://api.outbrain.com'
         | 
| 7 7 | 
             
                DEFAULT_API_VERSION = 'v0.1'
         | 
| 8 | 
            -
                attr_accessor :token, :user_name, :user_password, :connection, :api_version, :logging
         | 
| 8 | 
            +
                attr_accessor :token, :user_name, :user_password, :connection, :api_version, :logging, :base_url
         | 
| 9 9 |  | 
| 10 10 | 
             
                def initialize(args={})
         | 
| 11 11 | 
             
                  @token = args[:token] || args['token']
         | 
| @@ -13,7 +13,7 @@ module Outbrain | |
| 13 13 | 
             
                  @user_password = args[:user_password] || args['user_password']
         | 
| 14 14 | 
             
                  @api_version = args[:api_version] || args['api_version'] || DEFAULT_API_VERSION
         | 
| 15 15 | 
             
                  @logging = args[:logging] || args['logging'] || true # (default right now)
         | 
| 16 | 
            -
             | 
| 16 | 
            +
                  @base_url = args[:base_url] || "#{BASE}/amplify/#{api_version}/"
         | 
| 17 17 | 
             
                  get_token! unless @token
         | 
| 18 18 | 
             
                  # should raise if not authenticated properly
         | 
| 19 19 | 
             
                end
         | 
| @@ -28,13 +28,13 @@ module Outbrain | |
| 28 28 | 
             
                # authenticates using basic auth to get token.
         | 
| 29 29 | 
             
                # => http://docs.amplifyv01.apiary.io/#reference/authentications
         | 
| 30 30 | 
             
                def get_token!
         | 
| 31 | 
            -
                  @temp_api = Faraday.new(:url =>  | 
| 31 | 
            +
                  @temp_api = Faraday.new(:url => base_url) do |faraday|
         | 
| 32 32 | 
             
                    faraday.response :logger if logging
         | 
| 33 33 | 
             
                    faraday.adapter  Faraday.default_adapter
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 |  | 
| 36 36 | 
             
                  @temp_api.basic_auth user_name, user_password
         | 
| 37 | 
            -
                  response = @temp_api.get("/ | 
| 37 | 
            +
                  response = @temp_api.get("/login")
         | 
| 38 38 | 
             
                  @token = JSON.parse(response.body)[Outbrain::HEADER_AUTH_KEY]
         | 
| 39 39 | 
             
                  # need to raise error here if token does not exist
         | 
| 40 40 | 
             
                end
         | 
| @@ -44,7 +44,7 @@ module Outbrain | |
| 44 44 | 
             
                end
         | 
| 45 45 |  | 
| 46 46 | 
             
                def refresh_api
         | 
| 47 | 
            -
                  @api = Faraday.new(:url =>  | 
| 47 | 
            +
                  @api = Faraday.new(:url => base_url) do |faraday|
         | 
| 48 48 | 
             
                    faraday.response :logger if logging
         | 
| 49 49 | 
             
                    faraday.adapter  Faraday.default_adapter
         | 
| 50 50 | 
             
                    faraday.headers['Content-Type'] = 'application/json'
         | 
    
        data/lib/outbrain/request.rb
    CHANGED
    
    | @@ -1,25 +1,20 @@ | |
| 1 1 | 
             
            module Outbrain
         | 
| 2 2 | 
             
              class Request < Config
         | 
| 3 3 | 
             
                def self.where(resource_path, query={}, options={})
         | 
| 4 | 
            -
                  request_path =  | 
| 4 | 
            +
                  request_path = resource_path
         | 
| 5 5 | 
             
                  query_string = query.map{|k,v| "#{k}=#{v}"}.join("&")
         | 
| 6 6 | 
             
                  request_path = request_path + '?' + query_string unless query_string.empty?
         | 
| 7 7 | 
             
                  response = api.get(request_path)
         | 
| 8 8 | 
             
                  resource_name = options.fetch(:resource_name, resource_path)
         | 
| 9 | 
            -
                  meta_requests = options.fetch(:meta_resource_names)
         | 
| 10 9 | 
             
                  json_body = JSON.parse(response.body) # catch and raise proper api error
         | 
| 11 10 |  | 
| 12 11 | 
             
                  fail InvalidOption 'requires an as option' unless options[:as]
         | 
| 13 12 |  | 
| 14 13 | 
             
                  if response.status == 200
         | 
| 15 | 
            -
                    Outbrain::Api::Relation | 
| 16 | 
            -
                       | 
| 17 | 
            -
                      r.relations = json_body[resource_name].map{ |obj| options[:as].new(obj) }
         | 
| 18 | 
            -
                    end
         | 
| 14 | 
            +
                    Outbrain::Api::Relation
         | 
| 15 | 
            +
                      .new(json_body.merge(relation_class: options[:as], relation_name: resource_name))
         | 
| 19 16 | 
             
                  else
         | 
| 20 | 
            -
                    Outbrain::Api::Relation.new | 
| 21 | 
            -
                      r.errors << json_body
         | 
| 22 | 
            -
                    end
         | 
| 17 | 
            +
                    Outbrain::Api::Relation.new(errors: json_body)
         | 
| 23 18 | 
             
                  end
         | 
| 24 19 | 
             
                end
         | 
| 25 20 |  | 
| @@ -28,7 +23,7 @@ module Outbrain | |
| 28 23 | 
             
                end
         | 
| 29 24 |  | 
| 30 25 | 
             
                def self.find(resource_path, id, options={})
         | 
| 31 | 
            -
                  response = api.get(" | 
| 26 | 
            +
                  response = api.get("#{resource_path}/#{id}")
         | 
| 32 27 | 
             
                  json_body = JSON.parse(response.body)
         | 
| 33 28 |  | 
| 34 29 | 
             
                  fail InvalidOption 'requires an as option' unless options[:as]
         | 
| @@ -45,7 +40,7 @@ module Outbrain | |
| 45 40 | 
             
                def self.create(resource, options={})
         | 
| 46 41 | 
             
                  attributes = options.fetch(:attributes, {})
         | 
| 47 42 |  | 
| 48 | 
            -
                  response = api.post(" | 
| 43 | 
            +
                  response = api.post("#{resource}", attributes.to_json)
         | 
| 49 44 | 
             
                  json_body = JSON.parse(response.body)
         | 
| 50 45 |  | 
| 51 46 | 
             
                  if response.status == 200
         | 
| @@ -59,7 +54,7 @@ module Outbrain | |
| 59 54 |  | 
| 60 55 | 
             
                def self.update(resource_path, id, options={})
         | 
| 61 56 | 
             
                  attributes = options.fetch(:attributes, {})
         | 
| 62 | 
            -
                  response = api.put(" | 
| 57 | 
            +
                  response = api.put("#{resource_path}/#{id}", attributes.to_json)
         | 
| 63 58 | 
             
                  json_body = JSON.parse(response.body)
         | 
| 64 59 |  | 
| 65 60 | 
             
                  if response.status == 200
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: outbrain-api
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2. | 
| 4 | 
            +
              version: 0.2.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Nick Blanchet
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-05- | 
| 11 | 
            +
            date: 2016-05-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faraday
         | 
| @@ -118,6 +118,8 @@ files: | |
| 118 118 | 
             
            - lib/outbrain/api/config.rb
         | 
| 119 119 | 
             
            - lib/outbrain/api/errors.rb
         | 
| 120 120 | 
             
            - lib/outbrain/api/marketer.rb
         | 
| 121 | 
            +
            - lib/outbrain/api/promoted_link.rb
         | 
| 122 | 
            +
            - lib/outbrain/api/promoted_link_performance_report.rb
         | 
| 121 123 | 
             
            - lib/outbrain/api/publisher.rb
         | 
| 122 124 | 
             
            - lib/outbrain/api/publisher_report.rb
         | 
| 123 125 | 
             
            - lib/outbrain/api/relation.rb
         |