class PowerTrackV2::Rule

Constants

DEFAULT_POST_HEADERS
MAX_TAG_LENGTH
MAX_VALUE_LENGTH

Attributes

tag[RW]
value[RW]

Public Class Methods

delete(url, rules, optional_headers={}) click to toggle source
# File lib/powertrack_v2/rule.rb, line 62
def self.delete(url, rules, optional_headers={})
  post(url + '?_method=delete', rules, optional_headers)
end
get(url, optional_headers={}) click to toggle source
# File lib/powertrack_v2/rule.rb, line 35
def self.get(url, optional_headers={})
  headers = PowerTrackV2::HTTP.headers(optional_headers)
  response = PowerTrackV2::HTTP.get(url, headers)
  handle_response(response)
end
handle_response(response) click to toggle source
# File lib/powertrack_v2/rule.rb, line 41
def self.handle_response(response)
  return response.body if response.status == 200 || response.status < 300
  return PowerTrackV2::Errors.raise_error_for_code(response.status, response.body)
end
new(value, tag=nil) click to toggle source
# File lib/powertrack_v2/rule.rb, line 12
def initialize(value, tag=nil)
  @value = value
  @tag = tag
end
post(url, rules, optional_headers={}) click to toggle source
# File lib/powertrack_v2/rule.rb, line 50
def self.post(url, rules, optional_headers={})
  validate(rules)

  base_headers = DEFAULT_POST_HEADERS.merge(optional_headers)
  headers = PowerTrackV2::HTTP.headers(base_headers)

  body = prepare_rules(rules)

  response = PowerTrackV2::HTTP.post(url, body, headers)
  handle_response(response)
end
url(publisher, account, stream_label) click to toggle source
# File lib/powertrack_v2/rule.rb, line 31
def self.url(publisher, account, stream_label)
  "https://gnip-api.#{publisher}.com/rules/powertrack/accounts/#{account}/publishers/#{publisher}/#{stream_label}.json"
end
validate(rules) click to toggle source
# File lib/powertrack_v2/rule.rb, line 66
def self.validate(rules)
  raise ::PowerTrackV2::Errors::TooManyRulesError if rules.length > 5000
  raise ::PowerTrackV2::Errors::InvalidRuleError unless rules.all? &:valid?
end

Private Class Methods

prepare_rules(rules) click to toggle source
# File lib/powertrack_v2/rule.rb, line 73
def self.prepare_rules(rules)
  rules = rules.map {|rule| rule.as_json}
  ::MultiJson.dump({rules: rules})
end

Public Instance Methods

as_json() click to toggle source
# File lib/powertrack_v2/rule.rb, line 17
def as_json
  hash = {
    value: @value
  }
  hash[:tag] = @tag if @tag && !@tag.empty?
  hash
end
valid?() click to toggle source
# File lib/powertrack_v2/rule.rb, line 25
def valid?
  return false if @value.nil? || @value.length > MAX_VALUE_LENGTH
  return false if @tag && @tag.length > MAX_TAG_LENGTH
  true
end