acts_as_user 1.2.5 → 1.2.6

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: 08b2f1423c8dbd79e5e1bf685b6e49e4073049e2
4
- data.tar.gz: 21aaaad336508302c5dd34ce74a5962900e2a7a4
3
+ metadata.gz: 83f6ee78d21aa3ba484e1ffb50d2bd473bfff98a
4
+ data.tar.gz: f8e7ac9d1ec1f307c6f046bbf5443e22c563dfba
5
5
  SHA512:
6
- metadata.gz: 80b6d83f6dcd68843679a6cb799c08895d6dd275f90825b878f233562dff9f2170a599eb736dd7832d1308dd3b1f326870023ca4603f7ad9c59c8901b4fd3061
7
- data.tar.gz: 0f0c76be3fe6af02c066193611c67f4def3591b089826b97b454be00ab60d8279c015bf6003f7c28d8e531c09d5f8556ca0bf42c1b9b10fff13440667b12c016
6
+ metadata.gz: 7ae1a038f289cbed8d1464febc3ea8905a5b66f4289c4ad7f32f12b834edb9d7042aab976613c99ed0d12c33afd4675e242535d8784e4bbf40f8c86274e4b53a
7
+ data.tar.gz: d9ab729c639a062dc5f9f797bc2e313e7411f564e48978bd39dc191880ccbbaa5e9d329caa923347452203748f4f1fda210f70aec6a96fa84db8bcca21b069c5
@@ -2,7 +2,7 @@ module ActsAsUser
2
2
  module IsUser
3
3
 
4
4
  def self.included(base)
5
- base.belongs_to :userable, polymorphic: true
5
+ base.belongs_to :userable, polymorphic: true, inverse_of: :user
6
6
  base.extend ClassMethods
7
7
  #loads models acting as users when the hook is loaded
8
8
  base.define_models_acting_as_users
@@ -13,7 +13,7 @@ module ActsAsUser
13
13
  models_acting_as_users = ActsAsUser.models_acting_as_users.map(&:to_s).map(&:downcase)
14
14
  models_acting_as_users.each do |model_class_name|
15
15
  define_method("#{model_class_name}?") do
16
- self.userable_type.to_s.downcase == model_class_name
16
+ self.userable_type.to_s.underscore == model_class_name
17
17
  end
18
18
  end
19
19
  end
@@ -7,8 +7,10 @@ module ActsAsUser
7
7
  ActsAsUser.add_devise_attributes_to_ignore
8
8
 
9
9
  class ActiveRecord::Base
10
- def self.acts_as_user
11
- include ActsAsUser::UserDelegate
10
+ cattr_accessor :acts_as_user_options
11
+ def self.acts_as_user options={}
12
+ self.acts_as_user_options = options
13
+ include ActsAsUser::UserDelegate
12
14
  end
13
15
  def self.is_user
14
16
  include ActsAsUser::IsUser
@@ -1,17 +1,28 @@
1
1
  module ActsAsUser
2
2
  module UserDelegate
3
3
  def self.included(base)
4
- base.has_one :user, :as => :userable, :dependent => :destroy, :autosave => true
5
- base.validate :user_must_be_valid
6
- base.alias_method_chain :user, :autobuild
7
- base.extend ClassMethods
8
- base.define_user_accessors
4
+ options = base.class_variable_get('@@acts_as_user_options')
5
+ if !!options[:has_many]
6
+ base.has_many :users, :as => :userable, :dependent => :destroy, :autosave => true
7
+ base.alias_method_chain :users, :autobuild
8
+ base.accepts_nested_attributes_for :users, :allow_destroy => true
9
+ else
10
+ base.has_one :user, :as => :userable, :dependent => :destroy, :autosave => true
11
+ base.alias_method_chain :user, :autobuild
12
+ base.validate :user_must_be_valid
13
+ base.extend ClassMethods
14
+ base.define_user_accessors
15
+ end
9
16
  end
10
17
 
11
18
  def user_with_autobuild
12
19
  user_without_autobuild || build_user
13
20
  end
14
21
 
22
+ def users_with_autobuild
23
+ users_without_autobuild.present? ? users_without_autobuild : (users_without_autobuild << User.new)
24
+ end
25
+
15
26
  def method_missing(meth, *args, &blk)
16
27
  user.send(meth, *args, &blk)
17
28
  rescue NoMethodError
@@ -1,3 +1,3 @@
1
1
  module ActsAsUser
