* added organization policy + spec * user specs for is_org_admin? * added authroize to organization controller * admin policy + specs * deleted enforce admin due to pundit policy redundancy * applied admin policy to entire admin namespace * refactoring analytics controller WIP - wanna test codeship * Add protection against reactions to unpublished articles (#473) * Add chat channel policy and spec (#474) * Add comment policy and specs (#475) * Fix edge case with apostrophes * Add comment policy and specs * Add login for deleting comment spec * Change test to raise pundit error instead of 404 * Clean up comment destroy request specs * Remove redundant raise * Whitelist columns on to_json call (#477) * Add pundit policy for several controllers (#476) * Add pundit policy for several controllers * Adjust video spec * Fix tag request specs * Add proper twilio tokens request specs * Remove puts statements * Add a couple basic request specs (#478) * Add a few tests and fix user tag color bug (#482) * Refactor handle_tag_index in stories_controller (#481) * Modify valid_request_origin? (#483) * Add misc specs and remove banned attribute from user model (#484) * Fix missing Cloudinary tags and misc specs (#486) * removing current_user_is_admin? to use .is_admin? method * added missing org policy routes * Add comment for all public controllers * Fix edge case for test * Authorize mod controller and add specs * Refactor methods via inheritance and use only super_admin role * Create policy method for analytics via article_policy and refactor * Capitalize all buttons in dashboard page * Fix org tests and remove old admin test * Use only happy path for analytics * Fix tests to use Pundit error * Update org_policy spec
66 lines
No EOL
1.9 KiB
Ruby
66 lines
No EOL
1.9 KiB
Ruby
class NotificationsController < ApplicationController
|
|
before_action :create_enricher
|
|
|
|
def index
|
|
if user_signed_in?
|
|
@notifications_index = true
|
|
@user = if params[:username] && current_user.is_admin?
|
|
User.find_by_username(params[:username])
|
|
else
|
|
current_user
|
|
end
|
|
@activities = cached_activities
|
|
@last_user_reaction = @user.reactions.pluck(:id).last
|
|
@last_user_comment = @user.comments.pluck(:id).last
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def cached_activities
|
|
return feed_activities if Rails.env.development?
|
|
Rails.cache.fetch("notifications-fetch-#{@user.id}-#{@user.last_notification_activity}",
|
|
expires_in: 5.hours) do
|
|
feed_activities
|
|
end
|
|
end
|
|
|
|
def feed_activities
|
|
feed = StreamRails.feed_manager.get_notification_feed(@user.id)
|
|
results = feed.get(limit: 45)["results"]
|
|
@enricher.enrich_aggregated_activities(results)
|
|
end
|
|
|
|
def create_enricher
|
|
@enricher = StreamRails::Enrich.new
|
|
end
|
|
end
|
|
|
|
module StreamRails
|
|
class Enrich
|
|
def retrieve_objects(references)
|
|
Hash[references.map { |model, ids| [model, Hash[construct_query(model, ids).map { |i| [i.id.to_s, i] }]] }]
|
|
end
|
|
|
|
def construct_query(model, ids)
|
|
case model
|
|
when "User"
|
|
model.classify.constantize.where(id: ids.keys).select(:id, :name, :username, :profile_image)
|
|
when "Comment"
|
|
model.classify.constantize.where(id: ids.keys).
|
|
select(:id, :id_code, :user_id, :processed_html,
|
|
:commentable_id, :commentable_type,
|
|
:updated_at, :ancestry).
|
|
includes(:user, :commentable)
|
|
when "Reaction"
|
|
model.classify.constantize.where(id: ids.keys).
|
|
includes(reactable: :user)
|
|
when "Article"
|
|
model.classify.constantize.where(id: ids.keys).
|
|
select(:id, :title, :path, :user_id, :updated_at, :cached_tag_list)
|
|
else
|
|
model.classify.constantize.where(id: ids.keys)
|
|
end
|
|
end
|
|
end
|
|
end |