Skip to content

Instantly share code, notes, and snippets.

@jonstorer
Created May 17, 2013 18:00
Show Gist options
  • Save jonstorer/5600782 to your computer and use it in GitHub Desktop.
Save jonstorer/5600782 to your computer and use it in GitHub Desktop.
ehh?
def brand_actions_summary
targeted_brand_actions = targetable_actions
new_brand_actions_by_brand_id = targeted_brand_actions.group_by(&:brand_id)
active_participations = participations.where({
:stage.nin => Participation::Base::NON_ACTIVE_STAGES + Participation::LEGACY_NON_ACTIVE_STAGES
})
active_participations_by_brand_id = {}
expiring_brand_actions_by_brand_id = {}
in_progress_brand_actions_by_brand_id = {}
active_participations.each do |participation|
active_participations_by_brand_id[particpation.brand_id] ||= []
active_participations_by_brand_id[particpation.brand_id] << participation
if participation.responds_to?(:brand_action_expires_at)
if participation.brand_action_expires_at <= Game.int_var(:member_expiring_threshold).days.from_now
expiring_brand_actions_by_brand_id[participation.brand_id] ||= []
expiring_brand_actions_by_brand_id[participation.brand_id] << participation
else
in_progress_brand_actions_by_brand_id[participation.brand_id] ||= []
in_progress_brand_actions_by_brand_id[participation.brand_id] << participation
end
end
end
participated_actions_count_by_brand_id = Hash[
crowd_members.
only(:brand_id, :participated_brand_actions_count).
where(:participated_brand_actions_count.gt => 0).
map{|cm| [cm.brand_id, cm.participated_brand_actions_count]}
]
brands = Brand.where(:id.in => (new_brand_actions_by_brand_id.keys + participated_actions_count_by_brand_id.keys).uniq)
self.class.trace_execution_scoped(['Custom/Member_Brand_Summary/HashBuild']) do
brands.map do |brand|
new_count = new_brand_actions_by_brand_id[ brand.id ].try(:count).to_i
expiring_count = expiring_brand_actions_by_brand_id[ brand.id ].try(:count).to_i
active_count = active_participations_by_brand_id[ brand.id ].try(:count).to_i
in_progress_count = in_progress_brand_actions_by_brand_id[ brand.id ].try(:count).to_i
crowd_participant = participated_actions_count_by_brand_id[ brand.id ].present?
{
:brand => brand,
:crowd_participant => crowd_participant,
:actions_new => new_count,
:actions_expiring => expiring_count,
:actions_in_progress => in_progress_count,
:actions_count => new_count + active_count
}
end
end.sort do |x,y|
y[:actions_new] <=> x[:actions_new]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment