strongbolt 0.3.12 → 0.3.13

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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +56 -0
  3. data/.rubocop_todo.yml +91 -0
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +18 -2
  6. data/Rakefile +1 -1
  7. data/app/controllers/strongbolt/capabilities_controller.rb +36 -45
  8. data/app/controllers/strongbolt/roles_controller.rb +39 -47
  9. data/app/controllers/strongbolt/security_controller.rb +2 -3
  10. data/app/controllers/strongbolt/user_groups_controller.rb +48 -54
  11. data/app/controllers/strongbolt/user_groups_users_controller.rb +2 -4
  12. data/app/controllers/strongbolt_controller.rb +1 -1
  13. data/circle.yml +13 -0
  14. data/lib/generators/strongbolt/fix_generator.rb +5 -6
  15. data/lib/generators/strongbolt/fix_unique_group_members_generator.rb +2 -3
  16. data/lib/generators/strongbolt/indexes_generator.rb +3 -4
  17. data/lib/generators/strongbolt/install_generator.rb +8 -9
  18. data/lib/generators/strongbolt/templates/fix_unique_group_members.rb +1 -1
  19. data/lib/generators/strongbolt/templates/indexes.rb +1 -1
  20. data/lib/generators/strongbolt/templates/migration.rb +11 -12
  21. data/lib/generators/strongbolt/templates/strongbolt.rb +1 -1
  22. data/lib/generators/strongbolt/views_generator.rb +4 -4
  23. data/lib/strongbolt.rb +51 -54
  24. data/lib/strongbolt/base.rb +1 -1
  25. data/lib/strongbolt/bolted.rb +12 -13
  26. data/lib/strongbolt/bolted_controller.rb +46 -57
  27. data/lib/strongbolt/capabilities_role.rb +5 -5
  28. data/lib/strongbolt/capability.rb +32 -31
  29. data/lib/strongbolt/configuration.rb +18 -19
  30. data/lib/strongbolt/controllers/url_helpers.rb +5 -5
  31. data/lib/strongbolt/engine.rb +9 -9
  32. data/lib/strongbolt/errors.rb +4 -4
  33. data/lib/strongbolt/generators/migration.rb +4 -6
  34. data/lib/strongbolt/helpers.rb +5 -7
  35. data/lib/strongbolt/rails/routes.rb +4 -4
  36. data/lib/strongbolt/role.rb +11 -12
  37. data/lib/strongbolt/roles_user_group.rb +5 -5
  38. data/lib/strongbolt/rspec.rb +2 -2
  39. data/lib/strongbolt/rspec/user.rb +13 -15
  40. data/lib/strongbolt/tenantable.rb +78 -80
  41. data/lib/strongbolt/user_abilities.rb +44 -54
  42. data/lib/strongbolt/user_group.rb +8 -10
  43. data/lib/strongbolt/user_groups_user.rb +6 -6
  44. data/lib/strongbolt/version.rb +1 -1
  45. data/lib/tasks/strongbolt_tasks.rake +4 -4
  46. data/spec/controllers/strongbolt/capabilities_controller_spec.rb +28 -45
  47. data/spec/controllers/strongbolt/roles_controller_spec.rb +39 -72
  48. data/spec/controllers/strongbolt/user_groups_controller_spec.rb +34 -65
  49. data/spec/controllers/strongbolt/user_groups_users_controller_spec.rb +11 -19
  50. data/spec/controllers/without_authorization_controller_spec.rb +5 -5
  51. data/spec/dummy/app/controllers/posts_controller.rb +2 -2
  52. data/spec/dummy/app/controllers/test_controller.rb +1 -1
  53. data/spec/dummy/app/controllers/without_authorization_controller.rb +1 -1
  54. data/spec/dummy/bin/rails +1 -1
  55. data/spec/dummy/config.ru +1 -1
  56. data/spec/dummy/config/application.rb +4 -5
  57. data/spec/dummy/config/initializers/cookies_serializer.rb +1 -1
  58. data/spec/dummy/config/initializers/strongbolt.rb +2 -2
  59. data/spec/dummy/config/routes.rb +1 -3
  60. data/spec/dummy/db/migrate/20150630212236_create_strongbolt_tables.rb +9 -10
  61. data/spec/dummy/db/migrate/20150630212251_create_strongbolt_tables_indexes.rb +2 -2
  62. data/spec/dummy/db/migrate/20160531110509_fix_unique_group_members.rb +1 -1
  63. data/spec/fabricators/capability_fabricator.rb +4 -4
  64. data/spec/fabricators/role_fabricator.rb +3 -3
  65. data/spec/fabricators/user_fabricator.rb +2 -2
  66. data/spec/fabricators/user_group_fabricator.rb +3 -3
  67. data/spec/fixtures/application.rb +6 -3
  68. data/spec/fixtures/controllers.rb +1 -1
  69. data/spec/spec_helper.rb +7 -8
  70. data/spec/strongbolt/bolted_controller_spec.rb +110 -208
  71. data/spec/strongbolt/bolted_spec.rb +26 -40
  72. data/spec/strongbolt/capability_spec.rb +72 -86
  73. data/spec/strongbolt/configuration_spec.rb +33 -46
  74. data/spec/strongbolt/controllers/url_helpers_spec.rb +7 -9
  75. data/spec/strongbolt/helpers_spec.rb +14 -16
  76. data/spec/strongbolt/role_spec.rb +32 -35
  77. data/spec/strongbolt/tenantable_spec.rb +88 -86
  78. data/spec/strongbolt/user_abilities_multiple_tenants_spec.rb +29 -34
  79. data/spec/strongbolt/user_abilities_spec.rb +142 -188
  80. data/spec/strongbolt/user_group_spec.rb +14 -14
  81. data/spec/strongbolt/users_tenant_spec.rb +10 -12
  82. data/spec/strongbolt_spec.rb +53 -73
  83. data/spec/support/controller_macros.rb +1 -3
  84. data/spec/support/db_setup.rb +31 -25
  85. data/spec/support/helpers.rb +12 -12
  86. data/spec/support/transactional_specs.rb +1 -3
  87. data/strongbolt.gemspec +14 -12
  88. metadata +20 -3
