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

#creatable?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/protector/adapters/sequel/dataset.rb', line 33

def creatable?
  model.new.restrict!(protector_subject).creatable?
end

#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 = protector_meta.eval_scope_procs(relation) 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
# 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(subject)

    relation = meta.eval_scope_procs(relation) if meta.scoped?
  end

  relation
end

#protector_meta(subject = protector_subject) ⇒ Object

Gets DSL::Meta::Box of this dataset



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

def protector_meta(subject=protector_subject)
  model.protector_meta.evaluate(subject)
end