def first(*args)
      first_arg = args.first
      last_arg  = args.last

      limit_specified = first_arg.kind_of?(Integer)
      with_query      = (last_arg.kind_of?(Hash) && !last_arg.empty?) || last_arg.kind_of?(Query)

      limit = limit_specified ? first_arg : 1
      query = with_query      ? last_arg  : {}

      query = self.query.slice(0, limit).update(query)

      if limit_specified
        all(query)
      else
        query.repository.read(query).first
      end
    end
def first(*args)
      first_arg = args.first
      last_arg  = args.last

      limit_specified = first_arg.kind_of?(Integer)
      with_query      = (last_arg.kind_of?(Hash) && !last_arg.empty?) || last_arg.kind_of?(Query)

      limit = limit_specified ? first_arg : 1
      query = with_query      ? last_arg  : {}

      query = self.query.slice(0, limit).update(query)

      if limit_specified
        all(query)
      else
        query.repository.read(query).first
      end
    end
Return the first Resource or the first N Resources for the Model with an optional query

 When there are no arguments, return the first Resource in the
 Model.  When the first argument is an Integer, return a
 Collection containing the first N Resources.  When the last
 (optional) argument is a Hash scope the results to the query.

 @param [Integer] limit (optional)
   limit the returned Collection to a specific number of entries
 @param [Hash] query (optional)
   scope the returned Resource or Collection to the supplied query

 @return [Resource, Collection]
   The first resource in the entries of this collection,
   or a new collection whose query has been merged

 @api public