diff --git a/lib/couchrest/mixins/extended_document_mixins.rb b/lib/couchrest/mixins/extended_document_mixins.rb
index 8b9767e..786fd37 100644
--- a/lib/couchrest/mixins/extended_document_mixins.rb
+++ b/lib/couchrest/mixins/extended_document_mixins.rb
@@ -1,4 +1,4 @@
require File.join(File.dirname(__FILE__), 'properties')
require File.join(File.dirname(__FILE__), 'document_queries')
-require File.join(File.dirname(__FILE__), 'extended_views')
+require File.join(File.dirname(__FILE__), 'views')
require File.join(File.dirname(__FILE__), 'design_doc')
\ No newline at end of file
diff --git a/lib/couchrest/mixins/extended_views.rb b/lib/couchrest/mixins/extended_views.rb
deleted file mode 100644
index 7f32f20..0000000
--- a/lib/couchrest/mixins/extended_views.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-module CouchRest
- module Mixins
- module ExtendedViews
-
- def self.included(base)
- base.extend(ClassMethods)
- # extlib is required for the following code
- base.send(:class_inheritable_accessor, :design_doc)
- base.send(:class_inheritable_accessor, :design_doc_slug_cache)
- base.send(:class_inheritable_accessor, :design_doc_fresh)
- end
-
- module ClassMethods
-
- # Define a CouchDB view. The name of the view will be the concatenation
- # of by and the keys joined by _and_
- #
- # ==== Example views:
- #
- # class Post
- # # view with default options
- # # query with Post.by_date
- # view_by :date, :descending => true
- #
- # # view with compound sort-keys
- # # query with Post.by_user_id_and_date
- # view_by :user_id, :date
- #
- # # view with custom map/reduce functions
- # # query with Post.by_tags :reduce => true
- # view_by :tags,
- # :map =>
- # "function(doc) {
- # if (doc['couchrest-type'] == 'Post' && doc.tags) {
- # doc.tags.forEach(function(tag){
- # emit(doc.tag, 1);
- # });
- # }
- # }",
- # :reduce =>
- # "function(keys, values, rereduce) {
- # return sum(values);
- # }"
- # end
- #
- # view_by :date will create a view defined by this Javascript
- # function:
- #
- # function(doc) {
- # if (doc['couchrest-type'] == 'Post' && doc.date) {
- # emit(doc.date, null);
- # }
- # }
- #
- # It can be queried by calling Post.by_date which accepts all
- # valid options for CouchRest::Database#view. In addition, calling with
- # the :raw => true option will return the view rows
- # themselves. By default Post.by_date will return the
- # documents included in the generated view.
- #
- # CouchRest::Database#view options can be applied at view definition
- # time as defaults, and they will be curried and used at view query
- # time. Or they can be overridden at query time.
- #
- # Custom views can be queried with :reduce => true to return
- # reduce results. The default for custom views is to query with
- # :reduce => false.
- #
- # Views are generated (on a per-model basis) lazily on first-access.
- # This means that if you are deploying changes to a view, the views for
- # that model won't be available until generation is complete. This can
- # take some time with large databases. Strategies are in the works.
- #
- # To understand the capabilities of this view system more compeletly,
- # it is recommended that you read the RSpec file at
- # spec/core/model_spec.rb.
-
- def view_by(*keys)
- self.design_doc ||= Design.new(default_design_doc)
- opts = keys.pop if keys.last.is_a?(Hash)
- opts ||= {}
- ducktype = opts.delete(:ducktype)
- unless ducktype || opts[:map]
- opts[:guards] ||= []
- opts[:guards].push "(doc['couchrest-type'] == '#{self.to_s}')"
- end
- keys.push opts
- self.design_doc.view_by(*keys)
- self.design_doc_fresh = false
- end
-
- # returns stored defaults if the there is a view named this in the design doc
- def has_view?(view)
- view = view.to_s
- design_doc && design_doc['views'] && design_doc['views'][view]
- end
-
- # Dispatches to any named view.
- def view name, query={}, &block
- unless design_doc_fresh
- refresh_design_doc
- end
- query[:raw] = true if query[:reduce]
- raw = query.delete(:raw)
- fetch_view_with_docs(name, query, raw, &block)
- end
-
- def all_design_doc_versions
- database.documents :startkey => "_design/#{self.to_s}-",
- :endkey => "_design/#{self.to_s}-\u9999"
- end
-
- # Deletes any non-current design docs that were created by this class.
- # Running this when you're deployed version of your application is steadily
- # and consistently using the latest code, is the way to clear out old design
- # docs. Running it to early could mean that live code has to regenerate
- # potentially large indexes.
- def cleanup_design_docs!
- ddocs = all_design_doc_versions
- ddocs["rows"].each do |row|
- if (row['id'] != design_doc_id)
- database.delete_doc({
- "_id" => row['id'],
- "_rev" => row['value']['rev']
- })
- end
- end
- end
-
- private
-
- def fetch_view_with_docs name, opts, raw=false, &block
- if raw
- fetch_view name, opts, &block
- else
- begin
- view = fetch_view name, opts.merge({:include_docs => true}), &block
- view['rows'].collect{|r|new(r['doc'])} if view['rows']
- rescue
- # fallback for old versions of couchdb that don't
- # have include_docs support
- view = fetch_view name, opts, &block
- view['rows'].collect{|r|new(database.get(r['id']))} if view['rows']
- end
- end
- end
-
- def fetch_view view_name, opts, &block
- retryable = true
- begin
- design_doc.view(view_name, opts, &block)
- # the design doc could have been deleted by a rouge process
- rescue RestClient::ResourceNotFound => e
- if retryable
- refresh_design_doc
- retryable = false
- retry
- else
- raise e
- end
- end
- end
-
- end # module ClassMethods
-
-
- end
- end
-end
\ No newline at end of file
diff --git a/lib/couchrest/more/extended_document.rb b/lib/couchrest/more/extended_document.rb
index 40bbfd6..1e13cfb 100644
--- a/lib/couchrest/more/extended_document.rb
+++ b/lib/couchrest/more/extended_document.rb
@@ -16,7 +16,7 @@ module CouchRest
class ExtendedDocument < Document
include CouchRest::Mixins::DocumentQueries
include CouchRest::Mixins::DocumentProperties
- include CouchRest::Mixins::ExtendedViews
+ include CouchRest::Mixins::Views
include CouchRest::Mixins::DesignDoc
diff --git a/spec/couchrest/more/property_spec.rb b/spec/couchrest/more/property_spec.rb
index 6e22c25..0731fce 100644
--- a/spec/couchrest/more/property_spec.rb
+++ b/spec/couchrest/more/property_spec.rb
@@ -37,6 +37,7 @@ describe "ExtendedDocument properties" do
pending("need to add validation") do
@card.should be_valid
end
+ #Card.property(:company, :required => true)
end
end
\ No newline at end of file