From c51245ad4518bd912bd0122def502f9f4c190704 Mon Sep 17 00:00:00 2001 From: Joenio Costa Date: Tue, 24 May 2011 16:20:46 -0300 Subject: [PATCH] Improving performance of helper method to populate calendar --- app/helpers/events_helper.rb | 5 ++--- db/migrate/20110524151137_remove_public_article_from_article_versions.rb | 10 ++++++++++ db/schema.rb | 3 +-- test/unit/events_helper_test.rb | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20110524151137_remove_public_article_from_article_versions.rb diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 530f966..2cef85d 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -21,14 +21,13 @@ module EventsHelper end def populate_calendar(selected_date, events) + events.reject! {|event| !event.display_to?(user)} calendar = Event.date_range(selected_date.year, selected_date.month).map do |date| [ # the day itself date, # is there any events in this date? - events.select {|event| event.display_to?(user)}.any? do |event| - event.date_range.include?(date) - end, + events.any? {|event| event.date_range.include?(date)}, # is this date in the current month? true ] diff --git a/db/migrate/20110524151137_remove_public_article_from_article_versions.rb b/db/migrate/20110524151137_remove_public_article_from_article_versions.rb new file mode 100644 index 0000000..660f9cd --- /dev/null +++ b/db/migrate/20110524151137_remove_public_article_from_article_versions.rb @@ -0,0 +1,10 @@ +class RemovePublicArticleFromArticleVersions < ActiveRecord::Migration + def self.up + remove_column :article_versions, :public_article + end + + def self.down + add_column :article_versions, :public_article, :boolean, :default => true + execute('update article_versions set public_article = (1>0)') + end +end diff --git a/db/schema.rb b/db/schema.rb index 3ac08bd..51c78fc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -9,7 +9,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20110520150544) do +ActiveRecord::Schema.define(:version => 20110524151137) do create_table "action_tracker", :force => true do |t| t.integer "user_id" @@ -60,7 +60,6 @@ ActiveRecord::Schema.define(:version => 20110520150544) do t.date "start_date" t.date "end_date" t.integer "children_count", :default => 0 - t.boolean "public_article", :default => true t.boolean "accept_comments", :default => true t.integer "reference_article_id" t.text "setting" diff --git a/test/unit/events_helper_test.rb b/test/unit/events_helper_test.rb index 73e75d9..d2661fc 100644 --- a/test/unit/events_helper_test.rb +++ b/test/unit/events_helper_test.rb @@ -15,6 +15,69 @@ class EventsHelperTest < Test::Unit::TestCase assert_match /Event 2/, result end + should 'populate calendar with links on days that have events' do + user = create_user('userwithevents').person + stubs(:user).returns(user) + event = fast_create(Event, :profile_id => user.id) + date = event.start_date + calendar = populate_calendar(date, Environment.default.events) + assert_includes calendar, [date, true, true] + end + + should 'hide private events from guests' do + user = create_user('userwithevents').person + stubs(:user).returns(nil) + event = fast_create(Event, :profile_id => user.id, :published => false) + date = event.start_date + calendar = populate_calendar(date, Environment.default.events) + assert_includes calendar, [date, false, true] + end + + should 'hide events from invisible profiles from guests' do + user = create_user('usernonvisible', {}, {:visible => false}).person + stubs(:user).returns(nil) + event = fast_create(Event, :profile_id => user.id) + date = event.start_date + calendar = populate_calendar(date, Environment.default.events) + assert_includes calendar, [date, false, true] + end + + should 'hide events from private profiles from guests' do + user = create_user('usernonvisible', {}, {:visible => false}).person + stubs(:user).returns(nil) + event = fast_create(Event, :profile_id => user.id) + date = event.start_date + calendar = populate_calendar(date, Environment.default.events) + assert_includes calendar, [date, false, true] + end + + should 'show private events to owner' do + user = create_user('userwithevents').person + stubs(:user).returns(user) + event = fast_create(Event, :profile_id => user.id, :published => false) + date = event.start_date + calendar = populate_calendar(date, Environment.default.events) + assert_includes calendar, [date, true, true] + end + + should 'show events from invisible profiles to owner' do + user = create_user('usernonvisible', {}, {:visible => false}).person + stubs(:user).returns(user) + event = fast_create(Event, :profile_id => user.id) + date = event.start_date + calendar = populate_calendar(date, Environment.default.events) + assert_includes calendar, [date, true, true] + end + + should 'show events from private profiles to owner' do + user = create_user('usernonvisible', {}, {:visible => false}).person + stubs(:user).returns(user) + event = fast_create(Event, :profile_id => user.id) + date = event.start_date + calendar = populate_calendar(date, Environment.default.events) + assert_includes calendar, [date, true, true] + end + protected def content_tag(tag, text, options = {}) -- libgit2 0.21.2