@@ -1,42 +1,35 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Strongbolt::Configuration do
4
-
5
-
6
4
  #
7
5
  # User class
8
6
  #
9
- describe "user class" do
10
-
11
- it "should default to User" do
12
- expect(Strongbolt::Configuration.user_class).to eq "User"
7
+ describe 'user class' do
8
+ it 'should default to User' do
9
+ expect(Strongbolt::Configuration.user_class).to eq 'User'
13
10
  end
14
11
 
15
- context "when setting it" do
16
- before { Strongbolt::Configuration.user_class = "Account" }
17
- after { Strongbolt::Configuration.user_class = "User" }
12
+ context 'when setting it' do
13
+ before { Strongbolt::Configuration.user_class = 'Account' }
14
+ after { Strongbolt::Configuration.user_class = 'User' }
18
15
 
19
- it "should give it" do
20
- expect(Strongbolt::Configuration.user_class).to eq "Account"
16
+ it 'should give it' do
17
+ expect(Strongbolt::Configuration.user_class).to eq 'Account'
21
18
  end
22
19
  end
23
-
24
20
  end
25
21
 
26
-
27
-
28
22
  #
29
23
  # Setting up tenants
30
24
  #
31
25
  describe 'tenants=' do
32
-
33
26
  before do
34
- define_model "Model" do
35
- self.table_name = "models"
27
+ define_model 'Model' do
28
+ self.table_name = 'models'
36
29
  end
37
30
 
38
- define_model "OtherModel" do
39
- self.table_name = "models"
31
+ define_model 'OtherModel' do
32
+ self.table_name = 'models'
40
33
  end
41
34
 
42
35
  expect(Model).to receive(:send).with :tenant
@@ -44,76 +37,70 @@ describe Strongbolt::Configuration do
44
37
  end
45
38
  after { Strongbolt::Configuration.tenants = [] }
46
39
 
47
- it "should tenant the models" do
48
- Strongbolt::Configuration.tenants = "Model", OtherModel, Model
40
+ it 'should tenant the models' do
41
+ Strongbolt::Configuration.tenants = 'Model', OtherModel, Model
49
42
  expect(Strongbolt::Configuration.tenants).to eq [Model, OtherModel]
50
43
  end
51
-
52
44
  end
53
45
 
54
46
  #
55
47
  # Configuring Capability Models
56
48
  #
