lib/lookbook/entities/renderable_entity.rb in lookbook-2.0.0.beta.3 vs lib/lookbook/entities/renderable_entity.rb in lookbook-2.0.0.beta.4
- old
+ new
@@ -1,50 +1,88 @@
module Lookbook
# Represents the component or view template partial
# that is being rendered in a preview.
#
- # @ignore methods
# @api public
class RenderableEntity < Entity
include LocatableEntity
+ # @api private
def initialize(identifier)
@identifier = identifier
@base_directories = Engine.component_paths
@file_path = PathUtils.determine_full_path(component? ? "#{name}.rb" : identifier, @base_directories)
unless @file_path && File.exist?(@file_path)
- raise LookbookError, "The render target #{@identifier} was not found."
+ raise Lookbook::Error, "The render target #{@identifier} was not found."
end
@lookup_path = PathUtils.to_lookup_path(relative_file_path)
end
- def component_class
- @identifier.constantize if component?
- end
+ # @!group Identity
+ # Parameter-safe entity name.
+ #
+ # @return [String]
def name
component? ? component_class.name.underscore : @identifier
end
- def template_file_path
- component? ? Dir.glob("#{directory_path}/#{file_name(true)}.*.erb").first : file_path
+ # Entity type identifier.
+ # Returns `:component` for components and
+ # `:template` for view templates/partials.
+ #
+ # @return [Symbol] The entity type
+ def type
+ component? ? :component : :template
end
+ # @!endgroup
+
+ # @!group Components
+
+ # The associated component class (if the renderable is a component).
+ #
+ # @return [Class] The component class
+ def component_class
+ @identifier.constantize if component?
+ end
+
+ # Whether or not the renderable is a component without a template.
+ #
+ # @return [Boolean] True if no template is present
def inline?
component? ? template_file_path.present? : false
end
+ # Whether or not the renderable is a component
+ # (as opposed to a view template/partial).
+ #
+ # @return [Boolean] True if component
def component?
@identifier.first.upcase == @identifier.first &&
!@identifier.include?(".") &&
!@identifier.include?("/")
end
+ # Whether or not the renderable is a view template/partial
+ # (as opposed to a component).
+ #
+ # @return [Boolean] True if component
def template?
!component?
end
- def type
- component? ? :component : :template
+ # @!endgroup
+
+ # @!group Paths
+
+ # Full path to the component template (if present)
+ # or view template/partial.
+ #
+ # @return [Class] The component class
+ def template_file_path
+ component? ? Dir.glob("#{directory_path}/#{file_name(true)}.*.erb").first : file_path
end
+
+ # @!endgroup
end
end