mongoid-multitenancy 0.3 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Njk4YWRlMTZhYzljNjc2ZjBiNjQwYWY1YmQ4NjAzMWM2OTIzZGExYw==
4
+ Y2Y1ODVlM2ZlMzZlMDRlZmEzM2MwOTRiNWI3NzRjZmRkNTNlNDI5MQ==
5
5
  data.tar.gz: !binary |-
6
- NjcwYzEwZDNiYTlhODBiMWExNjY5MGVjOWI3ZTQ5MmQwM2Q2OWNiMQ==
6
+ Yjc4MjEyYTlkZWUxNDAwYjNlZTU5ZGQ3NmVkYWUzYWRlNDU1ZDE0NA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NzFmNjU1ODg0MzE0YzE4ODE0YTViODVhMGEzZWMyOGViZjBkNTg5MDg4ZWU4
10
- M2ViY2MxMzE0YmU1MDY5NTAxNGQxN2NiOTJkNjg2NzM2ODA0ODMyYjJjYWM4
11
- NmMyY2NjMzljMGJlY2VkNzMyYzA3OTJmYzk2NTY1ODhjOTllZWM=
9
+ MDYyZjllZGM4ZDFjNmU2ZWYxNGZlMTE1ZTUwZTQ0YmU2MjU4MTg4YmY2OWYx
10
+ ZWI2MGU0ZTdmNjY2YTEwMmYxZTBmOWRlMDQ5OWIwN2QxYjM4NjRiZTEyMjll
11
+ MGYzOTUwOGUyMjNmMmY4M2NkNWMyYzc3ZmU3NjBhNGM4Y2RlYTY=
12
12
  data.tar.gz: !binary |-
13
- M2RiMmYxZGU5NWE5MGZjNzkxZTljNjU1ZjVjM2U1ZGM2Yzg3ZmRkYjhkYTBh
14
- YzZkZTYyMjJjYjRmZWUwOTdmNGU2M2U2NTVmMjY5MTJjODE4Mzg1NmIzMDA4
15
- YTQzZWZjMTAyYzAwYWExZWQ1NGNhODFlOGQ1NTExOTBiYzQzZmE=
13
+ N2VjZDQ1N2MzZTE4MjVhOTI2NDhkN2YzMGEwNTQwYzQyYjIwMzk2N2IyMTNh
14
+ NjM3MDQ4MWVlMThjZjVjNDc1OTkyNGJmZWE0OGNhZGQxZGYzNTg3Mzc1MTAy
15
+ NzEzZTI3ZThjYzA0ODdlMDE2YTMzMmZhYTIwNmU1N2Y4MDk5MDI=
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongoid-multitenancy (0.3)
4
+ mongoid-multitenancy (0.3.1)
5
5
  mongoid (~> 3)
6
6
 
7
7
  GEM
@@ -3,35 +3,22 @@ module Mongoid
3
3
  module Document
4
4
  extend ActiveSupport::Concern
5
5
 
6
- included do
7
- private
8
-
9
- # Check that the tenant foreign key field has not been changed once the object has been persisted
10
- def check_tenant_immutability
11
- # We check that the tenant has changed and that the old was not nil to avoid after_create callbacks issues.
12
- # Indeed in this case, even if the flag is set to persisted, changes have not yet been reset.
13
- if attribute_changed?(self.class.tenant_field) and attribute_was(self.class.tenant_field)
14
- self.errors.add(self.class.tenant_field, 'is immutable and cannot be updated' )
15
- end
16
- end
17
- end
18
-
19
6
  module ClassMethods
20
- # Access to the tenant field
21
- attr_reader :tenant_field, :tenant_options
7
+ attr_accessor :tenant_field
22
8
 
23
9
  def tenant(association = :account, options={})
24
- @tenant_options = { optional: options.delete(:optional), immutable: options.delete(:immutable) { true } }
10
+ tenant_options = { optional: options.delete(:optional), immutable: options.delete(:immutable) { true } }
25
11
  # Setup the association between the class and the tenant class
26
12
  # TODO: should index this association if no other indexes are defined => , index: true
27
13
  belongs_to association, options
28
14
 
29
15
  # Get the tenant model and its foreign key
30
- fkey = reflect_on_association(association).foreign_key
31
- @tenant_field = fkey
16
+ tenant_field = reflect_on_association(association).foreign_key
17
+ self.tenant_field = tenant_field
32
18
 
33
19
  # Validates the presence of the association key
34
- validates_presence_of fkey unless @tenant_options[:optional]
20
+ validates_presence_of tenant_field unless tenant_options[:optional]
21
+ validates tenant_field, immutable: { field: tenant_field } if tenant_options[:immutable]
35
22
 
36
23
  # Set the current_tenant on newly created objects
37
24
  after_initialize lambda { |m|
@@ -41,17 +28,14 @@ module Mongoid
41
28
  true
42
29
  }
43
30
 
44
- # Rewrite accessors to make tenant foreign_key/association immutable
45
- validate :check_tenant_immutability, :on => :update if @tenant_options[:immutable]
46
-
47
31
  # Set the default_scope to scope to current tenant
48
32
  default_scope lambda {
49
33
  criteria = if Multitenancy.current_tenant
50
- if self.tenant_options[:optional]
34
+ if tenant_options[:optional]
51
35
  #any_of({ self.tenant_field => Multitenancy.current_tenant.id }, { self.tenant_field => nil })
52
- where({ self.tenant_field.to_sym.in => [Multitenancy.current_tenant.id, nil] })
36
+ where({ tenant_field.to_sym.in => [Multitenancy.current_tenant.id, nil] })
53
37
  else
54
- where({ self.tenant_field => Multitenancy.current_tenant.id })
38
+ where({ tenant_field => Multitenancy.current_tenant.id })
55
39
  end
56
40
  else
57
41
  where(nil)
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Multitenancy
3
- VERSION = "0.3"
3
+ VERSION = "0.3.1"
4
4
  end
5
5
  end
@@ -1,10 +1,10 @@
1
+ require "mongoid"
2
+ require "mongoid/multitenancy/document"
3
+ require "mongoid/multitenancy/version"
4
+ require "mongoid/validators/immutable_validator"
5
+
1
6
  module Mongoid
2
7
  module Multitenancy
3
- require "mongoid"
4
-
5
- require "mongoid/multitenancy/document"
6
- require "mongoid/multitenancy/version"
7
-
8
8
  class << self
9
9
 
10
10
  # Set the current tenant. Make it Thread aware
@@ -0,0 +1,7 @@
1
+ class ImmutableValidator < ActiveModel::EachValidator
2
+ def validate_each(object, attribute, value)
3
+ if object.send(:attribute_changed?, options[:field]) and object.send(:attribute_was, options[:field])
4
+ object.errors.add(options[:field], 'is immutable and cannot be updated') and false
5
+ end
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-multitenancy
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aymeric Brisse
@@ -126,6 +126,7 @@ files:
126
126
  - lib/mongoid/multitenancy.rb
127
127
  - lib/mongoid/multitenancy/document.rb
128
128
  - lib/mongoid/multitenancy/version.rb
129
+ - lib/mongoid/validators/immutable_validator.rb
129
130
  - mongoid-multitenancy.gemspec
130
131
  - spec/models/account.rb
131
132
  - spec/models/article.rb