Class: CanCan::ModelAdapters::Neo4jAdapter
- Inherits:
-
AbstractAdapter
- Object
- AbstractAdapter
- CanCan::ModelAdapters::Neo4jAdapter
- Defined in:
- lib/cancancan/model_adapters/neo4j_adapter.rb
Overview
neo4j adapter for cancan
Class Method Summary collapse
- .all_conditions_match?(subject, conditions, base_class) ⇒ Boolean
- .associations_conditions_match?(conditions, subject, base_class) ⇒ Boolean
- .for_class?(model_class) ⇒ Boolean
-
.matches_associations_relations(conditions, subject) ⇒ Object
checks if associations exists on given node.
- .matches_attribute_conditions?(conditions, subject) ⇒ Boolean
- .matches_conditions_hash?(subject, conditions) ⇒ Boolean
- .model_conditions_matches?(conditions, subject, base_class) ⇒ Boolean
- .override_conditions_hash_matching?(_subject, _conditions) ⇒ Boolean
Instance Method Summary collapse
Class Method Details
.all_conditions_match?(subject, conditions, base_class) ⇒ Boolean
28 29 30 31 32 33 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 28 def self.all_conditions_match?(subject, conditions, base_class) asso_conditions, model_conditions = CanCanCan::Neo4j::CypherConstructorHelper .bifurcate_conditions(conditions) associations_conditions_match?(asso_conditions, subject, base_class) && model_conditions_matches?(model_conditions, subject, base_class) end |
.associations_conditions_match?(conditions, subject, base_class) ⇒ Boolean
65 66 67 68 69 70 71 72 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 65 def self.associations_conditions_match?(conditions, subject, base_class) return true if conditions.blank? conditions.all? do |association, conditions_hash| current_model = base_class.associations[association].target_class current_subject = subject.send(association) all_conditions_match?(current_subject, conditions_hash, current_model) end end |
.for_class?(model_class) ⇒ Boolean
15 16 17 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 15 def self.for_class?(model_class) model_class <= Neo4j::ActiveNode end |
.matches_associations_relations(conditions, subject) ⇒ Object
checks if associations exists on given node
46 47 48 49 50 51 52 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 46 def self.matches_associations_relations(conditions, subject) return true if conditions.blank? conditions.all? do |association, value| association_exists = subject.send(association).exists? value ? association_exists : !association_exists end end |
.matches_attribute_conditions?(conditions, subject) ⇒ Boolean
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 54 def self.matches_attribute_conditions?(conditions, subject) return true if conditions.blank? if subject.is_a?(Neo4j::ActiveNode::HasN::AssociationProxy) subject.where(conditions).exists? else conditions.all? do |attribute, value| subject.send(attribute) == value end end end |
.matches_conditions_hash?(subject, conditions) ⇒ Boolean
23 24 25 26 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 23 def self.matches_conditions_hash?(subject, conditions) base_class = subject.class all_conditions_match?(subject, conditions, base_class) end |
.model_conditions_matches?(conditions, subject, base_class) ⇒ Boolean
35 36 37 38 39 40 41 42 43 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 35 def self.model_conditions_matches?(conditions, subject, base_class) return true if conditions.blank? conditions = conditions.partition do |key, _| base_class.associations_keys.include?(key) end associations_conditions, atrribute_conditions = conditions.map(&:to_h) matches_attribute_conditions?(atrribute_conditions, subject) && matches_associations_relations(associations_conditions, subject) end |
.override_conditions_hash_matching?(_subject, _conditions) ⇒ Boolean
19 20 21 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 19 def self.override_conditions_hash_matching?(_subject, _conditions) true end |
Instance Method Details
#database_records ⇒ Object
8 9 10 11 12 13 |
# File 'lib/cancancan/model_adapters/neo4j_adapter.rb', line 8 def database_records return @model_class.where('false') if @rules.empty? rule = @rules.first return rule.conditions if override_scope records_for_multiple_rules.distinct end |