class Brainstem::PresenterValidator
Attributes
presenter_class[RW]
Public Class Methods
new(presenter_class)
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 13 def initialize(presenter_class) @presenter_class = presenter_class end
Public Instance Methods
associations_exist(associations = presenter_class.configuration[:associations])
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 51 def associations_exist(associations = presenter_class.configuration[:associations]) associations.each do |name, association| method_name = association.method_name if !association.polymorphic? && !Brainstem.presenter_collection.for(association.target_class) errors.add(:associations, "'#{name}' is not valid because no presenter could be found for the #{association.target_class} class") end if method_name && presenter_class.presents.any? { |klass| !klass.new.respond_to?(method_name) } errors.add(:associations, "'#{name}' is not valid because not all presented classes respond to '#{method_name}'") end end end
brainstem_key_is_provided()
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 102 def brainstem_key_is_provided if !presenter_class.configuration[:brainstem_key] && presenter_class.presents.length > 1 errors.add(:brainstem_key, "a brainstem_key must be provided when multiple classes are presented.") end end
conditionals_exist(fields = presenter_class.configuration[:fields])
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 65 def conditionals_exist(fields = presenter_class.configuration[:fields]) fields.each do |name, field| case field when DSL::HashBlockField if field.options[:if].present? if Array.wrap(field.options[:if]).any? { |conditional| presenter_class.configuration[:conditionals][conditional].nil? } errors.add(:fields, "'#{name}' is not valid because one or more of the specified conditionals does not exist") end end conditionals_exist(field) if presenter_class.presents.any? { |klass| !field.executable? } when DSL::Field if field.options[:if].present? if Array.wrap(field.options[:if]).any? { |conditional| presenter_class.configuration[:conditionals][conditional].nil? } errors.add(:fields, "'#{name}' is not valid because one or more of the specified conditionals does not exist") end end else errors.add(:fields, "'#{name}' is an unknown Brainstem field type") end end end
default_sort_is_used()
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 87 def default_sort_is_used if presenter_class.configuration[:sort_orders].length > 0 && presenter_class.configuration[:default_sort_order].blank? errors.add(:default_sort_order, "A default_sort_order is highly recommended if any sort_orders are declared") end end
default_sort_matches_sort_order()
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 93 def default_sort_matches_sort_order if presenter_class.configuration[:default_sort_order].present? default_sort_order = presenter_class.configuration[:default_sort_order].split(":").first.to_sym if !presenter_class.configuration[:sort_orders][default_sort_order] errors.add(:default_sort_order, "The declared default_sort_order ('#{default_sort_order}') does not match an existing sort_order") end end end
fields_exist(fields = presenter_class.configuration[:fields])
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 35 def fields_exist(fields = presenter_class.configuration[:fields]) fields.each do |name, field| case field when DSL::HashBlockField fields_exist(field) if presenter_class.presents.any? { !field.executable? } when DSL::Field method_name = field.method_name if method_name && presenter_class.presents.any? { |klass| !klass.new.respond_to?(method_name) } errors.add(:fields, "'#{name}' is not valid because not all presented classes respond to '#{method_name}'") end else errors.add(:fields, "'#{name}' is an unknown Brainstem field type") end end end
preloads_exist()
click to toggle source
# File lib/brainstem/presenter_validator.rb, line 25 def preloads_exist presenter_class.configuration[:preloads].each do |preload| Array(preload.is_a?(Hash) ? preload.keys : preload).each do |association_name| if presenter_class.presents.any? { |klass| !klass.new.respond_to?(association_name) } errors.add(:preload, "not all presented classes respond to '#{association_name}'") end end end end