57
- describe "models=" do
49
+ describe 'models=' do
58
50
  before do
59
- Strongbolt::Configuration.models = "OtherModel", "Model"
51
+ Strongbolt::Configuration.models = 'OtherModel', 'Model'
60
52
  end
61
53
  after do
62
54
  Strongbolt::Capability.models = nil
63
55
  end
64
56
 
65
- it "should set Capability::Models" do
66
- expect(Strongbolt::Capability.models).to eq ["Model", "OtherModel", "Strongbolt::Capability", "Strongbolt::Role", "Strongbolt::UserGroup", "Strongbolt::UsersTenant"]
57
+ it 'should set Capability::Models' do
58
+ expect(Strongbolt::Capability.models).to eq ['Model', 'OtherModel', 'Strongbolt::Capability', 'Strongbolt::Role', 'Strongbolt::UserGroup', 'Strongbolt::UsersTenant']
67
59
  end
68
60
 
69
- context "when adding other models" do
61
+ context 'when adding other models' do
70
62
  before do
71
- Strongbolt::Configuration.models = "Model", "LastModel"
63
+ Strongbolt::Configuration.models = 'Model', 'LastModel'
72
64
  end
73
65
 
74
- it "should merge with current models" do
75
- expect(Strongbolt::Capability.models).to eq ["LastModel", "Model", "OtherModel", "Strongbolt::Capability", "Strongbolt::Role", "Strongbolt::UserGroup", "Strongbolt::UsersTenant"]
66
+ it 'should merge with current models' do
67
+ expect(Strongbolt::Capability.models).to eq ['LastModel', 'Model', 'OtherModel', 'Strongbolt::Capability', 'Strongbolt::Role', 'Strongbolt::UserGroup', 'Strongbolt::UsersTenant']
76
68
  end
77
69
  end
78
70
 
79
- context "when adding 1 model" do
71
+ context 'when adding 1 model' do
80
72
  before do
81
- Strongbolt::Configuration.models = "BottomModel"
73
+ Strongbolt::Configuration.models = 'BottomModel'
82
74
  end
83
75
 
84
- it "should merge with current models" do
85
- expect(Strongbolt::Capability.models).to eq ["BottomModel", "Model", "OtherModel", "Strongbolt::Capability", "Strongbolt::Role", "Strongbolt::UserGroup", "Strongbolt::UsersTenant"]
76
+ it 'should merge with current models' do
77
+ expect(Strongbolt::Capability.models).to eq ['BottomModel', 'Model', 'OtherModel', 'Strongbolt::Capability', 'Strongbolt::Role', 'Strongbolt::UserGroup', 'Strongbolt::UsersTenant']
86
78
  end
87
79
  end
88
- end #/models=
89
-
90
-
80
+ end # /models=
91
81
 
92
82
  #
93
83
  # Setting default permissions
94
84
  #
95
- describe "default_capabilities=" do
96
-
85
+ describe 'default_capabilities=' do
97
86
  before do
98
87
  Strongbolt::Configuration.default_capabilities = [
99
- {:model => "User", :actions => :all},
100
- {:model => "Model", :actions => "find"}
88
+ { model: 'User', actions: :all },
89
+ { model: 'Model', actions: 'find' }
101
90
  ]
102
91
  end
103
92
  after do
104
93
  Strongbolt::Configuration.default_capabilities = []
105
94
  end
106
95
 
107
- it "should return 5 Capabilities" do
96
+ it 'should return 5 Capabilities' do
108
97
  expect(Strongbolt::Configuration.default_capabilities.size).to eq 5
109
98
  end
110
99
 
111
- it "should return Capability" do
100
+ it 'should return Capability' do
112
101
  Strongbolt::Configuration.default_capabilities.each do |c|
113
102
  expect(c).to be_a Strongbolt::Capability
114
103
  end
115
104
  end
116
-
117
105
  end
118
-
119
106
  end
@@ -1,10 +1,9 @@
1
- require "spec_helper"
2
- require "strongbolt/controllers/url_helpers"
1
+ require 'spec_helper'
2
+ require 'strongbolt/controllers/url_helpers'
3
3
 
4
4
  module Strongbolt
5
5
  module Controllers
6
6
  describe UrlHelpers do
7
-
8
7
  let(:helpersClass) do
