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.
@@ -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