class InferredCrumpets::Builder
Attributes
parents[R]
subject[R]
view_context[R]
Public Class Methods
build_all!(view_context, subject, parents = [])
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 12 def self.build_all!(view_context, subject, parents = []) new(view_context, subject, parents).build_all! end
build_inferred_crumbs!(view_context)
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 5 def self.build_inferred_crumbs!(view_context) subject = SubjectFinder.for_context(view_context) return unless subject parents = [view_context.parent_object].compact.flatten rescue [] build_all!(view_context, subject, parents) end
build_single!(view_context, subject)
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 16 def self.build_single!(view_context, subject) new(view_context, subject).build_single! end
new(view_context, subject, parents = [])
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 20 def initialize(view_context, subject, parents = []) @route_checker = RouteChecker.new(view_context) @view_context = view_context @subject = subject @parents = parents end
Public Instance Methods
build_all!()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 27 def build_all! build_crumbs_for_parents! build_crumb_for_collection! build_crumb_for_action! end
build_single!()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 33 def build_single! build_crumb_for_subject! end
Private Instance Methods
action()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 108 def action view_context.params[:action] end
add_crumb(label)
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 64 def add_crumb(label) view_context.crumbs.add_crumb(label, wrapper_options: { class: 'active' }) end
build_crumb_for_action!()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 57 def build_crumb_for_action! return unless subject.is_a?(ActiveRecord::Base) crumb = ActionProcessor.for_action(action) build_crumb_for_subject! if crumb.has_subject? add_crumb(crumb.label) if crumb.label.present? end
build_crumb_for_collection!()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 45 def build_crumb_for_collection! return if parents.present? && linkable? if subject.class.respond_to?(:collection_title) view_context.crumbs.add_crumb subject.class.collection_title, url_for_collection elsif subject.is_a?(ActiveRecord::Relation) view_context.crumbs.add_crumb relation_name.pluralize.titleize elsif subject.is_a?(ActiveRecord::Base) view_context.crumbs.add_crumb subject.class.table_name.titleize, url_for_collection end end
build_crumb_for_subject!()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 68 def build_crumb_for_subject! view_context.crumbs.add_crumb(subject_name, url_for_subject) end
build_crumbs_for_parents!()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 39 def build_crumbs_for_parents! parents.each do |parent| Builder.build_single!(view_context, parent) end end
can_route?(action, params = {})
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 104 def can_route?(action, params = {}) @route_checker.can_route?(subject, action, params) end
class_with_parents()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 120 def class_with_parents [parents.last, transformed_subject.class].compact end
linkable?()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 92 def linkable? @route_checker.linkable?(transformed_subject) end
parents_and_class_linkable?()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 100 def parents_and_class_linkable? @route_checker.linkable?((parents + [transformed_subject.class]).compact) end
parents_and_subject_linkable?()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 96 def parents_and_subject_linkable? @route_checker.linkable?((parents + [subject.class]).compact) end
relation_name()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 112 def relation_name subject.respond_to?(:name) && subject.name.present? ? subject.name : subject.to_s end
subject_name()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 116 def subject_name subject.respond_to?(:crumb_title) && subject.crumb_title.present? ? subject.crumb_title : subject.to_s end
subject_requires_transformation?()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 84 def subject_requires_transformation? subject.respond_to?(:becomes) && !parents_and_subject_linkable? end
transformed_subject()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 88 def transformed_subject subject_requires_transformation? ? subject.becomes(subject.class.base_class) : subject end
url_for_collection()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 77 def url_for_collection return view_context.objects_path if view_context.objects_path.present? return unless can_route?(:index) return view_context.url_for(transformed_subject.class) if linkable? return view_context.url_for(class_with_parents) if parents_and_class_linkable? end
url_for_subject()
click to toggle source
# File lib/inferred_crumpets/builder.rb, line 72 def url_for_subject return unless can_route?(:show, id: subject.id) && linkable? view_context.url_for(transformed_subject) end