rails_adserver 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +0 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/rails_adserver/adspaces.js +2 -0
  5. data/app/assets/javascripts/rails_adserver/advertisements.js +2 -0
  6. data/app/assets/javascripts/rails_adserver/application.js +15 -0
  7. data/app/assets/javascripts/rails_adserver/rails_adserver_form.js.coffee +47 -0
  8. data/app/assets/stylesheets/rails_adserver/adspaces.css +4 -0
  9. data/app/assets/stylesheets/rails_adserver/advertisements.css +4 -0
  10. data/app/assets/stylesheets/rails_adserver/application.css +13 -0
  11. data/app/assets/stylesheets/rails_adserver/bootstrap-responsive.css +581 -0
  12. data/app/assets/stylesheets/rails_adserver/bootstrap.css +3496 -0
  13. data/app/assets/stylesheets/rails_adserver/pages.css +16 -0
  14. data/app/controllers/rails_adserver/adspaces_controller.rb +88 -0
  15. data/app/controllers/rails_adserver/advertisements_controller.rb +113 -0
  16. data/app/controllers/rails_adserver/application_controller.rb +25 -0
  17. data/app/controllers/rails_adserver/pages_controller.rb +9 -0
  18. data/app/helpers/rails_adserver/adspaces_helper.rb +4 -0
  19. data/app/helpers/rails_adserver/advertisements_helper.rb +4 -0
  20. data/app/helpers/rails_adserver/application_helper.rb +4 -0
  21. data/app/helpers/rails_adserver/pages_helper.rb +5 -0
  22. data/app/models/rails_adserver/adspace.rb +6 -0
  23. data/app/models/rails_adserver/advertisement.rb +110 -0
  24. data/app/models/rails_adserver/click.rb +5 -0
  25. data/app/uploaders/rails_adserver/advertisement_uploader.rb +56 -0
  26. data/app/views/layouts/rails_adserver/_sidebar.html.haml +21 -0
  27. data/app/views/layouts/rails_adserver/_topbar.html.haml +15 -0
  28. data/app/views/layouts/rails_adserver/advertisement.html.haml +3 -0
  29. data/app/views/layouts/rails_adserver/application.html.haml +25 -0
  30. data/app/views/rails_adserver/adspaces/_form.html.haml +16 -0
  31. data/app/views/rails_adserver/adspaces/edit.html.haml +1 -0
  32. data/app/views/rails_adserver/adspaces/index.html.haml +17 -0
  33. data/app/views/rails_adserver/adspaces/new.html.haml +1 -0
  34. data/app/views/rails_adserver/adspaces/show.html.haml +0 -0
  35. data/app/views/rails_adserver/advertisements/_advertisement.html.haml +7 -0
  36. data/app/views/rails_adserver/advertisements/_advertisements_table.html.haml +38 -0
  37. data/app/views/rails_adserver/advertisements/_form.html.haml +103 -0
  38. data/app/views/rails_adserver/advertisements/edit.html.haml +1 -0
  39. data/app/views/rails_adserver/advertisements/index.html.haml +2 -0
  40. data/app/views/rails_adserver/advertisements/new.html.haml +1 -0
  41. data/app/views/rails_adserver/advertisements/show.html.haml +5 -0
  42. data/app/views/rails_adserver/pages/home.html.haml +9 -0
  43. data/config/initializers/geokit.rb +1 -0
  44. data/config/initializers/haml.rb +2 -0
  45. data/config/routes.rb +10 -0
  46. data/db/migrate/20120227014859_create_rails_adserver_advertisements.rb +13 -0
  47. data/db/migrate/20120227014945_create_rails_adserver_clicks.rb +9 -0
  48. data/db/migrate/20120228000410_add_param_restriction_to_advertisement.rb +5 -0
  49. data/db/migrate/20120228000647_add_name_of_param_restriction_to_advertisement.rb +5 -0
  50. data/db/migrate/20120228010151_create_rails_adserver_adspaces.rb +8 -0
  51. data/db/migrate/20120228010315_add_name_to_adspace.rb +5 -0
  52. data/db/migrate/20120228043946_add_adspace_id_to_advertisement.rb +6 -0
  53. data/db/migrate/20120305034458_add_ad_type_to_advertisement.rb +6 -0
  54. data/db/migrate/20120305040026_add_parameter_restriction_boolean_to_advertisement.rb +6 -0
  55. data/db/migrate/20120305044238_add_more_options_to_advertisement.rb +7 -0
  56. data/db/migrate/20120305054319_add_image_to_advertisement.rb +5 -0
  57. data/db/migrate/20120305195421_add_max_clicks_to_advertisement.rb +6 -0
  58. data/db/migrate/20120305203049_add_indexes.rb +8 -0
  59. data/db/migrate/20120305212451_change_indexes.rb +11 -0
  60. data/db/migrate/20120305214753_add_click_count_to_advertisement.rb +6 -0
  61. data/db/migrate/20120306023105_geolocation.rb +5 -0
  62. data/db/migrate/20120306052705_add_geolocation_names_to_advertisements.rb +7 -0
  63. data/db/migrate/20120306065447_add_advertisement_indexes.rb +8 -0
  64. data/db/migrate/20120323174313_add_backup_boolean_to_ads.rb +5 -0
  65. data/db/migrate/20120328043354_add_view_count_to_ads.rb +6 -0
  66. data/db/migrate/20120328043651_add_views_to_ads.rb +6 -0
  67. data/lib/rails_adserver.rb +13 -0
  68. data/lib/rails_adserver/config.rb +13 -0
  69. data/lib/rails_adserver/engine.rb +5 -0
  70. data/lib/rails_adserver/version.rb +3 -0
  71. data/lib/tasks/rails_adserver_tasks.rake +4 -0
  72. data/test/dummy/README.rdoc +261 -0
  73. data/test/dummy/Rakefile +7 -0
  74. data/test/dummy/app/assets/javascripts/application.js +15 -0
  75. data/test/dummy/app/assets/javascripts/page.js +5 -0
  76. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  77. data/test/dummy/app/assets/stylesheets/page.css +4 -0
  78. data/test/dummy/app/controllers/application_controller.rb +3 -0
  79. data/test/dummy/app/controllers/page_controller.rb +4 -0
  80. data/test/dummy/app/helpers/application_helper.rb +2 -0
  81. data/test/dummy/app/helpers/page_helper.rb +2 -0
  82. data/test/dummy/app/models/user.rb +9 -0
  83. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  84. data/test/dummy/app/views/page/home.html.haml +1 -0
  85. data/test/dummy/config.ru +4 -0
  86. data/test/dummy/config/application.rb +57 -0
  87. data/test/dummy/config/boot.rb +10 -0
  88. data/test/dummy/config/database.yml +25 -0
  89. data/test/dummy/config/environment.rb +5 -0
  90. data/test/dummy/config/environments/development.rb +37 -0
  91. data/test/dummy/config/environments/production.rb +67 -0
  92. data/test/dummy/config/environments/test.rb +37 -0
  93. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  94. data/test/dummy/config/initializers/carrierwave.rb +4 -0
  95. data/test/dummy/config/initializers/devise.rb +223 -0
  96. data/test/dummy/config/initializers/inflections.rb +15 -0
  97. data/test/dummy/config/initializers/mime_types.rb +5 -0
  98. data/test/dummy/config/initializers/rails_adserver.rb +5 -0
  99. data/test/dummy/config/initializers/secret_token.rb +7 -0
  100. data/test/dummy/config/initializers/session_store.rb +8 -0
  101. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  102. data/test/dummy/config/locales/devise.en.yml +57 -0
  103. data/test/dummy/config/locales/en.yml +5 -0
  104. data/test/dummy/config/routes.rb +10 -0
  105. data/test/dummy/db/development.sqlite3 +0 -0
  106. data/test/dummy/db/migrate/20120227204751_devise_create_users.rb +49 -0
  107. data/test/dummy/db/migrate/20120307204255_add_can_manage_ads_to_users.rb +6 -0
  108. data/test/dummy/db/schema.rb +84 -0
  109. data/test/dummy/db/test.sqlite3 +0 -0
  110. data/test/dummy/log/development.log +26491 -0
  111. data/test/dummy/public/404.html +26 -0
  112. data/test/dummy/public/422.html +26 -0
  113. data/test/dummy/public/500.html +25 -0
  114. data/test/dummy/public/favicon.ico +0 -0
  115. data/test/dummy/public/public/uploads/rails_adserver/advertisement/image/1/uszgP.jpg +0 -0
  116. data/test/dummy/script/rails +6 -0
  117. data/test/dummy/test/fixtures/users.yml +11 -0
  118. data/test/dummy/test/functional/page_controller_test.rb +9 -0
  119. data/test/dummy/test/unit/helpers/page_helper_test.rb +4 -0
  120. data/test/dummy/test/unit/user_test.rb +7 -0
  121. data/test/dummy/tmp/cache/assets/C8F/860/sprockets%2Fd57276033f66173927e782e5c5b90c7b +0 -0
  122. data/test/dummy/tmp/cache/assets/C9E/E90/sprockets%2F4cebc1ca866a787736432410406a1b50 +0 -0
  123. data/test/dummy/tmp/cache/assets/CA6/990/sprockets%2F379e6655f2bcbb2380bc62b313314727 +0 -0
  124. data/test/dummy/tmp/cache/assets/CA7/ED0/sprockets%2F1e7b5a8a1137789918c115c01224bf4e +0 -0
  125. data/test/dummy/tmp/cache/assets/CC5/850/sprockets%2F7744952a67b1f4545bee9716f198c19b +0 -0
  126. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  127. data/test/dummy/tmp/cache/assets/CE6/0F0/sprockets%2Ff173f2af55165a9415194d3e854c85da +0 -0
  128. data/test/dummy/tmp/cache/assets/CE7/DA0/sprockets%2F8ed8b29fe6a806301c31c79881a90c09 +0 -0
  129. data/test/dummy/tmp/cache/assets/CF2/CD0/sprockets%2Fda5995b74493c93c586f584b54c74a0b +0 -0
  130. data/test/dummy/tmp/cache/assets/CF3/920/sprockets%2F55f039ac18775d9358bdc75406f1e8f5 +0 -0
  131. data/test/dummy/tmp/cache/assets/D11/7F0/sprockets%2F9bcb57444f3287a8fa6fc45404e414c2 +0 -0
  132. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  133. data/test/dummy/tmp/cache/assets/D35/D40/sprockets%2F75eff8f38359ea04cb0101ae2b91d702 +0 -0
  134. data/test/dummy/tmp/cache/assets/D3C/710/sprockets%2Fe62ab8b4376ed759a9cb72a62b0651e0 +0 -0
  135. data/test/dummy/tmp/cache/assets/D3D/A90/sprockets%2Fb9991dccd27b48a625b6a0146717ade3 +0 -0
  136. data/test/dummy/tmp/cache/assets/D3E/910/sprockets%2F5fdb0e602ada6a930583809f853d39bb +0 -0
  137. data/test/dummy/tmp/cache/assets/D3F/D00/sprockets%2Fbe9a1d851c3b30e4a710983eda7f7196 +0 -0
  138. data/test/dummy/tmp/cache/assets/D42/E30/sprockets%2F261c172e1fdf9b39a4678a48371eaad6 +0 -0
  139. data/test/dummy/tmp/cache/assets/D4D/2F0/sprockets%2Fd7dd6367378df15e4f0bb6d93fb41529 +0 -0
  140. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  141. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  142. data/test/dummy/tmp/cache/assets/D5C/210/sprockets%2Fc78ac0bb1ca02e0ac1a566663840f8d6 +0 -0
  143. data/test/dummy/tmp/cache/assets/D5D/040/sprockets%2F539152cca8a2a9422e2a3ffa2a285d2d +0 -0
  144. data/test/dummy/tmp/cache/assets/D6D/670/sprockets%2F6ca4a9214539aeaf6f8401d3b77af16f +0 -0
  145. data/test/dummy/tmp/cache/assets/D73/BD0/sprockets%2Fac1f8d241dad59f05983cc1039ff4c58 +0 -0
  146. data/test/dummy/tmp/cache/assets/D7B/EA0/sprockets%2F0faa78844d169df84da0f122c89eb4f9 +0 -0
  147. data/test/dummy/tmp/cache/assets/D93/220/sprockets%2Fc0dcb0c6b055384fbd88d5b529c0da08 +0 -0
  148. data/test/dummy/tmp/cache/assets/DA0/180/sprockets%2F399fd2be6e4cf00a819a2630f8dd7ea2 +0 -0
  149. data/test/dummy/tmp/cache/assets/DB3/D90/sprockets%2F13d110dd2bde3bcd20b72f882330feae +0 -0
  150. data/test/dummy/tmp/cache/assets/DBA/2C0/sprockets%2F3879aa153bb0fe0de0fa0281f8cba2f2 +0 -0
  151. data/test/dummy/tmp/cache/assets/DCD/700/sprockets%2F57ee5a1f5e64e611b990eeadb75b14cb +0 -0
  152. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  153. data/test/dummy/tmp/cache/assets/DDD/700/sprockets%2F78da8de4fc4dba2a5e7fa624ff518973 +0 -0
  154. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  155. data/test/dummy/tmp/cache/assets/E06/950/sprockets%2Fbc8b0eff6fc13759f0c069b4f8bc3e6c +0 -0
  156. data/test/dummy/tmp/cache/assets/EB3/120/sprockets%2Fbaadea6fabac9ad5d1215ef8d3bf67a6 +0 -0
  157. data/test/fixtures/rails_adserver/adspaces.yml +11 -0
  158. data/test/fixtures/rails_adserver/advertisements.yml +15 -0
  159. data/test/fixtures/rails_adserver/clicks.yml +7 -0
  160. data/test/functional/rails_adserver/adspaces_controller_test.rb +51 -0
  161. data/test/functional/rails_adserver/advertisements_controller_test.rb +51 -0
  162. data/test/functional/rails_adserver/pages_controller_test.rb +9 -0
  163. data/test/integration/navigation_test.rb +10 -0
  164. data/test/rails_adserver_test.rb +7 -0
  165. data/test/test_helper.rb +10 -0
  166. data/test/unit/helpers/rails_adserver/adspaces_helper_test.rb +6 -0
  167. data/test/unit/helpers/rails_adserver/advertisements_helper_test.rb +6 -0
  168. data/test/unit/helpers/rails_adserver/pages_helper_test.rb +6 -0
  169. data/test/unit/rails_adserver/adspace_test.rb +9 -0
  170. data/test/unit/rails_adserver/advertisement_test.rb +9 -0
  171. data/test/unit/rails_adserver/click_test.rb +9 -0
  172. data/test/unit/rails_adserver/clicks_test.rb +9 -0
  173. metadata +401 -0
