Module: CollectiveIdea::Acts::NestedSet::Model::Validatable
- Defined in:
- lib/awesome_nested_set/model/validatable.rb
Instance Method Summary collapse
-
#all_roots_valid? ⇒ Boolean
Wrapper for each_root_valid? that can deal with scope.
- #all_roots_valid_by_scope?(roots_to_validate) ⇒ Boolean
- #each_root_valid?(roots_to_validate) ⇒ Boolean
- #left_and_rights_valid? ⇒ Boolean
- #no_duplicates_for_columns? ⇒ Boolean
- #valid? ⇒ Boolean
Instance Method Details
#all_roots_valid? ⇒ Boolean
Wrapper for each_root_valid? that can deal with scope.
29 30 31 32 33 34 35 |
# File 'lib/awesome_nested_set/model/validatable.rb', line 29 def all_roots_valid? if [:scope] all_roots_valid_by_scope?(roots) else each_root_valid?(roots) end end |
#all_roots_valid_by_scope?(roots_to_validate) ⇒ 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
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 = [: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
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
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(primary_column_name => :asc). first.nil? end end |
#valid? ⇒ 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 |