Module: Tenancy::ResourceScope::ClassMethods
- Defined in:
- lib/tenancy/resource_scope.rb
Instance Attribute Summary collapse
-
#scope_fields ⇒ Object
readonly
Returns the value of attribute scope_fields.
Instance Method Summary collapse
- #scope_to(*resources) ⇒ Object
- #validates_uniqueness_in_scope(fields, args = {}) ⇒ Object
- #without_scope(*resources) ⇒ Object
Instance Attribute Details
#scope_fields ⇒ Object (readonly)
Returns the value of attribute scope_fields.
6 7 8 |
# File 'lib/tenancy/resource_scope.rb', line 6 def scope_fields @scope_fields end |
Instance Method Details
#scope_to(*resources) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/tenancy/resource_scope.rb', line 12 def scope_to(*resources) = resources..dup raise ArgumentError, 'options should be blank if there are multiple resources' if resources.count > 1 and .present? resources.each do |resource| resource = resource.to_sym resource_class_name ||= ([:class_name].to_s.presence || resource.to_s).classify resource_class = resource_class_name.constantize # validates and belongs_to validates resource, presence: true belongs_to resource, # default_scope resource_foreign_key = reflect_on_association(resource).foreign_key scope_fields << resource_foreign_key default_scope { where(:"#{resource_foreign_key}" => resource_class.current_id) if resource_class.current_id } # override to return current resource instance # so that it doesn't touch db define_method(resource) do |reload=false| return super(reload) if reload return resource_class.current if send(resource_foreign_key) == resource_class.current_id super(reload) end end end |
#validates_uniqueness_in_scope(fields, args = {}) ⇒ Object
56 57 58 59 60 61 62 63 64 |
# File 'lib/tenancy/resource_scope.rb', line 56 def validates_uniqueness_in_scope(fields, args={}) if args[:scope] args[:scope] = Array.wrap(args[:scope]) << scope_fields else args[:scope] = scope_fields end validates_uniqueness_of(fields, args) end |
#without_scope(*resources) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/tenancy/resource_scope.rb', line 41 def without_scope(*resources) scope = where(nil).with_default_scope resources.each do |resource| resource = resource.to_sym reflection = reflect_on_association(resource) next if reflection.nil? resource_scope_sql = where(nil).table[reflection.foreign_key].eq(reflection.klass.current_id).to_sql scope.where_values.delete_if { |query| query.to_sql == resource_scope_sql } end scope end |