module AdtekioAdnetworks::BasePostbacks

Public Class Methods

cfg_to_description(cfg) click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 159
def self.cfg_to_description(cfg)
  url = if cfg.params.is_a?(Hash)
    uri = Addressable::URI.parse(cfg.url)
    uri.query_values = cfg.params unless cfg.params.empty?
    CGI.unescape(uri.to_s)
  else
    "%s?%s" % [cfg.url, cfg.params.to_s]
  end

  { :url           => url,
    :user_required => cfg.user_required || false,
    :store_user    => cfg.store_user || false }
end
define_network_config() { || ... } click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 130
def self.define_network_config(&block)
  @network_config = yield
  self.class_eval do
    def self.netcfg
      @network_config
    end
  end
end
define_postback_for(platform, type) { || ... } click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 139
def self.define_postback_for(platform, type, &block)
  cfg = OpenStruct.new(yield)

  postbacks[platform] << type.to_sym
  pbcfg[platform][type.to_sym] << cfg

  self.send(:define_method, type, Proc.new do |platform|
              pbc = self.class.instance_variable_get("@pbcfg")
              pbc[platform.to_sym][type.to_sym].map do |cfg|
                cfg_to_url(cfg)
              end.compact
            end)

  self.class.send(:define_method, type, Proc.new do |platform|
                    @pbcfg[platform.to_sym][type.to_sym].map do |cfg|
                      cfg_to_description(cfg)
                    end
                  end)
end
included(klz) click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 120
def self.included(klz)
  klz.class_eval do
    def self.postbacks
      @postbacks ||= Hash.new{ |k,v| k[v] = [] }
    end

    def self.pbcfg
      @pbcfg ||= Hash.new{ |k,v| k[v] = Hash.new{ |k,v| k[v] = [] }}
    end

    def self.define_network_config(&block)
      @network_config = yield
      self.class_eval do
        def self.netcfg
          @network_config
        end
      end
    end

    def self.define_postback_for(platform, type, &block)
      cfg = OpenStruct.new(yield)

      postbacks[platform] << type.to_sym
      pbcfg[platform][type.to_sym] << cfg

      self.send(:define_method, type, Proc.new do |platform|
                  pbc = self.class.instance_variable_get("@pbcfg")
                  pbc[platform.to_sym][type.to_sym].map do |cfg|
                    cfg_to_url(cfg)
                  end.compact
                end)

      self.class.send(:define_method, type, Proc.new do |platform|
                        @pbcfg[platform.to_sym][type.to_sym].map do |cfg|
                          cfg_to_description(cfg)
                        end
                      end)
    end

    def self.cfg_to_description(cfg)
      url = if cfg.params.is_a?(Hash)
        uri = Addressable::URI.parse(cfg.url)
        uri.query_values = cfg.params unless cfg.params.empty?
        CGI.unescape(uri.to_s)
      else
        "%s?%s" % [cfg.url, cfg.params.to_s]
      end

      { :url           => url,
        :user_required => cfg.user_required || false,
        :store_user    => cfg.store_user || false }
    end

    def self.user_required?(event, platform)
      self.send(event, platform).any? { |desc| desc[:user_required] }
    end

    def self.store_user?(event, platform)
      self.send(event, platform).any? { |desc| desc[:store_user] }
    end

    def self.network
      name.to_s.sub(/^.+::([^:]+)$/,'\1').snakecase.to_sym
    end
  end

  Postbacks.register(klz)
end
netcfg() click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 133
def self.netcfg
  @network_config
end
network() click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 181
def self.network
  name.to_s.sub(/^.+::([^:]+)$/,'\1').snakecase.to_sym
end
pbcfg() click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 126
def self.pbcfg
  @pbcfg ||= Hash.new{ |k,v| k[v] = Hash.new{ |k,v| k[v] = [] }}
end
postbacks() click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 122
def self.postbacks
  @postbacks ||= Hash.new{ |k,v| k[v] = [] }
end
store_user?(event, platform) click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 177
def self.store_user?(event, platform)
  self.send(event, platform).any? { |desc| desc[:store_user] }
end
user_required?(event, platform) click to toggle source
# File lib/adtekio_adnetworks/postbacks.rb, line 173
def self.user_required?(event, platform)
  self.send(event, platform).any? { |desc| desc[:user_required] }
end