Sha256: 98e76967bd017d774e983537c30d8742cd83bebaf84b733753c01ddf21eb71ce

Contents?: true

Size: 1.67 KB

Versions: 1

Compression:

Stored size: 1.67 KB

Contents

module SinatraResource
  
  class Builder

    module MongoHelpers
      
      # Create a document from params. If not valid, returns 400.
      #
      # @return [MongoMapper::Document]
      def create_document!
        document = config[:model].new(params)
        unless document.valid?
          error 400, convert(body_for(:invalid_document, document))
        end
        unless document.save
          error 400, convert(body_for(:internal_server_error))
        end
        document
      end
      
      # Delete a document with +id+.
      #
      # @param [String] id
      #
      # @return [MongoMapper::Document]
      def delete_document!(id)
        document = find_document!(id)
        document.destroy
        document
      end

      # Find a document with +id+. If not found, returns 404.
      #
      # @param [String] id
      #
      # @return [MongoMapper::Document]
      def find_document!(id)
        document = config[:model].find_by_id(id)
        unless document
          error 404, convert(body_for(:not_found))
        end
        document
      end

      # Find all +model+ documents.
      #
      # @param [Class] model
      #   a class that includes MongoMapper::Document
      #
      # @return [Array<MongoMapper::Document>]
      def find_documents!
        config[:model].find(:all)
      end

      # Update a document with +id+ from params. If not valid, returns 400.
      #
      # @return [MongoMapper::Document]
      def update_document!(id)
        document = config[:model].update(id, params)
        unless document.valid?
          error 400, convert(body_for(:invalid_document, document))
        end
        document
      end

    end

  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sinatra_resource-0.1.0 lib/builder/mongo_helpers.rb