2
- VERSION = "1.2.5"
2
+ VERSION = "1.2.6"
3
3
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Partner do
4
+ it { should have_many(:users).dependent(:destroy) }
5
+ it { should respond_to :users }
6
+ it { should respond_to :name }
7
+ it { should accept_nested_attributes_for(:users).allow_destroy(true) }
8
+
9
+ describe 'partner with many users' do
10
+ let(:partner) { Partner.create(name: 'Company', users: users) }
11
+ let(:users) { Array.new(2) { User.create(email: 'test@icalialabs.com') } }
12
+
13
+ it 'gives back all users on partner' do
14
+ partner.users.to_a.should =~ users
15
+ end
16
+ end
17
+
18
+ describe 'users autobuild' do
19
+ let(:partner) { Partner.new }
20
+
21
+ it 'has to have a user already' do
22
+ partner.users.first.should be_an_instance_of User
23
+ end
24
+ end
25
+ end
@@ -6,6 +6,7 @@ describe User do
6
6
  it { should respond_to :userable_id }
7
7
  it { should respond_to :customer? }
8
8
  it { should respond_to :admin? }
9
+ it { should respond_to :partner? }
9
10
 
10
11
 
11
12
  describe '#customer?' do
@@ -24,7 +25,7 @@ describe User do
24
25
  @current_user = @fake_customer_user.user
25
26
  end
26
27
  it 'returns false' do
27
- expect(@current_user).not_to be_customer
28
+ expect(@current_user).not_to be_customer
28
29
  end
29
30
  end
30
31
  context 'when is an admin' do
@@ -36,5 +37,12 @@ describe User do
36
37
  expect(@current_user).to be_admin
37
38
  end
38
39
  end
40
+ context 'when is a partner' do
41
+ let(:partner) { Partner.create name: 'Fake Name', users: [ User.create(email: 'test@icalialabs.com') ] }
42
+ let(:user) { partner.users.first }
43
+ it 'returns true' do
44
+ expect(user).to be_partner
45
+ end
46
+ end
39
47
  end
40
48
  end
@@ -2,7 +2,7 @@
2
2
  # rails generators
3
3
  ActsAsUser.setup do |config|
4
4
 
5
- config.models_acting_as_users = [:admin, :customer]
5
+ config.models_acting_as_users = [:admin, :customer, :partner]
6
6
 
7
7
  # ==> ORM Configuration
8
8
  # Load and configure the ORM. Supports :active_record
@@ -1,5 +1,5 @@
1
1
  class User < ActiveRecord::Base
2
- is_user
2
+ is_user
3
3
  validates :email, presence: true
4
4
  end
5
5
 
@@ -10,3 +10,7 @@ end
10
10
  class Admin < ActiveRecord::Base
11
11
  acts_as_user
12
12
  end
13
+
14
+ class Partner < ActiveRecord::Base
15
+ acts_as_user :has_many => true
16
+ end
@@ -1,7 +1,7 @@
1
1
  ActiveRecord::Schema.define(:version => 0) do
2
2
  create_table :users do |t|
3
3
  t.string :email
4
- t.string :userable_type
4
+ t.string :userable_type
5
5
  t.integer :userable_id
6
6
  end
7
7
  add_index :users, [:userable_id, :userable_type]
@@ -13,4 +13,8 @@ ActiveRecord::Schema.define(:version => 0) do
13
13
 
14
14
  create_table :admins do |t|
15
15
  end
16
+
17
+ create_table :partners do |t|
18
+ t.string :name
19
+ end
16
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_user
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abraham Kuri
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-02 00:00:00.000000000 Z
12
+ date: 2015-06-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -198,6 +198,7 @@ files:
198
198
  - lib/generators/templates/acts_as_user.rb
199
199
  - spec/fake_gem.rb
200
200
  - spec/models/active_record/customer_spec.rb
201
+ - spec/models/active_record/partner_spec.rb
201
202
  - spec/models/active_record/user_spec.rb
202
203
  - spec/models/config/setup_spec.rb
203
204
  - spec/spec_helper.rb
@@ -226,13 +227,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
227
  version: '0'
227
228
  requirements: []
228
229
  rubyforge_project:
229
- rubygems_version: 2.2.1
230
+ rubygems_version: 2.4.5
230
231
  signing_key:
231
232
  specification_version: 4
232
233
  summary: Handles multiple user roles on a rails app
233
234
  test_files:
234
235
  - spec/fake_gem.rb
235
236
  - spec/models/active_record/customer_spec.rb
237
+ - spec/models/active_record/partner_spec.rb
236
238
  - spec/models/active_record/user_spec.rb
237
239
  - spec/models/config/setup_spec.rb
238
240
  - spec/spec_helper.rb