outbrain-api 0.1.0 → 0.1.1
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 +10 -48
- data/lib/outbrain/api/budget.rb +20 -0
- data/lib/outbrain/api/campaign.rb +11 -0
- data/lib/outbrain/api/config.rb +0 -0
- data/lib/outbrain/api/errors.rb +5 -0
- data/lib/outbrain/api/marketer.rb +24 -0
- data/lib/outbrain/api/publisher.rb +5 -0
- data/lib/outbrain/api/version.rb +1 -1
- data/lib/outbrain/base.rb +28 -0
- data/lib/outbrain/config.rb +33 -0
- data/lib/outbrain/connection.rb +55 -0
- data/lib/outbrain/request.rb +35 -0
- data/outbrain-api.gemspec +1 -0
- metadata +26 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c989cd84656d8f8bb53a3cf81091017746affd6a
         | 
| 4 | 
            +
              data.tar.gz: 70494a86c706a0c49d2e357de5b23b04c4d4d331
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 213c1a88c77290236f758ef2a699fccd4e17f5de66089e8a28670c34648fbc451099f6d824514ccee9054354a05c3b70b44cb6c4e14d52c015125b37e458e808
         | 
| 7 | 
            +
              data.tar.gz: e7d72ffcccff1b7ea7dfdf6a2bfb7df746722629dceed2d1b067445b3a8484a70b47b963312dcbac4d8b97de43bdf0a2e396b472104ef6ea0baf05b4447fda4f
         | 
    
        data/lib/outbrain/api.rb
    CHANGED
    
    | @@ -1,56 +1,18 @@ | |
| 1 1 | 
             
            require "outbrain/api/version"
         | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            # configs
         | 
| 4 | 
            +
            require "outbrain/connection"
         | 
| 5 | 
            +
            require "outbrain/config"
         | 
| 6 | 
            +
            require "outbrain/base"
         | 
| 7 | 
            +
            require "outbrain/request"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            # models
         | 
| 10 | 
            +
            require "outbrain/api/marketer"
         | 
| 11 | 
            +
            require "outbrain/api/campaign"
         | 
| 4 12 |  | 
| 5 13 | 
             
            module Outbrain
         | 
| 6 14 | 
             
              HEADER_AUTH_KEY = 'OB-TOKEN-V1'
         | 
| 7 15 |  | 
| 8 16 | 
             
              module Api
         | 
| 9 17 | 
             
              end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
              class Connection
         | 
| 12 | 
            -
                attr_accessor :token, :user_name, :user_password, :connection, :api_version, :logging
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                def initialize(args={})
         | 
| 15 | 
            -
                  @token = args[:token] || args['token']
         | 
| 16 | 
            -
                  @user_name = args[:user_name] || args['user_name']
         | 
| 17 | 
            -
                  @user_password = args[:user_password] || args['user_password']
         | 
| 18 | 
            -
                  @api_version = args[:api_version] || args['api_version'] || 'v0.1'
         | 
| 19 | 
            -
                  @logging = args[:logging] || args['logging'] || true # (default right now)
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  get_token! unless @token
         | 
| 22 | 
            -
                  # should raise if not authenticated properly
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                # authenticates using basic auth to get token.
         | 
| 26 | 
            -
                # => http://docs.amplifyv01.apiary.io/#reference/authentications
         | 
| 27 | 
            -
                def get_token!
         | 
| 28 | 
            -
                  @temp_connection = Faraday.new(:url => "https://api.outbrain.com") do |faraday|
         | 
| 29 | 
            -
                    faraday.response :logger if logging
         | 
| 30 | 
            -
                    faraday.adapter  Faraday.default_adapter
         | 
| 31 | 
            -
                  end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                  @temp_connection.basic_auth user_name, user_password
         | 
| 34 | 
            -
                  response = @temp_connection.get("/amplify/#{api_version}/login")
         | 
| 35 | 
            -
                  @token = JSON.parse(response.body)[HEADER_AUTH_KEY]
         | 
| 36 | 
            -
                  # need to raise error here if token does not exist
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                def connection
         | 
| 40 | 
            -
                  @connection ||= refresh_connection
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                def refresh_connection
         | 
| 44 | 
            -
                  @connection = Faraday.new(:url => "https://api.outbrain.com") do |faraday|
         | 
| 45 | 
            -
                    faraday.response :logger if @logging
         | 
| 46 | 
            -
                    faraday.adapter  Faraday.default_adapter
         | 
| 47 | 
            -
                    faraday.headers['Content-Type'] = 'application/json'
         | 
| 48 | 
            -
                    faraday.headers[HEADER_AUTH_KEY] = token
         | 
| 49 | 
            -
                  end
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                def marketers
         | 
