muck-activities 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
- data/VERSION +1 -1
- data/app/controllers/muck/activities_controller.rb +12 -6
- data/app/helpers/muck_activity_helper.rb +21 -6
- data/app/views/activities/_comment.html.erb +4 -4
- data/app/views/activities/_current_status.html.erb +1 -1
- data/app/views/activity_templates/_generic.html.erb +4 -2
- data/app/views/activity_templates/_status_update.html.erb +3 -1
- data/db/migrate/20090730044139_add_comment_cache.rb +9 -0
- data/lib/active_record/acts/muck_activity.rb +2 -2
- data/lib/muck_activities/muck_activity_sources.rb +15 -0
- data/locales/en.yml +0 -1
- data/muck-activities.gemspec +16 -3
- data/test/rails_root/Rakefile +2 -1
- data/test/rails_root/app/models/share.rb +3 -0
- data/test/rails_root/app/models/user.rb +1 -0
- data/test/rails_root/config/database.yml +4 -1
- data/test/rails_root/config/environment.rb +1 -0
- data/test/rails_root/config/environments/cucumber.rb +21 -0
- data/test/rails_root/db/migrate/20090730044139_add_comment_cache.rb +9 -0
- data/test/rails_root/db/migrate/20090803185323_create_shares.rb +16 -0
- data/test/rails_root/db/schema.rb +13 -1
- data/test/rails_root/features/step_definitions/webrat_steps.rb +53 -23
- data/test/rails_root/features/support/env.rb +14 -3
- data/test/rails_root/features/support/paths.rb +27 -0
- data/test/rails_root/lib/tasks/cucumber.rake +20 -0
- data/test/rails_root/script/cucumber +2 -1
- data/test/rails_root/test/factories.rb +15 -1
- data/test/rails_root/test/functional/activities_controller_test.rb +17 -1
- data/test/rails_root/test/unit/activity_test.rb +26 -0
- data/test/rails_root/test/unit/share_test.rb +19 -0
- metadata +16 -3
- data/app/views/activities/_delete.html.erb +0 -11
data/.gitignore
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.17
|
@@ -4,18 +4,18 @@ class Muck::ActivitiesController < ApplicationController
|
|
4
4
|
include ApplicationHelper
|
5
5
|
include MuckActivityHelper
|
6
6
|
|
7
|
-
before_filter :login_required
|
7
|
+
before_filter :login_required, :except => :index
|
8
8
|
before_filter :find_parent, :only => [:index, :create]
|
9
9
|
before_filter :get_activity, :only => [:destroy, :comment_html]
|
10
10
|
|
11
11
|
def index
|
12
12
|
if @parent.can_view?(current_user)
|
13
13
|
@activities = get_activities(@parent)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
else
|
15
|
+
@activities = get_profile_activities(@parent) # only items for the profile
|
16
|
+
end
|
17
|
+
respond_to do |format|
|
18
|
+
format.js { render :text => get_activities_html(@activities) }
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -128,6 +128,12 @@ class Muck::ActivitiesController < ApplicationController
|
|
128
128
|
|
129
129
|
protected
|
130
130
|
|
131
|
+
def get_activities_html(activities)
|
132
|
+
render_as_html do
|
133
|
+
render_to_string(:partial => "activities/cached_activities", :locals => {:activities => @activities})
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
131
137
|
def get_status_html(activity)
|
132
138
|
render_as_html do
|
133
139
|
render_to_string(:partial => 'activities/current_status', :locals => {:activities_object => activity})
|
@@ -6,7 +6,7 @@ module MuckActivityHelper
|
|
6
6
|
|
7
7
|
def activity_comment_link(activity, comment = nil)
|
8
8
|
if GlobalConfig.enable_activity_comments
|
9
|
-
comment_form(activity, comment
|
9
|
+
comment_form(activity, comment)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -20,7 +20,7 @@ module MuckActivityHelper
|
|
20
20
|
|
21
21
|
# Renders an activity with only activities created by activities_object
|
22
22
|
def limited_activity_feed_for(activities_object)
|
23
|
-
activities = activities_object.activities.created_by(activities_object).find(:all, :include => ['comments']).paginate(:page => @page, :per_page => @per_page)
|
23
|
+
activities = activities_object.activities.created_by(activities_object).only_public.find(:all, :include => ['comments']).paginate(:page => @page, :per_page => @per_page)
|
24
24
|
render :partial => 'activities/activity_feed', :locals => { :activities_object => activities_object, :activities => activities }
|
25
25
|
end
|
26
26
|
|
@@ -42,7 +42,7 @@ module MuckActivityHelper
|
|
42
42
|
|
43
43
|
# Renders a delete button for an activity
|
44
44
|
def delete_activity(activity, button_type = :button, button_text = t("muck.activities.clear"))
|
45
|
-
render :partial => '
|
45
|
+
render :partial => 'shared/delete', :locals => { :delete_object => activity,
|
46
46
|
:button_type => button_type,
|
47
47
|
:button_text => button_text,
|
48
48
|
:form_class => 'activity-delete',
|
@@ -50,8 +50,8 @@ module MuckActivityHelper
|
|
50
50
|
end
|
51
51
|
|
52
52
|
# Renders a delete button for a comment inside an activity feed
|
53
|
-
def
|
54
|
-
render :partial => '
|
53
|
+
def delete_activity_comment(comment, button_type = :button, button_text = t("muck.activities.delete"))
|
54
|
+
render :partial => 'shared/delete', :locals => { :delete_object => comment,
|
55
55
|
:button_type => button_type,
|
56
56
|
:button_text => button_text,
|
57
57
|
:form_class => 'comment-delete',
|
@@ -83,6 +83,14 @@ module MuckActivityHelper
|
|
83
83
|
request.url.gsub(request.query_string, '')
|
84
84
|
end
|
85
85
|
|
86
|
+
def get_profile_activities(activities_object)
|
87
|
+
if !params[:latest_activity_id].blank?
|
88
|
+
activities_object.activities.filter_by_template(params[:activity_filter]).after(params[:latest_activity_id]).only_public.created_by(activities_object).find(:all, :include => ['comments']).paginate(:page => @page, :per_page => @per_page)
|
89
|
+
else
|
90
|
+
activities_object.activities.filter_by_template(params[:activity_filter]).only_public.created_by(activities_object).find(:all, :include => ['comments']).paginate(:page => @page, :per_page => @per_page)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
86
94
|
def get_activities(activities_object)
|
87
95
|
if !params[:latest_activity_id].blank?
|
88
96
|
activities_object.activities.filter_by_template(params[:activity_filter]).after(params[:latest_activity_id]).find(:all, :include => ['comments']).paginate(:page => @page, :per_page => @per_page)
|
@@ -90,5 +98,12 @@ module MuckActivityHelper
|
|
90
98
|
activities_object.activities.filter_by_template(params[:activity_filter]).find(:all, :include => ['comments']).paginate(:page => @page, :per_page => @per_page)
|
91
99
|
end
|
92
100
|
end
|
93
|
-
|
101
|
+
|
102
|
+
# Render an activity using a block and the given activity.
|
103
|
+
# options:
|
104
|
+
# activity_css_class - css class to attach to the given activity
|
105
|
+
def activity_for(activity, options = {}, &block)
|
106
|
+
block_to_partial('activity_templates/generic', options.merge(:activity => activity), &block)
|
107
|
+
end
|
108
|
+
|
94
109
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div id="<%= comment.dom_id %>" class="activity-comment delete-container">
|
2
|
-
<div class="actor-icon"><%= icon
|
3
|
-
<%=
|
4
|
-
<p><span class="actor"><%= link_to
|
5
|
-
<span class="activity-time"><%= t("muck.
|
2
|
+
<div class="actor-icon"><%= icon(comment.user) %></div>
|
3
|
+
<%= delete_activity_comment(comment, :image) if comment.can_edit?(current_user) %>
|
4
|
+
<p><span class="actor"><%= link_to comment.user.display_name, comment.user %></span>
|
5
|
+
<span class="activity-time"><%= t("muck.general.time_ago", :time_in_words => time_ago_in_words(comment_owner.created_at)) %></span></p>
|
6
6
|
<p><%= h comment.body %></p>
|
7
7
|
</div>
|
@@ -6,7 +6,7 @@ else
|
|
6
6
|
time = false
|
7
7
|
end -%>
|
8
8
|
<p id="current-status-text"><span id="current-status-name"><%= activities_object.display_name %></span> <%= status %></p>
|
9
|
-
<span id="status-time" class="status-time"><%= t('muck.
|
9
|
+
<span id="status-time" class="status-time"><%= t('muck.general.time_ago', :time_in_words => time_ago_in_words(time)) if time %></span>
|
10
10
|
<span id="status-clear">
|
11
11
|
<% if activities_object.status -%>
|
12
12
|
- <%= delete_activity(activities_object.status, :text, t("muck.activities.clear")) %>
|
@@ -1,9 +1,11 @@
|
|
1
1
|
<div class="activity <%= activity_css_class %> delete-container" id="<%= activity.dom_id %>">
|
2
2
|
<div class="actor-icon"><%= icon activity.source %></div>
|
3
3
|
<div class="activity-content">
|
4
|
-
<p><span class="actor"><%= link_to activity.source.display_name, activity.source %></span>
|
4
|
+
<p><span class="actor"><%= link_to activity.source.display_name, activity.source %></span>
|
5
|
+
<%= body %>
|
6
|
+
</p>
|
5
7
|
<%= delete_activity(activity, :image) %>
|
6
|
-
<span class="activity-time"><%= t("muck.
|
8
|
+
<span class="activity-time"><%= t("muck.general.time_ago", :time_in_words => time_ago_in_words(activity.created_at)) %></span>
|
7
9
|
<% if !activity.has_comments? -%>
|
8
10
|
<span><a id="make_comment_<%=activity.dom_id%>" class="make-comment" href="#"><%=t('muck.activities.make_comment')%></a></span>
|
9
11
|
<% end -%>
|
@@ -11,7 +11,7 @@ module ActiveRecord
|
|
11
11
|
|
12
12
|
belongs_to :item, :polymorphic => true
|
13
13
|
belongs_to :source, :polymorphic => true
|
14
|
-
has_many :activity_feeds
|
14
|
+
has_many :activity_feeds, :dependent => :destroy
|
15
15
|
|
16
16
|
acts_as_commentable
|
17
17
|
|
@@ -21,7 +21,7 @@ module ActiveRecord
|
|
21
21
|
named_scope :before, lambda { |time| {:conditions => ["activities.created_at < ?", time || DateTime.now] } }
|
22
22
|
named_scope :newest, :order => "activities.created_at DESC"
|
23
23
|
named_scope :after, lambda { |id| {:conditions => ["activities.id > ?", id] } }
|
24
|
-
named_scope :only_public, :conditions => ["activities.is_public = true
|
24
|
+
named_scope :only_public, :conditions => ["activities.is_public = ?", true]
|
25
25
|
named_scope :filter_by_template, lambda { |template| { :conditions => ["activities.template = ?", template] } unless template.blank? }
|
26
26
|
named_scope :created_by, lambda { |activity_object| {:conditions => ["activities.source_id = ? AND activities.source_type = ?", activity_object.id, activity_object.class.to_s] } }
|
27
27
|
named_scope :status_updates, :conditions => ["activities.is_status_update = ?", true]
|
@@ -26,6 +26,21 @@ module MuckActivitySources # :nodoc:
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
# +acts_as_activity_item+ gives the class it is called on a method called
|
30
|
+
# +add_activity+ that can add activities into a feed.
|
31
|
+
# It also setups up the object to be an 'item' in the activity feed.
|
32
|
+
# For example if you have a model called 'friend' which serves as an object
|
33
|
+
# that will be used as an 'item' in an activity feed, calling acts_as_activity_item
|
34
|
+
# will add 'activities' to the friend object so that you can call @friend.activities to
|
35
|
+
# retrieve all the activities for which the @friend object is an item. Deleting the @friend
|
36
|
+
# object will destroy all related activites.
|
37
|
+
def acts_as_activity_item
|
38
|
+
has_many :activities, :as => :item, :dependent => :destroy
|
39
|
+
unless included_modules.include? InstanceMethods
|
40
|
+
include InstanceMethods
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
29
44
|
end
|
30
45
|
|
31
46
|
module InstanceMethods
|
data/locales/en.yml
CHANGED
@@ -18,7 +18,6 @@ en:
|
|
18
18
|
problem_with_status: "There was a problem changing your status"
|
19
19
|
update_error: "Oops... There was a problem. {{errors}}"
|
20
20
|
update_status_message: "update your status!"
|
21
|
-
time_ago: "{{time_in_words}} ago"
|
22
21
|
template_or_item_required: "An activity requires a template or an item to display correctly"
|
23
22
|
paging_newer: "« Newer"
|
24
23
|
paging_older: "Older »"
|
data/muck-activities.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{muck-activities}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.17"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Justin Ball"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-08-08}
|
10
10
|
s.description = %q{Activity engine for the muck system.}
|
11
11
|
s.email = %q{justinball@gmail.com}
|
12
12
|
s.extra_rdoc_files = [
|
@@ -27,13 +27,13 @@ Gem::Specification.new do |s|
|
|
27
27
|
"app/views/activities/_comments.html.erb",
|
28
28
|
"app/views/activities/_current_status.html.erb",
|
29
29
|
"app/views/activities/_current_status_wrapper.html.erb",
|
30
|
-
"app/views/activities/_delete.html.erb",
|
31
30
|
"app/views/activities/_status_update.html.erb",
|
32
31
|
"app/views/activities/_template_filter.html.erb",
|
33
32
|
"app/views/activity_templates/_generic.html.erb",
|
34
33
|
"app/views/activity_templates/_status_update.html.erb",
|
35
34
|
"config/muck_activities_routes.rb",
|
36
35
|
"db/migrate/20090402033319_add_muck_activities.rb",
|
36
|
+
"db/migrate/20090730044139_add_comment_cache.rb",
|
37
37
|
"install.rb",
|
38
38
|
"lib/active_record/acts/muck_activity.rb",
|
39
39
|
"lib/muck_activities.rb",
|
@@ -101,6 +101,7 @@ Gem::Specification.new do |s|
|
|
101
101
|
"test/rails_root/app/models/activity.rb",
|
102
102
|
"test/rails_root/app/models/comment.rb",
|
103
103
|
"test/rails_root/app/models/profile.rb",
|
104
|
+
"test/rails_root/app/models/share.rb",
|
104
105
|
"test/rails_root/app/models/user.rb",
|
105
106
|
"test/rails_root/app/models/user_session.rb",
|
106
107
|
"test/rails_root/app/views/default/index.html.erb",
|
@@ -109,6 +110,7 @@ Gem::Specification.new do |s|
|
|
109
110
|
"test/rails_root/config/boot.rb",
|
110
111
|
"test/rails_root/config/database.yml",
|
111
112
|
"test/rails_root/config/environment.rb",
|
113
|
+
"test/rails_root/config/environments/cucumber.rb",
|
112
114
|
"test/rails_root/config/environments/development.rb",
|
113
115
|
"test/rails_root/config/environments/production.rb",
|
114
116
|
"test/rails_root/config/environments/test.rb",
|
@@ -127,8 +129,12 @@ Gem::Specification.new do |s|
|
|
127
129
|
"test/rails_root/db/migrate/20090512013727_create_profiles.rb",
|
128
130
|
"test/rails_root/db/migrate/20090602041838_create_users.rb",
|
129
131
|
"test/rails_root/db/migrate/20090613173314_create_comments.rb",
|
132
|
+
"test/rails_root/db/migrate/20090730044139_add_comment_cache.rb",
|
133
|
+
"test/rails_root/db/migrate/20090803185323_create_shares.rb",
|
130
134
|
"test/rails_root/features/step_definitions/webrat_steps.rb",
|
131
135
|
"test/rails_root/features/support/env.rb",
|
136
|
+
"test/rails_root/features/support/paths.rb",
|
137
|
+
"test/rails_root/lib/tasks/cucumber.rake",
|
132
138
|
"test/rails_root/public/.htaccess",
|
133
139
|
"test/rails_root/public/404.html",
|
134
140
|
"test/rails_root/public/422.html",
|
@@ -296,6 +302,7 @@ Gem::Specification.new do |s|
|
|
296
302
|
"test/rails_root/test/unit/.keep",
|
297
303
|
"test/rails_root/test/unit/activity_feed_test.rb",
|
298
304
|
"test/rails_root/test/unit/activity_test.rb",
|
305
|
+
"test/rails_root/test/unit/share_test.rb",
|
299
306
|
"test/rails_root/test/unit/user_test.rb",
|
300
307
|
"uninstall.rb"
|
301
308
|
]
|
@@ -313,10 +320,12 @@ Gem::Specification.new do |s|
|
|
313
320
|
"test/rails_root/app/models/activity.rb",
|
314
321
|
"test/rails_root/app/models/comment.rb",
|
315
322
|
"test/rails_root/app/models/profile.rb",
|
323
|
+
"test/rails_root/app/models/share.rb",
|
316
324
|
"test/rails_root/app/models/user.rb",
|
317
325
|
"test/rails_root/app/models/user_session.rb",
|
318
326
|
"test/rails_root/config/boot.rb",
|
319
327
|
"test/rails_root/config/environment.rb",
|
328
|
+
"test/rails_root/config/environments/cucumber.rb",
|
320
329
|
"test/rails_root/config/environments/development.rb",
|
321
330
|
"test/rails_root/config/environments/production.rb",
|
322
331
|
"test/rails_root/config/environments/test.rb",
|
@@ -333,9 +342,12 @@ Gem::Specification.new do |s|
|
|
333
342
|
"test/rails_root/db/migrate/20090512013727_create_profiles.rb",
|
334
343
|
"test/rails_root/db/migrate/20090602041838_create_users.rb",
|
335
344
|
"test/rails_root/db/migrate/20090613173314_create_comments.rb",
|
345
|
+
"test/rails_root/db/migrate/20090730044139_add_comment_cache.rb",
|
346
|
+
"test/rails_root/db/migrate/20090803185323_create_shares.rb",
|
336
347
|
"test/rails_root/db/schema.rb",
|
337
348
|
"test/rails_root/features/step_definitions/webrat_steps.rb",
|
338
349
|
"test/rails_root/features/support/env.rb",
|
350
|
+
"test/rails_root/features/support/paths.rb",
|
339
351
|
"test/rails_root/public/dispatch.rb",
|
340
352
|
"test/rails_root/script/create_project.rb",
|
341
353
|
"test/rails_root/test/factories.rb",
|
@@ -345,6 +357,7 @@ Gem::Specification.new do |s|
|
|
345
357
|
"test/rails_root/test/test_helper.rb",
|
346
358
|
"test/rails_root/test/unit/activity_feed_test.rb",
|
347
359
|
"test/rails_root/test/unit/activity_test.rb",
|
360
|
+
"test/rails_root/test/unit/share_test.rb",
|
348
361
|
"test/rails_root/test/unit/user_test.rb"
|
349
362
|
]
|
350
363
|
|
data/test/rails_root/Rakefile
CHANGED
@@ -3,7 +3,7 @@ development:
|
|
3
3
|
database: db/development.sqlite3
|
4
4
|
timeout: 5000
|
5
5
|
|
6
|
-
test:
|
6
|
+
test: &TEST
|
7
7
|
adapter: sqlite3
|
8
8
|
database: db/test.sqlite3
|
9
9
|
timeout: 5000
|
@@ -12,3 +12,6 @@ production:
|
|
12
12
|
adapter: sqlite3
|
13
13
|
database: db/production.sqlite3
|
14
14
|
timeout: 5000
|
15
|
+
|
16
|
+
cucumber:
|
17
|
+
<<: *TEST
|
@@ -25,5 +25,6 @@ Rails::Initializer.run do |config|
|
|
25
25
|
config.gem 'muck-users', :lib => 'muck_users'
|
26
26
|
config.gem 'muck-comments', :lib => 'muck_comments'
|
27
27
|
config.gem 'muck-profiles', :lib => 'muck_profiles'
|
28
|
+
config.gem 'muck-shares', :lib => 'muck_shares'
|
28
29
|
config.plugin_locators << TestGemLocator
|
29
30
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
config.cache_classes = true # This must be true for Cucumber to operate correctly!
|
2
|
+
|
3
|
+
# Log error messages when you accidentally call methods on nil.
|
4
|
+
config.whiny_nils = true
|
5
|
+
|
6
|
+
# Show full error reports and disable caching
|
7
|
+
config.action_controller.consider_all_requests_local = true
|
8
|
+
config.action_controller.perform_caching = false
|
9
|
+
|
10
|
+
# Disable request forgery protection in test environment
|
11
|
+
config.action_controller.allow_forgery_protection = false
|
12
|
+
|
13
|
+
# Tell Action Mailer not to deliver emails to the real world.
|
14
|
+
# The :test delivery method accumulates sent emails in the
|
15
|
+
# ActionMailer::Base.deliveries array.
|
16
|
+
config.action_mailer.delivery_method = :test
|
17
|
+
|
18
|
+
config.gem "cucumber", :lib => false, :version => ">=0.3.92" unless File.directory?(File.join(Rails.root, 'vendor/plugins/cucumber'))
|
19
|
+
config.gem "webrat", :lib => false, :version => ">=0.4.4" unless File.directory?(File.join(Rails.root, 'vendor/plugins/webrat'))
|
20
|
+
config.gem "rspec", :lib => false, :version => ">=1.2.6" unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec'))
|
21
|
+
config.gem "rspec-rails", :lib => 'spec/rails', :version => ">=1.2.6" unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec-rails'))
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateShares < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :shares, :force => true do |t|
|
4
|
+
t.string :uri, :limit => 2083, :default => "", :null => false
|
5
|
+
t.string :title
|
6
|
+
t.text :message
|
7
|
+
t.integer :shared_by_id, :null => false
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :shares, :shared_by_id
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table :shares
|
15
|
+
end
|
16
|
+
end
|
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
# It's strongly recommended to check this file into your version control system.
|
11
11
|
|
12
|
-
ActiveRecord::Schema.define(:version =>
|
12
|
+
ActiveRecord::Schema.define(:version => 20090803185323) do
|
13
13
|
|
14
14
|
create_table "activities", :force => true do |t|
|
15
15
|
t.integer "item_id"
|
@@ -23,6 +23,7 @@ ActiveRecord::Schema.define(:version => 20090613173314) do
|
|
23
23
|
t.boolean "is_public", :default => true
|
24
24
|
t.datetime "created_at"
|
25
25
|
t.datetime "updated_at"
|
26
|
+
t.integer "comment_count", :default => 0
|
26
27
|
end
|
27
28
|
|
28
29
|
add_index "activities", ["item_id", "item_type"], :name => "index_activities_on_item_id_and_item_type"
|
@@ -97,6 +98,17 @@ ActiveRecord::Schema.define(:version => 20090613173314) do
|
|
97
98
|
t.datetime "updated_at"
|
98
99
|
end
|
99
100
|
|
101
|
+
create_table "shares", :force => true do |t|
|
102
|
+
t.string "uri", :limit => 2083, :default => "", :null => false
|
103
|
+
t.string "title"
|
104
|
+
t.text "message"
|
105
|
+
t.integer "shared_by_id", :null => false
|
106
|
+
t.datetime "created_at"
|
107
|
+
t.datetime "updated_at"
|
108
|
+
end
|
109
|
+
|
110
|
+
add_index "shares", ["shared_by_id"], :name => "index_shares_on_shared_by_id"
|
111
|
+
|
100
112
|
create_table "states", :force => true do |t|
|
101
113
|
t.string "name", :limit => 128, :default => "", :null => false
|
102
114
|
t.string "abbreviation", :limit => 3, :default => "", :null => false
|
@@ -3,29 +3,33 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "pat
|
|
3
3
|
# Commonly used webrat steps
|
4
4
|
# http://github.com/brynary/webrat
|
5
5
|
|
6
|
+
Given /^I am on (.+)$/ do |page_name|
|
7
|
+
visit path_to(page_name)
|
8
|
+
end
|
9
|
+
|
6
10
|
When /^I go to (.+)$/ do |page_name|
|
7
11
|
visit path_to(page_name)
|
8
12
|
end
|
9
13
|
|
10
|
-
When /^I press "(
|
14
|
+
When /^I press "([^\"]*)"$/ do |button|
|
11
15
|
click_button(button)
|
12
16
|
end
|
13
17
|
|
14
|
-
When /^I follow "(
|
18
|
+
When /^I follow "([^\"]*)"$/ do |link|
|
15
19
|
click_link(link)
|
16
20
|
end
|
17
21
|
|
18
|
-
When /^I fill in "(
|
22
|
+
When /^I fill in "([^\"]*)" with "([^\"]*)"$/ do |field, value|
|
19
23
|
fill_in(field, :with => value)
|
20
24
|
end
|
21
25
|
|
22
|
-
When /^I select "(
|
26
|
+
When /^I select "([^\"]*)" from "([^\"]*)"$/ do |value, field|
|
23
27
|
select(value, :from => field)
|
24
28
|
end
|
25
29
|
|
26
30
|
# Use this step in conjunction with Rail's datetime_select helper. For example:
|
27
31
|
# When I select "December 25, 2008 10:00" as the date and time
|
28
|
-
When /^I select "(
|
32
|
+
When /^I select "([^\"]*)" as the date and time$/ do |time|
|
29
33
|
select_datetime(time)
|
30
34
|
end
|
31
35
|
|
@@ -36,64 +40,90 @@ end
|
|
36
40
|
# <%= f.label :alternative %><br />
|
37
41
|
# <%= f.datetime_select :alternative %>
|
38
42
|
# The following steps would fill out the form:
|
39
|
-
# When I select "November 23, 2004 11:20" as the "Preferred"
|
40
|
-
# And I select "November 25, 2004 10:30" as the "Alternative"
|
41
|
-
When /^I select "(
|
43
|
+
# When I select "November 23, 2004 11:20" as the "Preferred" date and time
|
44
|
+
# And I select "November 25, 2004 10:30" as the "Alternative" date and time
|
45
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" date and time$/ do |datetime, datetime_label|
|
42
46
|
select_datetime(datetime, :from => datetime_label)
|
43
47
|
end
|
44
48
|
|
45
|
-
# Use this step in
|
49
|
+
# Use this step in conjunction with Rail's time_select helper. For example:
|
46
50
|
# When I select "2:20PM" as the time
|
47
51
|
# Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
|
48
52
|
# will convert the 2:20PM to 14:20 and then select it.
|
49
|
-
When /^I select "(
|
53
|
+
When /^I select "([^\"]*)" as the time$/ do |time|
|
50
54
|
select_time(time)
|
51
55
|
end
|
52
56
|
|
53
57
|
# Use this step when using multiple time_select helpers on a page or you want to
|
54
58
|
# specify the name of the time on the form. For example:
|
55
59
|
# When I select "7:30AM" as the "Gym" time
|
56
|
-
When /^I select "(
|
60
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" time$/ do |time, time_label|
|
57
61
|
select_time(time, :from => time_label)
|
58
62
|
end
|
59
63
|
|
60
|
-
# Use this step in
|
64
|
+
# Use this step in conjunction with Rail's date_select helper. For example:
|
61
65
|
# When I select "February 20, 1981" as the date
|
62
|
-
When /^I select "(
|
66
|
+
When /^I select "([^\"]*)" as the date$/ do |date|
|
63
67
|
select_date(date)
|
64
68
|
end
|
65
69
|
|
66
70
|
# Use this step when using multiple date_select helpers on one page or
|
67
71
|
# you want to specify the name of the date on the form. For example:
|
68
72
|
# When I select "April 26, 1982" as the "Date of Birth" date
|
69
|
-
When /^I select "(
|
73
|
+
When /^I select "([^\"]*)" as the "([^\"]*)" date$/ do |date, date_label|
|
70
74
|
select_date(date, :from => date_label)
|
71
75
|
end
|
72
76
|
|
73
|
-
When /^I check "(
|
77
|
+
When /^I check "([^\"]*)"$/ do |field|
|
74
78
|
check(field)
|
75
79
|
end
|
76
80
|
|
77
|
-
When /^I uncheck "(
|
81
|
+
When /^I uncheck "([^\"]*)"$/ do |field|
|
78
82
|
uncheck(field)
|
79
83
|
end
|
80
84
|
|
81
|
-
When /^I choose "(
|
85
|
+
When /^I choose "([^\"]*)"$/ do |field|
|
82
86
|
choose(field)
|
83
87
|
end
|
84
88
|
|
85
|
-
When /^I attach the file at "(
|
89
|
+
When /^I attach the file at "([^\"]*)" to "([^\"]*)"$/ do |path, field|
|
86
90
|
attach_file(field, path)
|
87
91
|
end
|
88
92
|
|
89
|
-
Then /^I should see "(
|
90
|
-
|
93
|
+
Then /^I should see "([^\"]*)"$/ do |text|
|
94
|
+
response.should contain(text)
|
95
|
+
end
|
96
|
+
|
97
|
+
Then /^I should see \/([^\/]*)\/$/ do |regexp|
|
98
|
+
regexp = Regexp.new(regexp)
|
99
|
+
response.should contain(regexp)
|
100
|
+
end
|
101
|
+
|
102
|
+
Then /^I should not see "([^\"]*)"$/ do |text|
|
103
|
+
response.should_not contain(text)
|
91
104
|
end
|
92
105
|
|
93
|
-
Then /^I should not see
|
94
|
-
|
106
|
+
Then /^I should not see \/([^\/]*)\/$/ do |regexp|
|
107
|
+
regexp = Regexp.new(regexp)
|
108
|
+
response.should_not contain(regexp)
|
95
109
|
end
|
96
110
|
|
97
|
-
Then /^the "(
|
111
|
+
Then /^the "([^\"]*)" field should contain "([^\"]*)"$/ do |field, value|
|
112
|
+
field_labeled(field).value.should =~ /#{value}/
|
113
|
+
end
|
114
|
+
|
115
|
+
Then /^the "([^\"]*)" field should not contain "([^\"]*)"$/ do |field, value|
|
116
|
+
field_labeled(field).value.should_not =~ /#{value}/
|
117
|
+
end
|
118
|
+
|
119
|
+
Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
|
98
120
|
field_labeled(label).should be_checked
|
99
121
|
end
|
122
|
+
|
123
|
+
Then /^the "([^\"]*)" checkbox should not be checked$/ do |label|
|
124
|
+
field_labeled(label).should_not be_checked
|
125
|
+
end
|
126
|
+
|
127
|
+
Then /^I should be on (.+)$/ do |page_name|
|
128
|
+
URI.parse(current_url).path.should == path_to(page_name)
|
129
|
+
end
|
@@ -1,14 +1,25 @@
|
|
1
1
|
# Sets up the Rails environment for Cucumber
|
2
|
-
ENV["RAILS_ENV"]
|
2
|
+
ENV["RAILS_ENV"] ||= "cucumber"
|
3
3
|
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
|
4
|
-
require 'factory_girl'
|
5
4
|
require 'cucumber/rails/world'
|
6
|
-
|
5
|
+
|
6
|
+
# Comment out the next line if you don't want Cucumber Unicode support
|
7
|
+
require 'cucumber/formatter/unicode'
|
8
|
+
|
9
|
+
# Comment out the next line if you don't want transactions to
|
10
|
+
# open/roll back around each scenario
|
7
11
|
Cucumber::Rails.use_transactional_fixtures
|
12
|
+
|
13
|
+
# Comment out the next line if you want Rails' own error handling
|
14
|
+
# (e.g. rescue_action_in_public / rescue_responses / rescue_from)
|
8
15
|
Cucumber::Rails.bypass_rescue
|
9
16
|
|
10
17
|
require 'webrat'
|
18
|
+
require 'cucumber/webrat/table_locator' # Lets you do table.diff!(table_at('#my_table').to_a)
|
11
19
|
|
12
20
|
Webrat.configure do |config|
|
13
21
|
config.mode = :rails
|
14
22
|
end
|
23
|
+
|
24
|
+
require 'cucumber/rails/rspec'
|
25
|
+
require 'webrat/core/matchers'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module NavigationHelpers
|
2
|
+
# Maps a name to a path. Used by the
|
3
|
+
#
|
4
|
+
# When /^I go to (.+)$/ do |page_name|
|
5
|
+
#
|
6
|
+
# step definition in webrat_steps.rb
|
7
|
+
#
|
8
|
+
def path_to(page_name)
|
9
|
+
case page_name
|
10
|
+
|
11
|
+
when /the homepage/
|
12
|
+
'/'
|
13
|
+
|
14
|
+
# Add more mappings here.
|
15
|
+
# Here is a more fancy example:
|
16
|
+
#
|
17
|
+
# when /^(.*)'s profile page$/i
|
18
|
+
# user_profile_path(User.find_by_login($1))
|
19
|
+
|
20
|
+
else
|
21
|
+
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
22
|
+
"Now, go and add a mapping in #{__FILE__}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
World(NavigationHelpers)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.unshift(RAILS_ROOT + '/vendor/plugins/cucumber/lib') if File.directory?(RAILS_ROOT + '/vendor/plugins/cucumber/lib')
|
2
|
+
|
3
|
+
unless ARGV.any? {|a| a =~ /^gems/}
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'cucumber/rake/task'
|
7
|
+
|
8
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
9
|
+
t.fork = true
|
10
|
+
t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'pretty')]
|
11
|
+
end
|
12
|
+
task :features => 'db:test:prepare'
|
13
|
+
rescue LoadError
|
14
|
+
desc 'Cucumber rake task not available'
|
15
|
+
task :features do
|
16
|
+
abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
begin
|
3
3
|
load File.expand_path(File.dirname(__FILE__) + "/../vendor/plugins/cucumber/bin/cucumber")
|
4
|
-
rescue LoadError
|
4
|
+
rescue LoadError => e
|
5
|
+
raise unless e.to_s =~ /cucumber/
|
5
6
|
require "rubygems"
|
6
7
|
load File.join(Gem.bindir, "cucumber")
|
7
8
|
end
|
@@ -10,6 +10,10 @@ Factory.sequence :name do |n|
|
|
10
10
|
"a_name#{n}"
|
11
11
|
end
|
12
12
|
|
13
|
+
Factory.sequence :title do |n|
|
14
|
+
"a_title#{n}"
|
15
|
+
end
|
16
|
+
|
13
17
|
Factory.sequence :abbr do |n|
|
14
18
|
"abbr#{n}"
|
15
19
|
end
|
@@ -43,4 +47,14 @@ end
|
|
43
47
|
Factory.define :comment do |f|
|
44
48
|
f.body 'test comment'
|
45
49
|
f.user {|a| a.association(:user)}
|
46
|
-
end
|
50
|
+
end
|
51
|
+
|
52
|
+
Factory.define :share do |f|
|
53
|
+
f.uri { Factory.next(:uri) }
|
54
|
+
f.title { Factory.next(:title) }
|
55
|
+
f.shared_by {|a| a.association(:user)}
|
56
|
+
end
|
57
|
+
|
58
|
+
Factory.sequence :uri do |n|
|
59
|
+
"n#{n}.example.com"
|
60
|
+
end
|
@@ -4,7 +4,23 @@ class Muck::ActivitiesControllerTest < ActionController::TestCase
|
|
4
4
|
|
5
5
|
tests Muck::ActivitiesController
|
6
6
|
|
7
|
-
context "activities controller" do
|
7
|
+
context "activities controller - anonymous" do
|
8
|
+
context "on GET to index" do
|
9
|
+
setup do
|
10
|
+
@user = Factory(:user)
|
11
|
+
@activity = Factory(:activity, :template => 'status_update')
|
12
|
+
@user.activities << @activity
|
13
|
+
end
|
14
|
+
context 'on GET to index (js)' do
|
15
|
+
setup do
|
16
|
+
get :index, :parent_type => @user.class, :parent_id => @user, :format => 'js', :latest_activity_id => @activity.to_param
|
17
|
+
end
|
18
|
+
should_respond_with :success
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "activities controller - logged in" do
|
8
24
|
setup do
|
9
25
|
activate_authlogic
|
10
26
|
@user = Factory(:user)
|
@@ -23,6 +23,8 @@ class ActivityTest < ActiveSupport::TestCase
|
|
23
23
|
@new_activity = Factory(:activity)
|
24
24
|
@status_activity = Factory(:activity, :template => 'status')
|
25
25
|
@other_activity = Factory(:activity, :template => 'other')
|
26
|
+
@private_activity = Factory(:activity, :is_public => false)
|
27
|
+
@public_activity = Factory(:activity, :is_public => true)
|
26
28
|
end
|
27
29
|
context "before" do
|
28
30
|
should "only find old activity" do
|
@@ -45,6 +47,13 @@ class ActivityTest < ActiveSupport::TestCase
|
|
45
47
|
assert !activities.include?(@other_activity), "since found other activity"
|
46
48
|
end
|
47
49
|
end
|
50
|
+
context "public" do
|
51
|
+
should "only find public activities" do
|
52
|
+
activities = Activity.only_public
|
53
|
+
assert activities.include?(@public_activity), "only_public didn't find public activity"
|
54
|
+
assert !activities.include?(@private_activity), "only_public found private activity"
|
55
|
+
end
|
56
|
+
end
|
48
57
|
end
|
49
58
|
|
50
59
|
should "require template or item" do
|
@@ -98,4 +107,21 @@ class ActivityTest < ActiveSupport::TestCase
|
|
98
107
|
|
99
108
|
end
|
100
109
|
|
110
|
+
context "comments" do
|
111
|
+
setup do
|
112
|
+
@user = Factory(:user)
|
113
|
+
@activity = Factory(:activity)
|
114
|
+
@comment = @activity.comments.build(:body => 'a test comment')
|
115
|
+
@comment.user = @user
|
116
|
+
@comment.save!
|
117
|
+
end
|
118
|
+
should "have comments" do
|
119
|
+
assert_equal 1, @activity.comments.length
|
120
|
+
end
|
121
|
+
should "have comment cache" do
|
122
|
+
@activity.reload
|
123
|
+
assert_equal 1, @activity.comment_count
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
101
127
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# using muck shares to test acts_as_activity_item
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../test_helper'
|
4
|
+
|
5
|
+
class ShareTest < ActiveSupport::TestCase
|
6
|
+
context "share" do
|
7
|
+
setup do
|
8
|
+
@user = Factory(:user)
|
9
|
+
@share = Factory(:share)
|
10
|
+
@share.add_share_activities([@user])
|
11
|
+
end
|
12
|
+
should_have_many :activities
|
13
|
+
should "delete activities if share is deleted" do
|
14
|
+
assert_difference "Activity.count", -1 do
|
15
|
+
@share.destroy
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muck-activities
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Ball
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-08-08 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -65,13 +65,13 @@ files:
|
|
65
65
|
- app/views/activities/_comments.html.erb
|
66
66
|
- app/views/activities/_current_status.html.erb
|
67
67
|
- app/views/activities/_current_status_wrapper.html.erb
|
68
|
-
- app/views/activities/_delete.html.erb
|
69
68
|
- app/views/activities/_status_update.html.erb
|
70
69
|
- app/views/activities/_template_filter.html.erb
|
71
70
|
- app/views/activity_templates/_generic.html.erb
|
72
71
|
- app/views/activity_templates/_status_update.html.erb
|
73
72
|
- config/muck_activities_routes.rb
|
74
73
|
- db/migrate/20090402033319_add_muck_activities.rb
|
74
|
+
- db/migrate/20090730044139_add_comment_cache.rb
|
75
75
|
- install.rb
|
76
76
|
- lib/active_record/acts/muck_activity.rb
|
77
77
|
- lib/muck_activities.rb
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- test/rails_root/app/models/activity.rb
|
140
140
|
- test/rails_root/app/models/comment.rb
|
141
141
|
- test/rails_root/app/models/profile.rb
|
142
|
+
- test/rails_root/app/models/share.rb
|
142
143
|
- test/rails_root/app/models/user.rb
|
143
144
|
- test/rails_root/app/models/user_session.rb
|
144
145
|
- test/rails_root/app/views/default/index.html.erb
|
@@ -147,6 +148,7 @@ files:
|
|
147
148
|
- test/rails_root/config/boot.rb
|
148
149
|
- test/rails_root/config/database.yml
|
149
150
|
- test/rails_root/config/environment.rb
|
151
|
+
- test/rails_root/config/environments/cucumber.rb
|
150
152
|
- test/rails_root/config/environments/development.rb
|
151
153
|
- test/rails_root/config/environments/production.rb
|
152
154
|
- test/rails_root/config/environments/test.rb
|
@@ -165,8 +167,12 @@ files:
|
|
165
167
|
- test/rails_root/db/migrate/20090512013727_create_profiles.rb
|
166
168
|
- test/rails_root/db/migrate/20090602041838_create_users.rb
|
167
169
|
- test/rails_root/db/migrate/20090613173314_create_comments.rb
|
170
|
+
- test/rails_root/db/migrate/20090730044139_add_comment_cache.rb
|
171
|
+
- test/rails_root/db/migrate/20090803185323_create_shares.rb
|
168
172
|
- test/rails_root/features/step_definitions/webrat_steps.rb
|
169
173
|
- test/rails_root/features/support/env.rb
|
174
|
+
- test/rails_root/features/support/paths.rb
|
175
|
+
- test/rails_root/lib/tasks/cucumber.rake
|
170
176
|
- test/rails_root/public/.htaccess
|
171
177
|
- test/rails_root/public/404.html
|
172
178
|
- test/rails_root/public/422.html
|
@@ -334,6 +340,7 @@ files:
|
|
334
340
|
- test/rails_root/test/unit/.keep
|
335
341
|
- test/rails_root/test/unit/activity_feed_test.rb
|
336
342
|
- test/rails_root/test/unit/activity_test.rb
|
343
|
+
- test/rails_root/test/unit/share_test.rb
|
337
344
|
- test/rails_root/test/unit/user_test.rb
|
338
345
|
- uninstall.rb
|
339
346
|
has_rdoc: true
|
@@ -369,10 +376,12 @@ test_files:
|
|
369
376
|
- test/rails_root/app/models/activity.rb
|
370
377
|
- test/rails_root/app/models/comment.rb
|
371
378
|
- test/rails_root/app/models/profile.rb
|
379
|
+
- test/rails_root/app/models/share.rb
|
372
380
|
- test/rails_root/app/models/user.rb
|
373
381
|
- test/rails_root/app/models/user_session.rb
|
374
382
|
- test/rails_root/config/boot.rb
|
375
383
|
- test/rails_root/config/environment.rb
|
384
|
+
- test/rails_root/config/environments/cucumber.rb
|
376
385
|
- test/rails_root/config/environments/development.rb
|
377
386
|
- test/rails_root/config/environments/production.rb
|
378
387
|
- test/rails_root/config/environments/test.rb
|
@@ -389,9 +398,12 @@ test_files:
|
|
389
398
|
- test/rails_root/db/migrate/20090512013727_create_profiles.rb
|
390
399
|
- test/rails_root/db/migrate/20090602041838_create_users.rb
|
391
400
|
- test/rails_root/db/migrate/20090613173314_create_comments.rb
|
401
|
+
- test/rails_root/db/migrate/20090730044139_add_comment_cache.rb
|
402
|
+
- test/rails_root/db/migrate/20090803185323_create_shares.rb
|
392
403
|
- test/rails_root/db/schema.rb
|
393
404
|
- test/rails_root/features/step_definitions/webrat_steps.rb
|
394
405
|
- test/rails_root/features/support/env.rb
|
406
|
+
- test/rails_root/features/support/paths.rb
|
395
407
|
- test/rails_root/public/dispatch.rb
|
396
408
|
- test/rails_root/script/create_project.rb
|
397
409
|
- test/rails_root/test/factories.rb
|
@@ -401,4 +413,5 @@ test_files:
|
|
401
413
|
- test/rails_root/test/test_helper.rb
|
402
414
|
- test/rails_root/test/unit/activity_feed_test.rb
|
403
415
|
- test/rails_root/test/unit/activity_test.rb
|
416
|
+
- test/rails_root/test/unit/share_test.rb
|
404
417
|
- test/rails_root/test/unit/user_test.rb
|
@@ -1,11 +0,0 @@
|
|
1
|
-
<% if button_type == :text -%>
|
2
|
-
<%= link_to_remote( button_text, :url => delete_path, :method => :delete) %>
|
3
|
-
<% else -%>
|
4
|
-
<% remote_form_for(delete_object, :url => delete_path, :html => { :class => "delete-form #{form_class}", :method => :delete } ) do |f| -%>
|
5
|
-
<% if button_type == :image -%>
|
6
|
-
<%= image_submit_tag '/images/icons/delete.png', {:title => button_text, :width => '15', :height => '15', :alt => button_text } %>
|
7
|
-
<% else -%>
|
8
|
-
<%= submit_tag button_text, { :title => button_text } %>
|
9
|
-
<% end -%>
|
10
|
-
<% end -%>
|
11
|
-
<% end -%>
|