9
8
  Class.new do
10
9
  def main_app; end
@@ -19,16 +18,15 @@ module Strongbolt
19
18
 
20
19
  it { should respond_to :new_role_path }
21
20
 
22
- describe "edit_role_path" do
23
- let(:main_app) { double("main_app", :edit_strongbolt_role_path => true) }
24
-
25
- it "should call new_strongbolt_role_path on the main app" do
21
+ describe 'edit_role_path' do
22
+ let(:main_app) { double('main_app', edit_strongbolt_role_path: true) }
23
+
24
+ it 'should call new_strongbolt_role_path on the main app' do
26
25
  expect(helpers).to receive(:main_app).and_return main_app
27
26
  expect(main_app).to receive(:edit_strongbolt_role_path).with 2
28
27
  helpers.edit_role_path 2
29
28
  end
30
29
  end
31
-
32
30
  end
33
31
  end
34
- end
32
+ end
@@ -1,12 +1,11 @@
1
- require "spec_helper"
2
- require "strongbolt/helpers"
1
+ require 'spec_helper'
2
+ require 'strongbolt/helpers'
3
3
 
4
4
  describe Strongbolt::Helpers do
5
-
6
5
  before do
7
6
  @user = User.create!
8
7
 
9
- define("Helper", Object) do
8
+ define('Helper', Object) do
10
9
  include Strongbolt::Helpers
11
10
  end
12
11
 
@@ -19,25 +18,24 @@ describe Strongbolt::Helpers do
19
18
 
20
19
  let(:user) { @user }
21
20
  let(:helper) { Helper.new }
22
-
23
- describe "can?" do
21
+
22
+ describe 'can?' do
24
23
  before do
25
- expect(user).to receive(:can?).with :find, "me"
24
+ expect(user).to receive(:can?).with :find, 'me'
26
25
  end
27
26
 
28
- it "should call the user method" do
29
- helper.can?(:find) { "me" }
27
+ it 'should call the user method' do
28
+ helper.can?(:find) { 'me' }
30
29
  end
31
30
  end
32
-
33
- describe "cannot?" do
31
+
32
+ describe 'cannot?' do
34
33
  before do
35
- expect(user).to receive(:can?).with :find, "me"
34
+ expect(user).to receive(:can?).with :find, 'me'
36
35
  end
37
36
 
38
- it "should call the user method" do
39
- helper.cannot? :find, "me"
37
+ it 'should call the user method' do
38
+ helper.cannot? :find, 'me'
40
39
  end
41
40
  end
42
-
43
- end
41
+ end
@@ -1,9 +1,7 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  module Strongbolt
4
-
5
4
  describe Role do
6
-
7
5
  let(:role) { Role.new name: 'Moderator' }
8
6
 
9
7
  subject { role }
@@ -12,79 +10,78 @@ module Strongbolt
12
10
 
13
11
  it { is_expected.to validate_presence_of :name }
14
12
 
15
- it { is_expected.to have_many(:roles_user_groups).class_name("Strongbolt::RolesUserGroup")
16
- .dependent :restrict_with_exception }
13
+ it {
14
+ is_expected.to have_many(:roles_user_groups).class_name('Strongbolt::RolesUserGroup')
15
+ .dependent :restrict_with_exception
16
+ }
17
17
  it { is_expected.to have_many(:user_groups).through :roles_user_groups }
18
18
 
19
- it { is_expected.to have_many(:users).through :user_groups }
20
-
21
- it { is_expected.to have_many(:capabilities_roles).class_name("Strongbolt::CapabilitiesRole")
22
- .dependent :delete_all }
19
+ it { is_expected.to have_many(:users).through :user_groups }
20
+
21
+ it {
22
+ is_expected.to have_many(:capabilities_roles).class_name('Strongbolt::CapabilitiesRole')
23
+ .dependent :delete_all
24
+ }
23
25
  it { is_expected.to have_many(:capabilities).through :capabilities_roles }
24
26
 
25
- it { is_expected.to belong_to(:parent).class_name("Strongbolt::Role") }
27
+ it { is_expected.to belong_to(:parent).class_name('Strongbolt::Role') }
26
28
 
27
- describe "inherited capabilities" do
28
-
29
+ describe 'inherited capabilities' do
29
30
  before do
30
31
  # A family
