mongoid_commentable 0.0.1 → 0.0.2

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/Gemfile CHANGED
@@ -4,6 +4,7 @@ gem "mongoid", "~> 2.0"
4
4
  gem "bson_ext", "~> 1.3"
5
5
 
6
6
  group :development do
7
+ gem "rr"
7
8
  gem "rspec", "~> 2.3.0"
8
9
  gem "database_cleaner"
9
10
  gem "bundler", "~> 1.0.0"
data/Gemfile.lock CHANGED
@@ -26,6 +26,7 @@ GEM
26
26
  will_paginate (~> 3.0.pre)
27
27
  rake (0.8.7)
28
28
  rcov (0.9.9)
29
+ rr (1.0.2)
29
30
  rspec (2.3.0)
30
31
  rspec-core (~> 2.3.0)
31
32
  rspec-expectations (~> 2.3.0)
@@ -47,4 +48,5 @@ DEPENDENCIES
47
48
  jeweler (~> 1.6.0)
48
49
  mongoid (~> 2.0)
49
50
  rcov
51
+ rr
50
52
  rspec (~> 2.3.0)
data/README.rdoc CHANGED
@@ -9,6 +9,9 @@ You can use latest gem:
9
9
  or in Gemfile:
10
10
  gem 'mongoid_commentable'
11
11
 
12
+ Then install required model and views:
13
+ rails generate mongoid_commentable:install
14
+
12
15
  == Usage
13
16
  To make model commentable you need to include Mongoid::Commentable into your document:
14
17
  class Article
@@ -30,11 +33,13 @@ And in your view file:
30
33
  For a reply link add parent comment id:
31
34
  <%= link_to "Reply", new_article_comment_path(:article_id => @article.id.to_s, :parent => comment.id.to_s) %>
32
35
 
33
- If you want to make a custom views for a comments, run:
34
- rails g mongoid_commentable:views
35
-
36
36
  To get a list of all comments, use following method:
37
37
  @article.comments_list
38
+ Example:
39
+ <% @article.comments_list.each do |comment| %>
40
+ <p> <%= comment.author %> </p>
41
+ <p> <%= comment.text %> </p>
42
+ <% end %>
38
43
  it will return comments in ascending order. To get comments in descending order use:
39
44
  @article.comments_list(:sort => :desc)
40
45
  NOTE: For descending ordered comments you need to add index to your model manually:
@@ -48,10 +53,10 @@ To get comment level, use following method:
48
53
  comment.level
49
54
 
50
55
  To mark comment as deleted, use following method:
51
- @article.mark_comment_deleted(comment_id)
56
+ @article.comments.find(comment_id).remove
52
57
 
53
- To get comments count, use:
54
- @article.comments_count
58
+ To restore comment, use method restore:
59
+ @article.comments.find(comment_id).restore
55
60
 
56
61
  == Contributing to mongoid_commentable
57
62
 
data/Rakefile CHANGED
@@ -18,6 +18,7 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.description = %Q{Mongoid_commentable provides methods to create commentable documents}
19
19
  gem.email = "mgolovnia@gmail.com"
20
20
  gem.authors = ["Max Golovnia"]
21
+ gem.version = File.read('VERSION').chomp
21
22
  end
22
23
  Jeweler::RubygemsDotOrgTasks.new
23
24
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/lib/comment.rb ADDED
@@ -0,0 +1,30 @@
1
+ module Mongoid_Commentable
2
+ module Comment
3
+ extend ActiveSupport::Concern
4
+
5
+ included do |base|
6
+ base.attr_accessible :path,:parent
7
+ base.field :path, :type => String, :default => ""
8
+ base.field :parent, :type => String
9
+ base.field :deleted_at, :type => Time
10
+ base.embedded_in :commentable, :polymorphic => true, :inverse_of => :comments
11
+ end
12
+
13
+ def level
14
+ path.count('.')
15
+ end
16
+
17
+ def remove
18
+ self.update_attribute(:deleted_at, Time.now)
19
+ end
20
+
21
+ def restore
22
+ self.update_attribute(:deleted_at, nil)
23
+ end
24
+
25
+ def deleted?
26
+ !!self.deleted_at
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ require 'tmpdir'
2
+ module Mongoid_Commentable
3
+ module Generators
4
+ class InstallGenerator < Rails::Generators::Base
5
+ source_root File.expand_path("../../templates", __FILE__)
6
+ desc "Creates mongoid_commentable views and model for your application."
7
+ argument :scope, :required => false, :default => nil,
8
+ :desc => "The scope to copy views to"
9
+ def copy_views
10
+ directory "views/comments", "app/views/#{scope || :comments}"
11
+ end
12
+
13
+ def copy_model
14
+ template "models/comment.rb", "app/models/comment.rb"
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,7 @@
1
+ class Comment
2
+ include Mongoid::Document
3
+ include Mongoid_Commentable::Comment
4
+ attr_accessible :text, :author
5
+ field :text, :type => String
6
+ field :author, :type => String
7
+ end
@@ -1,25 +1,20 @@
1
1
  module Mongoid::Commentable
