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 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
+