Module: CollectiveIdea::Acts::NestedSet::Model::Validatable

Defined in:
lib/awesome_nested_set/model/validatable.rb

Instance Method Summary collapse

Instance Method Details

#all_roots_valid?Boolean

Wrapper for each_root_valid? that can deal with scope.

Returns:

  • (Boolean)

29
30
31
32
33
34
35
# File 'lib/awesome_nested_set/model/validatable.rb', line 29

def all_roots_valid?
  if acts_as_nested_set_options[:scope]
    all_roots_valid_by_scope?(roots)
  else
    each_root_valid?(roots)
  end
end

#all_roots_valid_by_scope?(roots_to_validate) ⇒ Boolean

Returns:

  • (Boolean)

37
38
39
40
41
# File 'lib/awesome_nested_set/model/validatable.rb', line 37

def all_roots_valid_by_scope?(roots_to_validate)
  roots_grouped_by_scope(roots_to_validate).all? do |scope, grouped_roots|
    each_root_valid?(grouped_roots)
  end
end

#each_root_valid?(roots_to_validate) ⇒ Boolean

Returns:

  • (Boolean)

43
44
45
46
47
48
49
50
51
52
53
# File 'lib/awesome_nested_set/model/validatable.rb', line 43

def each_root_valid?(roots_to_validate)
  left_column = acts_as_nested_set_options[:left_column]
  reordered_roots = roots_reordered_by_column(roots_to_validate, left_column)
  left = right = 0
  reordered_roots.all? do |root|
    (root.left > left && root.right > right).tap do
      left = root.left
      right = root.right
    end
  end
end

#left_and_rights_valid?Boolean

Returns:

  • (Boolean)

13
14
15
# File 'lib/awesome_nested_set/model/validatable.rb', line 13

def left_and_rights_valid?
  SetValidator.new(self).valid?
end

#no_duplicates_for_columns?Boolean

Returns:

  • (Boolean)

17
18
19
20
21
22
23
24
25
26
# File 'lib/awesome_nested_set/model/validatable.rb', line 17

def no_duplicates_for_columns?
  [quoted_left_column_full_name, quoted_right_column_full_name].all? do |column|
    # No duplicates
    select("#{scope_string}#{column}, COUNT(#{column}) as _count").
      group("#{scope_string}#{column}", quoted_primary_key_column_full_name).
      having("COUNT(#{column}) > 1").
      order(quoted_primary_key_column_full_name).
      first.nil?
  end
end

#valid?Boolean

Returns:

  • (Boolean)

9
10
11
# File 'lib/awesome_nested_set/model/validatable.rb', line 9

def valid?
  left_and_rights_valid? && no_duplicates_for_columns? && all_roots_valid?
end