groupify 0.6.0.rc2 → 0.6.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.
- checksums.yaml +4 -4
- data/Appraisals +6 -0
- data/README.md +13 -12
- data/gemfiles/rails_4.2.gemfile +18 -0
- data/lib/groupify/adapter/active_record/group.rb +12 -8
- data/lib/groupify/adapter/active_record/group_member.rb +28 -22
- data/lib/groupify/adapter/active_record/model.rb +4 -0
- data/lib/groupify/adapter/mongoid/model.rb +4 -0
- data/lib/groupify/version.rb +1 -1
- data/spec/active_record_spec.rb +15 -7
- data/spec/mongoid_spec.rb +7 -7
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2c496eba538ed9d9f3998e6086132cd9df318a58
|
4
|
+
data.tar.gz: 2d2813af6aa7f156d1fc67587ca280751d3ec3a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c442e43c311e8da812874b504508d4d4a522ed586ed85aace281e78f5fb8930988b899ee8aca4f1e54fbb6747a10bd4c31255306647f36b2213c4248e92006c
|
7
|
+
data.tar.gz: 58acbb5637dc636a1ac5c051b65870c863bfea519af172f5c4b7220b841722aecccac46ab42ab0aa8700981393f6f831707ea71a98d46d3a9dda585a71c88176
|
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -7,7 +7,8 @@ model? Use named groups instead to add members to named groups such as
|
|
7
7
|
`:admin` or `"Team Rocketpants"`.
|
8
8
|
|
9
9
|
The following ORMs are supported:
|
10
|
-
|
10
|
+
* ActiveRecord 3.2, 4.x
|
11
|
+
* Mongoid 3.1, 4.0,
|
11
12
|
|
12
13
|
The following Rubies are supported:
|
13
14
|
* MRI Ruby 1.9.3, 2.0.x, 2.1.x
|
@@ -34,7 +35,7 @@ Add a migration similar to the following:
|
|
34
35
|
class CreateGroups < ActiveRecord::Migration
|
35
36
|
def change
|
36
37
|
create_table :groups do |t|
|
37
|
-
t.string :type # Only needed if using single table
|
38
|
+
t.string :type # Only needed if using single table inheritance
|
38
39
|
end
|
39
40
|
|
40
41
|
create_table :group_memberships do |t|
|
@@ -56,7 +57,7 @@ In your group model:
|
|
56
57
|
|
57
58
|
```ruby
|
58
59
|
class Group < ActiveRecord::Base
|
59
|
-
|
60
|
+
groupify :group, members: [:users, :assignments], default_members: :users
|
60
61
|
end
|
61
62
|
```
|
62
63
|
|
@@ -64,12 +65,12 @@ In your member models (i.e. `User`):
|
|
64
65
|
|
65
66
|
```ruby
|
66
67
|
class User < ActiveRecord::Base
|
67
|
-
|
68
|
-
|
68
|
+
groupify :group_member
|
69
|
+
groupify :named_group_member
|
69
70
|
end
|
70
71
|
|
71
72
|
class Assignment < ActiveRecord::Base
|
72
|
-
|
73
|
+
groupify :group_member
|
73
74
|
end
|
74
75
|
```
|
75
76
|
|
@@ -77,7 +78,7 @@ You will also need to define a `GroupMembership` model to join groups to members
|
|
77
78
|
|
78
79
|
```ruby
|
79
80
|
class GroupMembership < ActiveRecord::Base
|
80
|
-
|
81
|
+
groupify :group_membership
|
81
82
|
end
|
82
83
|
```
|
83
84
|
|
@@ -88,7 +89,7 @@ In your group model:
|
|
88
89
|
class Group
|
89
90
|
include Mongoid::Document
|
90
91
|
|
91
|
-
|
92
|
+
groupify :group, members: [:users], default_members: :users
|
92
93
|
end
|
93
94
|
```
|
94
95
|
|
@@ -98,8 +99,8 @@ In your member models (i.e. `User`):
|
|
98
99
|
class User
|
99
100
|
include Mongoid::Document
|
100
101
|
|
101
|
-
|
102
|
-
|
102
|
+
groupify :group_member
|
103
|
+
groupify :named_group_member
|
103
104
|
end
|
104
105
|
```
|
105
106
|
|
@@ -267,12 +268,12 @@ end
|
|
267
268
|
```ruby
|
268
269
|
# Whatever class represents a logged-in user in your app
|
269
270
|
class User
|
270
|
-
|
271
|
+
groupify :named_group_member
|
271
272
|
include Authority::UserAbilities
|
272
273
|
end
|
273
274
|
|
274
275
|
class Widget
|
275
|
-
|
276
|
+
groupify :named_group_member
|
276
277
|
include Authority::Abilities
|
277
278
|
end
|
278
279
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "jdbc-sqlite3", :platform => :jruby
|
6
|
+
gem "activerecord-jdbcsqlite3-adapter", :platform => :jruby
|
7
|
+
gem "activerecord", "~> 4.2.0.beta1"
|
8
|
+
gem "mongoid", "~> 4.0"
|
9
|
+
|
10
|
+
group :development do
|
11
|
+
gem "pry"
|
12
|
+
end
|
13
|
+
|
14
|
+
group :test do
|
15
|
+
gem "coveralls", :require => false
|
16
|
+
end
|
17
|
+
|
18
|
+
gemspec :path => "../"
|
@@ -130,19 +130,23 @@ module Groupify
|
|
130
130
|
end
|
131
131
|
|
132
132
|
def associate_member_class(member_klass)
|
133
|
-
|
134
|
-
source_type = member_klass.base_class
|
135
|
-
|
136
|
-
has_many association_name, through: :group_memberships, source: :member, source_type: source_type, extend: MemberAssociationExtensions
|
137
|
-
override_member_accessor(association_name)
|
133
|
+
define_member_association(member_klass)
|
138
134
|
|
139
135
|
if member_klass == default_member_class
|
140
|
-
|
141
|
-
override_member_accessor(:members)
|
136
|
+
define_member_association(member_klass, :members)
|
142
137
|
end
|
143
138
|
end
|
144
139
|
|
145
|
-
def
|
140
|
+
def define_member_association(member_klass, association_name = nil)
|
141
|
+
association_name ||= member_klass.name.to_s.pluralize.underscore.to_sym
|
142
|
+
source_type = member_klass.base_class
|
143
|
+
|
144
|
+
if ActiveSupport::VERSION::MAJOR > 3
|
145
|
+
has_many association_name, ->{ uniq }, through: :group_memberships, source: :member, source_type: source_type, extend: MemberAssociationExtensions
|
146
|
+
else
|
147
|
+
has_many association_name, uniq: true, through: :group_memberships, source: :member, source_type: source_type, extend: MemberAssociationExtensions
|
148
|
+
end
|
149
|
+
|
146
150
|
define_method(association_name) do |*args|
|
147
151
|
opts = args.extract_options!
|
148
152
|
membership_type = opts[:as]
|
@@ -14,35 +14,41 @@ module Groupify
|
|
14
14
|
|
15
15
|
included do
|
16
16
|
unless respond_to?(:group_memberships)
|
17
|
-
has_many :group_memberships, :
|
17
|
+
has_many :group_memberships, as: :member, autosave: true, dependent: :destroy
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
if ActiveSupport::VERSION::MAJOR > 3
|
21
|
+
has_many :groups, ->{ uniq }, through: :group_memberships, class_name: @group_class_name, extend: GroupAssociationExtensions
|
22
|
+
else
|
23
|
+
has_many :groups, uniq: true, through: :group_memberships, class_name: @group_class_name, extend: GroupAssociationExtensions
|
24
|
+
end
|
25
|
+
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
module GroupAssociationExtensions
|
28
|
+
def as(membership_type)
|
29
|
+
return self unless membership_type
|
30
|
+
where(group_memberships: {membership_type: membership_type})
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete(*args)
|
34
|
+
opts = args.extract_options!
|
35
|
+
groups = args.flatten
|
29
36
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
37
|
+
if opts[:as]
|
38
|
+
proxy_association.owner.group_memberships.where(group_id: groups.map(&:id)).as(opts[:as]).delete_all
|
39
|
+
else
|
40
|
+
super(*groups)
|
35
41
|
end
|
42
|
+
end
|
36
43
|
|
37
|
-
|
38
|
-
|
39
|
-
|
44
|
+
def destroy(*args)
|
45
|
+
opts = args.extract_options!
|
46
|
+
groups = args.flatten
|
40
47
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
48
|
+
if opts[:as]
|
49
|
+
proxy_association.owner.group_memberships.where(group_id: groups.map(&:id)).as(opts[:as]).destroy_all
|
50
|
+
else
|
51
|
+
super(*groups)
|
46
52
|
end
|
47
53
|
end
|
48
54
|
end
|
data/lib/groupify/version.rb
CHANGED
data/spec/active_record_spec.rb
CHANGED
@@ -64,23 +64,23 @@ end
|
|
64
64
|
require 'groupify/adapter/active_record'
|
65
65
|
|
66
66
|
class User < ActiveRecord::Base
|
67
|
-
|
68
|
-
|
67
|
+
groupify :group_member
|
68
|
+
groupify :named_group_member
|
69
69
|
end
|
70
70
|
|
71
71
|
class Manager < User
|
72
72
|
end
|
73
73
|
|
74
74
|
class Widget < ActiveRecord::Base
|
75
|
-
|
75
|
+
groupify :group_member
|
76
76
|
end
|
77
77
|
|
78
78
|
class Project < ActiveRecord::Base
|
79
|
-
|
79
|
+
groupify :named_group_member
|
80
80
|
end
|
81
81
|
|
82
82
|
class Group < ActiveRecord::Base
|
83
|
-
|
83
|
+
groupify :group, members: [:users, :widgets], default_members: :users
|
84
84
|
end
|
85
85
|
|
86
86
|
class Organization < Group
|
@@ -88,7 +88,7 @@ class Organization < Group
|
|
88
88
|
end
|
89
89
|
|
90
90
|
class GroupMembership < ActiveRecord::Base
|
91
|
-
|
91
|
+
groupify :group_membership
|
92
92
|
end
|
93
93
|
|
94
94
|
describe Group do
|
@@ -242,7 +242,8 @@ describe Groupify::ActiveRecord do
|
|
242
242
|
it "members can check if groups are shared" do
|
243
243
|
user.groups << group
|
244
244
|
widget.groups << group
|
245
|
-
user2 = User.create!
|
245
|
+
user2 = User.create!
|
246
|
+
user2.groups << group
|
246
247
|
|
247
248
|
expect(user.shares_any_group?(widget)).to be true
|
248
249
|
expect(Widget.shares_any_group(user).to_a).to include(widget)
|
@@ -371,6 +372,13 @@ describe Groupify::ActiveRecord do
|
|
371
372
|
expect(User.in_any_group(group, group2).as('employee').first).to eql(user)
|
372
373
|
end
|
373
374
|
|
375
|
+
it "still returns a unique list of groups for the member" do
|
376
|
+
group.add user, as: 'manager'
|
377
|
+
expect(user.groups.size).to eq(1)
|
378
|
+
expect(group.users.size).to eq(1)
|
379
|
+
expect(group.members.size).to eq(1)
|
380
|
+
end
|
381
|
+
|
374
382
|
it "checks if members belong to all groups with a certain membership type" do
|
375
383
|
group2 = Group.create!
|
376
384
|
group3 = Group.create!
|
data/spec/mongoid_spec.rb
CHANGED
@@ -35,8 +35,8 @@ require 'groupify/adapter/mongoid'
|
|
35
35
|
class MongoidUser
|
36
36
|
include Mongoid::Document
|
37
37
|
|
38
|
-
|
39
|
-
|
38
|
+
groupify :group_member, class_name: 'MongoidGroup'
|
39
|
+
groupify :named_group_member
|
40
40
|
end
|
41
41
|
|
42
42
|
class MongoidManager < MongoidUser
|
@@ -44,32 +44,32 @@ end
|
|
44
44
|
|
45
45
|
class MongoidWidget
|
46
46
|
include Mongoid::Document
|
47
|
-
|
47
|
+
groupify :group_member, class_name: 'MongoidGroup'
|
48
48
|
end
|
49
49
|
|
50
50
|
class MongoidTask
|
51
51
|
include Mongoid::Document
|
52
52
|
|
53
|
-
|
53
|
+
groupify :group_member, class_name: 'MongoidGroup'
|
54
54
|
end
|
55
55
|
|
56
56
|
class MongoidIssue
|
57
57
|
include Mongoid::Document
|
58
58
|
|
59
|
-
|
59
|
+
groupify :group_member, class_name: 'MongoidProject'
|
60
60
|
end
|
61
61
|
|
62
62
|
class MongoidGroup
|
63
63
|
include Mongoid::Document
|
64
64
|
|
65
|
-
|
65
|
+
groupify :group, members: [:mongoid_users, :mongoid_tasks, :mongoid_widgets], default_members: :mongoid_users
|
66
66
|
alias_method :users, :mongoid_users
|
67
67
|
alias_method :tasks, :mongoid_tasks
|
68
68
|
alias_method :widgets, :mongoid_widgets
|
69
69
|
end
|
70
70
|
|
71
71
|
class MongoidProject < MongoidGroup
|
72
|
-
|
72
|
+
groupify :named_group_member
|
73
73
|
|
74
74
|
has_members :mongoid_issues
|
75
75
|
has_members :mongoid_managers
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: groupify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.0
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dwbutler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -127,6 +127,7 @@ files:
|
|
127
127
|
- gemfiles/rails_3.2.gemfile
|
128
128
|
- gemfiles/rails_4.0.gemfile
|
129
129
|
- gemfiles/rails_4.1.gemfile
|
130
|
+
- gemfiles/rails_4.2.gemfile
|
130
131
|
- groupify.gemspec
|
131
132
|
- lib/groupify.rb
|
132
133
|
- lib/groupify/adapter/active_record.rb
|
@@ -163,9 +164,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
164
|
version: '0'
|
164
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
165
166
|
requirements:
|
166
|
-
- - "
|
167
|
+
- - ">="
|
167
168
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
169
|
+
version: '0'
|
169
170
|
requirements: []
|
170
171
|
rubyforge_project:
|
171
172
|
rubygems_version: 2.2.2
|