groupify 0.6.0.rc2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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