class AzureMediaService::Request

Public Class Methods

new(config) click to toggle source
# File lib/azure_media_service/request.rb, line 4
def initialize(config)
  build_config(config) 
end

Public Instance Methods

delete(endpoint, params={}) click to toggle source
# File lib/azure_media_service/request.rb, line 99
def delete(endpoint, params={})

  setToken() if token_expire?

  res = conn(@config[:mediaURI]).delete do |req|
    req.url URI.escape(endpoint, '():')
    req.headers = @default_headers
    req.headers[:Authorization] = "Bearer #{@access_token}"
    req.params = params
  end

  if res.status == 301
    @config[:mediaURI] = res.headers['location']
    delete(endpoint, params)
  else
    if res.headers[:error]
      raise MediaServiceError.new("#{res.headers[:error]}: #{res.headers[:error_description]}")
    end
    res.body
  end
end
get(endpoint, params={}) click to toggle source
# File lib/azure_media_service/request.rb, line 8
def get(endpoint, params={})

  setToken() if token_expire?

  res = conn(@config[:mediaURI]).get do |req|
    req.url URI.escape(endpoint, '():')
    req.headers = @default_headers
    req.headers[:Authorization] = "Bearer #{@access_token}"
    req.params = params
  end

  if res.status == 301
    @config[:mediaURI] = res.headers['location']
    get(endpoint, params)
  else
    if res.headers[:error]
      raise MediaServiceError.new("#{res.headers[:error]}: #{res.headers[:error_description]}")
    end
    res.body
  end
end
post(endpoint, body) click to toggle source
# File lib/azure_media_service/request.rb, line 30
def post(endpoint, body)
  setToken if token_expire?

  res = conn(@config[:mediaURI]).post do |req|
    req.url endpoint
    req.headers = @default_headers
    req.headers[:Authorization] = "Bearer #{@access_token}"
    req.body = body
  end

  if res.status == 301
    @config[:mediaURI] = res.headers['location']
    post(endpoint, body)
  else
    if res.headers[:error]
      raise MediaServiceError.new("#{res.headers[:error]}: #{res.headers[:error_description]}")
    end
    res.body
  end
end
put(endpoint, body) click to toggle source
# File lib/azure_media_service/request.rb, line 51
def put(endpoint, body)
  setToken if token_expire?

  res = conn(@config[:mediaURI]).put do |req|
    req.url endpoint
    req.headers = @default_headers
    req.headers[:Authorization] = "Bearer #{@access_token}"
    req.body = body
  end

  if res.status == 301
    @config[:mediaURI] = res.headers['location']
    post(endpoint, body)
  else
    if res.headers[:error]
      raise MediaServiceError.new("#{res.headers[:error]}: #{res.headers[:error_description]}")
    end
    res.body
  end
end
put_row(url, body) { |headers| ... } click to toggle source
# File lib/azure_media_service/request.rb, line 72
def put_row(url, body)

  _conn = conn(url) do |builder|
    builder.request :multipart
  end

  headers = {}

  if block_given?
    yield(headers)
  end

  res = _conn.put do |req|
    req.headers = headers
    req.body = body
  end
  if res.status == 301
    @config[:mediaURI] = res.headers['location']
    put(url, body)
  else
    if res.headers[:error]
      raise MediaServiceError.new("#{res.headers[:error]}: #{res.headers[:error_description]}")
    end
    res.body
  end
end

Private Instance Methods

build_config(config) click to toggle source
# File lib/azure_media_service/request.rb, line 122
def build_config(config)

  @config = config || {}
  # @config[:mediaURI] = "https://media.windows.net/API/"
  @config[:mediaURI] || raise(MediaServiceError.new('Media URI missing, please specify in config'))
  @config[:tokenURI] || raise(MediaServiceError.new('Token URI missing, please specify in config'))
  @config[:client_id] || raise(MediaServiceError.new('Client ID missing, please specify in config'))
  @config[:client_secret] || raise(MediaServiceError.new('Client secret missing, please specify in config'))

  @default_headers = {
    "Content-Type"          => "application/json;odata=verbose",
    "Accept"                => "application/json;odata=verbose",
    "DataServiceVersion"    => "3.0",
    "MaxDataServiceVersion" => "3.0",
    "x-ms-version"          => @config[:api_version] || Config::API_VERSION
  }
end
conn(url) { |builder| ... } click to toggle source
# File lib/azure_media_service/request.rb, line 140
def conn(url)
  conn = Faraday::Connection.new(:url => url, :ssl => {:verify => false}) do |builder|
    builder.request :url_encoded
    # builder.response :logger
    builder.use FaradayMiddleware::EncodeJson
    builder.use FaradayMiddleware::ParseJson, :content_type => /\bjson$/
    builder.adapter Faraday.default_adapter
    if block_given?
      yield(builder)
    end
  end
end
setToken() click to toggle source
# File lib/azure_media_service/request.rb, line 153
def setToken
  res = conn(@config[:tokenURI]).post do |req|
    req.body = {
      client_id: @config[:client_id], 
      client_secret: @config[:client_secret],
      grant_type: 'client_credentials',
      resource: 'https://rest.media.azure.net'
    }
  end

  @access_token = res.body["access_token"]
  @token_expires = Time.now.to_i + res.body["expires_in"].to_i
end
token_expire?() click to toggle source
# File lib/azure_media_service/request.rb, line 167
def token_expire?
  return true unless @access_token 
  return true if Time.now.to_i >= @token_expires
  return false
end