31
- grandfather = Role.create! name: "GrandFather"
32
- father = Role.create! name: "Father", parent: grandfather
33
- sibling = Role.create! name: "Sibling"
32
+ grandfather = Role.create! name: 'GrandFather'
33
+ father = Role.create! name: 'Father', parent: grandfather
34
+ sibling = Role.create! name: 'Sibling'
34
35
  role.parent = father
35
36
  role.save!
36
- child = Role.create! name: "Child", parent: role
37
+ child = Role.create! name: 'Child', parent: role
37
38
 
38
39
  # Some capabilities
39
40
  begin
40
- role.capabilities.create! model: "Model", action: "create"
41
+ role.capabilities.create! model: 'Model', action: 'create'
41
42
  rescue => e
42
43
  puts e.record.capabilities_roles[0].errors.full_messages
43
44
  end
44
- child.capabilities.create! model: "Model", action: "destroy"
45
- @inherited1 = father.capabilities.create! model: "Model", action: "update"
46
- @inherited2 = grandfather.capabilities.create! model: "Model", action: "find"
47
- sibling.capabilities.create! model: "User", action: "find"
45
+ child.capabilities.create! model: 'Model', action: 'destroy'
46
+ @inherited1 = father.capabilities.create! model: 'Model', action: 'update'
47
+ @inherited2 = grandfather.capabilities.create! model: 'Model', action: 'find'
48
+ sibling.capabilities.create! model: 'User', action: 'find'
48
49
  end
49
50
 
50
51
  let(:inherited_capabilities) { role.inherited_capabilities }
51
52
 
52
- it "should have 2 inherited_capabilities" do
53
+ it 'should have 2 inherited_capabilities' do
53
54
  expect(inherited_capabilities.size).to eq 2
54
55
  end
55
56
 
56
- it "should have the right ones" do
57
+ it 'should have the right ones' do
57
58
  expect(inherited_capabilities).to include @inherited1
58
59
  expect(inherited_capabilities).to include @inherited2
59
60
  end
60
-
61
61
  end
62
62
 
63
- describe 'destroy' do |variable|
63
+ describe 'destroy' do |_variable|
64
64
  before { role.save! }
65
65
 
66
- context "when have user groups" do
67
- before { role.user_groups << UserGroup.create!(name: "User Group") }
66
+ context 'when have user groups' do
67
+ before { role.user_groups << UserGroup.create!(name: 'User Group') }
68
68
 
69
- it "should raise error when destroy" do
69
+ it 'should raise error when destroy' do
70
70
  expect do
71
71
  role.destroy
72
72
  end.to raise_error ActiveRecord::DeleteRestrictionError
73
73
  end
74
74
  end
75
75
 
76
- context "when have children" do
77
- before { Role.create! name: "Child", parent: role }
76
+ context 'when have children' do
77
+ before { Role.create! name: 'Child', parent: role }
78
78
 
79
- it "should raise an error when destroy" do
79
+ it 'should raise an error when destroy' do
80
80
  expect do
81
81
  role.destroy
82
82
  end.to raise_error ActiveRecord::DeleteRestrictionError
83
83
  end
84
84
  end
85
-
86
85
  end
87
-
88
86
  end
89
-
90
- end
87
+ end
@@ -1,8 +1,7 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
2
 
3
3
  describe Strongbolt::Tenantable do
4
-
5
- it "should have been included in ActiveRecord::Base" do
4
+ it 'should have been included in ActiveRecord::Base' do
6
5
  expect(ActiveRecord::Base.included_modules).to include Strongbolt::Tenantable
7
6
  end
8
7
 
@@ -10,25 +9,25 @@ describe Strongbolt::Tenantable do
10
9
  # When a class is set as tenant
11
10
  #
12
11
  describe 'tenant?' do
13
- context "when class is not a tenant" do
12
+ context 'when class is not a tenant' do
14
13
  before do
15
- define_model "OtherModel"
14
+ define_model 'OtherModel'
16
15
  end
17
16
 
18
- it "should return false" do
17
+ it 'should return false' do
19
18
  expect(OtherModel.tenant?).to eq false
20
19
  end
21
20
  end
22
21
 
23
- context "when class is a tenant" do
22
+ context 'when class is a tenant' do
24
23
  before do
