mongo_likeable 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in mongo_likeable.gemspec
4
+ gemspec
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,3 @@
1
+ module MongoLikeable
2
+ VERSION = "0.0.1"
3
+ 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
@@ -0,0 +1,4 @@
1
+ class Stuff
2
+ include MongoMapper::Document
3
+ include Mongo::Likeable
4
+ end
@@ -0,0 +1,4 @@
1
+ class User
2
+ include MongoMapper::Document
3
+ include Mongo::Likeable
4
+ end
@@ -0,0 +1,4 @@
1
+ class Stuff
2
+ include Mongoid::Document
3
+ include Mongo::Likeable
4
+ end
@@ -0,0 +1,4 @@
1
+ class User
2
+ include Mongoid::Document
3
+ include Mongo::Likeable
4
+ end
@@ -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
+