diff --git a/app/models/comment.rb b/app/models/comment.rb index ec90553aa..1bb72af7e 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -26,8 +26,7 @@ class Comment < ActiveRecord::Base scope :with_visible_author, -> { joins(:user).where("users.hidden_at IS NULL") } scope :not_as_admin_or_moderator, -> { where("administrator_id IS NULL").where("moderator_id IS NULL")} scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } - - def self.public_for_api + scope :public_for_api, -> do joins("FULL OUTER JOIN debates ON commentable_type = 'Debate' AND commentable_id = debates.id"). joins("FULL OUTER JOIN proposals ON commentable_type = 'Proposal' AND commentable_id = proposals.id"). where("commentable_type = 'Proposal' AND proposals.hidden_at IS NULL OR commentable_type = 'Debate' AND debates.hidden_at IS NULL") diff --git a/app/models/debate.rb b/app/models/debate.rb index 8254bdc10..95940b3c3 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -39,6 +39,7 @@ class Debate < ActiveRecord::Base scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } scope :last_week, -> { where("created_at >= ?", 7.days.ago)} scope :featured, -> { where("featured_at is not null")} + scope :public_for_api, -> { all } # Ahoy setup visitable # Ahoy will automatically assign visit_id on create diff --git a/app/models/geozone.rb b/app/models/geozone.rb index 9ef4065ef..ad0fe9cd5 100644 --- a/app/models/geozone.rb +++ b/app/models/geozone.rb @@ -8,6 +8,8 @@ class Geozone < ActiveRecord::Base has_many :users validates :name, presence: true + scope :public_for_api, -> { all } + def self.names Geozone.pluck(:name) end diff --git a/app/models/proposal.rb b/app/models/proposal.rb index 9ed84f9d9..f37dff3d5 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -53,6 +53,7 @@ class Proposal < ActiveRecord::Base scope :retired, -> { where.not(retired_at: nil) } scope :not_retired, -> { where(retired_at: nil) } scope :successful, -> { where("cached_votes_up >= ?", Proposal.votes_needed_for_success) } + scope :public_for_api, -> { all } def to_param "#{id}-#{title}".parameterize diff --git a/app/models/proposal_notification.rb b/app/models/proposal_notification.rb index 7faa0fec1..25ae40883 100644 --- a/app/models/proposal_notification.rb +++ b/app/models/proposal_notification.rb @@ -10,9 +10,7 @@ class ProposalNotification < ActiveRecord::Base validates :proposal, presence: true validate :minimum_interval - def self.public_for_api - joins(:proposal).where("proposals.hidden_at IS NULL") - end + scope :public_for_api, -> { joins(:proposal).where("proposals.hidden_at IS NULL") } def minimum_interval return true if proposal.try(:notifications).blank? diff --git a/app/models/user.rb b/app/models/user.rb index f5a6586fd..fc34490a7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -59,6 +59,7 @@ class User < ActiveRecord::Base scope :email_digest, -> { where(email_digest: true) } scope :active, -> { where(erased_at: nil) } scope :erased, -> { where.not(erased_at: nil) } + scope :public_for_api, -> { all } before_validation :clean_document_number @@ -287,15 +288,15 @@ class User < ActiveRecord::Base delegate :can?, :cannot?, to: :ability def public_proposals - public_activity? ? proposals : [] + public_activity? ? proposals : User.none end def public_debates - public_activity? ? debates : [] + public_activity? ? debates : User.none end def public_comments - public_activity? ? comments : [] + public_activity? ? comments : User.none end private diff --git a/app/models/vote.rb b/app/models/vote.rb index 49cc4cd86..b390a733a 100644 --- a/app/models/vote.rb +++ b/app/models/vote.rb @@ -2,7 +2,7 @@ class Vote < ActsAsVotable::Vote include Graphqlable - def self.public_for_api + scope :public_for_api, -> do joins("FULL OUTER JOIN debates ON votable_type = 'Debate' AND votable_id = debates.id"). joins("FULL OUTER JOIN proposals ON votable_type = 'Proposal' AND votable_id = proposals.id"). joins("FULL OUTER JOIN comments ON votable_type = 'Comment' AND votable_id = comments.id"). @@ -16,4 +16,5 @@ class Vote < ActsAsVotable::Vote ) \ )") end + end diff --git a/config/initializers/active_record_extensions.rb b/config/initializers/active_record_extensions.rb deleted file mode 100644 index 57659f192..000000000 --- a/config/initializers/active_record_extensions.rb +++ /dev/null @@ -1 +0,0 @@ -require 'active_record_extensions' diff --git a/config/initializers/acts_as_taggable_on.rb b/config/initializers/acts_as_taggable_on.rb index 68dad364e..98cef9a0f 100644 --- a/config/initializers/acts_as_taggable_on.rb +++ b/config/initializers/acts_as_taggable_on.rb @@ -44,7 +44,7 @@ module ActsAsTaggableOn ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings).order(:name).uniq end - def self.public_for_api + scope :public_for_api, -> do find_by_sql(%| SELECT * FROM tags diff --git a/lib/active_record_extensions.rb b/lib/active_record_extensions.rb deleted file mode 100644 index 1dd9add87..000000000 --- a/lib/active_record_extensions.rb +++ /dev/null @@ -1,12 +0,0 @@ -module PublicForApi - - extend ActiveSupport::Concern - - class_methods do - def public_for_api - all - end - end -end - -ActiveRecord::Base.send(:include, PublicForApi) diff --git a/lib/graph_ql/api_types_creator.rb b/lib/graph_ql/api_types_creator.rb index 4e548748c..f8f78355e 100644 --- a/lib/graph_ql/api_types_creator.rb +++ b/lib/graph_ql/api_types_creator.rb @@ -50,7 +50,7 @@ module GraphQL when :multiple_association field_type = field_type.first connection(field_name, -> { created_types[field_type].connection_type }, max_page_size: 50, complexity: 1000) do - resolve -> (object, arguments, context) { field_type.public_for_api & object.send(field_name) } + resolve -> (object, arguments, context) { object.send(field_name).public_for_api } end end end