| 53 | 
            -
                  connection.get("/amplify/#{api_version}/marketers")
         | 
| 54 | 
            -
                end
         | 
| 55 | 
            -
              end
         | 
| 56 18 | 
             
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module Outbrain
         | 
| 2 | 
            +
              module Api
         | 
| 3 | 
            +
                class Budget < Base
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                  def self.path(id)
         | 
| 6 | 
            +
                    "/marketers/#{id}/budgets"
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def self.find_by(attributes={})
         | 
| 10 | 
            +
                    marketer_id = attributes[:marketer_id]
         | 
| 11 | 
            +
                    fail InvalidOption 'find_by requires marketer-id' unless marketer_id
         | 
| 12 | 
            +
                    Request.all(path(marketer_id), { as: self, resource_name: 'budgets'})
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def create_campaign(attributes)
         | 
| 16 | 
            +
                    Campaign.create(attributes.merge(budgetId: id))
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            require "outbrain/api/publisher"
         | 
| 2 | 
            +
            require "outbrain/api/budget"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Outbrain
         | 
| 5 | 
            +
              module Api
         | 
| 6 | 
            +
                class Marketer < Base
         | 
| 7 | 
            +
                  coerce_key :blockedPublishers, Array[Publisher]
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  PATH = 'marketers'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def self.all
         | 
| 12 | 
            +
                    Request.all(PATH, { as: self })
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def self.create(*)
         | 
| 16 | 
            +
                    raise EndpointNotAvialable.new('Marketers can not be created via the api.')
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def budgets
         | 
| 20 | 
            +
                    Budget.find_by(marketer_id: id)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
    
        data/lib/outbrain/api/version.rb
    CHANGED
    
    
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            require 'hashie'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # remaking some of active-model here :-( but don't want rails
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Outbrain
         | 
| 6 | 
            +
              class Base < Hash
         | 
| 7 | 
            +
                include Hashie::Extensions::MethodAccess
         | 
| 8 | 
            +
                include Hashie::Extensions::Coercion
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                attr_accessor :errors
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def initialize(attributes={})
         | 
| 13 | 
            +
                  attributes.each do |key, value|
         | 
| 14 | 
            +
                    self.send("#{key}=", value)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                  @errors = attributes.fetch(:errors, [])
         | 
| 17 | 
            +
                  self
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def valid?
         | 
| 21 | 
            +
                  errors.emtpy?
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def persisted?
         | 
| 25 | 
            +
                  try(:id).present?
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            module Outbrain
         | 
| 2 | 
            +
              class Config
         | 
| 3 | 
            +
                BASE = Outbrain::Connection::BASE
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                @@api = nil
         | 
| 6 | 
            +
                @@api_version = nil
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def self.api=(api)
         | 
| 9 | 
            +
                  @@api = api
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def self.api_version=(api_version)
         | 
| 13 | 
            +
                  @@api_version = api_version
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                private
         | 
| 17 | 
            +
                def self.api
         | 
| 18 | 
            +
                  @@api
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def api
         | 
| 22 | 
            +
                  self.class.api
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                def api_version
         | 
| 26 | 
            +
                  self.class.api_version
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                def self.api_version
         | 
| 30 | 
            +
                  @@api_version
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            require 'faraday'
         | 
| 2 | 
            +
            require 'json'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Outbrain
         | 
| 5 | 
            +
              class Connection
         | 
| 6 | 
            +
                BASE = 'https://api.outbrain.com'
         | 
| 7 | 
            +
                DEFAULT_API_VERSION = 'v0.1'
         | 
| 8 | 
            +
                attr_accessor :token, :user_name, :user_password, :connection, :api_version, :logging
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def initialize(args={})
         | 
| 11 | 
            +
                  @token = args[:token] || args['token']
         | 
| 12 | 
            +
                  @user_name = args[:user_name] || args['user_name']
         | 
| 13 | 
            +
                  @user_password = args[:user_password] || args['user_password']
         | 
| 14 | 
            +
                  @api_version = args[:api_version] || args['api_version'] || DEFAULT_API_VERSION
         | 
| 15 | 
            +
                  @logging = args[:logging] || args['logging'] || true # (default right now)
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  get_token! unless @token
         | 
| 18 | 
            +
                  # should raise if not authenticated properly
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def self.configure(params={})
         | 
| 22 | 
            +
                  connection = new(params)
         | 
| 23 | 
            +
                  Config.api = connection.api
         | 
| 24 | 
            +
                  Config.api_version = connection.api_version
         | 
| 25 | 
            +
                  connection
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                # authenticates using basic auth to get token.
         | 
| 29 | 
            +
                # => http://docs.amplifyv01.apiary.io/#reference/authentications
         | 
| 30 | 
            +
                def get_token!
         | 
