class ActiveRecord::Base

Public Class Methods

acts_as_advertiser(params = {}) click to toggle source
# File lib/epom_rails/acts_as_advertiser.rb, line 3
def self.acts_as_advertiser(params = {})
  EpomRails.config.advertiser[:model] = self
  acts_as(Epom::Advertiser, params)
end
acts_as_analytic(params = {}) click to toggle source
# File lib/epom_rails/acts_as_analytic.rb, line 2
    def self.acts_as_analytic(params = {})
            EpomRails.config.analytic[:model] = self

extend EpomRails   
override_config(Epom::Analytic, params)

define_analytic_from_epom
    end
acts_as_banner(params = {}) click to toggle source
# File lib/epom_rails/acts_as_banner.rb, line 3
def self.acts_as_banner(params = {})
      EpomRails.config.banner[:model] = self
  acts_as(Epom::Banner, params)
end
acts_as_campaign(params = {}) click to toggle source
# File lib/epom_rails/acts_as_campaign.rb, line 3
def self.acts_as_campaign(params = {})
      EpomRails.config.campaign[:model] = self
  acts_as(Epom::Campaign, params)
end
acts_as_placement(params = {}) click to toggle source
# File lib/epom_rails/acts_as_placement.rb, line 3
def self.acts_as_placement(params = {})
      EpomRails.config.placement[:model] = self
  acts_as(Epom::Placement, params)

  define_key_method
end
acts_as_site(params = {}) click to toggle source
# File lib/epom_rails/acts_as_site.rb, line 3
def self.acts_as_site(params = {})
      EpomRails.config.site[:model] = self
  acts_as(Epom::Site, params)
end
acts_as_zone(params = {}) click to toggle source
# File lib/epom_rails/acts_as_zone.rb, line 3
def self.acts_as_zone(params = {})
      EpomRails.config.zone[:model] = self
  acts_as(Epom::Zone, params)
end

Private Class Methods

acts_as(klass, params) click to toggle source
# File lib/epom_rails/acts_as.rb, line 5
def self.acts_as(klass, params)
  extend EpomRails
  
  override_config(klass, params)
  define_method_missing
  define_before_save(klass)
  define_before_destroy(klass)
end
analytic_from_epom(params) click to toggle source
# File lib/epom_rails/acts_as_analytic.rb, line 14
def self.analytic_from_epom(params)
          default = {
    :format => 'JSON',
    :displayIds => true,
    :groupBy => 'ADVERTISER,CAMPAIGN,BANNER,SITE,ZONE,PLACEMENT,CHANNEL,COUNTRY',
    :groupRange => 'DAY',
  }
  analytics = JSON.parse(Epom::Analytic.analytics(default.merge(params)))
  fields = get_config[:fields]
  analytics.map do |analytic|
    data = {}
    fields.map {|key, value| data[key] = analytic[value]}
    data[:date] = Date.parse(data[:date]) if data[:date].is_a?(String)
    self.new(data)
  end
end
define_analytic_from_epom() click to toggle source
# File lib/epom_rails/acts_as_analytic.rb, line 12
    def self.define_analytic_from_epom
self.class_eval do
  def self.analytic_from_epom(params)
            default = {
      :format => 'JSON',
      :displayIds => true,
      :groupBy => 'ADVERTISER,CAMPAIGN,BANNER,SITE,ZONE,PLACEMENT,CHANNEL,COUNTRY',
      :groupRange => 'DAY',
    }
    analytics = JSON.parse(Epom::Analytic.analytics(default.merge(params)))
    fields = get_config[:fields]
    analytics.map do |analytic|
      data = {}
      fields.map {|key, value| data[key] = analytic[value]}
      data[:date] = Date.parse(data[:date]) if data[:date].is_a?(String)
      self.new(data)
    end
  end
end
    end
define_before_destroy(klass) click to toggle source
# File lib/epom_rails/acts_as.rb, line 97
def self.define_before_destroy(klass)
  klass_name = get_epom_class_name
  fields = get_config[:fields]
  before_destroy do
    unless EpomRails.config.offline
      if self.send fields.key('id')          
        epom_response = klass.send "delete_#{klass_name.downcase}", {"#{klass_name.downcase}Id" => self.send(fields.key('id'))}, {}
        epom_response['success'] if epom_response
      end
    end
  end
