From 566f4890a2f6bd7a8936369fbe51468e2c2ee130 Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Tue, 7 Jun 2016 21:28:15 +0200 Subject: [PATCH] merge Federated::Shareable to Shareable also drop xml-code for Shareable --- app/models/photo.rb | 10 ++-- app/models/post.rb | 4 +- lib/diaspora/federated/shareable.rb | 48 --------------- lib/diaspora/shareable.rb | 93 +++++++++++++++++------------ spec/models/photo_spec.rb | 1 + spec/models/reshare_spec.rb | 4 ++ spec/models/status_message_spec.rb | 4 ++ 7 files changed, 70 insertions(+), 94 deletions(-) delete mode 100644 lib/diaspora/federated/shareable.rb diff --git a/app/models/photo.rb b/app/models/photo.rb index 261a91b42..ffcf42b64 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -3,7 +3,7 @@ # the COPYRIGHT file. class Photo < ActiveRecord::Base - include Diaspora::Federated::Shareable + include Diaspora::Federated::Base include Diaspora::Commentable include Diaspora::Shareable @@ -81,13 +81,11 @@ class Photo < ActiveRecord::Base end end - def self.diaspora_initialize(params = {}) - photo = shareable_initialize(params) + def self.diaspora_initialize(params={}) + photo = new(params.to_hash.stringify_keys.slice(*column_names, "author")) photo.random_string = SecureRandom.hex(10) - if photo.author.local? - photo.unprocessed_image.strip_exif = photo.author.owner.strip_exif - end + photo.unprocessed_image.strip_exif = photo.author.owner.strip_exif if params[:user_file] image_file = params.delete(:user_file) diff --git a/app/models/post.rb b/app/models/post.rb index c60d72fdd..552d6e9bf 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -7,7 +7,7 @@ class Post < ActiveRecord::Base include ApplicationHelper - include Diaspora::Federated::Shareable + include Diaspora::Federated::Base include Diaspora::Likeable include Diaspora::Commentable @@ -133,7 +133,7 @@ class Post < ActiveRecord::Base ############# def self.diaspora_initialize(params) - shareable_initialize(params) + new(params.to_hash.stringify_keys.slice(*column_names, "author")) end def activity_streams? diff --git a/lib/diaspora/federated/shareable.rb b/lib/diaspora/federated/shareable.rb deleted file mode 100644 index 87320de52..000000000 --- a/lib/diaspora/federated/shareable.rb +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) 2012, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -# this module attempts to be what you need to mix into -# base level federation objects that are not relayable, and not persistable -# assumes there is an author, author_id, id, -module Diaspora - module Federated - module Shareable - def self.included(model) - model.instance_eval do - # we are order dependant so you don't have to be! - include Diaspora::Federated::Base - include Diaspora::Federated::Shareable::InstanceMethods - include Diaspora::Guid - - xml_attr :diaspora_handle - xml_attr :public - xml_attr :created_at - end - end - - module InstanceMethods - include Diaspora::Logging - def diaspora_handle - author.diaspora_handle - end - - def diaspora_handle=(author_handle) - self.author = Person.where(diaspora_handle: author_handle).first - end - - # The list of people that should receive this Shareable. - # - # @return [Array] The list of subscribers to this shareable - def subscribers - user = author.owner - if public? - user.contact_people - else - user.people_in_aspects(user.aspects_with_shareable(self.class, id)) - end - end - end - end - end -end diff --git a/lib/diaspora/shareable.rb b/lib/diaspora/shareable.rb index b378017c1..a2df910b1 100644 --- a/lib/diaspora/shareable.rb +++ b/lib/diaspora/shareable.rb @@ -8,6 +8,8 @@ module Diaspora module Shareable def self.included(model) model.instance_eval do + include Diaspora::Guid + has_many :aspect_visibilities, as: :shareable, validate: false, dependent: :delete_all has_many :aspects, through: :aspect_visibilities @@ -15,6 +17,7 @@ module Diaspora belongs_to :author, class_name: "Person" + delegate :diaspora_handle, to: :author delegate :id, :name, :first_name, to: :author, prefix: true # scopes @@ -29,45 +32,8 @@ module Diaspora joins("LEFT OUTER JOIN aspect_visibilities ON aspect_visibilities.shareable_id = #{table_name}.id AND "\ " aspect_visibilities.shareable_type = '#{base_class}'") } - - def self.owned_or_visible_by_user(user) - with_visibility.where( - visible_by_user(user).or(arel_table[:public].eq(true) - .or(arel_table[:author_id].eq(user.person_id))) - ).select("DISTINCT #{table_name}.*") - end - - def self.from_person_visible_by_user(user, person) - return owned_by_user(user) if person == user.person - - with_visibility.where(author_id: person.id).where( - visible_by_user(user).or(arel_table[:public].eq(true)) - ).select("DISTINCT #{table_name}.*") - end - - def self.for_visible_shareable_sql(max_time, order, limit=15, types=Stream::Base::TYPES_OF_POST_IN_STREAM) - by_max_time(max_time, order).order(table_name + ".id DESC").where(type: types).limit(limit) - end - - def self.by_max_time(max_time, order="created_at") - where("#{table_name}.#{order} < ?", max_time).order("#{table_name}.#{order} DESC") - end - - def self.owned_by_user(user) - user.person.send(table_name).where(pending: false) - end - - def self.shareable_initialize(params) - new(params.to_hash.stringify_keys.slice(*column_names)).tap do |new_shareable| - new_shareable.author = params[:author] - end - end - - def self.visible_by_user(user) - ShareVisibility.arel_table[:user_id].eq(user.id) - end - private_class_method :visible_by_user end + model.extend Diaspora::Shareable::QueryMethods end def receive(recipient_user_ids) @@ -80,5 +46,56 @@ module Diaspora def update_reshares_counter self.class.where(id: id).update_all(reshares_count: reshares.count) end + + def diaspora_handle=(author_handle) + self.author = Person.where(diaspora_handle: author_handle).first + end + + # The list of people that should receive this Shareable. + # + # @return [Array] The list of subscribers to this shareable + def subscribers + user = author.owner + if public? + user.contact_people + else + user.people_in_aspects(user.aspects_with_shareable(self.class, id)) + end + end + + module QueryMethods + def owned_or_visible_by_user(user) + with_visibility.where( + visible_by_user(user).or(arel_table[:public].eq(true) + .or(arel_table[:author_id].eq(user.person_id))) + ).select("DISTINCT #{table_name}.*") + end + + def from_person_visible_by_user(user, person) + return owned_by_user(user) if person == user.person + + with_visibility.where(author_id: person.id).where( + visible_by_user(user).or(arel_table[:public].eq(true)) + ).select("DISTINCT #{table_name}.*") + end + + def for_visible_shareable_sql(max_time, order, limit=15, types=Stream::Base::TYPES_OF_POST_IN_STREAM) + by_max_time(max_time, order).order(table_name + ".id DESC").where(type: types).limit(limit) + end + + def by_max_time(max_time, order="created_at") + where("#{table_name}.#{order} < ?", max_time).order("#{table_name}.#{order} DESC") + end + + def owned_by_user(user) + user.person.public_send(table_name).where(pending: false) + end + + private + + def visible_by_user(user) + ShareVisibility.arel_table[:user_id].eq(user.id) + end + end end end diff --git a/spec/models/photo_spec.rb b/spec/models/photo_spec.rb index bc6d2a041..9cf828d28 100644 --- a/spec/models/photo_spec.rb +++ b/spec/models/photo_spec.rb @@ -187,6 +187,7 @@ describe Photo, :type => :model do describe 'serialization' do before do + skip # TODO @saved_photo = with_carrierwave_processing do @user.build_post(:photo, :user_file => File.open(@fixture_name), :to => @aspect.id) end diff --git a/spec/models/reshare_spec.rb b/spec/models/reshare_spec.rb index 04e7acd73..5ae09c220 100644 --- a/spec/models/reshare_spec.rb +++ b/spec/models/reshare_spec.rb @@ -98,6 +98,10 @@ describe Reshare, type: :model do let(:reshare) { build(:reshare) } let(:xml) { reshare.to_xml.to_s } + before do + skip # TODO + end + context "serialization" do it "serializes root_diaspora_id" do expect(xml).to include("root_diaspora_id") diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb index 613b21c1e..693d9d6e8 100644 --- a/spec/models/status_message_spec.rb +++ b/spec/models/status_message_spec.rb @@ -265,6 +265,10 @@ describe StatusMessage, type: :model do let(:xml) { message.to_xml.to_s } let(:marshalled) { StatusMessage.from_xml(xml) } + before do + skip # TODO + end + it "serializes the escaped, unprocessed message" do text = "[url](http://example.org)" message.text = text