diff --git a/app/models/actor.rb b/app/models/actor.rb index fa2d873a..4f254eed 100644 --- a/app/models/actor.rb +++ b/app/models/actor.rb @@ -257,7 +257,7 @@ def ties_to(a) def ties_to!(a) ties_to(a).present? ? ties_to(a) : - Array(sent_ties.create!(:receiver => a, + Array(sent_ties.create!(:receiver => Actor.normalize(a), :relation => relation_public)) end @@ -313,17 +313,17 @@ def active_ties @active_ties ||= {} end - # This {Actor} #allow s subject to create activities and subject has at least one tie to subject - def activity_ties_for(subject) + # subject must {#allow} this {Actor} to create activities in one of the ties to him + def activity_ties_to(subject) active_ties[subject] ||= - ( allow?(subject, 'create', 'activity') ? - subject.ties_to!(self) : + ( subject.allow?(self, 'create', 'activity') ? + ties_to!(subject) : [] ) end # Builds a hash of options their spheres as keys - def grouped_activity_ties_for(subject) - ties = activity_ties_for(subject) + def grouped_activity_ties_to(subject) + ties = activity_ties_to(subject) spheres = ties.map{ |t| t.relation.respond_to?(:sphere) ? t.relation.sphere : I18n.t('relation_public.name') }.uniq @@ -353,8 +353,8 @@ def grouped_activity_ties_for(subject) end # Is there any {Tie} for subject to create an activity to this {Actor} ? - def activity_ties_for?(subject) - activity_ties_for(subject).any? + def activity_ties_to?(subject) + activity_ties_to(subject).any? end def pending_ties diff --git a/app/views/activities/_new.html.erb b/app/views/activities/_new.html.erb index ed0cc63d..63a0be2c 100644 --- a/app/views/activities/_new.html.erb +++ b/app/views/activities/_new.html.erb @@ -1,4 +1,4 @@ -<% if receiver.activity_ties_for?(current_subject) %> +<% if user_signed_in? && current_subject.activity_ties_to?(receiver) %> <% content_for :javascript do %> securityImage = "<%= escape_javascript(image_tag('btn/btn_security.png', :id => 'security_image', :alt => 'security')) %>"; @@ -11,15 +11,15 @@
<%= form_for Post.new(:text => t('activity.input'), - :_activity_tie_id => receiver.activity_ties_for(current_subject).first.id), + :_activity_tie_id => current_subject.activity_ties_to(receiver).first.id), :remote => true do |f| %> <%= f.text_field :text, :id => "input_activities", :size => 85 %>
- <% if receiver.activity_ties_for(current_subject).count > 1 %> + <% if current_subject.activity_ties_to(receiver).count > 1 %>
<%= f.select :_activity_tie_id, - grouped_options_for_select(receiver.grouped_activity_ties_for(current_subject)), + grouped_options_for_select(current_subject.grouped_activity_ties_to(receiver)), {}, :id => 'security' %>
<% else %> diff --git a/app/views/activities/_options.html.erb b/app/views/activities/_options.html.erb index 8377e44b..4c9fcee6 100644 --- a/app/views/activities/_options.html.erb +++ b/app/views/activities/_options.html.erb @@ -1,7 +1,7 @@
  • <%= t('time.ago', :time => time_ago_in_words(activity.created_at)) %>
  • - <% if activity.is_root? && activity.receiver.activity_ties_for?(current_subject) %> + <% if activity.is_root? && current_subject.activity_ties_to?(activity.receiver) %>
  • · <%= link_to t('activity.to_comment'), "#", :class => "to_comment" %>
  • <% end %>
  • · <%= link_like(activity)%>
  • diff --git a/app/views/comments/_new.html.erb b/app/views/comments/_new.html.erb index 2899484a..fa3dc647 100644 --- a/app/views/comments/_new.html.erb +++ b/app/views/comments/_new.html.erb @@ -1,8 +1,8 @@ -<% if activity.receiver.activity_ties_for?(current_subject) %> +<% if user_signed_in? && current_subject.activity_ties_to?(activity.receiver) %>
    <%= form_for Comment.new(:text => t('comment.input'), :_activity_tie_id => - activity.receiver.activity_ties_for(current_subject).first.id, + current_subject.activity_ties_to(activity.receiver).first.id, :_activity_parent_id => activity.id ), :html => { :class => "new_comment", :id => "new_comment"+dom_id(activity) }, @@ -16,4 +16,4 @@
    <% end %>
-<% end %> \ No newline at end of file +<% end %> diff --git a/spec/controllers/posts_controller_spec.rb b/spec/controllers/posts_controller_spec.rb index 7f8e06d8..15060cce 100644 --- a/spec/controllers/posts_controller_spec.rb +++ b/spec/controllers/posts_controller_spec.rb @@ -53,7 +53,7 @@ before do friend = Factory(:friend, :receiver => @user.actor).sender - model_assigned_to friend.activity_ties_for(@user).first + model_assigned_to @user.activity_ties_to(friend).first end it_should_behave_like "Allow Creating" @@ -76,7 +76,7 @@ describe "with public relation" do before do - tie = @group.activity_ties_for(@user).first + tie = @user.activity_ties_to(@group).first model_assigned_to tie @current_model = Factory(:post, :_activity_tie_id => tie) end diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 7d465979..abe0bd25 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -46,12 +46,22 @@ assert_response :success end - it "should render self page" do + it "should render other's page" do get :show, :id => Factory(:user).to_param assert_response :success end + it "should render other's page with activity" do + tie = Factory(:friend, :receiver => @user.actor) + friend = tie.sender + Factory(:post, :_activity_tie_id => @user.activity_ties_to(friend).first) + + get :show, :id => friend.to_param + + response.should be_success + end + it "should render edit page" do pending "Account section" get :edit, :id => @user.to_param