end
define_before_save(klass) click to toggle source
# File lib/epom_rails/acts_as.rb, line 58
def self.define_before_save(klass)
      klass_name = get_epom_class_name
      fields = get_config[:fields]

      before_save do 
    unless EpomRails.config.offline
      method = if self.send fields.key('id') then "update_#{klass_name.downcase}" else "create_#{klass_name.downcase}" end
      
      url_params = {}
      url_parameters = klass.extended_methods[method.to_sym][:url_parameters]
      if url_parameters
        url_parameters.each do |parameter|
          url_params[parameter] = self.send(fields.key(parameter.to_s)) if fields.key(parameter.to_s)
        end
      end
      # if campaignId, bannerId, etc, as url parameters in update action
      if url_parameters and url_parameters.include? "#{klass_name.downcase}Id".to_sym
        url_params["#{klass_name.downcase}Id".to_sym] = self.send "#{fields.key('id')}"
      end

      body_params = {}
      body_parameters = klass.extended_methods[method.to_sym][:body_parameters]
      if body_parameters
        body_parameters.each do |parameter|
          body_params[parameter] = self.send(fields.key(parameter.to_s)) if fields.key(parameter.to_s)
        end
      end
      
      epom_response = klass.send method, url_params, body_params
              
      unless self.send fields.key('id')
                      # save id value returned from Epom
                      self.send "#{fields.key('id')}=", epom_response['id']
              end
              epom_response['success']
      end
  end  
end
define_key_method() click to toggle source
# File lib/epom_rails/acts_as_placement.rb, line 11
    def self.define_key_method
self.class_eval do
  def epom_key
    unless EpomRails.config.offline 
      unless @epom_key
        response = Epom::Placement.get_placement_summary({placementIds: self.epom_id})
        @epom_key = response[0]['key']
      end
      @epom_key
    end                
  end
end
    end
define_method_missing() click to toggle source
# File lib/epom_rails/acts_as.rb, line 29
def self.define_method_missing
  self.class_eval do
    def method_missing(method_name, *args)
      fields = self.class.get_config[:fields]

      # shortcut for epom fields, instead of self.send(fields.key(epom_field))
      # use self.send(epom_field)
      if fields.values.include?(method_name.to_s)
        real_method = fields.key(method_name.to_s)
        return self.send(real_method)
      # when self.send('advertiser.epom_id')
      elsif method_name.to_s.include?('.')
        methods = method_name.to_s.split('.')
        target = self
        methods.each do |method|
          if method == methods.last
            target = target.send(method, *args)
          else
            target = target.send(method)
          end
        end  
        return target
      else
        super
      end
    end 
  end
end
get_config() click to toggle source
# File lib/epom_rails/acts_as.rb, line 19
def self.get_config
  klass_name = get_epom_class_name
  EpomRails.config.send(klass_name.downcase)
end
get_epom_class_name() click to toggle source
# File lib/epom_rails/acts_as.rb, line 14
def self.get_epom_class_name
  # for Epom::Site returns Site
  epom_class.name.include?('::') ? epom_class.name.split('::').last : epom_class.name
end
override_config(klass, params) click to toggle source
# File lib/epom_rails/acts_as.rb, line 24
def self.override_config(klass, params)
  config = get_config
  config[:fields] = params[:fields] if params[:fields]
end

Private Instance Methods

epom_key() click to toggle source
# File lib/epom_rails/acts_as_placement.rb, line 13
def epom_key
  unless EpomRails.config.offline 
    unless @epom_key
      response = Epom::Placement.get_placement_summary({placementIds: self.epom_id})
      @epom_key = response[0]['key']
    end
    @epom_key
  end                
end
method_missing(method_name, *args) click to toggle source
Calls superclass method
# File lib/epom_rails/acts_as.rb, line 31
def method_missing(method_name, *args)
  fields = self.class.get_config[:fields]

  # shortcut for epom fields, instead of self.send(fields.key(epom_field))
  # use self.send(epom_field)
  if fields.values.include?(method_name.to_s)
    real_method = fields.key(method_name.to_s)
    return self.send(real_method)
  # when self.send('advertiser.epom_id')
  elsif method_name.to_s.include?('.')
    methods = method_name.to_s.split('.')
    target = self
    methods.each do |method|
      if method == methods.last
        target = target.send(method, *args)
      else
        target = target.send(method)
      end
    end  
    return target
  else
    super
  end
end