module HaveAPI::Fs::Components class ResourceActionDir < Directory component :resource_action_dir attr_reader :resource def initialize(r) @resource = r @instance = r.is_a?(HaveAPI::Client::ResourceInstance) || r.is_a?(HaveAPI::Fs::HashWrapper) super() end def contents super + relevant_actions.map(&:to_s) end def relevant_actions return @actions if @actions @actions = [] @resource.actions.each do |name, a| pos = a.url.index(":#{@resource._name}_id") if @instance cond = pos else cond = pos.nil? end @actions << name if cond end @actions end def instance? @instance end def title 'Actions' end protected def new_child(name) if child = super child elsif @resource.actions.has_key?(name) klass = case name when :create CreateActionDir when :update instance? ? UpdateActionDir : ActionDir when :delete DeleteActionDir else ActionDir end [klass, @resource, @resource.actions[name]] else nil end end end end