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_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