mongo_likeable 0.0.1
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 +4 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/lib/mongo_likeable/mongo_likeable.rb +71 -0
- data/lib/mongo_likeable/version.rb +3 -0
- data/lib/mongo_likeable.rb +1 -0
- data/mongo_likeable.gemspec +30 -0
- data/spec/mongo/likeable_spec.rb +46 -0
- data/spec/mongo_mapper/stuff.rb +4 -0
- data/spec/mongo_mapper/user.rb +4 -0
- data/spec/mongoid/stuff.rb +4 -0
- data/spec/mongoid/user.rb +4 -0
- data/spec/spec_helper.rb +31 -0
- metadata +151 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Mongo
|
2
|
+
module Likeable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do |base|
|
6
|
+
if defined?(Mongoid)
|
7
|
+
base.field :likes, :type => Array, :default => []
|
8
|
+
base.field :dislikes, :type => Array, :default => []
|
9
|
+
elsif defined?(MongoMapper)
|
10
|
+
base.key :likes, :type => Array, :default => []
|
11
|
+
base.key :dislikes, :type => Array, :default => []
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
#...
|
17
|
+
end
|
18
|
+
|
19
|
+
def like(*models)
|
20
|
+
self.likes |= simplify_instance(*models)
|
21
|
+
end
|
22
|
+
|
23
|
+
def dislike(*models)
|
24
|
+
self.dislikes |= simplify_instance(*models)
|
25
|
+
end
|
26
|
+
|
27
|
+
def like?(model)
|
28
|
+
self.likes.include? simplify_instance(model)
|
29
|
+
end
|
30
|
+
|
31
|
+
def dislike?(model)
|
32
|
+
self.dislikes.include? simplify_instance(model)
|
33
|
+
end
|
34
|
+
|
35
|
+
def clear_likes(*models)
|
36
|
+
if models == []
|
37
|
+
self.likes = []
|
38
|
+
else
|
39
|
+
self.likes -= simplify_instance(*models)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def clear_dislikes(*models)
|
44
|
+
if models == []
|
45
|
+
self.dislikes = []
|
46
|
+
else
|
47
|
+
self.dislikes -= simplify_instance(*models)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def rebuild_instance(*abbrs)
|
53
|
+
list = []
|
54
|
+
abbrs.each do |abbr|
|
55
|
+
classname = abbr.split('_')[0]
|
56
|
+
id = abbr.split('_')[1]
|
57
|
+
|
58
|
+
list << classname.constantize.find(id)
|
59
|
+
end
|
60
|
+
list
|
61
|
+
end
|
62
|
+
|
63
|
+
def simplify_instance(*models)
|
64
|
+
list = []
|
65
|
+
models.each do |model|
|
66
|
+
list << model.class.name + '_' + model.id.to_s
|
67
|
+
end
|
68
|
+
list
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'mongo_likeable/mongo_likeable'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "mongo_likeable/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "mongo_likeable"
|
7
|
+
s.version = MongoLikeable::VERSION
|
8
|
+
s.authors = ["Jie Fan"]
|
9
|
+
s.email = ["ustc.flyingfox@gmail.com"]
|
10
|
+
s.homepage = "https://github.com/lastomato/mongo_followable"
|
11
|
+
s.summary = %q{ adds like/dislike feature to mongoid/mongo_mapper }
|
12
|
+
s.description = %q{ Mongo Followable adds like/dislike feature to mongoid/mongo_mapper }
|
13
|
+
|
14
|
+
s.rubyforge_project = "mongo_likeable"
|
15
|
+
|
16
|
+
s.add_development_dependency('rspec', '~> 2.7.0')
|
17
|
+
s.add_development_dependency('mongoid', '~> 2.4.0')
|
18
|
+
s.add_development_dependency('mongo_mapper', '~> 0.10.0')
|
19
|
+
s.add_development_dependency('bson_ext', '~> 1.5.0')
|
20
|
+
s.add_development_dependency('database_cleaner', '~>0.7.0')
|
21
|
+
|
22
|
+
s.files = `git ls-files`.split("\n")
|
23
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
25
|
+
s.require_paths = ["lib"]
|
26
|
+
|
27
|
+
# specify any dependencies here; for example:
|
28
|
+
# s.add_development_dependency "rspec"
|
29
|
+
# s.add_runtime_dependency "rest-client"
|
30
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::Likeable do
|
4
|
+
|
5
|
+
describe User do
|
6
|
+
|
7
|
+
let!(:u) { User.new }
|
8
|
+
|
9
|
+
context "likes & dislikes" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
u.save
|
13
|
+
|
14
|
+
@v = User.new
|
15
|
+
@v.save
|
16
|
+
|
17
|
+
@s = Stuff.new
|
18
|
+
@s.save
|
19
|
+
|
20
|
+
@t = Stuff.new
|
21
|
+
@t.save
|
22
|
+
end
|
23
|
+
|
24
|
+
it "likes something" do
|
25
|
+
u.like?(@v).should be_false
|
26
|
+
u.like?(@s).should be_false
|
27
|
+
|
28
|
+
u.dislike?(@v).should be_false
|
29
|
+
u.dislike?(@s).should be_false
|
30
|
+
|
31
|
+
u.like(@v, @s, @t)
|
32
|
+
u.likes.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
33
|
+
|
34
|
+
u.dislike(@v, @s, @t)
|
35
|
+
u.dislikes.should =~ [@v.class.name + '_' + @v.id.to_s, @s.class.name + '_' + @s.id.to_s, @t.class.name + '_' + @t.id.to_s]
|
36
|
+
|
37
|
+
u.clear_likes(@v, @s)
|
38
|
+
u.likes.should =~ [@t.class.name + '_' + @t.id.to_s]
|
39
|
+
|
40
|
+
u.clear_dislikes()
|
41
|
+
u.dislikes.should == []
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
|
4
|
+
require "database_cleaner"
|
5
|
+
require "rspec"
|
6
|
+
|
7
|
+
if rand > 0.5
|
8
|
+
puts 'Mongoid'
|
9
|
+
require 'mongoid'
|
10
|
+
require File.expand_path("../../lib/mongo_likeable", __FILE__)
|
11
|
+
require File.expand_path("../mongoid/user", __FILE__)
|
12
|
+
require File.expand_path("../mongoid/stuff", __FILE__)
|
13
|
+
Mongoid.configure do |config|
|
14
|
+
name = 'mongo_likeable_test'
|
15
|
+
host = 'localhost'
|
16
|
+
config.master = Mongo::Connection.new.db(name)
|
17
|
+
config.autocreate_indexes = true
|
18
|
+
end
|
19
|
+
else
|
20
|
+
puts 'MongoMapper'
|
21
|
+
require 'mongo_mapper'
|
22
|
+
require File.expand_path("../../lib/mongo_likeable", __FILE__)
|
23
|
+
require File.expand_path("../mongo_mapper/user", __FILE__)
|
24
|
+
require File.expand_path("../mongo_mapper/stuff", __FILE__)
|
25
|
+
MongoMapper.database = 'mongo_likeable_test'
|
26
|
+
end
|
27
|
+
|
28
|
+
RSpec.configure do |c|
|
29
|
+
c.before(:all) { DatabaseCleaner.strategy = :truncation }
|
30
|
+
c.before(:each) { DatabaseCleaner.clean }
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongo_likeable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Jie Fan
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2012-02-02 00:00:00 -05:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 2
|
30
|
+
- 7
|
31
|
+
- 0
|
32
|
+
version: 2.7.0
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: mongoid
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 2
|
45
|
+
- 4
|
46
|
+
- 0
|
47
|
+
version: 2.4.0
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: mongo_mapper
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
- 10
|
61
|
+
- 0
|
62
|
+
version: 0.10.0
|
63
|
+
type: :development
|
64
|
+
version_requirements: *id003
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: bson_ext
|
67
|
+
prerelease: false
|
68
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ~>
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
segments:
|
74
|
+
- 1
|
75
|
+
- 5
|
76
|
+
- 0
|
77
|
+
version: 1.5.0
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: database_cleaner
|
82
|
+
prerelease: false
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
- 7
|
91
|
+
- 0
|
92
|
+
version: 0.7.0
|
93
|
+
type: :development
|
94
|
+
version_requirements: *id005
|
95
|
+
description: " Mongo Followable adds like/dislike feature to mongoid/mongo_mapper "
|
96
|
+
email:
|
97
|
+
- ustc.flyingfox@gmail.com
|
98
|
+
executables: []
|
99
|
+
|
100
|
+
extensions: []
|
101
|
+
|
102
|
+
extra_rdoc_files: []
|
103
|
+
|
104
|
+
files:
|
105
|
+
- .gitignore
|
106
|
+
- Gemfile
|
107
|
+
- Rakefile
|
108
|
+
- lib/mongo_likeable.rb
|
109
|
+
- lib/mongo_likeable/mongo_likeable.rb
|
110
|
+
- lib/mongo_likeable/version.rb
|
111
|
+
- mongo_likeable.gemspec
|
112
|
+
- spec/mongo/likeable_spec.rb
|
113
|
+
- spec/mongo_mapper/stuff.rb
|
114
|
+
- spec/mongo_mapper/user.rb
|
115
|
+
- spec/mongoid/stuff.rb
|
116
|
+
- spec/mongoid/user.rb
|
117
|
+
- spec/spec_helper.rb
|
118
|
+
has_rdoc: true
|
119
|
+
homepage: https://github.com/lastomato/mongo_followable
|
120
|
+
licenses: []
|
121
|
+
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 0
|
134
|
+
version: "0"
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
segments:
|
141
|
+
- 0
|
142
|
+
version: "0"
|
143
|
+
requirements: []
|
144
|
+
|
145
|
+
rubyforge_project: mongo_likeable
|
146
|
+
rubygems_version: 1.3.7
|
147
|
+
signing_key:
|
148
|
+
specification_version: 3
|
149
|
+
summary: adds like/dislike feature to mongoid/mongo_mapper
|
150
|
+
test_files: []
|
151
|
+
|