2
2
  extend ActiveSupport::Concern
3
-
4
3
  included do |base|
5
4
  base.embeds_many :comments, :as => :commentable
6
- base.field :comments_count, :type => Integer, :default => 0
7
5
  base.index [['comments', Mongo::ASCENDING]]
8
6
  end
9
7
 
10
8
  module ClassMethods
11
-
9
+
12
10
  def commentable?
13
11
  true
14
12
  end
15
-
16
13
  end
17
-
18
14
 
19
15
  def create_comment!(params)
20
16
  comment = comments.create!(params)
21
17
  comment.path = comment.parent ? comments.find(comment.parent).path + '.' + comment.id.to_s : "root."+comment.id.to_s
22
- self.inc(:comments_count,1)
23
18
  comment
24
19
  end
25
20
 
@@ -35,9 +30,5 @@ module Mongoid::Commentable
35
30
  comments.select{|i| i.path =~ Regexp.new('^' + comments.find(comment_id).path)}
36
31
  end
37
32
 
38
- def mark_comment_deleted(comment_id)
39
- comments.find(comment_id).deleted = true
40
- self.inc(:comments_count,-1)
41
- end
42
-
43
33
  end
34
+
@@ -1,6 +1,6 @@
1
+ require 'comment'
1
2
  require File.join(File.dirname(__FILE__), 'mongoid/commentable')
2
-
3
- %w{ models controllers }.each do |dir|
3
+ %w{ controllers }.each do |dir|
4
4
  path = File.join(File.dirname(__FILE__), '../app', dir)
5
5
  $LOAD_PATH << path
6
6
  ActiveSupport::Dependencies.autoload_paths << path
