lib/krikri/entity_behavior.rb in krikri-0.12.0 vs lib/krikri/entity_behavior.rb in krikri-0.12.1

- old
+ new

@@ -1,40 +1,86 @@ module Krikri ## - # Base class for behaviors related to entities that are generated or revised - # by activities. + # Base class for retrieval behaviors related to entities that were generated + # or revised by a `Krikri::Activity`. # - # A SoftwareAgent implements #entity_behavior, which returns an appropriate - # subclass of EntityBehavior. When an Activity is queried for its entities, - # it instantiates an instance of its particular SoftwareAgent, and then - # calls the #entities method of the agent's entity behavior. + # @example implementing an entity behavior + # class CustomBehavior < Krikri::EntityBehavior + # def entities(load = true, include_invalidated = false) + # activity_uris(include_invalidated) do |uri| + # # some behavior over URIs to return initialized entities + # end + # end + # end # + # @example retrieving entities with a behavior + # Krikri::Activity.find(activity_id) + # CustomBehavor.entities(activity) + # + # A `SoftwareAgent` implements `#entity_behavior`, which returns an appropriate + # subclass of `EntityBehavior`. When an Activity is queried for its entities, + # it instantiates an instance of its particular `SoftwareAgent`, and then + # calls the `#entities` method of the agent's entity behavior. + # # @see Krikri::Activity#entities # @see lib/krikri/entity_behaviors - # class EntityBehavior + # @!attribute [r] activity + # @return [Krikri::Activity] attr_reader :activity + + ## + # @param activity [Krikri::Activity] def initialize(activity) @activity = activity end ## # Return an Enumerator of objects that have been affected by our @activity. # - # @return [Enumerator] objects + # @param load [Boolean] `true` to force load the entities from the datastore + # on access + # @param include_invalidated [Boolean] `true` to include entities marked as + # invalid. + # + # @return [Enumerator] the entities. When possible, they should be + # initialized & retrieved lazily. + # + # # @see lib/krikri/entity_behaviors # @see Krikri::Activity#entities # + # @see Krikri::LDP::Invalidatable for more about "invalidated" entities def entities(*args) - raise NotImplementedError + raise NotImplementedError end ## - # @see Krikri::Activity#entities - # @see Krikri::EntityBehavior#entities + # Initializes an instance of this class with the given `Activity` and + # returns an enumerator of the associated entities. # + # @param activity [Krikri::Activity] + # @param load [Boolean] + # @param include_invalidated [Boolean] + # + # @see Krikri::EntityBehavior#entities + # @see Krikri::Activity#entities def self.entities(activity, *args) new(activity).entities(*args) + end + + private + + ## + # Private utility method capturing common logic for applying entity logic to + # uris gathered from the instance's `Krikri::Activity`. + # + # @param include_invalided [Boolean] + # + # @return [Enumerator::Lazy] the uris, lazily mapped to the behavior in the + # given block + def activity_uris(include_invalidated, &block) + activity.entity_uris(include_invalidated).lazy.map(&block) end end end