25
- define_model "OtherModel" do
24
+ define_model 'OtherModel' do
26
25
  send :tenant
27
26
  end
28
27
  end
29
28
  after { Strongbolt.send :tenants=, [] }
30
29
 
31
- it "should return true" do
30
+ it 'should return true' do
32
31
  expect(OtherModel.tenant?).to eq true
33
32
  end
34
33
  end
@@ -37,13 +36,11 @@ describe Strongbolt::Tenantable do
37
36
  #
38
37
  # Tenant setup
39
38
  #
40
- describe "tenant setup" do
41
-
39
+ describe 'tenant setup' do
42
40
  #
43
41
  # When every association is properly configured
44
42
  #
45
- context "when no configuration error" do
46
-
43
+ context 'when no configuration error' do
47
44
  #
48
45
  # Set up a series of models to test the tenant setup
49
46
  #
@@ -51,166 +48,181 @@ describe Strongbolt::Tenantable do
51
48
  #
52
49
  # Tenant Model
53
50
  #
54
- define_model "TenantModel" do
55
- self.table_name = "models"
56
- has_many :child_models, class_name: "ChildModel"
51
+ define_model 'TenantModel' do
52
+ self.table_name = 'models'
53
+ has_many :child_models, class_name: 'ChildModel'
57
54
 
58
- belongs_to :parent, class_name: "UnownedModel",
59
- foreign_key: :parent_id
55
+ belongs_to :parent, class_name: 'UnownedModel',
56
+ foreign_key: :parent_id
60
57
  end
61
58
 
62
59
  #
63
60
  # Direct child to Tenant Model
64
61
  #
65
- define_model "ChildModel" do
66
- self.table_name = "child_models"
62
+ define_model 'ChildModel' do
63
+ self.table_name = 'child_models'
67
64
 
68
65
  belongs_to :tenant_model, foreign_key: :model_id,
69
- class_name: "TenantModel"
66
+ class_name: 'TenantModel'
70
67
 
71
- has_many :other_child_models, class_name: "OtherChildModel"
68
+ has_many :other_child_models, class_name: 'OtherChildModel'
69
+ has_one :very_polymorphic_sibling_model, as: :model, class_name: 'VeryPolymorphicSiblingModel'
72
70
  end
73
71
 
74
72
  #
75
73
  # 2nd degree child of tenant model
76
74
  #
77
- define_model "OtherChildModel" do
78
- self.table_name = "child_models"
75
+ define_model 'OtherChildModel' do
76
+ self.table_name = 'child_models'
79
77
 
80
78
  belongs_to :child_model, foreign_key: :model_id,
81
- class_name: "ChildModel"
79
+ class_name: 'ChildModel'
82
80
  belongs_to :uncle_model, foreign_key: :parent_id,
83
- class_name: "UncleModel"
84
- has_one :sibling_model, class_name: "SiblingModel"
85
- has_one :polymorphic_sibling_model, class_name: "PolymorphicSiblingModel"
81
+ class_name: 'UncleModel'
82
+ has_one :sibling_model, class_name: 'SiblingModel'
83
+ has_one :polymorphic_sibling_model, class_name: 'PolymorphicSiblingModel'
86
84
 
87
85
  has_and_belongs_to_many :bottom_models,
88
- join_table: "model_models",
89
- class_name: "BottomModel",
90
- foreign_key: :parent_id,
91
- association_foreign_key: :child_id
86
+ join_table: 'model_models',
87
+ class_name: 'BottomModel',
88
+ foreign_key: :parent_id,
89
+ association_foreign_key: :child_id
92
90
  end
93
91
 
94
92
  #
95
93
  # Parent of second degree child
96
94
  #
97
- define_model "UncleModel" do
98
- self.table_name = "models"
95
+ define_model 'UncleModel' do
96
+ self.table_name = 'models'
99
97
 
100
- has_many :other_child_models, class_name: "OtherChildModel"
101
- belongs_to :parent, class_name: "UnownedModel",
102
- foreign_key: :parent_id
98
+ has_many :other_child_models, class_name: 'OtherChildModel'
99
+ belongs_to :parent, class_name: 'UnownedModel',
100
+ foreign_key: :parent_id
103
101
  end
104
102
 
105
103
  #
106
104
  # Cousin of second degree child
107
105
  #
