epom_rails 1.0.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/epom_rails/acts_as.rb +41 -14
- data/lib/epom_rails/acts_as_advertiser.rb +24 -0
- data/lib/epom_rails/acts_as_analytic.rb +33 -0
- data/lib/epom_rails/acts_as_campaign.rb +20 -1
- data/lib/epom_rails/acts_as_zone.rb +19 -0
- data/lib/epom_rails/config.rb +8 -6
- data/lib/epom_rails/version.rb +1 -1
- data/lib/epom_rails.rb +5 -3
- data/lib/generators/epom_rails/config/templates/epom_rails.rb +7 -4
- data/test/dummy/app/assets/javascripts/analytics.js +2 -0
- data/test/dummy/app/assets/stylesheets/analytics.css +4 -0
- data/test/dummy/app/controllers/analytics_controller.rb +58 -0
- data/test/dummy/app/controllers/zones_controller.rb +1 -1
- data/test/dummy/app/helpers/analytics_helper.rb +2 -0
- data/test/dummy/app/models/advertiser.rb +2 -1
- data/test/dummy/app/models/analytic.rb +3 -0
- data/test/dummy/app/models/banner.rb +2 -0
- data/test/dummy/app/models/campaign.rb +3 -0
- data/test/dummy/app/models/placement.rb +2 -0
- data/test/dummy/app/models/publisher.rb +1 -0
- data/test/dummy/app/models/zone.rb +3 -0
- data/test/dummy/app/views/analytics/_form.html.erb +133 -0
- data/test/dummy/app/views/analytics/edit.html.erb +6 -0
- data/test/dummy/app/views/analytics/index.html.erb +83 -0
- data/test/dummy/app/views/analytics/new.html.erb +5 -0
- data/test/dummy/app/views/analytics/show.html.erb +149 -0
- data/test/dummy/app/views/zones/_form.html.erb +2 -2
- data/test/dummy/app/views/zones/index.html.erb +2 -2
- data/test/dummy/app/views/zones/show.html.erb +2 -2
- data/test/dummy/config/routes.rb +2 -1
- data/test/dummy/db/migrate/{20150622160449_create_zones.rb → 20150803195716_create_zones.rb} +1 -1
- data/test/dummy/db/migrate/20150821041145_create_analytics.rb +37 -0
- data/test/dummy/db/schema.rb +38 -4
- data/test/dummy/test/controllers/analytics_controller_test.rb +49 -0
- data/test/dummy/test/controllers/banners_controller_test.rb +3 -1
- data/test/dummy/test/controllers/campaigns_controller_test.rb +4 -2
- data/test/dummy/test/controllers/placements_controller_test.rb +5 -3
- data/test/dummy/test/controllers/publishers_controller_test.rb +2 -2
- data/test/dummy/test/controllers/zones_controller_test.rb +5 -3
- data/test/dummy/test/fixtures/advertisers.yml +1 -0
- data/test/dummy/test/fixtures/analytics.yml +63 -0
- data/test/dummy/test/fixtures/banners.yml +16 -1
- data/test/dummy/test/fixtures/campaigns.yml +3 -2
- data/test/dummy/test/fixtures/placements.yml +4 -3
- data/test/dummy/test/fixtures/publishers.yml +2 -1
- data/test/dummy/test/fixtures/zones.yml +3 -2
- data/test/dummy/test/models/analytic_test.rb +7 -0
- data/test/epom_rails/acts_as_advertiser_test.rb +54 -1
- data/test/epom_rails/acts_as_analytic_test.rb +9 -0
- data/test/epom_rails/acts_as_banner_test.rb +9 -6
- data/test/epom_rails/acts_as_campaign_test.rb +24 -5
- data/test/epom_rails/acts_as_placement_test.rb +6 -3
- data/test/epom_rails/acts_as_site_test.rb +8 -5
- data/test/epom_rails/acts_as_zone_test.rb +16 -3
- data/test/test_helper.rb +8 -5
- metadata +42 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8477a4424a385f16a87257167587ec38126d35e
|
4
|
+
data.tar.gz: 4832ff15f4f780afd3cf64582ee06ec457c89c92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c369bfaebe40a96f527f6753875c4e960a8621a5e32643b46b2c6ba0094f0c3a38a12b86e12e0017ae7cb490e4b0ee595291e90e920503a707a666cd1cfaa988
|
7
|
+
data.tar.gz: a7c14a9c460452566fb512649a48a36b31343010572dee2da6b8f10b497cac4c590e1e274fdf74423cdcee8315e9afcfaa25fb1fcdccec1f57fa60e70e79b8e4
|
data/lib/epom_rails/acts_as.rb
CHANGED
@@ -1,5 +1,30 @@
|
|
1
1
|
class ActiveRecord::Base
|
2
2
|
|
3
|
+
def method_missing(method_name, *args)
|
4
|
+
fields = self.class.get_config[:fields]
|
5
|
+
|
6
|
+
# shortcut for epom fields, instead of self.send(fields.key(epom_field))
|
7
|
+
# use self.send(epom_field)
|
8
|
+
if fields.values.include?(method_name.to_s)
|
9
|
+
real_method = fields.key(method_name.to_s)
|
10
|
+
return self.send(real_method)
|
11
|
+
# when self.send('advertiser.epom_id')
|
12
|
+
elsif method_name.to_s.include?('.')
|
13
|
+
methods = method_name.to_s.split('.')
|
14
|
+
target = self
|
15
|
+
methods.each do |method|
|
16
|
+
if method == methods.last
|
17
|
+
target = target.send(method, *args)
|
18
|
+
else
|
19
|
+
target = target.send(method)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
return target
|
23
|
+
else
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
3
28
|
private
|
4
29
|
|
5
30
|
def self.acts_as(klass, params)
|
@@ -10,29 +35,30 @@ class ActiveRecord::Base
|
|
10
35
|
define_before_destroy(klass)
|
11
36
|
end
|
12
37
|
|
13
|
-
def self.
|
14
|
-
|
38
|
+
def self.get_epom_class_name
|
39
|
+
# for Epom::Site returns Site
|
40
|
+
epom_class.name.include?('::') ? epom_class.name.split('::').last : epom_class.name
|
15
41
|
end
|
16
42
|
|
17
|
-
def self.get_config
|
18
|
-
klass_name =
|
43
|
+
def self.get_config
|
44
|
+
klass_name = get_epom_class_name
|
19
45
|
EpomRails.config.send(klass_name.downcase)
|
20
46
|
end
|
21
47
|
|
22
48
|
def self.override_config(klass, params)
|
23
|
-
|
24
|
-
config = get_config(klass)
|
49
|
+
config = get_config
|
25
50
|
config[:fields] = params[:fields] if params[:fields]
|
26
51
|
config[:has_many] = params[:has_many] if params[:has_many]
|
27
52
|
config[:belongs_to] = params[:belongs_to] if params[:belongs_to]
|
28
53
|
end
|
29
54
|
|
30
55
|
def self.define_before_save(klass)
|
31
|
-
|
32
|
-
|
33
|
-
fields = get_config(klass)[:fields]
|
56
|
+
klass_name = get_epom_class_name
|
57
|
+
fields = get_config[:fields]
|
34
58
|
|
35
|
-
|
59
|
+
before_save do
|
60
|
+
puts "before_save for #{self.inspect}"
|
61
|
+
unless EpomRails.config.offline
|
36
62
|
method = if self.send fields.key('id') then "update_#{klass_name.downcase}" else "create_#{klass_name.downcase}" end
|
37
63
|
|
38
64
|
url_params = {}
|
@@ -67,10 +93,11 @@ class ActiveRecord::Base
|
|
67
93
|
end
|
68
94
|
|
69
95
|
def self.define_before_destroy(klass)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
before_destroy
|
96
|
+
klass_name = get_epom_class_name
|
97
|
+
fields = get_config[:fields]
|
98
|
+
before_destroy do
|
99
|
+
puts "before_destroy for #{self.inspect}"
|
100
|
+
unless EpomRails.config.offline
|
74
101
|
if self.send fields.key('id')
|
75
102
|
epom_response = klass.send "delete_#{klass_name.downcase}", {"#{klass_name.downcase}Id" => self.send(fields.key('id'))}, {}
|
76
103
|
epom_response['success'] if epom_response
|
@@ -3,6 +3,30 @@ class ActiveRecord::Base
|
|
3
3
|
def self.acts_as_advertiser(params = {})
|
4
4
|
EpomRails.config.advertiser[:model] = self
|
5
5
|
acts_as(Epom::Advertiser, params)
|
6
|
+
|
7
|
+
define_before_add_and_before_remove_for_campaigns
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.define_before_add_and_before_remove_for_campaigns
|
11
|
+
campaigns_association = EpomRails.config.advertiser[:has_many].find{|a| a[:epom_element]=="Campaign"}
|
12
|
+
|
13
|
+
if campaigns_association
|
14
|
+
before_add_for_campaigns << proc do |callback, advertiser, campaign|
|
15
|
+
puts callback
|
16
|
+
if campaign.advertiser_id and advertiser.id != campaign.advertiser_id
|
17
|
+
# remove in Epom this campaign from his older advertiser
|
18
|
+
Advertiser.find(campaign.advertiser_id).campaigns.delete(campaign)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
before_remove_for_campaigns << proc do |callback, advertiser, campaign|
|
22
|
+
puts callback
|
23
|
+
fields = EpomRails.config.campaign[:fields]
|
24
|
+
# delete this campaign in Epom
|
25
|
+
Campaign.delete_campaign({campaignId: campaign.send(fields.key('id'))})
|
26
|
+
# set nil epom_id field for this campaign
|
27
|
+
campaign.send "#{fields.key('id')}=", nil
|
28
|
+
end
|
29
|
+
end
|
6
30
|
end
|
7
31
|
|
8
32
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class ActiveRecord::Base
|
2
|
+
def self.acts_as_analytic(params = {})
|
3
|
+
EpomRails.config.analytic[:model] = self
|
4
|
+
|
5
|
+
extend EpomRails
|
6
|
+
override_config(Epom::Analytic, params)
|
7
|
+
|
8
|
+
define_analytic_from_epom
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
def self.define_analytic_from_epom
|
13
|
+
self.class_eval do
|
14
|
+
def self.analytic_from_epom(params)
|
15
|
+
default = {
|
16
|
+
:format => 'JSON',
|
17
|
+
:displayIds => true,
|
18
|
+
:groupBy => 'ADVERTISER,CAMPAIGN,BANNER,SITE,ZONE,PLACEMENT,CHANNEL,COUNTRY',
|
19
|
+
:groupRange => 'DAY',
|
20
|
+
}
|
21
|
+
analytics = JSON.parse(self.analytics(default.merge(params)))
|
22
|
+
# analytics = [{"Date"=>"01/08/2015", "Advertiser"=>"Praneet Shrivastava", "Advertiser ID"=>"911", "Campaign"=>"Camoaign by Praneet", "Campaign ID"=>"1409", "Banner"=>"Banner1", "Banner ID"=>"2364", "Site"=>"CN Beauty", "Site ID"=>"687", "Zone"=>"Zone Malaysia", "Zone ID"=>"762", "Placement"=>"CN Beauty site", "Placement ID"=>"1308", "Channel"=>"", "Country"=>"Malaysia", "Impressions"=>"642", "Clicks"=>"0", "CTR"=>"0.0000%", "Conversions"=>"0", "I2C"=>"0.0000%", "CCR"=>"0.0000%", "Net"=>"0.000", "Gross"=>"0.000", "Profit"=>"0.000", "eCPM Net"=>"0.000", "eCPM Gross"=>"0.000", "eCPM Profit"=>"0.000", "Status"=>"Preliminary confirmed"}, {"Date"=>"01/08/2015", "Advertiser"=>"Praneet Shrivastava", "Advertiser ID"=>"911", "Campaign"=>"Camoaign by Praneet", "Campaign ID"=>"1409", "Banner"=>"Banner1", "Banner ID"=>"2364", "Site"=>"CN Beauty", "Site ID"=>"687", "Zone"=>"Zone Malaysia", "Zone ID"=>"762", "Placement"=>"CN Beauty site", "Placement ID"=>"1308", "Channel"=>"", "Country"=>"Indonesia", "Impressions"=>"33", "Clicks"=>"0", "CTR"=>"0.0000%", "Conversions"=>"0", "I2C"=>"0.0000%", "CCR"=>"0.0000%", "Net"=>"0.000", "Gross"=>"0.000", "Profit"=>"0.000", "eCPM Net"=>"0.000", "eCPM Gross"=>"0.000", "eCPM Profit"=>"0.000", "Status"=>"Preliminary confirmed"}, {"Date"=>"01/08/2015", "Advertiser"=>"Praneet Shrivastava", "Advertiser ID"=>"911", "Campaign"=>"Camoaign by Praneet", "Campaign ID"=>"1409", "Banner"=>"Banner1", "Banner ID"=>"2364", "Site"=>"CN Beauty", "Site ID"=>"687", "Zone"=>"Zone Malaysia", "Zone ID"=>"762", "Placement"=>"CN Beauty site", "Placement ID"=>"1308", "Channel"=>"", "Country"=>"Brunei Darussalam", "Impressions"=>"31", "Clicks"=>"0", "CTR"=>"0.0000%", "Conversions"=>"0", "I2C"=>"0.0000%", "CCR"=>"0.0000%", "Net"=>"0.000", "Gross"=>"0.000", "Profit"=>"0.000", "eCPM Net"=>"0.000", "eCPM Gross"=>"0.000", "eCPM Profit"=>"0.000", "Status"=>"Preliminary confirmed"}, {"Date"=>"01/08/2015", "Advertiser"=>"Praneet Shrivastava", "Advertiser ID"=>"911", "Campaign"=>"Camoaign by Praneet", "Campaign ID"=>"1409", "Banner"=>"Banner1", "Banner ID"=>"2364", "Site"=>"CN Beauty", "Site ID"=>"687", "Zone"=>"Zone Malaysia", "Zone ID"=>"762", "Placement"=>"CN Beauty site", "Placement ID"=>"1308", "Channel"=>"", "Country"=>"Singapore", "Impressions"=>"31", "Clicks"=>"0", "CTR"=>"0.0000%", "Conversions"=>"0", "I2C"=>"0.0000%", "CCR"=>"0.0000%", "Net"=>"0.000", "Gross"=>"0.000", "Profit"=>"0.000", "eCPM Net"=>"0.000", "eCPM Gross"=>"0.000", "eCPM Profit"=>"0.000", "Status"=>"Preliminary confirmed"}, {"Date"=>"01/08/2015", "Advertiser"=>"NetUy", "Advertiser ID"=>"1253", "Campaign"=>"Netuy Envios de Titulares Matinales Campaña 2015", "Campaign ID"=>"1661", "Banner"=>"NetUy envíos", "Banner ID"=>"2598", "Site"=>"El Observador", "Site ID"=>"1059", "Zone"=>"Newsletters", "Zone ID"=>"1211", "Placement"=>"Titulares_Matinal_Cabezal", "Placement ID"=>"1704", "Channel"=>"", "Country"=>"Uruguay", "Impressions"=>"8", "Clicks"=>"0", "CTR"=>"0.0000%", "Conversions"=>"0", "I2C"=>"0.0000%", "CCR"=>"0.0000%", "Net"=>"0.000", "Gross"=>"0.000", "Profit"=>"0.000", "eCPM Net"=>"0.000", "eCPM Gross"=>"0.000", "eCPM Profit"=>"0.000", "Status"=>"Preliminary confirmed"}]
|
23
|
+
fields = get_config[:fields]
|
24
|
+
analytics.map do |analytic|
|
25
|
+
data = {}
|
26
|
+
fields.map {|key, value| data[key] = analytic[value]}
|
27
|
+
data[:date] = Date.parse(data[:date]) if data[:date].is_a?(String)
|
28
|
+
Analytic.new(data)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -3,6 +3,25 @@ class ActiveRecord::Base
|
|
3
3
|
def self.acts_as_campaign(params = {})
|
4
4
|
EpomRails.config.campaign[:model] = self
|
5
5
|
acts_as(Epom::Campaign, params)
|
6
|
+
|
7
|
+
override_belongs_to_advertiser
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.override_belongs_to_advertiser
|
11
|
+
advertiser_association = EpomRails.config.campaign[:belongs_to].find{|a| a[:epom_element]=="Advertiser"}
|
12
|
+
|
13
|
+
if advertiser_association
|
14
|
+
# overriding belongs_to: advertiser
|
15
|
+
define_method advertiser_association[:name] do
|
16
|
+
fields = EpomRails.config.campaign[:fields]
|
17
|
+
object = super()
|
18
|
+
|
19
|
+
if object.respond_to?(fields.key('id')) and object.send(fields.key('id'))
|
20
|
+
# here, retrieve this advertiser from Epom
|
21
|
+
end
|
22
|
+
object
|
23
|
+
end
|
24
|
+
end
|
6
25
|
end
|
7
26
|
|
8
|
-
end
|
27
|
+
end
|
@@ -3,6 +3,25 @@ class ActiveRecord::Base
|
|
3
3
|
def self.acts_as_zone(params = {})
|
4
4
|
EpomRails.config.zone[:model] = self
|
5
5
|
acts_as(Epom::Zone, params)
|
6
|
+
|
7
|
+
override_belongs_to_zone
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.override_belongs_to_zone
|
11
|
+
site_association = EpomRails.config.zone[:belongs_to].find{|a| a[:epom_element]=="Site"}
|
12
|
+
|
13
|
+
if site_association
|
14
|
+
# overriding belongs_to: site
|
15
|
+
define_method site_association[:name] do
|
16
|
+
fields = EpomRails.config.zone[:fields]
|
17
|
+
object = super()
|
18
|
+
|
19
|
+
if object.respond_to?(fields.key('id')) and object.send(fields.key('id'))
|
20
|
+
# here, retrieve this site from Epom
|
21
|
+
end
|
22
|
+
object
|
23
|
+
end
|
24
|
+
end
|
6
25
|
end
|
7
26
|
|
8
27
|
end
|
data/lib/epom_rails/config.rb
CHANGED
@@ -17,7 +17,7 @@ module EpomRails
|
|
17
17
|
# need a Class for 3.0
|
18
18
|
class Configuration #:nodoc:
|
19
19
|
include ActiveSupport::Configurable
|
20
|
-
config_accessor :offline, :advertiser, :campaign, :banner, :site, :zone, :placement
|
20
|
+
config_accessor :offline, :advertiser, :campaign, :banner, :site, :zone, :placement, :analytic
|
21
21
|
|
22
22
|
def param_name
|
23
23
|
config.param_name.respond_to?(:call) ? config.param_name.call : config.param_name
|
@@ -29,7 +29,6 @@ module EpomRails
|
|
29
29
|
class_eval writer, __FILE__, line
|
30
30
|
end
|
31
31
|
|
32
|
-
# this is ugly. why can't we pass the default value to config_accessor...?
|
33
32
|
EpomRails.configure do |config|
|
34
33
|
config.offline = false
|
35
34
|
|
@@ -38,12 +37,12 @@ module EpomRails
|
|
38
37
|
config.advertiser[:has_many] = [{:name => 'campaigns', :epom_element => 'Campaign', :model => 'Campaign'}]
|
39
38
|
|
40
39
|
config.campaign = {}
|
41
|
-
config.campaign[:fields] = {epom_id: 'id', name: 'name', description: 'description',
|
40
|
+
config.campaign[:fields] = {epom_id: 'id', name: 'name', description: 'description', weight: 'weight', 'advertiser.epom_id' => 'advertiserId'}
|
42
41
|
config.campaign[:has_many] = [{:name => 'banners', :epom_element => 'Banner', :model => 'Banner'}]
|
43
42
|
config.campaign[:belongs_to] = [{:name => 'advertiser', :epom_element => 'Advertiser', :model => 'Advertiser'}]
|
44
43
|
|
45
44
|
config.banner = {}
|
46
|
-
config.banner[:fields] = {epom_id: 'id', placement_type: 'placementType',
|
45
|
+
config.banner[:fields] = {epom_id: 'id', placement_type: 'placementType', 'campaign.epom_id' => 'campaignId', weight: 'weight', image_banner_link: 'imageBannerLink', url: 'url', name: 'name', banner_type: 'bannerType', ad_unit_id: 'adUnitId', ad_unit_width: 'adUnitWidth', ad_unit_height: 'adUnitHeight'}
|
47
46
|
config.banner[:has_many] = [{:name => 'placements', :epom_element => 'Placement', :model => 'Placement'}]
|
48
47
|
config.banner[:belongs_to] = [{:name => 'campaign', :epom_element => 'Campaign', :model => 'Campaign'}]
|
49
48
|
|
@@ -52,13 +51,16 @@ module EpomRails
|
|
52
51
|
config.site[:has_many] = [{:name => 'zones', :epom_element => 'Zone', :model => 'Zone'}]
|
53
52
|
|
54
53
|
config.zone = {}
|
55
|
-
config.zone[:fields] = {epom_id: 'id', name: 'name', description: 'description',
|
54
|
+
config.zone[:fields] = {epom_id: 'id', name: 'name', description: 'description', 'site.epom_id' => 'siteId'}
|
56
55
|
config.zone[:has_many] = [{:name => 'placements', :epom_element => 'Placement', :model => 'Placement'}]
|
57
56
|
config.zone[:belongs_to] = [{:name => 'site', :epom_element => 'Site', :model => 'Site'}]
|
58
57
|
|
59
58
|
config.placement = {}
|
60
|
-
config.placement[:fields] = {epom_id: 'id',
|
59
|
+
config.placement[:fields] = {epom_id: 'id', 'zone.epom_id' => 'zoneId', placement_type: 'type', name: 'name', ad_unit_id: 'adUnitId', size_height: 'size.height', size_width: 'size.width'}
|
61
60
|
config.placement[:has_many] = [{:name => 'banners', :epom_element => 'Banner', :model => 'Banner'}]
|
62
61
|
config.placement[:belongs_to] = [{:name => 'zone', :epom_element => 'Zone', :model => 'Zone'}]
|
62
|
+
|
63
|
+
config.analytic = {}
|
64
|
+
config.analytic[:fields] = {date: "Date", hour: "Hour", advertiser: "Advertiser", advertiser_id: "Advertiser ID", campaign: "Campaign", campaign_id: "Campaign ID", banner: "Banner", banner_id: "Banner ID", site: "Site", site_id: "Site ID", zone: "Zone", zone_id: "Zone ID", placement: "Placement", placement_id: "Placement ID", channel: "Channel", country: "Country", impressions: "Impressions", clicks: "Clicks", ctr: "CTR", conversions: "Conversions", i2c: "I2C", ccr: "CCR", net: "Net", gross: "Gross", profit: "Profit", ecpm_net: "eCPM Net", ecpm_gross: "eCPM Gross", ecpm_profit: "eCPM Profit", status: "Status"}
|
63
65
|
end
|
64
66
|
end
|
data/lib/epom_rails/version.rb
CHANGED
data/lib/epom_rails.rb
CHANGED
@@ -6,20 +6,21 @@ require 'epom_rails/acts_as_banner'
|
|
6
6
|
require 'epom_rails/acts_as_site'
|
7
7
|
require 'epom_rails/acts_as_zone'
|
8
8
|
require 'epom_rails/acts_as_placement'
|
9
|
+
require 'epom_rails/acts_as_analytic'
|
9
10
|
|
10
11
|
require 'epom_rails/config'
|
11
12
|
|
12
13
|
module EpomRails
|
13
14
|
def method_missing(method_name, *args)
|
14
15
|
if not EpomRails.config.offline and epom_class.respond_to?(method_name)
|
15
|
-
|
16
|
+
# this permits to use:
|
17
|
+
# Campaign.get_campaign({:campaignId => campaign.send(epom_field('id'))}, {})
|
18
|
+
epom_class.send(method_name, *args)
|
16
19
|
else
|
17
20
|
super
|
18
21
|
end
|
19
22
|
end
|
20
23
|
|
21
|
-
private
|
22
|
-
|
23
24
|
def epom_class
|
24
25
|
return Epom::Advertiser if EpomRails.config.advertiser[:model] == self
|
25
26
|
return Epom::Campaign if EpomRails.config.campaign[:model] == self
|
@@ -27,5 +28,6 @@ module EpomRails
|
|
27
28
|
return Epom::Site if EpomRails.config.site[:model] == self
|
28
29
|
return Epom::Zone if EpomRails.config.zone[:model] == self
|
29
30
|
return Epom::Placement if EpomRails.config.placement[:model] == self
|
31
|
+
return Epom::Analytic if EpomRails.config.analytic[:model] == self
|
30
32
|
end
|
31
33
|
end
|
@@ -6,12 +6,12 @@ EpomRails.configure do |config|
|
|
6
6
|
config.advertiser[:has_many] = [{:name => 'campaigns', :epom_element => 'Campaign', :model => 'Campaign'}]
|
7
7
|
|
8
8
|
config.campaign = {}
|
9
|
-
config.campaign[:fields] = {epom_id: 'id', name: 'name', description: 'description',
|
9
|
+
config.campaign[:fields] = {epom_id: 'id', name: 'name', description: 'description', weight: 'weight', 'advertiser.epom_id' => 'advertiserId'}
|
10
10
|
config.campaign[:has_many] = [{:name => 'banners', :epom_element => 'Banner', :model => 'Banner'}]
|
11
11
|
config.campaign[:belongs_to] = [{:name => 'advertiser', :epom_element => 'Advertiser', :model => 'Advertiser'}]
|
12
12
|
|
13
13
|
config.banner = {}
|
14
|
-
config.banner[:fields] = {epom_id: 'id', placement_type: 'placementType',
|
14
|
+
config.banner[:fields] = {epom_id: 'id', placement_type: 'placementType', 'campaign.epom_id' => 'campaignId', weight: 'weight', image_banner_link: 'imageBannerLink', url: 'url', name: 'name', banner_type: 'bannerType', ad_unit_id: 'adUnitId', ad_unit_width: 'adUnitWidth', ad_unit_height: 'adUnitHeight'}
|
15
15
|
config.banner[:has_many] = [{:name => 'placements', :epom_element => 'Placement', :model => 'Placement'}]
|
16
16
|
config.banner[:belongs_to] = [{:name => 'campaign', :epom_element => 'Campaign', :model => 'Campaign'}]
|
17
17
|
|
@@ -20,12 +20,15 @@ EpomRails.configure do |config|
|
|
20
20
|
config.site[:has_many] = [{:name => 'zones', :epom_element => 'Zone', :model => 'Zone'}]
|
21
21
|
|
22
22
|
config.zone = {}
|
23
|
-
config.zone[:fields] = {epom_id: 'id', name: 'name', description: 'description',
|
23
|
+
config.zone[:fields] = {epom_id: 'id', name: 'name', description: 'description', 'site.epom_id' => 'siteId'}
|
24
24
|
config.zone[:has_many] = [{:name => 'placements', :epom_element => 'Placement', :model => 'Placement'}]
|
25
25
|
config.zone[:belongs_to] = [{:name => 'site', :epom_element => 'Site', :model => 'Site'}]
|
26
26
|
|
27
27
|
config.placement = {}
|
28
|
-
config.placement[:fields] = {epom_id: 'id',
|
28
|
+
config.placement[:fields] = {epom_id: 'id', 'zone.epom_id' => 'zoneId', placement_type: 'type', name: 'name', ad_unit_id: 'adUnitId', size_height: 'size.height', size_width: 'size.width'}
|
29
29
|
config.placement[:has_many] = [{:name => 'banners', :epom_element => 'Banner', :model => 'Banner'}]
|
30
30
|
config.placement[:belongs_to] = [{:name => 'zone', :epom_element => 'Zone', :model => 'Zone'}]
|
31
|
+
|
32
|
+
config.analytic = {}
|
33
|
+
config.analytic[:fields] = {date: "Date", hour: "Hour", advertiser: "Advertiser", advertiser_id: "Advertiser ID", campaign: "Campaign", campaign_id: "Campaign ID", banner: "Banner", banner_id: "Banner ID", site: "Site", site_id: "Site ID", zone: "Zone", zone_id: "Zone ID", placement: "Placement", placement_id: "Placement ID", channel: "Channel", country: "Country", impressions: "Impressions", clicks: "Clicks", ctr: "CTR", conversions: "Conversions", i2c: "I2C", ccr: "CCR", net: "Net", gross: "Gross", profit: "Profit", ecpm_net: "eCPM Net", ecpm_gross: "eCPM Gross", ecpm_profit: "eCPM Profit", status: "Status"}
|
31
34
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class AnalyticsController < ApplicationController
|
2
|
+
before_action :set_analytic, only: [:show, :edit, :update, :destroy]
|
3
|
+
|
4
|
+
# GET /analytics
|
5
|
+
def index
|
6
|
+
@analytics = Analytic.all
|
7
|
+
end
|
8
|
+
|
9
|
+
# GET /analytics/1
|
10
|
+
def show
|
11
|
+
end
|
12
|
+
|
13
|
+
# GET /analytics/new
|
14
|
+
def new
|
15
|
+
@analytic = Analytic.new
|
16
|
+
end
|
17
|
+
|
18
|
+
# GET /analytics/1/edit
|
19
|
+
def edit
|
20
|
+
end
|
21
|
+
|
22
|
+
# POST /analytics
|
23
|
+
def create
|
24
|
+
@analytic = Analytic.new(analytic_params)
|
25
|
+
|
26
|
+
if @analytic.save
|
27
|
+
redirect_to @analytic, notice: 'Analytic was successfully created.'
|
28
|
+
else
|
29
|
+
render :new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# PATCH/PUT /analytics/1
|
34
|
+
def update
|
35
|
+
if @analytic.update(analytic_params)
|
36
|
+
redirect_to @analytic, notice: 'Analytic was successfully updated.'
|
37
|
+
else
|
38
|
+
render :edit
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# DELETE /analytics/1
|
43
|
+
def destroy
|
44
|
+
@analytic.destroy
|
45
|
+
redirect_to analytics_url, notice: 'Analytic was successfully destroyed.'
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
# Use callbacks to share common setup or constraints between actions.
|
50
|
+
def set_analytic
|
51
|
+
@analytic = Analytic.find(params[:id])
|
52
|
+
end
|
53
|
+
|
54
|
+
# Only allow a trusted parameter "white list" through.
|
55
|
+
def analytic_params
|
56
|
+
params.require(:analytic).permit(:date, :hour, :advertiser, :advertiser_id, :campaign, :campaign_id, :banner, :banner_id, :site, :site_id, :zone, :zone_id, :placement, :placement_id, :channel, :country, :impressions, :clicks, :ctr, :conversions, :i2c, :ccr, :net, :gross, :profit, :ecpm_net, :ecpm_gross, :ecpm_profit, :status)
|
57
|
+
end
|
58
|
+
end
|
@@ -53,6 +53,6 @@ class ZonesController < ApplicationController
|
|
53
53
|
|
54
54
|
# Only allow a trusted parameter "white list" through.
|
55
55
|
def zone_params
|
56
|
-
params.require(:zone).permit(:epom_id, :name, :description, :
|
56
|
+
params.require(:zone).permit(:epom_id, :name, :description, :publisher_id)
|
57
57
|
end
|
58
58
|
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
<%= form_for(@analytic) do |f| %>
|
2
|
+
<% if @analytic.errors.any? %>
|
3
|
+
<div id="error_explanation">
|
4
|
+
<h2><%= pluralize(@analytic.errors.count, "error") %> prohibited this analytic from being saved:</h2>
|
5
|
+
|
6
|
+
<ul>
|
7
|
+
<% @analytic.errors.full_messages.each do |message| %>
|
8
|
+
<li><%= message %></li>
|
9
|
+
<% end %>
|
10
|
+
</ul>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div class="field">
|
15
|
+
<%= f.label :date %><br>
|
16
|
+
<%= f.date_select :date %>
|
17
|
+
</div>
|
18
|
+
<div class="field">
|
19
|
+
<%= f.label :hour %><br>
|
20
|
+
<%= f.time_select :hour %>
|
21
|
+
</div>
|
22
|
+
<div class="field">
|
23
|
+
<%= f.label :advertiser %><br>
|
24
|
+
<%= f.text_field :advertiser %>
|
25
|
+
</div>
|
26
|
+
<div class="field">
|
27
|
+
<%= f.label :advertiser_id %><br>
|
28
|
+
<%= f.number_field :advertiser_id %>
|
29
|
+
</div>
|
30
|
+
<div class="field">
|
31
|
+
<%= f.label :campaign %><br>
|
32
|
+
<%= f.text_field :campaign %>
|
33
|
+
</div>
|
34
|
+
<div class="field">
|
35
|
+
<%= f.label :campaign_id %><br>
|
36
|
+
<%= f.number_field :campaign_id %>
|
37
|
+
</div>
|
38
|
+
<div class="field">
|
39
|
+
<%= f.label :banner %><br>
|
40
|
+
<%= f.text_field :banner %>
|
41
|
+
</div>
|
42
|
+
<div class="field">
|
43
|
+
<%= f.label :banner_id %><br>
|
44
|
+
<%= f.number_field :banner_id %>
|
45
|
+
</div>
|
46
|
+
<div class="field">
|
47
|
+
<%= f.label :site %><br>
|
48
|
+
<%= f.text_field :site %>
|
49
|
+
</div>
|
50
|
+
<div class="field">
|
51
|
+
<%= f.label :site_id %><br>
|
52
|
+
<%= f.number_field :site_id %>
|
53
|
+
</div>
|
54
|
+
<div class="field">
|
55
|
+
<%= f.label :zone %><br>
|
56
|
+
<%= f.text_field :zone %>
|
57
|
+
</div>
|
58
|
+
<div class="field">
|
59
|
+
<%= f.label :zone_id %><br>
|
60
|
+
<%= f.number_field :zone_id %>
|
61
|
+
</div>
|
62
|
+
<div class="field">
|
63
|
+
<%= f.label :placement %><br>
|
64
|
+
<%= f.text_field :placement %>
|
65
|
+
</div>
|
66
|
+
<div class="field">
|
67
|
+
<%= f.label :placement_id %><br>
|
68
|
+
<%= f.number_field :placement_id %>
|
69
|
+
</div>
|
70
|
+
<div class="field">
|
71
|
+
<%= f.label :channel %><br>
|
72
|
+
<%= f.text_field :channel %>
|
73
|
+
</div>
|
74
|
+
<div class="field">
|
75
|
+
<%= f.label :country %><br>
|
76
|
+
<%= f.text_field :country %>
|
77
|
+
</div>
|
78
|
+
<div class="field">
|
79
|
+
<%= f.label :impressions %><br>
|
80
|
+
<%= f.number_field :impressions %>
|
81
|
+
</div>
|
82
|
+
<div class="field">
|
83
|
+
<%= f.label :clicks %><br>
|
84
|
+
<%= f.number_field :clicks %>
|
85
|
+
</div>
|
86
|
+
<div class="field">
|
87
|
+
<%= f.label :ctr %><br>
|
88
|
+
<%= f.text_field :ctr %>
|
89
|
+
</div>
|
90
|
+
<div class="field">
|
91
|
+
<%= f.label :conversions %><br>
|
92
|
+
<%= f.number_field :conversions %>
|
93
|
+
</div>
|
94
|
+
<div class="field">
|
95
|
+
<%= f.label :i2c %><br>
|
96
|
+
<%= f.text_field :i2c %>
|
97
|
+
</div>
|
98
|
+
<div class="field">
|
99
|
+
<%= f.label :ccr %><br>
|
100
|
+
<%= f.text_field :ccr %>
|
101
|
+
</div>
|
102
|
+
<div class="field">
|
103
|
+
<%= f.label :net %><br>
|
104
|
+
<%= f.number_field :net %>
|
105
|
+
</div>
|
106
|
+
<div class="field">
|
107
|
+
<%= f.label :gross %><br>
|
108
|
+
<%= f.number_field :gross %>
|
109
|
+
</div>
|
110
|
+
<div class="field">
|
111
|
+
<%= f.label :profit %><br>
|
112
|
+
<%= f.number_field :profit %>
|
113
|
+
</div>
|
114
|
+
<div class="field">
|
115
|
+
<%= f.label :ecpm_net %><br>
|
116
|
+
<%= f.number_field :ecpm_net %>
|
117
|
+
</div>
|
118
|
+
<div class="field">
|
119
|
+
<%= f.label :ecpm_gross %><br>
|
120
|
+
<%= f.number_field :ecpm_gross %>
|
121
|
+
</div>
|
122
|
+
<div class="field">
|
123
|
+
<%= f.label :ecpm_profit %><br>
|
124
|
+
<%= f.number_field :ecpm_profit %>
|
125
|
+
</div>
|
126
|
+
<div class="field">
|
127
|
+
<%= f.label :status %><br>
|
128
|
+
<%= f.text_field :status %>
|
129
|
+
</div>
|
130
|
+
<div class="actions">
|
131
|
+
<%= f.submit %>
|
132
|
+
</div>
|
133
|
+
<% end %>
|