groupify 0.3.1 → 0.4.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/.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