108
- define_model "SiblingModel" do
109
- self.table_name = "child_models"
106
+ define_model 'SiblingModel' do
107
+ self.table_name = 'child_models'
110
108
 
111
109
  belongs_to :other_child_model, foreign_key: :model_id
110
+ has_one :very_polymorphic_sibling_model, as: :other_model, class_name: 'VeryPolymorphicSiblingModel'
112
111
  end
113
112
 
114
113
  #
115
114
  # Cousin of second degree child
116
115
  #
117
- define_model "PolymorphicSiblingModel" do
118
- self.table_name = "child_models"
116
+ define_model 'PolymorphicSiblingModel' do
117
+ self.table_name = 'child_models'
119
118
 
120
119
  belongs_to :model, polymorphic: true
121
120
  has_one :unowned_model, foreign_key: :model_id
122
121
  end
123
122
 
123
+ #
124
+ # Cousin of second degree child
125
+ #
126
+ define_model 'VeryPolymorphicSiblingModel' do
127
+ self.table_name = 'other_child_models'
128
+
129
+ belongs_to :model, polymorphic: true
130
+ belongs_to :other_model, polymorphic: true
131
+ end
132
+
124
133
  #
125
134
  # Top level model, parent of Tenant Model
126
135
  #
127
- define_model "UnownedModel" do
136
+ define_model 'UnownedModel' do
128
137
  has_many :tenant_models, foreign_key: :parent_id,
129
- class_name: "TenantModel"
138
+ class_name: 'TenantModel'
130
139
  # has_many :uncle_models, foreign_key: :parent_id
131
140
  end
132
141
 
133
142
  #
134
143
  # Bottom level model, has and belons to many 2nd degree child
135
144
  #
136
- define_model "BottomModel" do
137
- self.table_name = "models"
145
+ define_model 'BottomModel' do
146
+ self.table_name = 'models'
138
147
 
139
148
  has_and_belongs_to_many :other_child_models,
140
- class_name: "OtherChildModel",
141
- join_table: "model_models",
142
- foreign_key: :child_id,
143
- association_foreign_key: :parent_id
149
+ class_name: 'OtherChildModel',
150
+ join_table: 'model_models',
151
+ foreign_key: :child_id,
152
+ association_foreign_key: :parent_id
144
153
  end
145
154
 
146
155
  TenantModel.send :tenant
147
156
  end
148
157
 
149
- it "should have added has_one :tenant_model to other child model" do
158
+ it 'should have added has_one :tenant_model to other child model' do
150
159
  expect(OtherChildModel.new).to have_one(:tenant_model).through(:child_model)
151
160
  end
152
161
 
153
- it "should have added has_many :tenant_models to BottomModel" do
162
+ it 'should have added has_many :tenant_models to BottomModel' do
154
163
  expect(BottomModel.new).to have_many(:tenant_models).through :other_child_models
155
164
  end
156
165
 
157
- it "should have created a has_one :tenant_model to SiblingModel" do
166
+ it 'should have created a has_one :tenant_model to SiblingModel' do
158
167
  expect(SiblingModel.new).to have_one(:tenant_model).through :other_child_model
159
168
  end
160
169
 
161
- it "should not have set a :tenant_model on polymorphic association" do
170
+ it 'should not have set a :tenant_model on polymorphic association' do
162
171
  expect(PolymorphicSiblingModel.new).not_to have_one(:tenant_model)
163
172
  end
164
173
 
165
- it "should have added has_many :tenant_models to UncleModel" do
174
+ it 'should have added has_many :tenant_models to UncleModel' do
166
175
  expect(UncleModel.new).not_to have_many(:tenant_models).through :other_child_models
167
176
  end
168
177
 
169
- %w{ChildModel OtherChildModel BottomModel SiblingModel}.each do |model|
178
+ %w[ChildModel OtherChildModel BottomModel SiblingModel].each do |model|
170
179
  it "should have added a scope with_tenants to #{model}" do
171
180
  expect(model.constantize).to respond_to :with_tenant_models
172
181
  end
173
182
  end
174
183
 
175
- %w{ChildModel OtherChildModel BottomModel SiblingModel}.each do |model|
184
+ %w[ChildModel OtherChildModel BottomModel SiblingModel].each do |model|
176
185
  it "should have added a scope where_tenants to #{model}" do
