acts_as_favable 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/MIT-LICENSE +20 -0
- data/README.markdown +47 -0
- data/init.rb +1 -0
- data/install.rb +2 -0
- data/lib/acts_as_favable.rb +2 -0
- data/lib/favable_methods.rb +44 -0
- data/lib/favorite_methods.rb +24 -0
- data/lib/generators/favorite/favorite_generator.rb +18 -0
- data/lib/generators/favorite/templates/create_favorites.rb +18 -0
- data/lib/generators/favorite/templates/favorite.rb +11 -0
- metadata +77 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 [name of plugin creator]
|
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.markdown
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
Acts As Favable
|
2
|
+
=================
|
3
|
+
|
4
|
+
Allows for favorite refer to be added to multiple and different models.
|
5
|
+
|
6
|
+
## Resources
|
7
|
+
|
8
|
+
####Install(on Rails3)
|
9
|
+
|
10
|
+
To install as a plugin
|
11
|
+
|
12
|
+
rails plugin install http://github.com/yorzi/acts_as_favable.git
|
13
|
+
|
14
|
+
To install as a gem
|
15
|
+
|
16
|
+
sudo gem install acts_as_favable
|
17
|
+
|
18
|
+
Generate your favorite model:
|
19
|
+
|
20
|
+
rails generate favorite
|
21
|
+
|
22
|
+
Then migrate your database:
|
23
|
+
|
24
|
+
rake db:migrate
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
#### Make your ActiveRecord model act as favable.
|
28
|
+
|
29
|
+
class Model < ActiveRecord::Base
|
30
|
+
acts_as_favable
|
31
|
+
end
|
32
|
+
|
33
|
+
####mark a favorite flag to a model instance
|
34
|
+
|
35
|
+
favable = Model.create
|
36
|
+
favable.favorites.create(:note => "I like this and will make it one of my favorites")
|
37
|
+
|
38
|
+
####Fetch favorites for a favable model:
|
39
|
+
|
40
|
+
favable = Model.find(1)
|
41
|
+
favorites = favable.favorites.recent.limit(10).all
|
42
|
+
|
43
|
+
Attention: This plugin/gem is heavily influenced by Acts As Taggable and almost copied from acts_at_commentable.
|
44
|
+
|
45
|
+
## More
|
46
|
+
|
47
|
+
Blog post..
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'rails', 'init')
|
data/install.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
module Acts #:nodoc:
|
4
|
+
module Favable #:nodoc:
|
5
|
+
|
6
|
+
def self.included(base)
|
7
|
+
base.extend ClassMethods
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
def acts_as_favable(options={})
|
12
|
+
has_many :favorites, {:as => :favable, :dependent => :destroy}.merge(options)
|
13
|
+
include Acts::Favable::InstanceMethods
|
14
|
+
extend Acts::Favable::SingletonMethods
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module SingletonMethods
|
19
|
+
def find_favorites_for(obj)
|
20
|
+
favable = ActiveRecord::Base.send(:class_name_of_active_record_descendant, self).to_s
|
21
|
+
Favorite.find_favorites_for_favable(favable, obj.id)
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_favorites_by_user(user)
|
25
|
+
favable = ActiveRecord::Base.send(:class_name_of_active_record_descendant, self).to_s
|
26
|
+
Favorite.where(["user_id = ? and favable_type = ?", user.id, favable]).order("created_at DESC")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# This module contains instance methods
|
31
|
+
module InstanceMethods
|
32
|
+
def favorites_ordered_by_submitted
|
33
|
+
Favorite.find_favorites_for_favable(self.class.name, id)
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_favorite(favorite)
|
37
|
+
favorites << favorite
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
ActiveRecord::Base.send(:include, Acts::Favable)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ActsAsFavable
|
2
|
+
module Favorite
|
3
|
+
|
4
|
+
def self.included(favorite_model)
|
5
|
+
favorite_model.extend Finders
|
6
|
+
favorite_model.scope :in_order, favorite_model.order('created_at ASC')
|
7
|
+
favorite_model.scope :recent, favorite_model.order('created_at DESC')
|
8
|
+
end
|
9
|
+
|
10
|
+
module Finders
|
11
|
+
def find_favorites_by_user(user)
|
12
|
+
where(["user_id = ?", user.id]).order("created_at DESC")
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_favorites_for_favable(favable_str, favable_id)
|
16
|
+
where(["favable_type = ? and favable_id = ?", favable_str, favable_id]).order("created_at DESC")
|
17
|
+
end
|
18
|
+
|
19
|
+
def find_favable(favable_str, favable_id)
|
20
|
+
favable_str.constantize.find(favable_id)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rails/generators/migration'
|
2
|
+
|
3
|
+
class FavoriteGenerator < Rails::Generators::Base
|
4
|
+
include Rails::Generators::Migration
|
5
|
+
|
6
|
+
def self.source_root
|
7
|
+
@_acts_as_favable_source_root ||= File.expand_path("../templates", __FILE__)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.next_migration_number(path)
|
11
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
12
|
+
end
|
13
|
+
|
14
|
+
def create_model_file
|
15
|
+
template "favorite.rb", "app/models/favorite.rb"
|
16
|
+
migration_template "create_favorites.rb", "db/migrate/create_favorites.rb"
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateFavorites < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :favorites do |t|
|
4
|
+
t.string :note, :limit => 50, :default => ""
|
5
|
+
t.references :favable, :polymorphic => true
|
6
|
+
t.references :user
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
|
10
|
+
add_index :favorites, :favable_type
|
11
|
+
add_index :favorites, :favable_id
|
12
|
+
add_index :favorites, :user_id
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table :favorites
|
17
|
+
end
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: acts_as_favable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 23
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 1.0.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Andy Wang
|
14
|
+
autorequire: acts_as_favable
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-11-29 00:00:00 +08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: Plugin/Gem that provides favorites functionality
|
23
|
+
email: wangyaodi@gmail.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files:
|
29
|
+
- README.markdown
|
30
|
+
- MIT-LICENSE
|
31
|
+
files:
|
32
|
+
- MIT-LICENSE
|
33
|
+
- README.markdown
|
34
|
+
- lib/acts_as_favable.rb
|
35
|
+
- lib/favorite_methods.rb
|
36
|
+
- lib/favable_methods.rb
|
37
|
+
- lib/generators/favorite/favorite_generator.rb
|
38
|
+
- lib/generators/favorite/templates/favorite.rb
|
39
|
+
- lib/generators/favorite/templates/create_favorites.rb
|
40
|
+
- init.rb
|
41
|
+
- install.rb
|
42
|
+
has_rdoc: true
|
43
|
+
homepage: https://github.com/yorzi/acts_as_favable
|
44
|
+
licenses: []
|
45
|
+
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
hash: 3
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
requirements: []
|
70
|
+
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.3.7
|
73
|
+
signing_key:
|
74
|
+
specification_version: 1
|
75
|
+
summary: Plugin/gem that provides favorite functionality
|
76
|
+
test_files: []
|
77
|
+
|