def initialize(repository, model, options = {})
assert_kind_of 'repository', repository, Repository
assert_kind_of 'model', model, Model
@repository = repository
@model = model
@options = options.dup.freeze
repository_name = repository.name
@properties = @model.properties(repository_name)
@relationships = @model.relationships(repository_name)
assert_valid_options(@options)
@fields = @options.fetch :fields, @properties.defaults
@links = @options.key?(:links) ? @options[:links].dup : []
@conditions = Conditions::Operation.new(:null)
@offset = @options.fetch :offset, 0
@limit = @options.fetch :limit, nil
@order = @options.fetch :order, @model.default_order(repository_name)
@unique = @options.fetch :unique, true
@add_reversed = @options.fetch :add_reversed, false
@reload = @options.fetch :reload, false
@raw = false
merge_conditions([ DataMapper::Ext::Hash.except(@options, *OPTIONS), @options[:conditions] ])
normalize_options
end