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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 105996dc9352662d0363b74124dbb8f936b0d81b
4
- data.tar.gz: 81479cdb755adba4da248918fcb891313279e772
3
+ metadata.gz: 2c496eba538ed9d9f3998e6086132cd9df318a58
4
+ data.tar.gz: 2d2813af6aa7f156d1fc67587ca280751d3ec3a0
5
5
  SHA512:
6
- metadata.gz: 8fdd61ea3448ef18e8249c8680019ed21288c34c33738b695d660a1efaca29c3d55bb71ff9345f869d7d0d4086084092537fe0a183f2e963fb8aa62a92060315
7
- data.tar.gz: 3c858406df76fe3cb960602e889bdd95cfde1d46c0addf5bbd70b03507e958a7d7448e0f79d42b7d65dbbc5b8665769af5ac284bfce18df35aad76d27fd244fe
6
+ metadata.gz: 2c442e43c311e8da812874b504508d4d4a522ed586ed85aace281e78f5fb8930988b899ee8aca4f1e54fbb6747a10bd4c31255306647f36b2213c4248e92006c
7
+ data.tar.gz: 58acbb5637dc636a1ac5c051b65870c863bfea519af172f5c4b7220b841722aecccac46ab42ab0aa8700981393f6f831707ea71a98d46d3a9dda585a71c88176
data/Appraisals CHANGED
@@ -13,3 +13,9 @@ appraise "rails-4.1" do
13
13
 
14
14
  gem "mongoid", "~> 4.0"
15
15
  end
16
+
17
+ appraise "rails-4.2" do
18
+ gem 'activerecord', "~> 4.2.0.beta1"
19
+
20
+ gem "mongoid", "~> 4.0"
21
+ end
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
- Mongoid 3.1 & 4.0, ActiveRecord 3.2 & 4.x
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 inheritence
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
- acts_as_group :members => [:users, :assignments], :default_members => :users
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
- acts_as_group_member
68
- acts_as_named_group_member
68
+ groupify :group_member
69
+ groupify :named_group_member
69
70
  end
70
71
 
71
72
  class Assignment < ActiveRecord::Base
72
- acts_as_group_member
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
- acts_as_group_membership
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
- acts_as_group :members => [:users], :default_members => :users
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
- acts_as_group_member
102
- acts_as_named_group_member
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
- acts_as_named_group_member
271
+ groupify :named_group_member
271
272
  include Authority::UserAbilities
272
273
  end
273
274
 
274
275
  class Widget
275
- acts_as_named_group_member
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
- association_name = member_klass.name.to_s.pluralize.underscore.to_sym
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
- has_many :members, through: :group_memberships, source: :member, source_type: source_type, extend: MemberAssociationExtensions
141
- override_member_accessor(:members)
136
+ define_member_association(member_klass, :members)
142
137
  end
143
138
  end
144
139
 
145
- def override_member_accessor(association_name)
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, :as => :member, :autosave => true, :dependent => :destroy
17
+ has_many :group_memberships, as: :member, autosave: true, dependent: :destroy
18
18
  end
19
19
 
20
- has_many :groups, :through => :group_memberships, :class_name => @group_class_name do
21
- def as(membership_type)
22
- return self unless membership_type
23
- where(group_memberships: {membership_type: membership_type})
24
- end
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
- def delete(*args)
27
- opts = args.extract_options!
28
- groups = args.flatten
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
- if opts[:as]
31
- proxy_association.owner.group_memberships.where(group_id: groups.map(&:id)).as(opts[:as]).delete_all
32
- else
33
- super(*groups)
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
- def destroy(*args)
38
- opts = args.extract_options!
39
- groups = args.flatten
44
+ def destroy(*args)
45
+ opts = args.extract_options!
46
+ groups = args.flatten
40
47
 
41
- if opts[:as]
42
- proxy_association.owner.group_memberships.where(group_id: groups.map(&:id)).as(opts[:as]).destroy_all
43
- else
44
- super(*groups)
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
@@ -14,6 +14,10 @@ module Groupify
14
14
  end
15
15
 
16
16
  module ClassMethods
17
+ def groupify(type, opts = {})
18
+ send("acts_as_#{type}", opts)
19
+ end
20
+
17
21
  def acts_as_group(opts = {})
18
22
  include Groupify::ActiveRecord::Group
19
23
 
@@ -8,6 +8,10 @@ module Groupify
8
8
  end
9
9
 
10
10
  module ClassMethods
11
+ def groupify(type, opts = {})
12
+ send("acts_as_#{type}", opts)
13
+ end
14
+
11
15
  def acts_as_group(opts = {})
12
16
  include Groupify::Mongoid::Group
13
17
 
@@ -1,3 +1,3 @@
1
1
  module Groupify
2
- VERSION = "0.6.0.rc2"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -64,23 +64,23 @@ end
64
64
  require 'groupify/adapter/active_record'
65
65
 
66
66
  class User < ActiveRecord::Base
67
- acts_as_group_member
68
- acts_as_named_group_member
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
- acts_as_group_member
75
+ groupify :group_member
76
76
  end
77
77
 
78
78
  class Project < ActiveRecord::Base
79
- acts_as_named_group_member
79
+ groupify :named_group_member
80
80
  end
81
81
 
82
82
  class Group < ActiveRecord::Base
83
- acts_as_group :members => [:users, :widgets], :default_members => :users
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
- acts_as_group_membership
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!(:groups => [group])
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
- acts_as_group_member :class_name => 'MongoidGroup'
39
- acts_as_named_group_member
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
- acts_as_group_member :class_name => 'MongoidGroup'
47
+ groupify :group_member, class_name: 'MongoidGroup'
48
48
  end
49
49
 
50
50
  class MongoidTask
51
51
  include Mongoid::Document
52
52
 
53
- acts_as_group_member :class_name => 'MongoidGroup'
53
+ groupify :group_member, class_name: 'MongoidGroup'
54
54
  end
55
55
 
56
56
  class MongoidIssue
57
57
  include Mongoid::Document
58
58
 
59
- acts_as_group_member :class_name => 'MongoidProject'
59
+ groupify :group_member, class_name: 'MongoidProject'
60
60
  end
61
61
 
62
62
  class MongoidGroup
63
63
  include Mongoid::Document
64
64
 
65
- acts_as_group :members => [:mongoid_users, :mongoid_tasks, :mongoid_widgets], :default_members => :mongoid_users
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
- acts_as_named_group_member
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.rc2
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-21 00:00:00.000000000 Z
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: 1.3.1
169
+ version: '0'
169
170
  requirements: []
170
171
  rubyforge_project:
171
172
  rubygems_version: 2.2.2