home page caching, reset top contributors only when necessary
This commit is contained in:
parent
8d20a68a53
commit
ca155314fa
7 changed files with 128 additions and 100 deletions
|
@ -29,9 +29,13 @@ class OutfitsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
@colors = Color.all_ordered_by_name
|
unless fragment_exist?(:action_suffix => 'start_from_scratch_form_content')
|
||||||
@species = Species.all_ordered_by_name
|
@colors = Color.all_ordered_by_name
|
||||||
@top_contributors = User.top_contributors.limit(3)
|
@species = Species.all_ordered_by_name
|
||||||
|
end
|
||||||
|
unless fragment_exist?(:action_suffix => 'top_contributors')
|
||||||
|
@top_contributors = User.top_contributors.limit(User::PreviewTopContributorsCount)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
class PetsController < ApplicationController
|
class PetsController < ApplicationController
|
||||||
rescue_from Pet::PetNotFound, :with => :pet_not_found
|
rescue_from Pet::PetNotFound, :with => :pet_not_found
|
||||||
|
|
||||||
|
cache_sweeper :user_sweeper
|
||||||
|
|
||||||
DESTINATIONS = {
|
DESTINATIONS = {
|
||||||
'needed_items' => '?',
|
'needed_items' => '?',
|
||||||
'root' => '#',
|
'root' => '#',
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
puts 'Hey! Item sweeper!'
|
|
||||||
|
|
||||||
class ItemSweeper < ActionController::Caching::Sweeper
|
class ItemSweeper < ActionController::Caching::Sweeper
|
||||||
observe Item
|
observe Item
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class User < ActiveRecord::Base
|
class User < ActiveRecord::Base
|
||||||
DefaultAuthServerId = 1
|
DefaultAuthServerId = 1
|
||||||
|
PreviewTopContributorsCount = 3
|
||||||
|
|
||||||
has_many :contributions
|
has_many :contributions
|
||||||
has_many :outfits
|
has_many :outfits
|
||||||
|
@ -37,4 +38,8 @@ class User < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.points_required_to_pass_top_contributor(offset)
|
||||||
|
User.top_contributors.select(:points).limit(1).offset(offset).first.points
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
12
app/models/user_sweeper.rb
Normal file
12
app/models/user_sweeper.rb
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
class UserSweeper < ActionController::Caching::Sweeper
|
||||||
|
observe User
|
||||||
|
|
||||||
|
def before_save(user)
|
||||||
|
if user.points_changed?
|
||||||
|
points_to_beat = User.points_required_to_pass_top_contributor(User::PreviewTopContributorsCount - 1)
|
||||||
|
if user.points >= points_to_beat
|
||||||
|
expire_fragment(:controller => 'outfits', :action => 'new', :action_suffix => 'top_contributors')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,104 +1,111 @@
|
||||||
- hide_home_link
|
- hide_home_link
|
||||||
#outfit-forms
|
#outfit-forms
|
||||||
#pet-preview
|
- cache :action_suffix => 'outfit_forms_intro' do
|
||||||
= image_tag 'default_preview.png', :alt => ''
|
#pet-preview
|
||||||
%span
|
= image_tag 'default_preview.png', :alt => ''
|
||||||
%h1 Dress to Impress
|
%span
|
||||||
%h2 Neopets wearables made easy!
|
%h1 Dress to Impress
|
||||||
|
%h2 Neopets wearables made easy!
|
||||||
= form_tag load_pet_path, :id => 'load-pet-to-wardrobe' do
|
= form_tag load_pet_path, :id => 'load-pet-to-wardrobe' do
|
||||||
= origin_tag root_path
|
- cache :action_suffix => 'main_load_pet_form_content' do
|
||||||
= destination_tag 'wardrobe'
|
= origin_tag root_path
|
||||||
%fieldset
|
= destination_tag 'wardrobe'
|
||||||
%legend Enter your pet's name
|
%fieldset
|
||||||
= pet_name_tag :id => 'main-pet-name'
|
%legend Enter your pet's name
|
||||||
%button{:type => "submit"}
|
= pet_name_tag :id => 'main-pet-name'
|
||||||
Plan my outfit!
|
%button{:type => "submit"}
|
||||||
|
Plan my outfit!
|
||||||
= form_tag wardrobe_path, :method => 'get', :id => 'start-from-scratch' do
|
= form_tag wardrobe_path, :method => 'get', :id => 'start-from-scratch' do
|
||||||
%fieldset
|
- cache :action_suffix => 'start_from_scratch_form_content' do
|
||||||
%legend Or start from scratch
|
%fieldset
|
||||||
= pet_attribute_select 'color', @colors, 8
|
%legend Or start from scratch
|
||||||
= pet_attribute_select 'species', @species
|
= pet_attribute_select 'color', @colors, 8
|
||||||
%input{:type => "submit", :value => "Go"}
|
= pet_attribute_select 'species', @species
|
||||||
%ul#sections
|
%input{:type => "submit", :value => "Go"}
|
||||||
%li
|
- cache :action_suffix => 'sections_and_description' do
|
||||||
%a{:href => "http://forum.openneo.net"}
|
%ul#sections
|
||||||
= image_tag 'forum.png'
|
%li
|
||||||
%h3
|
%a{:href => "http://forum.openneo.net"}
|
||||||
%a{:href => "http://forum.openneo.net/"} Forum
|
= image_tag 'forum.png'
|
||||||
%div
|
%h3
|
||||||
%h4 Join our community!
|
%a{:href => "http://forum.openneo.net/"} Forum
|
||||||
%p
|
%div
|
||||||
Show off your designs, ask for advice, or play silly forum games
|
%h4 Join our community!
|
||||||
here.
|
%p
|
||||||
%li
|
Show off your designs, ask for advice, or play silly forum games
|
||||||
%a{:href => items_path}
|
here.
|
||||||
= image_tag 'items.png'
|
%li
|
||||||
%h3
|
|
||||||
%a{:href => items_path}
|
%a{:href => items_path}
|
||||||
Infinite Closet
|
= image_tag 'items.png'
|
||||||
%div
|
%h3
|
||||||
%h4 Looking for something?
|
%a{:href => items_path}
|
||||||
%p
|
Infinite Closet
|
||||||
Take a look through our wearables database!
|
%div
|
||||||
= form_tag items_path, :method => 'get' do
|
%h4 Looking for something?
|
||||||
= text_field_tag 'q', '', :placeholder => raw('search items…'), :type => 'search'
|
%p
|
||||||
= submit_tag 'search'
|
Take a look through our wearables database!
|
||||||
%li#blog-preview
|
= form_tag items_path, :method => 'get' do
|
||||||
%a{:href => "http://blog.openneo.net"}
|
= text_field_tag 'q', '', :placeholder => raw('search items…'), :type => 'search'
|
||||||
= image_tag 'blog.png'
|
= submit_tag 'search'
|
||||||
%h3
|
%li#blog-preview
|
||||||
%a{:href => "http://blog.openneo.net/"} OpenNeo Blog
|
%a{:href => "http://blog.openneo.net"}
|
||||||
%div
|
= image_tag 'blog.png'
|
||||||
%h4 We'll keep you posted!
|
%h3
|
||||||
%p
|
%a{:href => "http://blog.openneo.net/"} OpenNeo Blog
|
||||||
Dress to Impress is always improving, and you can always stay in
|
%div
|
||||||
the loop through our blog.
|
%h4 We'll keep you posted!
|
||||||
#description
|
%p
|
||||||
%h2 Built by you, just for you!
|
Dress to Impress is always improving, and you can always stay in
|
||||||
%p
|
the loop through our blog.
|
||||||
Dress to Impress lets you plan how you want to dress up your Neopets,
|
#description
|
||||||
before you even go shopping! Whenever you give us a Neopet's name, we
|
%h2 Built by you, just for you!
|
||||||
automatically look up what it's wearing and organize the data into
|
%p
|
||||||
our own wearables database — a community closet, if you will.
|
Dress to Impress lets you plan how you want to dress up your Neopets,
|
||||||
Then you can plan your outfit, mixing and matching various items, so
|
before you even go shopping! Whenever you give us a Neopet's name, we
|
||||||
you can have the best-dressed Neopet in all of Neopia!
|
automatically look up what it's wearing and organize the data into
|
||||||
%p
|
our own wearables database — a community closet, if you will.
|
||||||
To make all this possible, though, we need your help — and if
|
Then you can plan your outfit, mixing and matching various items, so
|
||||||
you log in at the top, we'll keep track of your
|
you can have the best-dressed Neopet in all of Neopia!
|
||||||
= link_to 'contributions', contributions_path
|
%p
|
||||||
and award
|
To make all this possible, though, we need your help — and if
|
||||||
= link_to 'points', top_contributors_path
|
you log in at the top, we'll keep track of your
|
||||||
so you can show off just how dedicated you really are!
|
= link_to 'contributions', contributions_path
|
||||||
#top-contributors
|
and award
|
||||||
%h3 Top Contributors
|
= link_to 'points', top_contributors_path
|
||||||
%ol
|
so you can show off just how dedicated you really are!
|
||||||
- @top_contributors.each do |user|
|
- cache :action_suffix => 'top_contributors' do
|
||||||
%li
|
#top-contributors
|
||||||
= link_to user.name, user_contributions_path(user)
|
%h3 Top Contributors
|
||||||
—
|
%ol
|
||||||
= user.points
|
- @top_contributors.each do |user|
|
||||||
%a{:href => top_contributors_path} see more
|
%li
|
||||||
|
= link_to user.name, user_contributions_path(user)
|
||||||
|
—
|
||||||
|
= user.points
|
||||||
|
%a{:href => top_contributors_path} see more
|
||||||
= form_tag load_pet_path, :id => 'how-can-i-help' do
|
= form_tag load_pet_path, :id => 'how-can-i-help' do
|
||||||
= destination_tag 'needed_items'
|
- cache :action_suffix => 'how_can_i_help_form_content' do
|
||||||
= origin_tag root_path
|
= destination_tag 'needed_items'
|
||||||
%h2 How can I help?
|
= origin_tag root_path
|
||||||
%p
|
%h2 How can I help?
|
||||||
Enter your pet's name, and we'll tell you what items you can help us
|
%p
|
||||||
model. Thanks so much!
|
Enter your pet's name, and we'll tell you what items you can help us
|
||||||
= pet_name_tag
|
model. Thanks so much!
|
||||||
%button{:type => "submit"}
|
= pet_name_tag
|
||||||
Let's model!
|
%button{:type => "submit"}
|
||||||
|
Let's model!
|
||||||
= form_tag load_pet_path, :id => 'i-found-something' do
|
= form_tag load_pet_path, :id => 'i-found-something' do
|
||||||
= origin_tag root_path
|
- cache :action_suffix => 'i_found_something_form_content' do
|
||||||
%a{:href => bulk_pets_path}
|
= origin_tag root_path
|
||||||
add many pets
|
%a{:href => bulk_pets_path}
|
||||||
%h2 I found something!
|
add many pets
|
||||||
%p
|
%h2 I found something!
|
||||||
Enter the name of the pet you found, and we'll keep a copy of what
|
%p
|
||||||
it's wearing. Thanks so much!
|
Enter the name of the pet you found, and we'll keep a copy of what
|
||||||
= pet_name_tag
|
it's wearing. Thanks so much!
|
||||||
%button{:type => "submit"}
|
= pet_name_tag
|
||||||
I pwn!
|
%button{:type => "submit"}
|
||||||
|
I pwn!
|
||||||
- content_for :javascripts do
|
- content_for :javascripts do
|
||||||
= include_javascript_libraries :jquery
|
= include_javascript_libraries :jquery
|
||||||
= include_javascripts :new_outfit_package
|
= include_javascripts :new_outfit_package
|
||||||
|
|
|
@ -20,7 +20,7 @@ module OpenneoImpressItems
|
||||||
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
||||||
|
|
||||||
# Activate observers that should always be running
|
# Activate observers that should always be running
|
||||||
config.active_record.observers = :item_sweeper
|
config.active_record.observers = :item_sweeper, :user_sweeper
|
||||||
|
|
||||||
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
||||||
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||||
|
|
Loading…
Reference in a new issue