aeonscope-acts_as_commentable 1.0.0

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/CHANGELOG.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = v1.0.0
2
+
3
+ * Initial version.
data/LICENSE.rdoc ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Brooke Kuhlmann of {Berserk Technologies}[http://www.berserktech.com]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,116 @@
1
+ = Overview
2
+
3
+ Allows for comments to be easily added to different models.
4
+
5
+ = License
6
+
7
+ Copyright (c) 2009 Brooke Kuhlmann of {Berserk Technologies}[http://www.berserktech.com].
8
+ See the included LICENSE for more info.
9
+
10
+ = History
11
+
12
+ See the CHANGELOG file for more info.
13
+
14
+ = Requirements
15
+
16
+ 1. {Ruby on Rails}[http://rubyonrails.org].
17
+
18
+ = Installation
19
+
20
+ Type the following from the command line to install:
21
+
22
+ * *UNIX*: sudo gem install aeonscope-acts_as_commentable
23
+ * *Windows*: gem install aeonscope-acts_as_commentable
24
+
25
+ Update your environment.rb file to include the new gem:
26
+
27
+ * config.gem "aeonscope-acts_as_commentable", :lib => "acts_as_commentable", :source => "http://gems.github.com"
28
+
29
+ = Usage
30
+
31
+ Assuming you have created Post and Comment migrations and models, for example, then you can modify your models as follows:
32
+
33
+ class Post < ActiveRecord::Base
34
+ # Behaviors
35
+ acts_as_commentable
36
+ end
37
+
38
+ class Comment < ActiveRecord::Base
39
+ # Behaviors
40
+ acts_as_comment
41
+ end
42
+
43
+ That's it, your done!
44
+
45
+ As an added bonus, you can customize your comment behavior. For example, lets say you want your comment label to reflect
46
+ your post label (assuming you have "label" columns for both your Post and Comment models). You could then specify the auto_label method
47
+ to be called before you save a comment. Like so:
48
+
49
+ class Comment < ActiveRecord::Base
50
+ # Behaviors
51
+ acts_as_comment
52
+
53
+ # Callbacks
54
+ before_save :auto_label
55
+ end
56
+
57
+ So if you created a post with a "My Awesome Post" label, then your comment label would end up as "RE: My Awesome Post" label in order
58
+ to preserve comment context.
59
+
60
+ What's that you say? You don't use "label" columns for your Post and Comment models? No problem, you can
61
+ change the default behavior as follows:
62
+
63
+ class Comment < ActiveRecord::Base
64
+ # Behaviors
65
+ acts_as_comment :commentable_label => "title", :comment_label => "title"
66
+
67
+ # Callbacks
68
+ before_save :auto_label
69
+ end
70
+
71
+ Now you are using "title" instead "label" columns. To be clear, the "commentable_label" defines the Post model setting, while the "comment_label" defines the Comment model setting.
72
+
73
+ = Migrations
74
+
75
+ Based on the Post and Comment models mentioned above, the following migration code might be of interest:
76
+
77
+ # Post Migration
78
+ class CreatePosts < ActiveRecord::Migration
79
+ def self.up
80
+ create_table :posts do |t|
81
+ t.string :name
82
+ t.string :label
83
+ t.text :content
84
+ t.string :visibility
85
+ t.datetime :published_at
86
+ t.timestamps
87
+ end
88
+ end
89
+
90
+ def self.down
91
+ drop_table :posts
92
+ end
93
+ end
94
+
95
+ # Comment Migration
96
+ class CreateComments < ActiveRecord::Migration
97
+ def self.up
98
+ create_table :comments do |t|
99
+ t.integer :commentable_id
100
+ t.string :commentable_type
101
+ t.string :label
102
+ t.text :content
103
+ t.timestamps
104
+ end
105
+ end
106
+
107
+ def self.down
108
+ drop_table :comments
109
+ end
110
+ end
111
+
112
+ = Contact/Feedback/Issues
113
+
114
+ * {Berserk Technologies}[http://www.berserktech.com] - Company web site.
115
+ * Aeonscope[http://www.aeonscope.net] - Personal web site.
116
+ * Twitter[http://www.twitter.com/Aeonscope] - Short bursts of insight and/or noise.
data/Rakefile ADDED
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "acts_as_commentable"
8
+ gem.summary = "Allows for comments to be easily added to different models."
9
+ gem.description = "Allows for comments to be easily added to different models."
10
+ gem.authors = ["Brooke Kuhlmann"]
11
+ gem.email = "aeonscope@gmail.com"
12
+ gem.homepage = "http://github.com/aeonscope/acts_as_commentable"
13
+ gem.required_ruby_version = ">= 1.8.6"
14
+ gem.add_dependency "rails", ">= 2.3.2"
15
+ gem.rdoc_options << "CHANGELOG.rdoc"
16
+ gem.files = FileList["[A-Z]*", "{bin,lib,generators,rails_generators,spec}/**/*"]
17
+ end
18
+
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
21
+ end
22
+
23
+ require 'spec/rake/spectask'
24
+ Spec::Rake::SpecTask.new(:spec) do |spec|
25
+ spec.libs << 'lib' << 'spec'
26
+ spec.spec_files = FileList['spec/**/*_spec.rb']
27
+ end
28
+
29
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
30
+ spec.libs << 'lib' << 'spec'
31
+ spec.pattern = 'spec/**/*_spec.rb'
32
+ spec.rcov = true
33
+ end
34
+
35
+
36
+ task :default => :spec
37
+
38
+ require 'rake/rdoctask'
39
+ Rake::RDocTask.new do |rdoc|
40
+ if File.exist?('VERSION.yml')
41
+ config = YAML.load(File.read('VERSION.yml'))
42
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
43
+ else
44
+ version = ""
45
+ end
46
+
47
+ rdoc.rdoc_dir = 'rdoc'
48
+ rdoc.title = "acts_as_commentable #{version}"
49
+ rdoc.rdoc_files.include('README*')
50
+ rdoc.rdoc_files.include('lib/**/*.rb')
51
+ end
52
+
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 0
3
+ :major: 1
4
+ :minor: 0
@@ -0,0 +1,17 @@
1
+ require File.join(File.dirname(__FILE__), "class_methods.rb")
2
+ require File.join(File.dirname(__FILE__), "instance_methods.rb")
3
+
4
+ module ActsAsComment
5
+ def self.included base
6
+ base.extend ClassMethods
7
+ end
8
+ include InstanceMethods
9
+ end
10
+
11
+ module ActsAsCommentable
12
+ def self.included base
13
+ base.extend ClassMethods
14
+ end
15
+ end
16
+
17
+ ActiveRecord::Base.class_eval { include ActsAsComment, ActsAsCommentable }
@@ -0,0 +1,20 @@
1
+ module ActsAsComment
2
+ module ClassMethods
3
+ # Allows one to customize the default settings. Accepts the following options hash:
4
+ # * *commentable_label* - The commentable (parent object) label method. Optional. Defaults to: label.
5
+ # * *comment_label* - The comment label method. Optional. Defaults to: label.
6
+ def acts_as_comment options = {}
7
+ write_inheritable_attribute :acts_as_comment_options, options
8
+ class_inheritable_reader :acts_as_comment_options
9
+ belongs_to :commentable, :polymorphic => true
10
+ end
11
+ end
12
+ end
13
+
14
+ module ActsAsCommentable
15
+ module ClassMethods
16
+ def acts_as_commentable
17
+ has_many :comments, :as => :commentable, :dependent => :destroy
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module ActsAsComment
2
+ module InstanceMethods
3
+ # Before saving, store the comment label as as reply of the commentable label. This especially useful
4
+ # when representing context origin (i.e. a syndicated comment feed).
5
+ def auto_label
6
+ # Set up defaults and custom options (if any).
7
+ options = self.class.acts_as_comment_options || {}
8
+ options.reverse_merge! :commentable_label => "label", :comment_label => "label"
9
+ # Default the comment label to the commentable label.
10
+ if self.instance_eval("self.#{options[:comment_label]}").blank? && commentable && commentable.respond_to?(options[:commentable_label])
11
+ instance_eval("self.#{options[:comment_label]} = "RE: " + commentable.#{options[:commentable_label]}")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ #require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require File.join(File.dirname(__FILE__), "spec_helper.rb")
3
+
4
+ describe "ActsAsCommentable" do
5
+ it "should be testable" do
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec'
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ require 'acts_as_commentable'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aeonscope-acts_as_commentable
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brooke Kuhlmann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-27 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.2
24
+ version:
25
+ description: Allows for comments to be easily added to different models.
26
+ email: aeonscope@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - LICENSE.rdoc
33
+ - README.rdoc
34
+ files:
35
+ - CHANGELOG.rdoc
36
+ - LICENSE.rdoc
37
+ - README.rdoc
38
+ - Rakefile
39
+ - VERSION.yml
40
+ - lib/acts_as_commentable.rb
41
+ - lib/class_methods.rb
42
+ - lib/instance_methods.rb
43
+ - spec/acts_as_commentable_spec.rb
44
+ - spec/spec_helper.rb
45
+ has_rdoc: false
46
+ homepage: http://github.com/aeonscope/acts_as_commentable
47
+ licenses:
48
+ post_install_message:
49
+ rdoc_options:
50
+ - --charset=UTF-8
51
+ - CHANGELOG.rdoc
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: 1.8.6
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Allows for comments to be easily added to different models.
73
+ test_files:
74
+ - spec/acts_as_commentable_spec.rb
75
+ - spec/spec_helper.rb