module HaveAPI::Fs::Components
  class UpdateActionDir < ActionDir
    help_file :action_dir

    def exec
      ret = super

      return ret if !ret.is_a?(HaveAPI::Client::Response) || !ret.ok?

      data = children[:output].data
      return ret unless data.is_a?(HaveAPI::Client::ResourceInstance)

      params = @resource.actions[:show].params
      attrs = @resource.attributes

      data.attributes.each do |k, v|
        next if %i(id _meta).include?(k) || !attrs.has_key?(k)

        if params[k][:type] == 'Resource'
          @resource.send("#{k}=", data.send(k))
          context[:resource_instance_dir].update_association(k)

        else
          @resource.send("#{k}=", v)
        end
      end

      ret
    end
  end
end