groupify 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- if Mongoid::VERSION < '3'
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 :tasks, :mongoid_tasks
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 "Mongoid Model" do
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 "can have a group added to it" do
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 "can be added to a group" do
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 "can be found by group" do
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 "can find the group it belongs to" do
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
- it "can belong to many groups" do
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.3.1
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-11 00:00:00.000000000 Z
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: !binary |-
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: !binary |-
28
- Mg==
26
+ version: '3.1'
29
27
  none: false
30
28
  prerelease: false
31
- type: :runtime
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: !binary |-
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: !binary |-
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: !binary |-
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: !binary |-
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: !binary |-
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: !binary |-
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: !binary |-
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: !binary |-
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
- - ".gitignore"
112
- - ".travis.yml"
117
+ - .gitignore
118
+ - .travis.yml
113
119
  - Gemfile
114
120
  - LICENSE
115
121
  - README.md
116
122
  - Rakefile
117
- - gemfiles/mongoid2.gemfile
118
- - gemfiles/mongoid3.gemfile
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/mongoid2.yml
123
- - spec/groupify/mongoid3.yml
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
- version: !binary |-
137
- MA==
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
- version: !binary |-
144
- MA==
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/mongoid2.yml
154
- - spec/groupify/mongoid3.yml
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
@@ -1,10 +0,0 @@
1
- source :rubygems
2
-
3
- gem "mongoid", "~> 2.0"
4
- gem 'mongoid-rspec', '1.4.5'
5
-
6
- gem "bson_ext", :platforms => [:ruby]
7
-
8
- gem 'database_cleaner'
9
- gem "rspec"
10
- gem "rake"
@@ -1,8 +0,0 @@
1
- source :rubygems
2
-
3
- gem "mongoid", ">= 3.0", "< 4"
4
- gem 'mongoid-rspec', '>= 1.5.1'
5
-
6
- gem 'database_cleaner'
7
- gem "rspec"
8
- gem "rake"
@@ -1,9 +0,0 @@
1
- development:
2
- database: groupify_development
3
- host: localhost
4
- port: 27017
5
-
6
- test:
7
- database: groupify_test
8
- host: localhost
9
- port: 27017