| 31 | 
            +
                  @temp_api = Faraday.new(:url => BASE) do |faraday|
         | 
| 32 | 
            +
                    faraday.response :logger if logging
         | 
| 33 | 
            +
                    faraday.adapter  Faraday.default_adapter
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  @temp_api.basic_auth user_name, user_password
         | 
| 37 | 
            +
                  response = @temp_api.get("/amplify/#{api_version}/login")
         | 
| 38 | 
            +
                  @token = JSON.parse(response.body)[Outbrain::HEADER_AUTH_KEY]
         | 
| 39 | 
            +
                  # need to raise error here if token does not exist
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def api
         | 
| 43 | 
            +
                  @api ||= refresh_api
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def refresh_api
         | 
| 47 | 
            +
                  @api = Faraday.new(:url => BASE) do |faraday|
         | 
| 48 | 
            +
                    faraday.response :logger if logging
         | 
| 49 | 
            +
                    faraday.adapter  Faraday.default_adapter
         | 
| 50 | 
            +
                    faraday.headers['Content-Type'] = 'application/json'
         | 
| 51 | 
            +
                    faraday.headers[Outbrain::HEADER_AUTH_KEY] = token
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
            end
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            module Outbrain
         | 
| 2 | 
            +
              class Request < Config
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                def self.where(resource_path, query={}, options={})
         | 
| 5 | 
            +
                  response = api.get("/amplify/#{api_version}/#{resource_path}")
         | 
| 6 | 
            +
                  resource_name = options.fetch(:resource_name, resource_path)
         | 
| 7 | 
            +
                  json_body = JSON.parse(response.body) # catch and raise proper api error
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  fail InvalidOption 'requires an as option' unless options[:as]
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  json_body[resource_name].map do |obj|
         | 
| 12 | 
            +
                    options[:as].new(obj)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def self.all(resource, options={})
         | 
| 17 | 
            +
                  where(resource, {}, options)
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def self.create(resource, options={})
         | 
| 21 | 
            +
                  attributes = options.fetch(:attributes, {})
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  response = api.post("/amplify/#{api_version}/#{resource}", attributes.to_json)
         | 
| 24 | 
            +
                  json_body = JSON.parse(response.body)
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  if response.status == 200
         | 
| 27 | 
            +
                    options[:as].new(json_body)
         | 
| 28 | 
            +
                  else
         | 
| 29 | 
            +
                    a = options[:as].new
         | 
| 30 | 
            +
                    a.errors.push(json_body)
         | 
| 31 | 
            +
                    a
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
    
        data/outbrain-api.gemspec
    CHANGED
    
    | @@ -21,6 +21,7 @@ Gem::Specification.new do |spec| | |
| 21 21 |  | 
| 22 22 | 
             
              spec.add_runtime_dependency("faraday")
         | 
| 23 23 | 
             
              spec.add_runtime_dependency("json")
         | 
| 24 | 
            +
              spec.add_runtime_dependency("hashie")
         | 
| 24 25 |  | 
| 25 26 | 
             
              spec.add_development_dependency "bundler", "~> 1.11"
         | 
| 26 27 | 
             
              spec.add_development_dependency "rake", "~> 10.0"
         | 
    
        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.1. | 
| 4 | 
            +
              version: 0.1.1
         | 
| 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-03- | 
| 11 | 
            +
            date: 2016-03-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faraday
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: hashie
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 41 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 56 | 
             
              name: bundler
         | 
| 43 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -97,7 +111,17 @@ files: | |
| 97 111 | 
             
            - bin/console
         | 
| 98 112 | 
             
            - bin/setup
         | 
| 99 113 | 
             
            - lib/outbrain/api.rb
         | 
| 114 | 
            +
            - lib/outbrain/api/budget.rb
         | 
| 115 | 
            +
            - lib/outbrain/api/campaign.rb
         | 
| 116 | 
            +
            - lib/outbrain/api/config.rb
         | 
| 117 | 
            +
            - lib/outbrain/api/errors.rb
         | 
| 118 | 
            +
            - lib/outbrain/api/marketer.rb
         | 
| 119 | 
            +
            - lib/outbrain/api/publisher.rb
         | 
| 100 120 | 
             
            - lib/outbrain/api/version.rb
         | 
| 121 | 
            +
            - lib/outbrain/base.rb
         | 
| 122 | 
            +
            - lib/outbrain/config.rb
         | 
| 123 | 
            +
            - lib/outbrain/connection.rb
         | 
| 124 | 
            +
            - lib/outbrain/request.rb
         | 
| 101 125 | 
             
            - outbrain-api.gemspec
         | 
| 102 126 | 
             
            homepage: https://github.com/simplereach/outbrain-api
         | 
| 103 127 | 
             
            licenses:
         |