@@ -0,0 +1,82 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{mongoid_commentable}
8
+ s.version = "0.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Max Golovnia}]
12
+ s.date = %q{2011-05-09}
13
+ s.description = %q{Mongoid_commentable provides methods to create commentable documents}
14
+ s.email = %q{mgolovnia@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ "Gemfile",
21
+ "Gemfile.lock",
22
+ "LICENSE.txt",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "app/controllers/comments_controller.rb",
27
+ "lib/comment.rb",
28
+ "lib/generators/mongoid_commentable/install_generator.rb",
29
+ "lib/generators/templates/models/comment.rb",
30
+ "lib/generators/templates/views/comments/_form.html.erb",
31
+ "lib/generators/templates/views/comments/edit.html.erb",
32
+ "lib/generators/templates/views/comments/index.html.erb",
33
+ "lib/generators/templates/views/comments/new.html.erb",
34
+ "lib/generators/templates/views/comments/show.html.erb",
35
+ "lib/mongoid/commentable.rb",
36
+ "lib/mongoid_commentable.rb",
37
+ "mongoid_commentable.gemspec",
38
+ "spec/models/comment.rb",
39
+ "spec/models/commentable_model.rb",
40
+ "spec/mongoid/commentable_spec.rb",
41
+ "spec/spec_helper.rb"
42
+ ]
43
+ s.homepage = %q{http://github.com/mgolovnia/mongoid_commentable}
44
+ s.licenses = [%q{MIT}]
45
+ s.require_paths = [%q{lib}]
46
+ s.rubygems_version = %q{1.8.1}
47
+ s.summary = %q{Comments for Mongoid documents}
48
+
49
+ if s.respond_to? :specification_version then
50
+ s.specification_version = 3
51
+
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
+ s.add_runtime_dependency(%q<mongoid>, ["~> 2.0"])
54
+ s.add_runtime_dependency(%q<bson_ext>, ["~> 1.3"])
55
+ s.add_development_dependency(%q<rr>, [">= 0"])
56
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
57
+ s.add_development_dependency(%q<database_cleaner>, [">= 0"])
58
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
59
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
60
+ s.add_development_dependency(%q<rcov>, [">= 0"])
61
+ else
62
+ s.add_dependency(%q<mongoid>, ["~> 2.0"])
63
+ s.add_dependency(%q<bson_ext>, ["~> 1.3"])
64
+ s.add_dependency(%q<rr>, [">= 0"])
65
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
66
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
67
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
68
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
69
+ s.add_dependency(%q<rcov>, [">= 0"])
70
+ end
71
+ else
72
+ s.add_dependency(%q<mongoid>, ["~> 2.0"])
73
+ s.add_dependency(%q<bson_ext>, ["~> 1.3"])
74
+ s.add_dependency(%q<rr>, [">= 0"])
75
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
76
+ s.add_dependency(%q<database_cleaner>, [">= 0"])
77
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
78
+ s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
79
+ s.add_dependency(%q<rcov>, [">= 0"])
80
+ end
81
+ end
82
+
@@ -0,0 +1,8 @@
1
+ require File.join(File.dirname(__FILE__),'..','..','lib','comment')
2
+ class Comment
3
+ include Mongoid::Document
4
+ include Mongoid_Commentable::Comment
5
+ attr_accessible :text, :author
6
+ field :text, :type => String
7
+ field :author, :type => String
8
+ end
@@ -0,0 +1,5 @@
1
+ class CommentableModel
2
+ include Mongoid::Document
3
+ include Mongoid::Commentable
4
+ end
5
+
@@ -1,53 +1,48 @@
1
1
  require 'spec_helper'
2
- class TestModel
3
- include Mongoid::Document
4
- include Mongoid::Commentable
5
- end
6
- describe 'Make commentable' do
7
-
8
- let(:test_model){TestModel.create!}
9
-
10
-
11
- it 'should be commentable' do
12
- test_model.class.commentable?.should == true
13
- end
14
-
15
- it 'should allow to add a comment' do
16
- comment = test_model.create_comment!(:author => 'Test author', :text => 'Hello, World!')
17
- comment.author.should == 'Test author'
18
- comment.text.should == 'Hello, World!'
19
- comment.path.should == "root.#{comment.id.to_s}"
20
- comment.deleted.should == false
21
- test_model.comments_count == 1
22
- end
23
-
24
- it 'should allow to add a reply to a comment' do
25
- comment = test_model.create_comment!(:author => 'Author', :text => 'Parent')
26
- reply = test_model.create_comment!(:author => 'Author2', :text => 'Reply', :parent => comment.id.to_s)
27
- test_model.comments.find(reply.id).path.should == "#{comment.path}.#{reply.id.to_s}"
28
- end
29
2
 
30
- it 'should mark comment as deleted' do
31
- comment = test_model.create_comment!(:author => 'Author', :text => 'Parent')
32
- test_model.comments_count == 1
33
- test_model.mark_comment_deleted(comment.id)
34
- test_model.comments.find(comment.id).deleted.should == true
35
- test_model.comments_count == 0
36
- end
37
-
38
- it 'should return a branch of comments' do
39
- parent1 = test_model.create_comment!(:author => 'Test author', :text => 'Parent1')
40
- child1 = test_model.create_comment!(:author => 'Test author', :text => 'Child1', :parent => parent1.id.to_s)
41
- child2 = test_model.create_comment!(:author => 'Test author', :text => 'Parent1', :parent => child1.id.to_s)
42
- parent2 = test_model.create_comment!(:author => 'Test author', :text => 'Parent2')
43
- branch = test_model.branch_for(parent1.id)
44
- branch.should == [parent1,child1,child2]
45
- end
46
-
47
- it 'should return wrong argument error' do
48
- expect{test_model.comments_list(:wrong_argument)}.to raise_error ArgumentError
3
+ describe Mongoid::Commentable do
4
+
5
+ describe Comment do
6
+
7
+ context 'creating new comment' do
8
+ subject {CommentableModel.new.create_comment!(:author => 'Author', :text => 'test') }
9
+ its(:class){should == Comment}
10
+ its(:author){should == 'Author'}
11
+ its(:text){should == 'test'}
12
+ specify{subject.path.should == "root.#{subject.id}"}
13
+ end
14
+
15
+ context 'replying to a comment' do
16
+ before do
17
+ @commentable_model = CommentableModel.new
18
+ 3.times{|i| @commentable_model.create_comment!(nil)}
19
+ @parent = @commentable_model.comments.first
20
+ end
21
+
22
+ subject{@child = @commentable_model.create_comment!(:parent => @parent.id.to_s)}
23
+ specify{subject.path.should == "root.#{@parent.id}.#{subject.id}"}
24
+ end
25
+
26
+ context 'marking comment as deleted' do
27
+ before do
28
+ @comment = CommentableModel.new.create_comment!(nil)
29
+ @comment.remove
30
+ end
31
+ subject {@comment}
32
+ its(:deleted_at){should_not be_nil}
33
+ its(:deleted?){should be_true}
34
+ end
35
+
36
+ context 'getting branch' do
37
+ before do
38
+ @commentable_model = CommentableModel.new
39
+ @comment1 = @commentable_model.create_comment!(nil)
40
+ @comment2 = @commentable_model.create_comment!(nil)
41
+ @child1 = @commentable_model.create_comment!(:parent => @comment1.id.to_s)
42
+ @child2 = @commentable_model.create_comment!(:parent => @child1.id.to_s)
43
+ end
44
+ subject{@commentable_model}
45
+ specify{subject.branch_for(@comment1.id).should == [@comment1,@child1,@child2]}
46
+ end
49
47
  end
50
-
51
-
52
-
53
48
  end
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,19 @@
1
-
2
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
1
+ $:.unshift(File.join(File.dirname(__FILE__),'..','lib'))
2
+ $:.unshift(File.join(File.dirname(__FILE__),'models'))
3
3
  require 'mongoid'
4
4
  require 'rubygems'
5
5
  require 'bundler'
6
6
  require 'logger'
7
7
  require 'rspec'
8
+ require 'rr'
8
9
  require 'database_cleaner'
9
10
  require 'mongoid_commentable'
11
+ require 'models/comment'
12
+ require 'models/commentable_model'
10
13
 
11
14
 
12
15
  RSpec.configure do |config|
13
- config.mock_with :rspec
16
+ config.mock_with :rr
14
17
  config.before(:suite) do
15
18
  DatabaseCleaner.strategy = :truncation
16
19
  DatabaseCleaner.orm = "mongoid"
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: mongoid_commentable
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Max Golovnia
@@ -10,8 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-02 00:00:00 +03:00
14
- default_executable:
13
+ date: 2011-05-09 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: mongoid
@@ -36,8 +35,19 @@ dependencies:
36
35
  prerelease: false
37
36
  version_requirements: *id002
38
37
  - !ruby/object:Gem::Dependency
39
- name: rspec
38
+ name: rr
40
39
  requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ requirement: &id004 !ruby/object:Gem::Requirement
41
51
  none: false
42
52
  requirements:
43
53
  - - ~>
@@ -45,10 +55,10 @@ dependencies:
45
55
  version: 2.3.0
46
56
  type: :development
47
57
  prerelease: false
48
- version_requirements: *id003
58
+ version_requirements: *id004
49
59
  - !ruby/object:Gem::Dependency
50
60
  name: database_cleaner
51
- requirement: &id004 !ruby/object:Gem::Requirement
61
+ requirement: &id005 !ruby/object:Gem::Requirement
52
62
  none: false
53
63
  requirements:
54
64
  - - ">="
@@ -56,10 +66,10 @@ dependencies:
56
66
  version: "0"
57
67
  type: :development
58
68
  prerelease: false
59
- version_requirements: *id004
69
+ version_requirements: *id005
60
70
  - !ruby/object:Gem::Dependency
61
71
  name: bundler
62
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ requirement: &id006 !ruby/object:Gem::Requirement
63
73
  none: false
64
74
  requirements:
65
75
  - - ~>
@@ -67,10 +77,10 @@ dependencies:
67
77
  version: 1.0.0
68
78
  type: :development
69
79
  prerelease: false
70
- version_requirements: *id005
80
+ version_requirements: *id006
71
81
  - !ruby/object:Gem::Dependency
72
82
  name: jeweler
73
- requirement: &id006 !ruby/object:Gem::Requirement
83
+ requirement: &id007 !ruby/object:Gem::Requirement
74
84
  none: false
75
85
  requirements:
76
86
  - - ~>
@@ -78,10 +88,10 @@ dependencies:
78
88
  version: 1.6.0
79
89
  type: :development
80
90
  prerelease: false
81
- version_requirements: *id006
91
+ version_requirements: *id007
82
92
  - !ruby/object:Gem::Dependency
83
93
  name: rcov
84
- requirement: &id007 !ruby/object:Gem::Requirement
94
+ requirement: &id008 !ruby/object:Gem::Requirement
85
95
  none: false
86
96
  requirements:
87
97
  - - ">="
@@ -89,7 +99,7 @@ dependencies:
89
99
  version: "0"
90
100
  type: :development
91
101
  prerelease: false
92
- version_requirements: *id007
102
+ version_requirements: *id008
93
103
  description: Mongoid_commentable provides methods to create commentable documents
94
104
  email: mgolovnia@gmail.com
95
105
  executables: []
@@ -100,8 +110,6 @@ extra_rdoc_files:
100
110
  - LICENSE.txt
101
111
  - README.rdoc
102
112
  files:
103
- - .document
104
- - .rspec
105
113
  - Gemfile
106
114
  - Gemfile.lock
107
115
  - LICENSE.txt
@@ -109,18 +117,21 @@ files:
109
117
  - Rakefile
110
118
  - VERSION
111
119
  - app/controllers/comments_controller.rb
112
- - app/models/comment.rb
113
- - app/views/comments/_form.html.erb
114
- - app/views/comments/edit.html.erb
115
- - app/views/comments/index.html.erb
116
- - app/views/comments/new.html.erb
117
- - app/views/comments/show.html.erb
118
- - lib/generators/mongoid_commentable/views_generator.rb
120
+ - lib/comment.rb
121
+ - lib/generators/mongoid_commentable/install_generator.rb
122
+ - lib/generators/templates/models/comment.rb
123
+ - lib/generators/templates/views/comments/_form.html.erb
124
+ - lib/generators/templates/views/comments/edit.html.erb
125
+ - lib/generators/templates/views/comments/index.html.erb
126
+ - lib/generators/templates/views/comments/new.html.erb
127
+ - lib/generators/templates/views/comments/show.html.erb
119
128
  - lib/mongoid/commentable.rb
120
129
  - lib/mongoid_commentable.rb
130
+ - mongoid_commentable.gemspec
131
+ - spec/models/comment.rb
132
+ - spec/models/commentable_model.rb
121
133
  - spec/mongoid/commentable_spec.rb
122
134
  - spec/spec_helper.rb
123
- has_rdoc: true
124
135
  homepage: http://github.com/mgolovnia/mongoid_commentable
125
136
  licenses:
126
137
  - MIT
@@ -134,7 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
145
  requirements:
135
146
  - - ">="
136
147
  - !ruby/object:Gem::Version
137
- hash: 3250783174328786593
148
+ hash: 3455755614861241426
138
149
  segments:
139
150
  - 0
140
151
  version: "0"
@@ -147,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
158
  requirements: []
148
159
 
149
160
  rubyforge_project:
150
- rubygems_version: 1.6.2
161
+ rubygems_version: 1.8.1
151
162
  signing_key:
152
163
  specification_version: 3
153
164
  summary: Comments for Mongoid documents
data/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
@@ -1,17 +0,0 @@
1
- class Comment
2
- include Mongoid::Document
3
- attr_accessible :text, :author, :path, :parent
4
- field :text, :type => String
5
- field :author, :type => String
6
- field :path, :type => String, :default => ""
7
- field :deleted, :type => Boolean, :default => false
8
- field :parent, :type => String
9
- embedded_in :commentable, :polymorphic => true
10
-
11
- def level
12
- path.count('.')
13
- end
14
-
15
-
16
-
17
- end
@@ -1,15 +0,0 @@
1
- require 'tmpdir'
2
- module Mongoid_Commentable
3
- module Generators
4
- class ViewsGenerator < Rails::Generators::Base
5
- source_root File.expand_path("../../../../app/views", __FILE__)
6
- desc "Copies all mongoid_commentable views to your application."
7
- argument :scope, :required => false, :default => nil,
8
- :desc => "The scope to copy views to"
9
- def copy_views
10
- directory "comments", "app/views/#{scope || :comments}"
11
- end
12
- end
13
- end
14
- end
15
-