@@ -0,0 +1,16 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
5
+ footer{
6
+ padding: 40px 0 0 0;
7
+ text-align:center;
8
+ }
9
+
10
+ legend{
11
+ font-size: 30px;
12
+ }
13
+
14
+ h1{
15
+ padding: 0 0 30px 0;
16
+ }
@@ -0,0 +1,88 @@
1
+ module RailsAdserver
2
+ class AdspacesController < RailsAdserver::ApplicationController
3
+ before_filter :_authenticate
4
+ # GET /adspaces
5
+ # GET /adspaces.json
6
+ def index
7
+ @title = "Ad-Spaces"
8
+ @adspaces = Adspace.all
9
+ respond_to do |format|
10
+ format.html # index.html.erb
11
+ format.json { render json: @adspaces }
12
+ end
13
+ end
14
+
15
+ # GET /adspaces/1
16
+ # GET /adspaces/1.json
17
+ def show
18
+ @adspace = Adspace.find(params[:id])
19
+ @tile = "Ad-Space - #{@adspace.name}"
20
+ respond_to do |format|
21
+ format.html # show.html.erb
22
+ format.json { render json: @adspace }
23
+ end
24
+ end
25
+
26
+ # GET /adspaces/new
27
+ # GET /adspaces/new.json
28
+ def new
29
+ @title = "New Ad-Space"
30
+ @adspace = Adspace.new
31
+ respond_to do |format|
32
+ format.html # new.html.erb
33
+ format.json { render json: @adspace }
34
+ end
35
+ end
36
+
37
+ # GET /adspaces/1/edit
38
+ def edit
39
+ @title = "Edit Ad-Space"
40
+ @adspace = Adspace.find(params[:id])
41
+ end
42
+
43
+ # POST /adspaces
44
+ # POST /adspaces.json
45
+ def create
46
+ @title = "New Ad-Space"
47
+ @adspace = Adspace.new(params[:adspace])
48
+ respond_to do |format|
49
+ if @adspace.save
50
+ format.html { redirect_to adspaces_url, notice: 'Adspace was successfully created.' }
51
+ format.json { render json: @adspace, status: :created, location: @adspace }
52
+ else
53
+ format.html { render action: "new" }
54
+ format.json { render json: @adspace.errors, status: :unprocessable_entity }
55
+ end
56
+ end
57
+ end
58
+
59
+ # PUT /adspaces/1
60
+ # PUT /adspaces/1.json
61
+ def update
62
+ @title = "Edit Ad-Space"
63
+ @adspace = Adspace.find(params[:id])
64
+ respond_to do |format|
65
+ if @adspace.update_attributes(params[:adspace])
66
+ format.html { redirect_to @adspace, notice: 'Adspace was successfully updated.' }
67
+ format.json { head :no_content }
68
+ else
69
+ format.html { render action: "edit" }
70
+ format.json { render json: @adspace.errors, status: :unprocessable_entity }
71
+ end
72
+ end
73
+ end
74
+
75
+ # DELETE /adspaces/1
76
+ # DELETE /adspaces/1.json
77
+ def destroy
78
+ @adspace = Adspace.find(params[:id])
79
+ @adspace.destroy
80
+
81
+ respond_to do |format|
82
+ format.html { redirect_to adspaces_url }
83
+ format.json { head :no_content }
84
+ end
85
+ end
86
+
87
+ end
88
+ end
@@ -0,0 +1,113 @@
1
+ module RailsAdserver
2
+ class AdvertisementsController < RailsAdserver::ApplicationController
3
+ before_filter :_authenticate, :except => [:ad_param, :ad_space]
4
+ require 'carrierwave'
5
+ def ad_param
6
+ id = RailsAdserver::Advertisement.ad_with_parameter(params[:adspace_id],params[:id],request.remote_ip)
7
+ @advertisement = RailsAdserver::Advertisement.find(id)
8
+ respond_to do |format|
9
+ format.html {render :partial => 'advertisement', :layout => false}
10
+ end
11
+ end
12
+
13
+ def ad_space
14
+ id = RailsAdserver::Advertisement.ad(params[:adspace_id],request.remote_ip)
15
+ @advertisement = RailsAdserver::Advertisement.find(id)
16
+ respond_to do |format|
17
+ format.html {render :partial => 'advertisement', :layout => false}
18
+ end
19
+ end
20
+
21
+ def click
22
+ client_ip = request.remote_ip
23
+ ad = Advertisement.find(params[:id])
24
+ ad.clicks.create(:ip_address => client_ip)
25
+ ad.update_attribute(:click_count,ad.clicks.count)
26
+ if ad.click_count >= ad.max_clicks
27
+ unless ad.max_clicks == 0
28
+ ad.update_attribute(:is_active,false)
29
+ end
30
+ end
31
+ redirect_to ad.url
32
+ end
33
+ # GET /advertisements
34
+ def index
35
+ @advertisements = Advertisement.all
36
+ @title = "Advertisements"
37
+ respond_to do |format|
38
+ format.html # index.html.erb
39
+ format.json { render json: @advertisements }
40
+ end
41
+ end
42
+
43
+ # GET /advertisements/1
44
+ def show
45
+ @advertisement = Advertisement.find(params[:id])
46
+ @title = @advertisement.title
47
+ respond_to do |format|
48
+ format.html # show.html.erb
49
+ format.json { render json: @advertisement }
50
+ end
51
+ end
52
+
53
+ # GET /advertisements/new
54
+ def new
55
+ @advertisement = Advertisement.new
56
+ @title = "New Advertisement"
57
+ respond_to do |format|
58
+ format.html # new.html.erb
59
+ format.json { render json: @advertisement }
60
+ end
61
+ end
62
+
63
+ # GET /advertisements/1/edit
64
+ def edit
65
+ @title = "Edit Advertisement"
66
+ @advertisement = Advertisement.find(params[:id])
67
+ end
68
+
69
+ # POST /advertisements
70
+ def create
71
+ @advertisement = Advertisement.new(params[:advertisement])
72
+ geo = Geokit::Geocoders::MultiGeocoder.geocode(@advertisement.geolocation_location)
73
+ @advertisement.update_attributes(:city_name => geo.city, :state_name => geo.state, :country_name => geo.country)
74
+ respond_to do |format|
75
+ if @advertisement.save
76
+ format.html { redirect_to @advertisement, notice: 'Advertisement was successfully created.' }
77
+ format.json { render json: @advertisement, status: :created, location: @advertisement }
78
+ else
79
+ format.html { render action: "new" }
80
+ format.json { render json: @advertisement.errors, status: :unprocessable_entity }
81
+ end
82
+ end
83
+ end
84
+
85
+ # PUT /advertisements/1
86
+ def update
87
+ @advertisement = Advertisement.find(params[:id])
88
+ respond_to do |format|
89
+ if @advertisement.update_attributes(params[:advertisement])
90
+ geo = Geokit::Geocoders::MultiGeocoder.geocode(@advertisement.geolocation_location)
91
+ @advertisement.update_attributes(:city_name => geo.city, :state_name => geo.state, :country_name => geo.country)
92
+ format.html { redirect_to @advertisement, notice: 'Advertisement was successfully updated.' }
93
+ format.json { head :no_content }
94
+ else
95
+ format.html { render action: "edit" }
96
+ format.json { render json: @advertisement.errors, status: :unprocessable_entity }
97
+ end
98
+ end
99
+ end
100
+
101
+ # DELETE /advertisements/1
102
+ def destroy
103
+ @advertisement = Advertisement.find(params[:id])
104
+ @advertisement.destroy
105
+
106
+ respond_to do |format|
107
+ format.html { redirect_to advertisements_url }
108
+ format.json { head :no_content }
109
+ end
110
+ end
111
+
112
+ end
113
+ end
@@ -0,0 +1,25 @@
1
+ module RailsAdserver
2
+ class ApplicationController < ActionController::Base
3
+ helper :all
4
+ helper_method :_current_user, :_application_name, :_model_pool
5
+ private
6
+ def _model_pool
7
+ RailsAdserver::Config.models_pool
8
+ end
9
+ def _application_name
10
+ RailsAdserver::Config.application_name
11
+ end
12
+ def _current_user
13
+ instance_eval &RailsAdserver::Config.current_user_method
14
+ end
15
+ def _authenticate
16
+ if _current_user == nil
17
+ redirect_to '/404.html'
18
+ else
19
+ unless _current_user.can_manage_ads
20
+ redirect_to '/404.html'
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,9 @@
1
+ module RailsAdserver
2
+ class PagesController < RailsAdserver::ApplicationController
3
+ before_filter :_authenticate
4
+ def home
5
+ @title = "Overview"
6
+ @adspaces = RailsAdserver::Adspace.find(:all)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ module RailsAdserver
2
+ module AdspacesHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module RailsAdserver
2
+ module AdvertisementsHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module RailsAdserver
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ module RailsAdserver
2
+ module PagesHelper
3
+
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module RailsAdserver
2
+ class Adspace < ActiveRecord::Base
3
+ has_many :advertisements
4
+ validates :name, :presence => true
5
+ end
6
+ end
@@ -0,0 +1,110 @@
1
+ module RailsAdserver
2
+ class Advertisement < ActiveRecord::Base
3
+ belongs_to :adspace
4
+ has_many :clicks
5
+ require 'carrierwave/orm/activerecord'
6
+
7
+ attr_accessible :image, :title, :content, :width, :height, :is_active, :param_restriction, :ad_text, :parameter_restriction_boolean,
8
+ :param_restriction_name, :adspace_id, :ad_type, :url, :geolocation_boolean, :max_clicks, :geolocation_location, :city_name, :state_name, :country_name, :backup,
9
+ :max_impressions
10
+
11
+ validates :title, :presence => true
12
+ validates :adspace_id, :presence => true
13
+
14
+ mount_uploader :image, AdvertisementUploader
15
+
16
+ def self.ad_with_parameter(adspace_id,param,ip)
17
+ space = RailsAdserver::Adspace.find(adspace_id)
18
+ id = space.advertisements.random_ad(param)
19
+ if id == nil
20
+ geo_ip = Geokit::Geocoders::MultiGeocoder.geocode(ip)
21
+ geo = Geokit::Geocoders::MultiGeocoder.geocode("#{geo_ip.city},#{geo_ip.state},#{geo_ip.country}")
22
+ id = space.advertisements.geo_city(geo.city)
23
+ if id == nil
24
+ id = space.advertisements.geo_state(geo.state)
25
+ if id == nil
26
+ id = space.advertisements.geo_country(geo.country)
27
+ if id == nil
28
+ id = space.advertisements.random_ad(nil)
29
+ if id == nil
30
+ id = space.advertisements.backup_ad
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ unless id == nil
37
+ advertisement = RailsAdserver::Advertisement.find(id)
38
+ if advertisement.impressions_count == nil
39
+ advertisement.update_attribute(:impressions_count,0)
40
+ end
41
+ count = advertisement.impressions_count+1
42
+ advertisement.update_attribute(:impressions_count,count)
43
+ unless advertisement.max_impressions == 0 || advertisement.max_impressions == nil
44
+ if advertisement.max_impressions <= advertisement.impressions_count
45
+ advertisement.update_attribute(:is_active,false)
46
+ end
47
+ end
48
+ end
49
+ return id
50
+ end
51
+
52
+ def self.ad(adspace_id,ip)
53
+ space = RailsAdserver::Adspace.find(adspace_id)
54
+ geo_ip = Geokit::Geocoders::MultiGeocoder.geocode(ip)
55
+ geo = Geokit::Geocoders::MultiGeocoder.geocode("#{geo_ip.city},#{geo_ip.state},#{geo_ip.country}")
56
+ id = space.advertisements.geo_city(geo.city)
57
+ if id == nil
58
+ id = space.advertisements.geo_state(geo.state)
59
+ if id == nil
60
+ id = space.advertisements.geo_country(geo.country)
61
+ if id == nil
62
+ id = space.advertisements.random_ad(nil)
63
+ if id == nil
64
+ id = space.advertisements.backup_ad
65
+ end
66
+ end
67
+ end
68
+ end
69
+ unless id == nil
70
+ advertisement = RailsAdserver::Advertisement.find(id)
71
+ if advertisement.impressions_count == nil
72
+ advertisement.update_attribute(:impressions_count,0)
73
+ end
74
+ count = advertisement.impressions_count+1
75
+ advertisement.update_attribute(:impressions_count,count)
76
+ unless advertisement.max_impressions == 0 || advertisement.max_impressions == nil
77
+ if advertisement.max_impressions <= advertisement.impressions_count
78
+ advertisement.update_attribute(:is_active,false)
79
+ end
80
+ end
81
+ end
82
+ return id
83
+ end
84
+
85
+ def self.random_ad(param)
86
+ if param == nil
87
+ ad_ids = self.where("is_active = ? AND parameter_restriction_boolean = ? AND geolocation_boolean = ? AND backup = ?", true, false, false, false).map(&:id)
88
+ else
89
+ ad_ids = self.where("is_active = ? AND param_restriction = ? AND backup = ?",true, param, false).map(&:id)
90
+ end
91
+ id = ad_ids[rand(ad_ids.length)]
92
+ end
93
+ def self.geo_city(city)
94
+ ad_ids = self.where("city_name = ? AND is_active = ?", city, true).map(&:id)
95
+ id = ad_ids[rand(ad_ids.length)]
96
+ end
97
+ def self.geo_state(state)
98
+ ad_ids = self.where("state_name = ? AND city_name = ? AND is_active = ?", state, nil, true).map(&:id)
99
+ id = ad_ids[rand(ad_ids.length)]
100
+ end
101
+ def self.geo_country(country)
102
+ ad_ids = self.where("country_name = ? AND state_name = ? AND city_name = ? AND is_active = ?", country, nil, nil, true).map(&:id)
103
+ id = ad_ids[rand(ad_ids.length)]
104
+ end
105
+ def self.backup_ad
106
+ ad_ids = self.where("backup = ?", true).map(&:id)
107
+ id = ad_ids[rand(ad_ids.length)]
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,5 @@
1
+ module RailsAdserver
2
+ class Click < ActiveRecord::Base
3
+ belongs_to :advertisement
4
+ end
5
+ end
@@ -0,0 +1,56 @@
1
+ module RailsAdserver
2
+ class AdvertisementUploader < CarrierWave::Uploader::Base
3
+
4
+ # Include RMagick or MiniMagick support:
5
+ # include CarrierWave::RMagick
6
+ # include CarrierWave::MiniMagick
7
+
8
+ # Choose what kind of storage to use for this uploader:
9
+ if RailsAdserver::Config.carrierwave_method == "Fog"
10
+ storage :fog
11
+ else
12
+ storage :file
13
+ end
14
+
15
+ # Override the directory where uploaded files will be stored.
16
+ # This is a sensible default for uploaders that are meant to be mounted:
17
+ def store_dir
18
+ "public/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
19
+ end
20
+ def extension_white_list
21
+ %w(jpg jpeg gif png)
22
+ end
23
+
24
+ def cache_dir
25
+ "#{Rails.root}/tmp/uploads"
26
+ end
27
+ # Provide a default URL as a default if there hasn't been a file uploaded:
28
+ # def default_url
29
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
30
+ # end
31
+
32
+ # Process files as they are uploaded:
33
+ # process :scale => [200, 300]
34
+ #
35
+ # def scale(width, height)
36
+ # # do something
37
+ # end
38
+
39
+ # Create different versions of your uploaded files:
40
+ # version :thumb do
41
+ # process :scale => [50, 50]
42
+ # end
43
+
44
+ # Add a white list of extensions which are allowed to be uploaded.
45
+ # For images you might use something like this:
46
+ # def extension_white_list
47
+ # %w(jpg jpeg gif png)
48
+ # end
49
+
50
+ # Override the filename of the uploaded files:
51
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
52
+ # def filename
53
+ # "something.jpg" if original_filename
54
+ # end
55
+ end
56
+ end