muck-comments 0.1.14 → 0.1.15
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/MIT-LICENSE +1 -1
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/app/controllers/muck/comments_controller.rb +5 -2
- data/app/helpers/muck_comments_helper.rb +8 -8
- data/app/views/comments/_comment.html.erb +1 -1
- data/app/views/comments/_simple_comment.html.erb +1 -1
- data/muck-comments.gemspec +14 -22
- data/test/rails_root/Rakefile +2 -1
- data/test/rails_root/app/models/profile.rb +3 -0
- data/test/rails_root/app/models/user.rb +1 -0
- data/test/rails_root/config/environment.rb +9 -7
- data/test/rails_root/config/environments/test.rb +0 -14
- data/test/rails_root/db/migrate/20090402234137_create_languages.rb +1 -1
- data/test/rails_root/db/migrate/20090512013727_create_profiles.rb +21 -0
- data/test/rails_root/public/images/icons/external.png +0 -0
- data/test/rails_root/public/images/icons/feed.png +0 -0
- data/test/rails_root/public/images/icons/pending.png +0 -0
- data/test/rails_root/public/javascripts/jquery/jrails.js +1 -0
- data/test/rails_root/public/stylesheets/muck-activities.css +39 -0
- data/test/rails_root/test/test_helper.rb +5 -42
- metadata +14 -21
- data/test/rails_root/Capfile +0 -3
- data/test/rails_root/db/migrate/20090602041838_create_users.rb +0 -39
- data/test/rails_root/test/factories.rb +0 -75
- data/test/rails_root/test/mocks/development/.keep +0 -0
- data/test/rails_root/test/mocks/test/.keep +0 -0
- data/test/rails_root/test/shoulda_macros/controller.rb +0 -49
- data/test/rails_root/test/shoulda_macros/forms.rb +0 -32
- data/test/rails_root/test/shoulda_macros/models.rb +0 -50
- data/test/rails_root/test/shoulda_macros/pagination.rb +0 -53
- data/test/rails_root/test/shoulda_macros/plugins.rb +0 -34
data/MIT-LICENSE
CHANGED
data/Rakefile
CHANGED
@@ -49,10 +49,10 @@ begin
|
|
49
49
|
Jeweler::Tasks.new do |gemspec|
|
50
50
|
gemspec.name = "muck-comments"
|
51
51
|
gemspec.summary = "The comment engine for the muck system"
|
52
|
-
gemspec.email = "
|
53
|
-
gemspec.homepage = "http://github.com/
|
52
|
+
gemspec.email = "justin@tatemae.com"
|
53
|
+
gemspec.homepage = "http://github.com/tatemae/muck_comments"
|
54
54
|
gemspec.description = "The comment engine for the muck system."
|
55
|
-
gemspec.authors = ["Justin Ball"]
|
55
|
+
gemspec.authors = ["Justin Ball", "Joel Duffin"]
|
56
56
|
gemspec.rubyforge_project = 'muck-comments'
|
57
57
|
gemspec.add_dependency "muck-engine"
|
58
58
|
gemspec.add_dependency "muck-users"
|
@@ -62,5 +62,5 @@ begin
|
|
62
62
|
end
|
63
63
|
Jeweler::GemcutterTasks.new
|
64
64
|
rescue LoadError
|
65
|
-
puts "Jeweler not available. Install it with: sudo gem install
|
65
|
+
puts "Jeweler not available. Install it with: sudo gem install jeweler"
|
66
66
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.15
|
@@ -104,12 +104,15 @@ class Muck::CommentsController < ApplicationController
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def get_parent_comment_html(parent, comment)
|
107
|
+
truncate_comment = false
|
108
|
+
length = 30
|
109
|
+
omission = '...'
|
107
110
|
render_as_html do
|
108
|
-
render_to_string(:partial => "#{parent.class.to_s.tableize}/comment", :object => comment, :locals => {:comment_owner => parent})
|
111
|
+
render_to_string(:partial => "#{parent.class.to_s.tableize}/comment", :object => comment, :locals => {:comment_owner => parent, :truncate_comment => truncate_comment, :length => length, :omission => omission})
|
109
112
|
end
|
110
113
|
rescue ActionView::MissingTemplate
|
111
114
|
render_as_html do
|
112
|
-
render_to_string(:partial => "comments/comment", :object => comment, :locals => {:comment_owner => parent})
|
115
|
+
render_to_string(:partial => "comments/comment", :object => comment, :locals => {:comment_owner => parent, :truncate_comment => truncate_comment, :length => length, :omission => omission})
|
113
116
|
end
|
114
117
|
#I18n.t('muck.comments.missing_comment_template_error', :partial => "#{parent.class.to_s.tableize}/comment")
|
115
118
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
module MuckCommentsHelper
|
2
2
|
|
3
|
-
def latest_simple_comments(limit = 5,
|
4
|
-
render :partial => 'comments/simple_comment', :collection => Comment.by_newest.limit(limit), :locals => { :
|
3
|
+
def latest_simple_comments(limit = 5, truncate_comment = true, length = 30, omission = '...')
|
4
|
+
render :partial => 'comments/simple_comment', :collection => Comment.by_newest.limit(limit), :locals => { :truncate_comment => truncate_comment, :length => length, :omission => omission }
|
5
5
|
end
|
6
6
|
|
7
|
-
def latest_comments(limit = 5,
|
8
|
-
render :partial => 'comments/comment', :collection => Comment.by_newest.limit(limit), :locals => { :
|
7
|
+
def latest_comments(limit = 5, truncate_comment = true, length = 30, omission = '...')
|
8
|
+
render :partial => 'comments/comment', :collection => Comment.by_newest.limit(limit), :locals => { :truncate_comment => truncate_comment, :length => length, :omission => omission }
|
9
9
|
end
|
10
10
|
|
11
|
-
def show_comments(comments)
|
12
|
-
render :partial => 'comments/comment', :collection => comments
|
11
|
+
def show_comments(comments, truncate_comment = false, length = 30, omission = '...')
|
12
|
+
render :partial => 'comments/comment', :collection => comments, :locals => { :truncate_comment => truncate_comment, :length => length, :omission => omission }
|
13
13
|
end
|
14
14
|
|
15
15
|
# parent is the object to which the comments will be attached
|
@@ -41,8 +41,8 @@ module MuckCommentsHelper
|
|
41
41
|
:delete_path => comment_path(comment, :format => 'js') }
|
42
42
|
end
|
43
43
|
|
44
|
-
def limit_comment(text,
|
45
|
-
if
|
44
|
+
def limit_comment(text, truncate_comment = false, length = 30, omission = '...')
|
45
|
+
if truncate_comment
|
46
46
|
html_summarize(text, length, omission)
|
47
47
|
else
|
48
48
|
text
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<div id="<%= comment.dom_id %>" class="comment_holder delete-container">
|
2
2
|
<div class="commentor-icon"><%= icon comment.user %></div>
|
3
3
|
<p><span class="commentor"><%= link_to comment.user.try(:display_name), comment.user %></span>
|
4
|
-
<%= h limit_comment(comment.body,
|
4
|
+
<%= h limit_comment(comment.body, truncate_comment, length, omission) %></p>
|
5
5
|
<%= delete_comment(comment, :image) if comment.can_edit?(current_user) %>
|
6
6
|
<span class="comment-time"><%= t("muck.general.time_ago", :time_in_words => time_ago_in_words(comment.created_at)) %></span></p>
|
7
7
|
</div>
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<div id="<%= simple_comment.dom_id %>" class="simple-comment">
|
2
2
|
<div class="commentor-icon"><%= icon simple_comment.user %></div>
|
3
|
-
<div class="comment-body"><%= h limit_comment(simple_comment.body,
|
3
|
+
<div class="comment-body"><%= h limit_comment(simple_comment.body, truncate_comment, length, omission) %></div>
|
4
4
|
</div>
|
data/muck-comments.gemspec
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{muck-comments}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.15"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Justin Ball"]
|
12
|
-
s.date = %q{2009-11-
|
11
|
+
s.authors = ["Justin Ball", "Joel Duffin"]
|
12
|
+
s.date = %q{2009-11-13}
|
13
13
|
s.description = %q{The comment engine for the muck system.}
|
14
|
-
s.email = %q{
|
14
|
+
s.email = %q{justin@tatemae.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"README.rdoc"
|
17
17
|
]
|
@@ -93,13 +93,13 @@ Gem::Specification.new do |s|
|
|
93
93
|
"tasks/muck_comments_tasks.rake",
|
94
94
|
"test/rails_root/.gitignore",
|
95
95
|
"test/rails_root/.rake_tasks",
|
96
|
-
"test/rails_root/Capfile",
|
97
96
|
"test/rails_root/Rakefile",
|
98
97
|
"test/rails_root/app/controllers/application_controller.rb",
|
99
98
|
"test/rails_root/app/controllers/default_controller.rb",
|
100
99
|
"test/rails_root/app/helpers/application_helper.rb",
|
101
100
|
"test/rails_root/app/models/.keep",
|
102
101
|
"test/rails_root/app/models/comment.rb",
|
102
|
+
"test/rails_root/app/models/profile.rb",
|
103
103
|
"test/rails_root/app/models/user.rb",
|
104
104
|
"test/rails_root/app/models/user_session.rb",
|
105
105
|
"test/rails_root/app/views/default/index.html.erb",
|
@@ -125,7 +125,7 @@ Gem::Specification.new do |s|
|
|
125
125
|
"test/rails_root/db/migrate/20090402234137_create_languages.rb",
|
126
126
|
"test/rails_root/db/migrate/20090426041056_create_countries.rb",
|
127
127
|
"test/rails_root/db/migrate/20090426041103_create_states.rb",
|
128
|
-
"test/rails_root/db/migrate/
|
128
|
+
"test/rails_root/db/migrate/20090512013727_create_profiles.rb",
|
129
129
|
"test/rails_root/db/migrate/20090608073052_create_friends.rb",
|
130
130
|
"test/rails_root/db/migrate/20090613173314_create_comments.rb",
|
131
131
|
"test/rails_root/db/migrate/20090703055724_add_contents.rb",
|
@@ -177,10 +177,13 @@ Gem::Specification.new do |s|
|
|
177
177
|
"test/rails_root/public/images/icons/comment.png",
|
178
178
|
"test/rails_root/public/images/icons/delete.png",
|
179
179
|
"test/rails_root/public/images/icons/exclaim.png",
|
180
|
+
"test/rails_root/public/images/icons/external.png",
|
181
|
+
"test/rails_root/public/images/icons/feed.png",
|
180
182
|
"test/rails_root/public/images/icons/grey_guy.png",
|
181
183
|
"test/rails_root/public/images/icons/hide.png",
|
182
184
|
"test/rails_root/public/images/icons/information.png",
|
183
185
|
"test/rails_root/public/images/icons/minus.png",
|
186
|
+
"test/rails_root/public/images/icons/pending.png",
|
184
187
|
"test/rails_root/public/images/icons/question.png",
|
185
188
|
"test/rails_root/public/images/icons/search_box.png",
|
186
189
|
"test/rails_root/public/images/icons/star.png",
|
@@ -207,6 +210,7 @@ Gem::Specification.new do |s|
|
|
207
210
|
"test/rails_root/public/javascripts/jquery/jquery.jgrowl.js",
|
208
211
|
"test/rails_root/public/javascripts/jquery/jquery.js",
|
209
212
|
"test/rails_root/public/javascripts/jquery/jquery.tips.js",
|
213
|
+
"test/rails_root/public/javascripts/jquery/jrails.js",
|
210
214
|
"test/rails_root/public/javascripts/muck.js",
|
211
215
|
"test/rails_root/public/javascripts/muck_activities.js",
|
212
216
|
"test/rails_root/public/javascripts/muck_time/en.js",
|
@@ -313,6 +317,7 @@ Gem::Specification.new do |s|
|
|
313
317
|
"test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png",
|
314
318
|
"test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png",
|
315
319
|
"test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.1.custom.css",
|
320
|
+
"test/rails_root/public/stylesheets/muck-activities.css",
|
316
321
|
"test/rails_root/public/stylesheets/reset.css",
|
317
322
|
"test/rails_root/public/stylesheets/styles.css",
|
318
323
|
"test/rails_root/public/stylesheets/themes/blue/styles.css",
|
@@ -334,16 +339,8 @@ Gem::Specification.new do |s|
|
|
334
339
|
"test/rails_root/script/process/spawner",
|
335
340
|
"test/rails_root/script/runner",
|
336
341
|
"test/rails_root/script/server",
|
337
|
-
"test/rails_root/test/factories.rb",
|
338
342
|
"test/rails_root/test/functional/.keep",
|
339
343
|
"test/rails_root/test/functional/comments_controller_test.rb",
|
340
|
-
"test/rails_root/test/mocks/development/.keep",
|
341
|
-
"test/rails_root/test/mocks/test/.keep",
|
342
|
-
"test/rails_root/test/shoulda_macros/controller.rb",
|
343
|
-
"test/rails_root/test/shoulda_macros/forms.rb",
|
344
|
-
"test/rails_root/test/shoulda_macros/models.rb",
|
345
|
-
"test/rails_root/test/shoulda_macros/pagination.rb",
|
346
|
-
"test/rails_root/test/shoulda_macros/plugins.rb",
|
347
344
|
"test/rails_root/test/test_helper.rb",
|
348
345
|
"test/rails_root/test/unit/.keep",
|
349
346
|
"test/rails_root/test/unit/comment_mailer_test.rb",
|
@@ -354,7 +351,7 @@ Gem::Specification.new do |s|
|
|
354
351
|
"test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb",
|
355
352
|
"uninstall.rb"
|
356
353
|
]
|
357
|
-
s.homepage = %q{http://github.com/
|
354
|
+
s.homepage = %q{http://github.com/tatemae/muck_comments}
|
358
355
|
s.rdoc_options = ["--charset=UTF-8"]
|
359
356
|
s.require_paths = ["lib"]
|
360
357
|
s.rubyforge_project = %q{muck-comments}
|
@@ -365,6 +362,7 @@ Gem::Specification.new do |s|
|
|
365
362
|
"test/rails_root/app/controllers/default_controller.rb",
|
366
363
|
"test/rails_root/app/helpers/application_helper.rb",
|
367
364
|
"test/rails_root/app/models/comment.rb",
|
365
|
+
"test/rails_root/app/models/profile.rb",
|
368
366
|
"test/rails_root/app/models/user.rb",
|
369
367
|
"test/rails_root/app/models/user_session.rb",
|
370
368
|
"test/rails_root/config/boot.rb",
|
@@ -384,7 +382,7 @@ Gem::Specification.new do |s|
|
|
384
382
|
"test/rails_root/db/migrate/20090402234137_create_languages.rb",
|
385
383
|
"test/rails_root/db/migrate/20090426041056_create_countries.rb",
|
386
384
|
"test/rails_root/db/migrate/20090426041103_create_states.rb",
|
387
|
-
"test/rails_root/db/migrate/
|
385
|
+
"test/rails_root/db/migrate/20090512013727_create_profiles.rb",
|
388
386
|
"test/rails_root/db/migrate/20090608073052_create_friends.rb",
|
389
387
|
"test/rails_root/db/migrate/20090613173314_create_comments.rb",
|
390
388
|
"test/rails_root/db/migrate/20090703055724_add_contents.rb",
|
@@ -402,13 +400,7 @@ Gem::Specification.new do |s|
|
|
402
400
|
"test/rails_root/features/support/paths.rb",
|
403
401
|
"test/rails_root/public/dispatch.rb",
|
404
402
|
"test/rails_root/script/create_project.rb",
|
405
|
-
"test/rails_root/test/factories.rb",
|
406
403
|
"test/rails_root/test/functional/comments_controller_test.rb",
|
407
|
-
"test/rails_root/test/shoulda_macros/controller.rb",
|
408
|
-
"test/rails_root/test/shoulda_macros/forms.rb",
|
409
|
-
"test/rails_root/test/shoulda_macros/models.rb",
|
410
|
-
"test/rails_root/test/shoulda_macros/pagination.rb",
|
411
|
-
"test/rails_root/test/shoulda_macros/plugins.rb",
|
412
404
|
"test/rails_root/test/test_helper.rb",
|
413
405
|
"test/rails_root/test/unit/comment_mailer_test.rb",
|
414
406
|
"test/rails_root/test/unit/comment_test.rb",
|
data/test/rails_root/Rakefile
CHANGED
@@ -13,11 +13,12 @@ require 'muck_comments/tasks'
|
|
13
13
|
require 'muck_engine/tasks'
|
14
14
|
require 'muck_users/tasks'
|
15
15
|
require 'muck_activities/tasks'
|
16
|
+
require 'muck_profiles/tasks'
|
16
17
|
|
17
18
|
namespace :muck do
|
18
19
|
|
19
20
|
def muck_gems
|
20
|
-
['
|
21
|
+
['muck-engine', 'muck-users', 'muck-activities', 'muck-comments', 'muck-profiles']
|
21
22
|
end
|
22
23
|
|
23
24
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
RAILS_GEM_VERSION = '2.3.
|
1
|
+
RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION
|
2
2
|
|
3
3
|
require File.join(File.dirname(__FILE__), 'boot')
|
4
4
|
|
@@ -15,16 +15,18 @@ end
|
|
15
15
|
|
16
16
|
Rails::Initializer.run do |config|
|
17
17
|
config.time_zone = 'UTC'
|
18
|
-
config.gem
|
19
|
-
config.gem "
|
20
|
-
config.gem "
|
18
|
+
config.gem "will_paginate"
|
19
|
+
config.gem "authlogic"
|
20
|
+
config.gem "searchlogic"
|
21
21
|
config.gem "bcrypt-ruby", :lib => "bcrypt", :version => ">=2.0.5"
|
22
|
-
config.gem
|
23
|
-
config.gem "
|
24
|
-
config.gem "friendly_id"
|
22
|
+
config.gem "acts-as-taggable-on"
|
23
|
+
config.gem "awesome_nested_set"
|
24
|
+
config.gem "friendly_id"
|
25
|
+
config.gem "paperclip"
|
25
26
|
config.gem "babelphish"
|
26
27
|
config.gem 'muck-engine', :lib => 'muck_engine'
|
27
28
|
config.gem 'muck-users', :lib => 'muck_users'
|
29
|
+
config.gem 'muck-profiles', :lib => 'muck_profiles'
|
28
30
|
config.gem 'muck-activities', :lib => 'muck_activities'
|
29
31
|
config.plugin_locators << TestGemLocator
|
30
32
|
end
|
@@ -26,17 +26,3 @@ HOST = "localhost"
|
|
26
26
|
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
27
27
|
# like if you have constraints or database-specific column types
|
28
28
|
# config.active_record.schema_format = :sql
|
29
|
-
|
30
|
-
config.gem 'thoughtbot-factory_girl', :lib => 'factory_girl', :source => 'http://gems.github.com'
|
31
|
-
config.gem 'thoughtbot-shoulda', :lib => 'shoulda', :source => 'http://gems.github.com'
|
32
|
-
config.gem 'treetop', :version => '>=1.2.4'
|
33
|
-
config.gem 'term-ansicolor', :version => '>=1.0.3', :lib => 'term/ansicolor'
|
34
|
-
config.gem 'polyglot', :version => '>=0.2.4'
|
35
|
-
config.gem "rcov", :version => '>=0.8.1.2.0'
|
36
|
-
|
37
|
-
# only required if you want to use selenium for testing
|
38
|
-
config.gem 'selenium-client', :lib => 'selenium/client'
|
39
|
-
config.gem 'bmabey-database_cleaner', :lib => 'database_cleaner', :source => 'http://gems.github.com'
|
40
|
-
|
41
|
-
require 'factory_girl'
|
42
|
-
begin require 'redgreen'; rescue LoadError; end
|
@@ -5,7 +5,7 @@ class CreateLanguages < ActiveRecord::Migration
|
|
5
5
|
t.string :english_name
|
6
6
|
t.string :locale
|
7
7
|
t.boolean :supported, :default => true
|
8
|
-
t.
|
8
|
+
t.boolean :is_default, :default => false
|
9
9
|
end
|
10
10
|
add_index :languages, :name
|
11
11
|
add_index :languages, :locale
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class CreateProfiles < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def self.up
|
4
|
+
|
5
|
+
create_table :profiles, :force => true do |t|
|
6
|
+
t.integer :user_id
|
7
|
+
t.string :photo_file_name
|
8
|
+
t.string :photo_content_type
|
9
|
+
t.integer :photo_file_size
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :profiles, ['user_id']
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.down
|
18
|
+
drop_table :profiles
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
(function($){$().ajaxSend(function(a,xhr,s){xhr.setRequestHeader("Accept","text/javascript, text/html, application/xml, text/xml, */*")})})(jQuery);(function($){$.fn.reset=function(){return this.each(function(){if(typeof this.reset=="function"||(typeof this.reset=="object"&&!this.reset.nodeType)){this.reset()}})};$.fn.enable=function(){return this.each(function(){this.disabled=false})};$.fn.disable=function(){return this.each(function(){this.disabled=true})}})(jQuery);(function($){$.extend({fieldEvent:function(el,obs){var field=el[0]||el,e="change";if(field.type=="radio"||field.type=="checkbox"){e="click"}else{if(obs&&field.type=="text"||field.type=="textarea"){e="keyup"}}return e}});$.fn.extend({delayedObserver:function(delay,callback){var el=$(this);if(typeof window.delayedObserverStack=="undefined"){window.delayedObserverStack=[]}if(typeof window.delayedObserverCallback=="undefined"){window.delayedObserverCallback=function(stackPos){observed=window.delayedObserverStack[stackPos];if(observed.timer){clearTimeout(observed.timer)}observed.timer=setTimeout(function(){observed.timer=null;observed.callback(observed.obj,observed.obj.formVal())},observed.delay*1000);observed.oldVal=observed.obj.formVal()}}window.delayedObserverStack.push({obj:el,timer:null,delay:delay,oldVal:el.formVal(),callback:callback});var stackPos=window.delayedObserverStack.length-1;if(el[0].tagName=="FORM"){$(":input",el).each(function(){var field=$(this);field.bind($.fieldEvent(field,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})})}else{el.bind($.fieldEvent(el,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})}},formVal:function(){var el=this[0];if(el.tagName=="FORM"){return this.serialize()}if(el.type=="checkbox"||self.type=="radio"){return this.filter("input:checked").val()||""}else{return this.val()}}})})(jQuery);(function($){$.fn.extend({visualEffect:function(o){e=o.replace(/\_(.)/g,function(m,l){return l.toUpperCase()});return eval("$(this)."+e+"()")},appear:function(speed,callback){return this.fadeIn(speed,callback)},blindDown:function(speed,callback){return this.show("blind",{direction:"vertical"},speed,callback)},blindUp:function(speed,callback){return this.hide("blind",{direction:"vertical"},speed,callback)},blindRight:function(speed,callback){return this.show("blind",{direction:"horizontal"},speed,callback)},blindLeft:function(speed,callback){this.hide("blind",{direction:"horizontal"},speed,callback);return this},dropOut:function(speed,callback){return this.hide("drop",{direction:"down"},speed,callback)},dropIn:function(speed,callback){return this.show("drop",{direction:"up"},speed,callback)},fade:function(speed,callback){return this.fadeOut(speed,callback)},fadeToggle:function(speed,callback){return this.animate({opacity:"toggle"},speed,callback)},fold:function(speed,callback){return this.hide("fold",{},speed,callback)},foldOut:function(speed,callback){return this.show("fold",{},speed,callback)},grow:function(speed,callback){return this.show("scale",{},speed,callback)},highlight:function(speed,callback){return this.show("highlight",{},speed,callback)},puff:function(speed,callback){return this.hide("puff",{},speed,callback)},pulsate:function(speed,callback){return this.show("pulsate",{},speed,callback)},shake:function(speed,callback){return this.show("shake",{},speed,callback)},shrink:function(speed,callback){return this.hide("scale",{},speed,callback)},squish:function(speed,callback){return this.hide("scale",{origin:["top","left"]},speed,callback)},slideUp:function(speed,callback){return this.hide("slide",{direction:"up"},speed,callback)},slideDown:function(speed,callback){return this.show("slide",{direction:"up"},speed,callback)},switchOff:function(speed,callback){return this.hide("clip",{},speed,callback)},switchOn:function(speed,callback){return this.show("clip",{},speed,callback)}})})(jQuery);
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/* activity feed */
|
2
|
+
#activity-status-control{border:solid 1px #ccc;padding:10px 7px;background-color:#eee;}
|
3
|
+
#status-update-field{}
|
4
|
+
ul#status-menu{list-style:none;}
|
5
|
+
ul#status-menu li{float:left;display:inline;margin:0 5px;}
|
6
|
+
#status-update-button input{padding:0;}
|
7
|
+
.status-update-dim{}
|
8
|
+
.status-update-lit{}
|
9
|
+
ul#activity-filter{list-style:none;}
|
10
|
+
ul#activity-filter li{border-bottom:solid 1px #ccc;}
|
11
|
+
ul#activity-filter li a{text-decoration:none;}
|
12
|
+
ul#activity-filter li a:hover;{text-decoration:underline;}
|
13
|
+
ul#activity-filter li.current a{color:#5EAC18;}
|
14
|
+
.activity{clear:both;display:block;}
|
15
|
+
#activity-feed{margin:15px 0 0 0;}
|
16
|
+
#activity-feed-content .activity{margin:8px 0 4px 0;}
|
17
|
+
#activity-feed-content .activity-time{font-size:1em;font-color:#eee;clear:left;}
|
18
|
+
#activity-icon, .actor-icon{width:50px;float:left;margin:0 10px 10px 0;}
|
19
|
+
#activity-feed-content .actor, #current-status-name{font-weight:bolder;font-size:1.3em;}
|
20
|
+
.activity-time, .status-time{color:#777777;font-size:.9em;}
|
21
|
+
p#current-status-text, .activity-content p{margin:0;}
|
22
|
+
form.activity-delete {position:relative;display:inline;float:right;display:none;}
|
23
|
+
form.activity-delete input{padding:0;margin:0;width:15px;height:15px;position:absolute;right:0px;bottom:0px;}
|
24
|
+
.activity .activity-hover form.activity-delete{display:block;}
|
25
|
+
.welcome_activity{font-size:14px;}
|
26
|
+
a.upload-button{background:transparent url('/images/icons/button_background.png') no-repeat scroll left top;text-decoration:none;padding:0px 23px 1px 6px;color:#fff;font-weight:bold;}
|
27
|
+
a.upload-button:hover{background:transparent url('/images/icons/button_background.png') no-repeat scroll left bottom;}
|
28
|
+
/* comments under activity feed */
|
29
|
+
.activity-comment{border:1px solid #ccc;margin:2px 50px 2px 60px;padding:.5em;background-color:#eee;}
|
30
|
+
.activity-comment .actor-icon{width:40px;}
|
31
|
+
.activity-comment .actor-icon img{width:40px;height:40px;}
|
32
|
+
.activity-comment textarea.max{width:80%;height:30px;}
|
33
|
+
.activity-comment textarea.min{height:15px;width:50%;}
|
34
|
+
.activity-comment p{margin:0;}
|
35
|
+
.activity-comment .actor a{font-size:.8em;}
|
36
|
+
.activity form.comment-delete {position:relative;display:inline;float:right;}
|
37
|
+
.activity form.comment-delete input{padding:0;margin:0;width:15px;height:15px;position:absolute;right:0px;top:0px;}
|
38
|
+
.activity form.comment-delete{display:none;}
|
39
|
+
.activity .comment-hover form.comment-delete{display:block;}
|
@@ -1,48 +1,11 @@
|
|
1
1
|
$:.reject! { |e| e.include? 'TextMate' }
|
2
2
|
ENV["RAILS_ENV"] = "test"
|
3
3
|
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
|
4
|
-
|
5
|
-
require '
|
6
|
-
gem 'thoughtbot-factory_girl' # from github
|
7
|
-
require 'factory_girl'
|
4
|
+
gem 'muck-engine'
|
5
|
+
require 'muck_test_helper'
|
8
6
|
require 'authlogic/test_case'
|
9
|
-
require 'redgreen' rescue LoadError
|
10
|
-
require File.expand_path(File.dirname(__FILE__) + '/factories')
|
11
|
-
require File.join(File.dirname(__FILE__), 'shoulda_macros', 'controller')
|
12
|
-
require File.join(File.dirname(__FILE__), 'shoulda_macros', 'models')
|
13
|
-
|
14
|
-
class ActiveSupport::TestCase
|
15
|
-
self.use_transactional_fixtures = true
|
16
|
-
self.use_instantiated_fixtures = false
|
17
7
|
|
8
|
+
class ActiveSupport::TestCase
|
9
|
+
include MuckTestMethods
|
18
10
|
include Authlogic::TestCase
|
19
|
-
|
20
|
-
def login_as(user)
|
21
|
-
success = UserSession.create(user)
|
22
|
-
if !success
|
23
|
-
errors = user.errors.full_messages.to_sentence
|
24
|
-
message = 'User has not been activated' if !user.active?
|
25
|
-
raise "could not login as #{user.to_param}. Please make sure the user is valid. #{message} #{errors}"
|
26
|
-
end
|
27
|
-
UserSession.find
|
28
|
-
end
|
29
|
-
|
30
|
-
def assure_logout
|
31
|
-
user_session = UserSession.find
|
32
|
-
user_session.destroy if user_session
|
33
|
-
end
|
34
|
-
|
35
|
-
def ensure_flash(val)
|
36
|
-
assert_contains flash.values, val, ", Flash: #{flash.inspect}"
|
37
|
-
end
|
38
|
-
|
39
|
-
# For Selenium
|
40
|
-
# setup do |session|
|
41
|
-
# session.host! "localhost:3001"
|
42
|
-
# end
|
43
|
-
|
44
|
-
def make_parent_params(parent)
|
45
|
-
{ :parent_id => parent.id, :parent_type => parent.class.to_s }
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muck-comments
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Ball
|
8
|
+
- Joel Duffin
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date: 2009-11-
|
13
|
+
date: 2009-11-13 00:00:00 -07:00
|
13
14
|
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
@@ -33,7 +34,7 @@ dependencies:
|
|
33
34
|
version: "0"
|
34
35
|
version:
|
35
36
|
description: The comment engine for the muck system.
|
36
|
-
email:
|
37
|
+
email: justin@tatemae.com
|
37
38
|
executables: []
|
38
39
|
|
39
40
|
extensions: []
|
@@ -118,13 +119,13 @@ files:
|
|
118
119
|
- tasks/muck_comments_tasks.rake
|
119
120
|
- test/rails_root/.gitignore
|
120
121
|
- test/rails_root/.rake_tasks
|
121
|
-
- test/rails_root/Capfile
|
122
122
|
- test/rails_root/Rakefile
|
123
123
|
- test/rails_root/app/controllers/application_controller.rb
|
124
124
|
- test/rails_root/app/controllers/default_controller.rb
|
125
125
|
- test/rails_root/app/helpers/application_helper.rb
|
126
126
|
- test/rails_root/app/models/.keep
|
127
127
|
- test/rails_root/app/models/comment.rb
|
128
|
+
- test/rails_root/app/models/profile.rb
|
128
129
|
- test/rails_root/app/models/user.rb
|
129
130
|
- test/rails_root/app/models/user_session.rb
|
130
131
|
- test/rails_root/app/views/default/index.html.erb
|
@@ -150,7 +151,7 @@ files:
|
|
150
151
|
- test/rails_root/db/migrate/20090402234137_create_languages.rb
|
151
152
|
- test/rails_root/db/migrate/20090426041056_create_countries.rb
|
152
153
|
- test/rails_root/db/migrate/20090426041103_create_states.rb
|
153
|
-
- test/rails_root/db/migrate/
|
154
|
+
- test/rails_root/db/migrate/20090512013727_create_profiles.rb
|
154
155
|
- test/rails_root/db/migrate/20090608073052_create_friends.rb
|
155
156
|
- test/rails_root/db/migrate/20090613173314_create_comments.rb
|
156
157
|
- test/rails_root/db/migrate/20090703055724_add_contents.rb
|
@@ -202,10 +203,13 @@ files:
|
|
202
203
|
- test/rails_root/public/images/icons/comment.png
|
203
204
|
- test/rails_root/public/images/icons/delete.png
|
204
205
|
- test/rails_root/public/images/icons/exclaim.png
|
206
|
+
- test/rails_root/public/images/icons/external.png
|
207
|
+
- test/rails_root/public/images/icons/feed.png
|
205
208
|
- test/rails_root/public/images/icons/grey_guy.png
|
206
209
|
- test/rails_root/public/images/icons/hide.png
|
207
210
|
- test/rails_root/public/images/icons/information.png
|
208
211
|
- test/rails_root/public/images/icons/minus.png
|
212
|
+
- test/rails_root/public/images/icons/pending.png
|
209
213
|
- test/rails_root/public/images/icons/question.png
|
210
214
|
- test/rails_root/public/images/icons/search_box.png
|
211
215
|
- test/rails_root/public/images/icons/star.png
|
@@ -232,6 +236,7 @@ files:
|
|
232
236
|
- test/rails_root/public/javascripts/jquery/jquery.jgrowl.js
|
233
237
|
- test/rails_root/public/javascripts/jquery/jquery.js
|
234
238
|
- test/rails_root/public/javascripts/jquery/jquery.tips.js
|
239
|
+
- test/rails_root/public/javascripts/jquery/jrails.js
|
235
240
|
- test/rails_root/public/javascripts/muck.js
|
236
241
|
- test/rails_root/public/javascripts/muck_activities.js
|
237
242
|
- test/rails_root/public/javascripts/muck_time/en.js
|
@@ -338,6 +343,7 @@ files:
|
|
338
343
|
- test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png
|
339
344
|
- test/rails_root/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png
|
340
345
|
- test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.1.custom.css
|
346
|
+
- test/rails_root/public/stylesheets/muck-activities.css
|
341
347
|
- test/rails_root/public/stylesheets/reset.css
|
342
348
|
- test/rails_root/public/stylesheets/styles.css
|
343
349
|
- test/rails_root/public/stylesheets/themes/blue/styles.css
|
@@ -359,16 +365,8 @@ files:
|
|
359
365
|
- test/rails_root/script/process/spawner
|
360
366
|
- test/rails_root/script/runner
|
361
367
|
- test/rails_root/script/server
|
362
|
-
- test/rails_root/test/factories.rb
|
363
368
|
- test/rails_root/test/functional/.keep
|
364
369
|
- test/rails_root/test/functional/comments_controller_test.rb
|
365
|
-
- test/rails_root/test/mocks/development/.keep
|
366
|
-
- test/rails_root/test/mocks/test/.keep
|
367
|
-
- test/rails_root/test/shoulda_macros/controller.rb
|
368
|
-
- test/rails_root/test/shoulda_macros/forms.rb
|
369
|
-
- test/rails_root/test/shoulda_macros/models.rb
|
370
|
-
- test/rails_root/test/shoulda_macros/pagination.rb
|
371
|
-
- test/rails_root/test/shoulda_macros/plugins.rb
|
372
370
|
- test/rails_root/test/test_helper.rb
|
373
371
|
- test/rails_root/test/unit/.keep
|
374
372
|
- test/rails_root/test/unit/comment_mailer_test.rb
|
@@ -379,7 +377,7 @@ files:
|
|
379
377
|
- test/rails_root/vendor/plugins/ssl_requirement/test/ssl_requirement_test.rb
|
380
378
|
- uninstall.rb
|
381
379
|
has_rdoc: true
|
382
|
-
homepage: http://github.com/
|
380
|
+
homepage: http://github.com/tatemae/muck_comments
|
383
381
|
licenses: []
|
384
382
|
|
385
383
|
post_install_message:
|
@@ -411,6 +409,7 @@ test_files:
|
|
411
409
|
- test/rails_root/app/controllers/default_controller.rb
|
412
410
|
- test/rails_root/app/helpers/application_helper.rb
|
413
411
|
- test/rails_root/app/models/comment.rb
|
412
|
+
- test/rails_root/app/models/profile.rb
|
414
413
|
- test/rails_root/app/models/user.rb
|
415
414
|
- test/rails_root/app/models/user_session.rb
|
416
415
|
- test/rails_root/config/boot.rb
|
@@ -430,7 +429,7 @@ test_files:
|
|
430
429
|
- test/rails_root/db/migrate/20090402234137_create_languages.rb
|
431
430
|
- test/rails_root/db/migrate/20090426041056_create_countries.rb
|
432
431
|
- test/rails_root/db/migrate/20090426041103_create_states.rb
|
433
|
-
- test/rails_root/db/migrate/
|
432
|
+
- test/rails_root/db/migrate/20090512013727_create_profiles.rb
|
434
433
|
- test/rails_root/db/migrate/20090608073052_create_friends.rb
|
435
434
|
- test/rails_root/db/migrate/20090613173314_create_comments.rb
|
436
435
|
- test/rails_root/db/migrate/20090703055724_add_contents.rb
|
@@ -448,13 +447,7 @@ test_files:
|
|
448
447
|
- test/rails_root/features/support/paths.rb
|
449
448
|
- test/rails_root/public/dispatch.rb
|
450
449
|
- test/rails_root/script/create_project.rb
|
451
|
-
- test/rails_root/test/factories.rb
|
452
450
|
- test/rails_root/test/functional/comments_controller_test.rb
|
453
|
-
- test/rails_root/test/shoulda_macros/controller.rb
|
454
|
-
- test/rails_root/test/shoulda_macros/forms.rb
|
455
|
-
- test/rails_root/test/shoulda_macros/models.rb
|
456
|
-
- test/rails_root/test/shoulda_macros/pagination.rb
|
457
|
-
- test/rails_root/test/shoulda_macros/plugins.rb
|
458
451
|
- test/rails_root/test/test_helper.rb
|
459
452
|
- test/rails_root/test/unit/comment_mailer_test.rb
|
460
453
|
- test/rails_root/test/unit/comment_test.rb
|
data/test/rails_root/Capfile
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
class CreateUsers < ActiveRecord::Migration
|
2
|
-
|
3
|
-
def self.up
|
4
|
-
create_table :users, :force => true do |t|
|
5
|
-
t.string :login
|
6
|
-
t.string :email
|
7
|
-
t.string :first_name
|
8
|
-
t.string :last_name
|
9
|
-
t.string :crypted_password
|
10
|
-
t.string :password_salt
|
11
|
-
t.string :persistence_token
|
12
|
-
t.string :single_access_token
|
13
|
-
t.string :perishable_token
|
14
|
-
t.integer :login_count, :null => false, :default => 0
|
15
|
-
t.integer :failed_login_count, :null => false, :default => 0
|
16
|
-
t.datetime :last_request_at
|
17
|
-
t.datetime :last_login_at
|
18
|
-
t.datetime :current_login_at
|
19
|
-
t.string :current_login_ip
|
20
|
-
t.string :last_login_ip
|
21
|
-
t.boolean :terms_of_service, :default => false, :null => false
|
22
|
-
t.string :time_zone, :default => "UTC"
|
23
|
-
t.datetime :disabled_at
|
24
|
-
t.datetime :activated_at
|
25
|
-
t.timestamps
|
26
|
-
end
|
27
|
-
|
28
|
-
add_index :users, :login
|
29
|
-
add_index :users, :email
|
30
|
-
add_index :users, :persistence_token
|
31
|
-
add_index :users, :perishable_token
|
32
|
-
add_index :users, :single_access_token
|
33
|
-
add_index :users, :last_request_at
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.down
|
37
|
-
drop_table :users
|
38
|
-
end
|
39
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
Factory.sequence :email do |n|
|
2
|
-
"somebody#{n}@example.com"
|
3
|
-
end
|
4
|
-
|
5
|
-
Factory.sequence :login do |n|
|
6
|
-
"inquire#{n}"
|
7
|
-
end
|
8
|
-
|
9
|
-
Factory.sequence :name do |n|
|
10
|
-
"a_name#{n}"
|
11
|
-
end
|
12
|
-
|
13
|
-
Factory.sequence :title do |n|
|
14
|
-
"a_title#{n}"
|
15
|
-
end
|
16
|
-
|
17
|
-
Factory.sequence :abbr do |n|
|
18
|
-
"abbr#{n}"
|
19
|
-
end
|
20
|
-
|
21
|
-
Factory.sequence :description do |n|
|
22
|
-
"This is the description: #{n}"
|
23
|
-
end
|
24
|
-
|
25
|
-
Factory.sequence :uri do |n|
|
26
|
-
"n#{n}.example.com"
|
27
|
-
end
|
28
|
-
|
29
|
-
Factory.define :state do |f|
|
30
|
-
f.name { Factory.next(:name) }
|
31
|
-
f.abbreviation { Factory.next(:abbr) }
|
32
|
-
f.country {|a| a.association(:country) }
|
33
|
-
end
|
34
|
-
|
35
|
-
Factory.define :country do |f|
|
36
|
-
f.name { Factory.next(:name) }
|
37
|
-
f.abbreviation { Factory.next(:abbr) }
|
38
|
-
end
|
39
|
-
|
40
|
-
Factory.define :user do |f|
|
41
|
-
f.login { Factory.next(:login) }
|
42
|
-
f.email { Factory.next(:email) }
|
43
|
-
f.password 'inquire_pass'
|
44
|
-
f.password_confirmation 'inquire_pass'
|
45
|
-
f.first_name 'test'
|
46
|
-
f.last_name 'guy'
|
47
|
-
f.terms_of_service true
|
48
|
-
f.activated_at DateTime.now
|
49
|
-
end
|
50
|
-
|
51
|
-
Factory.define :permission do |f|
|
52
|
-
f.role {|a| a.association(:role)}
|
53
|
-
f.user {|a| a.association(:user)}
|
54
|
-
end
|
55
|
-
|
56
|
-
Factory.define :role do |f|
|
57
|
-
f.rolename 'administrator'
|
58
|
-
end
|
59
|
-
|
60
|
-
Factory.define :comment do |f|
|
61
|
-
f.body { Factory.next(:description) }
|
62
|
-
f.user {|a| a.association(:user)}
|
63
|
-
f.commentable {|a| a.association(:user)}
|
64
|
-
end
|
65
|
-
|
66
|
-
Factory.define :domain_theme do |f|
|
67
|
-
f.name { Factory.next(:name) }
|
68
|
-
f.uri { Factory.next(:uri) }
|
69
|
-
end
|
70
|
-
|
71
|
-
Factory.define :theme do |f|
|
72
|
-
f.name { Factory.next(:name) }
|
73
|
-
end
|
74
|
-
|
75
|
-
|
File without changes
|
File without changes
|
@@ -1,49 +0,0 @@
|
|
1
|
-
module MuckControllerMacros
|
2
|
-
|
3
|
-
def should_require_login(*args)
|
4
|
-
args = Hash[*args]
|
5
|
-
login_url = args.delete :login_url
|
6
|
-
args.each do |action, verb|
|
7
|
-
should "Require login for '#{action}' action" do
|
8
|
-
if [:put, :delete].include?(verb) # put and delete require an id even if it is a bogus one
|
9
|
-
send(verb, action, :id => 1)
|
10
|
-
else
|
11
|
-
send(verb, action)
|
12
|
-
end
|
13
|
-
assert_redirected_to(login_url)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def should_require_role(role, redirect_url, *actions)
|
19
|
-
actions.each do |action|
|
20
|
-
should "require role for '#{action}' action" do
|
21
|
-
get(action)
|
22
|
-
ensure_flash(/permission/i)
|
23
|
-
assert_response :redirect
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
#from: http://blog.internautdesign.com/2008/9/11/more-on-custom-shoulda-macros-scoping-of-instance-variables
|
29
|
-
def should_not_allow action, object, url= "/login", msg=nil
|
30
|
-
msg ||= "a #{object.class.to_s.downcase}"
|
31
|
-
should "not be able to #{action} #{msg}" do
|
32
|
-
object = eval(object, self.send(:binding), __FILE__, __LINE__)
|
33
|
-
get action, :id => object.id
|
34
|
-
assert_redirected_to url
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def should_allow action, object, msg=nil
|
39
|
-
msg ||= "a #{object.class.to_s.downcase}"
|
40
|
-
should "be able to #{action} #{msg}" do
|
41
|
-
object = eval(object, self.send(:binding), __FILE__, __LINE__)
|
42
|
-
get action, :id => object.id
|
43
|
-
assert_response :success
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
ActionController::TestCase.extend(MuckControllerMacros)
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module ShouldaFormMacros
|
2
|
-
def self.should_have_form(opts)
|
3
|
-
model = self.name.gsub(/ControllerTest$/, '').singularize.downcase
|
4
|
-
model = model[model.rindex('::')+2..model.size] if model.include?('::')
|
5
|
-
http_method, hidden_http_method = form_http_method opts[:method]
|
6
|
-
should "have a #{model} form" do
|
7
|
-
assert_select "form[action=?][method=#{http_method}]", eval(opts[:action]) do
|
8
|
-
if hidden_http_method
|
9
|
-
assert_select "input[type=hidden][name=_method][value=#{hidden_http_method}]"
|
10
|
-
end
|
11
|
-
opts[:fields].each do |attribute, type|
|
12
|
-
attribute = attribute.is_a?(Symbol) ? "#{model}[#{attribute.to_s}]" : attribute
|
13
|
-
assert_select "input[type=#{type.to_s}][name=?]", attribute
|
14
|
-
end
|
15
|
-
assert_select "input[type=submit]"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.form_http_method(http_method)
|
21
|
-
http_method = http_method.nil? ? 'post' : http_method.to_s
|
22
|
-
if http_method == "post" || http_method == "get"
|
23
|
-
return http_method, nil
|
24
|
-
else
|
25
|
-
return "post", http_method
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class ActiveSupport::TestCase
|
31
|
-
extend ShouldaFormMacros
|
32
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module ShouldaModelMacros
|
2
|
-
|
3
|
-
def should_sanitize(*attributes)
|
4
|
-
bad_scripts = [
|
5
|
-
%|';alert(String.fromCharCode(88,83,83))//';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>|,
|
6
|
-
%|'';!--"<XSS>=&{()}|,
|
7
|
-
%|<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>|,
|
8
|
-
%|<IMG SRC="javascript:alert('XSS');">|,
|
9
|
-
%|<IMG SRC=javascript:alert('XSS')>|,
|
10
|
-
%|<IMG SRC=JaVaScRiPt:alert('XSS')>|,
|
11
|
-
%|<IMG SRC=JaVaScRiPt:alert('XSS')>|,
|
12
|
-
%|<IMG SRC=`javascript:alert("RSnake says, 'XSS'")`>|,
|
13
|
-
%|<IMG """><SCRIPT>alert("XSS")</SCRIPT>">|,
|
14
|
-
%|<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>|,
|
15
|
-
%|<A HREF="h
|
16
|
-
tt p://6	6.000146.0x7.147/">XSS</A>|,
|
17
|
-
%|<script>alert('message');</script>| ]
|
18
|
-
|
19
|
-
klass = model_class
|
20
|
-
attributes.each do |attribute|
|
21
|
-
attribute = attribute.to_sym
|
22
|
-
should "white list #{attribute}" do
|
23
|
-
assert object = klass.find(:first), "Can't find first #{klass}"
|
24
|
-
bad_scripts.each do |bad_value|
|
25
|
-
object.send("#{attribute}=", bad_value)
|
26
|
-
object.save
|
27
|
-
clean_value = object.send("#{attribute}")
|
28
|
-
assert !clean_value.include?(bad_value), "#{attribute} is not white listed. #{bad_value} made it through"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def should_accept_nested_attributes_for(*attr_names)
|
35
|
-
klass = self.name.gsub(/Test$/, '').constantize
|
36
|
-
|
37
|
-
context "#{klass}" do
|
38
|
-
attr_names.each do |association_name|
|
39
|
-
should "accept nested attrs for #{association_name}" do
|
40
|
-
assert klass.instance_methods.include?("#{association_name}_attributes="),
|
41
|
-
"#{klass} does not accept nested attributes for #{association_name}"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class ActiveSupport::TestCase
|
49
|
-
extend ShouldaModelMacros
|
50
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module ShouldaPaginationMacros
|
2
|
-
# Example:
|
3
|
-
# context "a GET to index logged in as admin" do
|
4
|
-
# setup do
|
5
|
-
# login_as_admin
|
6
|
-
# get :index
|
7
|
-
# end
|
8
|
-
# should_paginate_collection :users
|
9
|
-
# should_display_pagination
|
10
|
-
# end
|
11
|
-
def self.should_paginate_collection(collection_name)
|
12
|
-
should "paginate #{collection_name}" do
|
13
|
-
assert collection = assigns(collection_name),
|
14
|
-
"Controller isn't assigning to @#{collection_name.to_s}."
|
15
|
-
assert_kind_of WillPaginate::Collection, collection,
|
16
|
-
"@#{collection_name.to_s} isn't a WillPaginate collection."
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.should_display_pagination
|
21
|
-
should "display pagination" do
|
22
|
-
assert_select "div.pagination", { :minimum => 1 },
|
23
|
-
"View isn't displaying pagination. Add <%= will_paginate @collection %>."
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Example:
|
28
|
-
# context "a GET to index not logged in as admin" do
|
29
|
-
# setup { get :index }
|
30
|
-
# should_not_paginate_collection :users
|
31
|
-
# should_not_display_pagination
|
32
|
-
# end
|
33
|
-
def self.should_not_paginate_collection(collection_name)
|
34
|
-
should "not paginate #{collection_name}" do
|
35
|
-
assert collection = assigns(collection_name),
|
36
|
-
"Controller isn't assigning to @#{collection_name.to_s}."
|
37
|
-
assert_not_equal WillPaginate::Collection, collection.class,
|
38
|
-
"@#{collection_name.to_s} is a WillPaginate collection."
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.should_not_display_pagination
|
43
|
-
should "not display pagination" do
|
44
|
-
assert_select "div.pagination", { :count => 0 },
|
45
|
-
"View is displaying pagination. Check your logic."
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
|
51
|
-
class ActiveSupport::TestCase
|
52
|
-
extend ShouldaPaginationMacros
|
53
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module ShouldaPluginMacros
|
2
|
-
|
3
|
-
def self.should_act_as_taggable_on_steroids
|
4
|
-
klass = self.name.gsub(/Test$/, '').constantize
|
5
|
-
|
6
|
-
should "include ActsAsTaggableOnSteroids methods" do
|
7
|
-
assert klass.extended_by.include?(ActiveRecord::Acts::Taggable::ClassMethods)
|
8
|
-
assert klass.extended_by.include?(ActiveRecord::Acts::Taggable::SingletonMethods)
|
9
|
-
assert klass.include?(ActiveRecord::Acts::Taggable::InstanceMethods)
|
10
|
-
end
|
11
|
-
|
12
|
-
should_have_many :taggings, :tags
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
def self.should_act_as_list
|
17
|
-
klass = self.name.gsub(/Test$/, '').constantize
|
18
|
-
|
19
|
-
context "To support acts_as_list" do
|
20
|
-
should_have_db_column('position', :type => :integer)
|
21
|
-
end
|
22
|
-
|
23
|
-
should "include ActsAsList methods" do
|
24
|
-
assert klass.include?(ActiveRecord::Acts::List::InstanceMethods)
|
25
|
-
end
|
26
|
-
|
27
|
-
should_have_instance_methods :acts_as_list_class, :position_column, :scope_condition
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
ActiveSupport::TestCase.extend(ShouldaPluginMacros)
|
33
|
-
Test::Unit::TestCase.extend(ShouldaPluginMacros)
|
34
|
-
ActionController::TestCase.extend(ShouldaPluginMacros)
|