Module: Protector::Adapters::Sequel::Dataset

Extended by:
ActiveSupport::Concern
Defined in:
lib/protector/adapters/sequel/dataset.rb

Overview

Patches Sequel::Dataset

Defined Under Namespace

Classes: Restrictor

Instance Method Summary collapse

Instance Method Details

#each_with_protector(*args, &block) ⇒ Object

Substitutes row_proc with Protector and injects protection scope



43
44
45
46
47
48
49
50
51
# File 'lib/protector/adapters/sequel/dataset.rb', line 43

def each_with_protector(*args, &block)
  return each_without_protector(*args, &block) unless protector_subject?

  relation = protector_defend_graph(clone, protector_subject)
  relation = relation.instance_eval(&protector_meta.scope_proc) if protector_meta.scoped?

  relation.row_proc = Restrictor.new(protector_subject, relation.row_proc)
  relation.each_without_protector(*args, &block)
end

#protector_defend_graph(relation, subject) ⇒ Object

Injects protection scope for every joined graph association



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/protector/adapters/sequel/dataset.rb', line 54

def protector_defend_graph(relation, subject)
  return relation unless @opts[:eager_graph]

  @opts[:eager_graph][:reflections].each do |association, reflection|
    model = reflection[:cache][:class] if reflection[:cache].is_a?(Hash) && reflection[:cache][:class]
    model = reflection[:class_name].constantize unless model
    meta  = model.protector_meta.evaluate(
      Protector::Adapters::Sequel,
      model,
      subject
    )

    relation = relation.instance_eval(&meta.scope_proc) if meta.scoped?
  end

  relation
end

#protector_metaObject

Gets DSL::Meta::Box of this dataset



34
35
36
37
38
39
40
# File 'lib/protector/adapters/sequel/dataset.rb', line 34

def protector_meta
  model.protector_meta.evaluate(
    Protector::Adapters::Sequel,
    model,
    protector_subject
  )
end