groupify 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +2 -18
- data/Gemfile +11 -1
- data/README.md +100 -20
- data/gemfiles/activesupport3.gemfile +18 -0
- data/gemfiles/activesupport4.gemfile +23 -0
- data/groupify.gemspec +7 -2
- data/lib/groupify/adapter/active_record.rb +318 -0
- data/lib/groupify/adapter/mongoid.rb +249 -0
- data/lib/groupify/railtie.rb +20 -0
- data/lib/groupify/version.rb +1 -1
- data/lib/groupify.rb +1 -195
- data/spec/groupify/active_record_spec.rb +231 -0
- data/spec/groupify/{mongoid3.yml → mongoid.yml} +0 -0
- data/spec/groupify/mongoid_spec.rb +93 -23
- data/spec/spec_helper.rb +2 -12
- metadata +60 -47
- data/gemfiles/mongoid2.gemfile +0 -10
- data/gemfiles/mongoid3.gemfile +0 -8
- data/spec/groupify/mongoid2.yml +0 -9
@@ -1,18 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.order = "random"
|
5
|
+
|
6
|
+
config.before(:suite) do
|
7
|
+
DatabaseCleaner[:mongoid].strategy = :truncation
|
8
|
+
end
|
9
|
+
|
10
|
+
config.before(:each) do
|
11
|
+
DatabaseCleaner[:mongoid].start
|
12
|
+
end
|
13
|
+
|
14
|
+
config.after(:each) do
|
15
|
+
DatabaseCleaner[:mongoid].clean
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
2
19
|
require 'mongoid'
|
3
20
|
require 'mongoid-rspec'
|
4
21
|
include Mongoid::Matchers
|
5
22
|
|
6
23
|
# Load mongoid config
|
7
|
-
|
8
|
-
ENV["MONGOID_ENV"] = "test"
|
9
|
-
Mongoid.load!('./spec/groupify/mongoid2.yml')
|
10
|
-
Mongoid.logger.level = Logger::INFO
|
11
|
-
else
|
12
|
-
Mongoid.load!('./spec/groupify/mongoid3.yml', :test)
|
13
|
-
end
|
24
|
+
Mongoid.load!('./spec/groupify/mongoid.yml', :test)
|
14
25
|
|
15
26
|
require 'groupify'
|
27
|
+
require 'groupify/adapter/mongoid'
|
16
28
|
|
17
29
|
class MongoidUser
|
18
30
|
include Mongoid::Document
|
@@ -27,16 +39,23 @@ class MongoidTask
|
|
27
39
|
acts_as_group_member :class_name => 'MongoidGroup'
|
28
40
|
end
|
29
41
|
|
42
|
+
class MongoidIssue
|
43
|
+
include Mongoid::Document
|
44
|
+
|
45
|
+
acts_as_group_member :class_name => 'MongoidProject'
|
46
|
+
end
|
47
|
+
|
30
48
|
class MongoidGroup
|
31
49
|
include Mongoid::Document
|
32
50
|
|
33
51
|
acts_as_group :members => [:mongoid_users, :mongoid_tasks], :default_members => :mongoid_users
|
34
52
|
alias_method :users, :mongoid_users
|
53
|
+
alias_method :tasks, :mongoid_tasks
|
35
54
|
end
|
36
55
|
|
37
56
|
class MongoidProject < MongoidGroup
|
38
|
-
|
39
|
-
alias_method :
|
57
|
+
has_members :mongoid_issues
|
58
|
+
alias_method :issues, :mongoid_issues
|
40
59
|
end
|
41
60
|
|
42
61
|
describe MongoidGroup do
|
@@ -55,38 +74,89 @@ describe MongoidUser do
|
|
55
74
|
it { should have_and_belong_to_many(:groups).of_type(MongoidGroup) }
|
56
75
|
end
|
57
76
|
|
58
|
-
describe
|
59
|
-
let!(:user) { MongoidUser.create }
|
60
|
-
let!(:group) { MongoidGroup.create }
|
77
|
+
describe Groupify::Mongoid do
|
78
|
+
let!(:user) { MongoidUser.create! }
|
79
|
+
let!(:group) { MongoidGroup.create! }
|
61
80
|
|
62
|
-
it "
|
81
|
+
it "adds a group to a member" do
|
63
82
|
user.groups << group
|
64
83
|
user.groups.should include(group)
|
65
84
|
group.members.should include(user)
|
66
85
|
group.users.should include(user)
|
67
86
|
end
|
68
87
|
|
69
|
-
it "
|
88
|
+
it "adds a member to a group" do
|
70
89
|
group.add user
|
71
90
|
user.groups.should include(group)
|
72
91
|
group.members.should include(user)
|
73
92
|
end
|
93
|
+
|
94
|
+
it 'lists which member classes can belong to this group' do
|
95
|
+
group.class.member_classes.should include(MongoidUser, MongoidTask)
|
96
|
+
group.member_classes.should include(MongoidUser, MongoidTask)
|
97
|
+
|
98
|
+
MongoidProject.member_classes.should include(MongoidUser, MongoidTask, MongoidIssue)
|
99
|
+
end
|
74
100
|
|
75
|
-
it "
|
101
|
+
it "finds members by group" do
|
76
102
|
group.add user
|
77
103
|
|
78
104
|
MongoidUser.in_group(group).first.should eql(user)
|
79
105
|
end
|
80
106
|
|
81
|
-
it "
|
107
|
+
it "finds the groups a member belongs to" do
|
82
108
|
group.add user
|
83
109
|
|
84
110
|
MongoidGroup.with_member(user).first.should == group
|
85
111
|
end
|
86
112
|
|
87
|
-
|
113
|
+
context 'when merging' do
|
114
|
+
let(:task) { MongoidTask.create! }
|
115
|
+
let(:issue) { MongoidIssue.create! }
|
116
|
+
|
117
|
+
it "moves the members from source to destination and destroys the source" do
|
118
|
+
source = MongoidGroup.create!
|
119
|
+
destination = MongoidProject.create!
|
120
|
+
|
121
|
+
source.add(user)
|
122
|
+
destination.add(task)
|
123
|
+
|
124
|
+
destination.merge!(source)
|
125
|
+
source.destroyed?.should be_true
|
126
|
+
|
127
|
+
destination.users.to_a.should include(user)
|
128
|
+
destination.tasks.to_a.should include(task)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "fails to merge if the destination group cannot contain the source group's members" do
|
132
|
+
source = MongoidProject.create!
|
133
|
+
destination = MongoidGroup.create!
|
134
|
+
|
135
|
+
source.add(issue)
|
136
|
+
destination.add(user)
|
137
|
+
|
138
|
+
# Issues cannot be members of a MongoidGroup
|
139
|
+
expect {destination.merge!(source)}.to raise_error(ArgumentError)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "merges incompatible groups as long as all the source members can be moved to the destination" do
|
143
|
+
source = MongoidProject.create!
|
144
|
+
destination = MongoidGroup.create!
|
145
|
+
|
146
|
+
source.add(user)
|
147
|
+
destination.add(task)
|
148
|
+
|
149
|
+
expect {destination.merge!(source)}.to_not raise_error
|
150
|
+
|
151
|
+
source.destroyed?.should be_true
|
152
|
+
destination.users.to_a.should include(user)
|
153
|
+
destination.tasks.to_a.should include(task)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
it "members can belong to many groups" do
|
88
158
|
user.groups << group
|
89
|
-
group2 = MongoidGroup.create
|
159
|
+
group2 = MongoidGroup.create!
|
90
160
|
user.groups << group2
|
91
161
|
|
92
162
|
user.groups.should include(group)
|
@@ -100,7 +170,7 @@ describe "Mongoid Model" do
|
|
100
170
|
MongoidUser.in_all_groups([group, group2]).first.should eql(user)
|
101
171
|
end
|
102
172
|
|
103
|
-
it "can have named groups" do
|
173
|
+
it "members can have named groups" do
|
104
174
|
user.named_groups << :admin
|
105
175
|
user.named_groups << :user
|
106
176
|
user.save
|
@@ -121,17 +191,17 @@ describe "Mongoid Model" do
|
|
121
191
|
user.named_groups.count{|g| g == :admin}.should == 1
|
122
192
|
end
|
123
193
|
|
124
|
-
it "can check if groups are shared" do
|
194
|
+
it "members can check if groups are shared" do
|
125
195
|
user.groups << group
|
126
|
-
user2 = MongoidUser.create(:groups => [group])
|
196
|
+
user2 = MongoidUser.create!(:groups => [group])
|
127
197
|
|
128
198
|
user.shares_any_group?(user2).should be_true
|
129
199
|
MongoidUser.shares_any_group(user).to_a.should include(user2)
|
130
200
|
end
|
131
201
|
|
132
|
-
it "can check if named groups are shared" do
|
202
|
+
it "members can check if named groups are shared" do
|
133
203
|
user.named_groups << :admin
|
134
|
-
user2 = MongoidUser.create(:named_groups => [:admin])
|
204
|
+
user2 = MongoidUser.create!(:named_groups => [:admin])
|
135
205
|
|
136
206
|
user.shares_any_named_group?(user2).should be_true
|
137
207
|
MongoidUser.shares_any_named_group(user).to_a.should include(user2)
|
data/spec/spec_helper.rb
CHANGED
@@ -3,18 +3,8 @@ require 'bundler/setup'
|
|
3
3
|
|
4
4
|
Bundler.require(:default, :test, :development)
|
5
5
|
|
6
|
+
JRUBY = defined?(JRUBY_VERSION)
|
7
|
+
|
6
8
|
RSpec.configure do |config|
|
7
9
|
config.order = "random"
|
8
|
-
|
9
|
-
config.before(:suite) do
|
10
|
-
DatabaseCleaner[:mongoid].strategy = :truncation
|
11
|
-
end
|
12
|
-
|
13
|
-
config.before(:each) do
|
14
|
-
DatabaseCleaner[:mongoid].start
|
15
|
-
end
|
16
|
-
|
17
|
-
config.after(:each) do
|
18
|
-
DatabaseCleaner[:mongoid].clean
|
19
|
-
end
|
20
10
|
end
|
metadata
CHANGED
@@ -2,48 +2,60 @@
|
|
2
2
|
name: groupify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.4.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- dwbutler
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01
|
12
|
+
date: 2013-07-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
16
|
version_requirements: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - '>='
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version:
|
21
|
-
Mg==
|
20
|
+
version: '3.1'
|
22
21
|
none: false
|
23
22
|
requirement: !ruby/object:Gem::Requirement
|
24
23
|
requirements:
|
25
|
-
- -
|
24
|
+
- - '>='
|
26
25
|
- !ruby/object:Gem::Version
|
27
|
-
version:
|
28
|
-
Mg==
|
26
|
+
version: '3.1'
|
29
27
|
none: false
|
30
28
|
prerelease: false
|
31
|
-
type: :
|
29
|
+
type: :development
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activerecord
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '3.2'
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '3.2'
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
32
46
|
- !ruby/object:Gem::Dependency
|
33
47
|
name: rake
|
34
48
|
version_requirements: !ruby/object:Gem::Requirement
|
35
49
|
requirements:
|
36
|
-
- -
|
50
|
+
- - '>='
|
37
51
|
- !ruby/object:Gem::Version
|
38
|
-
version:
|
39
|
-
MA==
|
52
|
+
version: '0'
|
40
53
|
none: false
|
41
54
|
requirement: !ruby/object:Gem::Requirement
|
42
55
|
requirements:
|
43
|
-
- -
|
56
|
+
- - '>='
|
44
57
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
MA==
|
58
|
+
version: '0'
|
47
59
|
none: false
|
48
60
|
prerelease: false
|
49
61
|
type: :development
|
@@ -51,17 +63,15 @@ dependencies:
|
|
51
63
|
name: rspec
|
52
64
|
version_requirements: !ruby/object:Gem::Requirement
|
53
65
|
requirements:
|
54
|
-
- -
|
66
|
+
- - '>='
|
55
67
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
57
|
-
MA==
|
68
|
+
version: '0'
|
58
69
|
none: false
|
59
70
|
requirement: !ruby/object:Gem::Requirement
|
60
71
|
requirements:
|
61
|
-
- -
|
72
|
+
- - '>='
|
62
73
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
64
|
-
MA==
|
74
|
+
version: '0'
|
65
75
|
none: false
|
66
76
|
prerelease: false
|
67
77
|
type: :development
|
@@ -69,17 +79,15 @@ dependencies:
|
|
69
79
|
name: mongoid-rspec
|
70
80
|
version_requirements: !ruby/object:Gem::Requirement
|
71
81
|
requirements:
|
72
|
-
- -
|
82
|
+
- - '>='
|
73
83
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
75
|
-
MA==
|
84
|
+
version: '0'
|
76
85
|
none: false
|
77
86
|
requirement: !ruby/object:Gem::Requirement
|
78
87
|
requirements:
|
79
|
-
- -
|
88
|
+
- - '>='
|
80
89
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
82
|
-
MA==
|
90
|
+
version: '0'
|
83
91
|
none: false
|
84
92
|
prerelease: false
|
85
93
|
type: :development
|
@@ -87,17 +95,15 @@ dependencies:
|
|
87
95
|
name: database_cleaner
|
88
96
|
version_requirements: !ruby/object:Gem::Requirement
|
89
97
|
requirements:
|
90
|
-
- -
|
98
|
+
- - '>='
|
91
99
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
93
|
-
MA==
|
100
|
+
version: '0'
|
94
101
|
none: false
|
95
102
|
requirement: !ruby/object:Gem::Requirement
|
96
103
|
requirements:
|
97
|
-
- -
|
104
|
+
- - '>='
|
98
105
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
100
|
-
MA==
|
106
|
+
version: '0'
|
101
107
|
none: false
|
102
108
|
prerelease: false
|
103
109
|
type: :development
|
@@ -108,19 +114,22 @@ executables: []
|
|
108
114
|
extensions: []
|
109
115
|
extra_rdoc_files: []
|
110
116
|
files:
|
111
|
-
-
|
112
|
-
-
|
117
|
+
- .gitignore
|
118
|
+
- .travis.yml
|
113
119
|
- Gemfile
|
114
120
|
- LICENSE
|
115
121
|
- README.md
|
116
122
|
- Rakefile
|
117
|
-
- gemfiles/
|
118
|
-
- gemfiles/
|
123
|
+
- gemfiles/activesupport3.gemfile
|
124
|
+
- gemfiles/activesupport4.gemfile
|
119
125
|
- groupify.gemspec
|
120
126
|
- lib/groupify.rb
|
127
|
+
- lib/groupify/adapter/active_record.rb
|
128
|
+
- lib/groupify/adapter/mongoid.rb
|
129
|
+
- lib/groupify/railtie.rb
|
121
130
|
- lib/groupify/version.rb
|
122
|
-
- spec/groupify/
|
123
|
-
- spec/groupify/
|
131
|
+
- spec/groupify/active_record_spec.rb
|
132
|
+
- spec/groupify/mongoid.yml
|
124
133
|
- spec/groupify/mongoid_spec.rb
|
125
134
|
- spec/spec_helper.rb
|
126
135
|
homepage: https://github.com/dwbutler/groupify
|
@@ -131,17 +140,21 @@ require_paths:
|
|
131
140
|
- lib
|
132
141
|
required_ruby_version: !ruby/object:Gem::Requirement
|
133
142
|
requirements:
|
134
|
-
- -
|
143
|
+
- - '>='
|
135
144
|
- !ruby/object:Gem::Version
|
136
|
-
|
137
|
-
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
hash: 2
|
148
|
+
version: '0'
|
138
149
|
none: false
|
139
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
151
|
requirements:
|
141
|
-
- -
|
152
|
+
- - '>='
|
142
153
|
- !ruby/object:Gem::Version
|
143
|
-
|
144
|
-
|
154
|
+
segments:
|
155
|
+
- 0
|
156
|
+
hash: 2
|
157
|
+
version: '0'
|
145
158
|
none: false
|
146
159
|
requirements: []
|
147
160
|
rubyforge_project:
|
@@ -150,7 +163,7 @@ signing_key:
|
|
150
163
|
specification_version: 3
|
151
164
|
summary: Group functionality for Rails
|
152
165
|
test_files:
|
153
|
-
- spec/groupify/
|
154
|
-
- spec/groupify/
|
166
|
+
- spec/groupify/active_record_spec.rb
|
167
|
+
- spec/groupify/mongoid.yml
|
155
168
|
- spec/groupify/mongoid_spec.rb
|
156
169
|
- spec/spec_helper.rb
|
data/gemfiles/mongoid2.gemfile
DELETED
data/gemfiles/mongoid3.gemfile
DELETED