177
186
  expect(model.constantize).to respond_to :where_tenant_models_among
178
187
  end
179
188
  end
180
189
 
181
- it "creates a has_many users_tenant_models" do
190
+ it 'creates a has_many users_tenant_models' do
182
191
  expect(Strongbolt::Configuration.user_class.constantize.new).to have_many(:users_tenant_models)
183
192
  .dependent(:delete_all)
184
193
  end
185
194
 
186
- it "creates a has_many relationship on the User defined" do
195
+ it 'creates a has_many relationship on the User defined' do
187
196
  expect(Strongbolt::Configuration.user_class.constantize.new).to have_many(:tenant_models).through :users_tenant_models
188
197
  end
189
198
 
190
- it "creates a relationship on the user to get accessible tenants" do
199
+ it 'creates a relationship on the user to get accessible tenants' do
191
200
  expect(Strongbolt::Configuration.user_class.constantize.new).to respond_to :accessible_tenant_models
192
201
  end
193
202
 
194
- it "should have added models to Capability::Models" do
203
+ it 'should have added models to Capability::Models' do
195
204
  expect(Strongbolt::Capability.models).to be_present
196
205
  expect(Strongbolt::Capability.models.size).to be > 0
197
206
  end
198
207
 
208
+ it 'should not raise an error' do
209
+ expect do
210
+ TenantModel.send :tenant
211
+ end.not_to raise_error
212
+ end
199
213
  end
200
214
 
201
-
202
215
  #
203
216
  # When an association lacks an inverse (none configured and none found)
204
217
  #
205
218
 
206
- context "when an association lacks an inverse" do
207
-
219
+ context 'when an association lacks an inverse' do
208
220
  before(:all) do
209
221
  #
210
222
  # Tenant Model
211
223
  #
212
- define_model "TenantModel" do
213
- self.table_name = "models"
224
+ define_model 'TenantModel' do
225
+ self.table_name = 'models'
214
226
 
215
227
  has_many :child_models
216
228
  end
@@ -218,39 +230,37 @@ describe Strongbolt::Tenantable do
218
230
  #
219
231
  # Direct child to Tenant Model
220
232
  #
221
- define_model "ChildModel" do
222
- self.table_name = "child_models"
233
+ define_model 'ChildModel' do
234
+ self.table_name = 'child_models'
223
235
 
224
236
  belongs_to :tenant_model, foreign_key: :model_id
225
237
 
226
238
  has_many :other_child_models
227
239
  end
228
240
 
229
- define_model "OtherChildModel" do
230
- self.table_name = "child_models"
241
+ define_model 'OtherChildModel' do
242
+ self.table_name = 'child_models'
231
243
  end
232
244
  end
233
245
 
234
- it "should raise an error" do
246
+ it 'should raise an error' do
235
247
  expect do
236
248
  TenantModel.send :tenant
237
249
  end.to raise_error Strongbolt::InverseAssociationNotConfigured
238
250
  end
239
-
240
251
  end
241
252
 
242
253
  #
243
254
  # When a direct association lacks a reference to the tenant
244
255
  #
245
256
 
246
- context "when an association lacks an inverse" do
247
-
257
+ context 'when an association lacks an inverse' do
248
258
  before(:all) do
249
259
  #
250
260
  # Tenant Model
251
261
  #
252
- define_model "TenantModel" do
253
- self.table_name = "models"
262
+ define_model 'TenantModel' do
263
+ self.table_name = 'models'
254
264
 
255
265
  has_many :child_models
256
266
  end
@@ -258,24 +268,16 @@ describe Strongbolt::Tenantable do
258
268
  #
259
269
  # Direct child to Tenant Model
260
270
  #
261
- define_model "ChildModel" do
262
- self.table_name = "child_models"
271
+ define_model 'ChildModel' do
272
+ self.table_name = 'child_models'
263
273
  end
264
274
  end
265
275
 
266
- it "should raise an error" do
276
+ it 'should raise an error' do
267
277
  expect do
268
278
  TenantModel.send :tenant
269
279
  end.to raise_error Strongbolt::DirectAssociationNotConfigured
270
280
  end
271
-
272
281
  end
273
-
274
-
275
-
276
282
  end
277
-
278
283
  end
279
-
280
-
281
-